14.03.2011, 13:47 | #1 |
Участник
|
Уникальный индекс в журнале накладных поставщиков
Меня уже давно мучает вопрос, почему в таблице «Журнал накладных поставщиков» нет уникального индекса (RecId не в счет)?
Связь между таблицами строки накладных поставщиков и журналом накладных идет по полям, которые не являются уникальным индексом таблицы журнал накладных поставщиков, т.е. может возникнуть ситуация, когда у одна и таже строка будет ссылаться на несколько накладных. Очень хочется сделать уникальный индекс по полю «Внутренняя накладная» - InternalInvoiceId. Но почему этого нет в стандарте? Пока у меня единственное предположение, разработчики сочли, что использование групп номерных серий может привести к получению одинаковых внутренних номеров. Как по мне, так получить одну строку в двух накладных куда опаснее. |
|
14.03.2011, 13:55 | #2 |
Axapta
|
|
|
14.03.2011, 14:40 | #3 |
Участник
|
мдя... и как с этим жить теперь?)
Если допустить, что у нас поле пустое (на сколько, я понимаю это возможно, если номерная серия имеет активный признак Вручную), то данный скрипт всегда будет сбоить: 1. Сделали по закупке накладную, но ошиблись в цене. Поле InternalInvoiceId пустое. 2. Делаем кредит-ноту, через немедленной получение. 3. В этой же закупке корректируем цену и делаем новую накладную с тем же номером. Поле InternalInvoiceId пустое. 4. В результате строки накладной по шагу 1 и шагу 4 будут отображаться в обеих накладных. Если я прав, то это поле лучше сделать обязательным. Или для таких ситуаций существует некий дополнительный контроль? И что будет, если помимо индекса я еще и обязательность заполнения поля активирую. З.Ы.: О проверке использования номера накладной я знаю, может еще что-то есть. |
|
14.03.2011, 14:48 | #4 |
MCP
|
Цитата:
Сообщение от Starling
мдя... и как с этим жить теперь?)
Если допустить, что у нас поле пустое (на сколько, я понимаю это возможно, если номерная серия имеет активный признак Вручную), то данный скрипт всегда будет сбоить: 1. Сделали по закупке накладную, но ошиблись в цене. Поле InternalInvoiceId пустое. 2. Делаем кредит-ноту, через немедленной получение. 3. В этой же закупке корректируем цену и делаем новую накладную с тем же номером. Поле InternalInvoiceId пустое. 4. В результате строки накладной по шагу 1 и шагу 4 будут отображаться в обеих накладных. Если я прав, то это поле лучше сделать обязательным. Или для таких ситуаций существует некий дополнительный контроль? И что будет, если помимо индекса я еще и обязательность заполнения поля активирую. З.Ы.: О проверке использования номера накладной я знаю, может еще что-то есть. |
|
14.03.2011, 14:52 | #5 |
северный Будда
|
А какой смысл вообще в необязательности поля InternalInvoiceId? Это наш внутренний регистрационный номер накладной. Так же, как и SalesId в заказе или InventTransId в проводке. По-моему он просто обязан быть Mandatory.
__________________
С уважением, Вячеслав |
|
14.03.2011, 15:15 | #6 |
Участник
|
|
|
14.03.2011, 15:16 | #7 |
Участник
|
Цитата:
Может при формировании проформы инвойса - внутренний номер не выделяется? |
|
14.03.2011, 15:46 | #8 |
Участник
|
Цитата:
Настройка обязательности поля на этот механизм не повлияла, так как в коде идет инсер без валидейтов. В общем, откажусь я от этой идеи, так как судя по коду это может быть не единственный случай, когда у нас создается накладные с пустым значением в этом поле. З.Ы.: я так понимаю, все эти рассуждения справедливы и для других документов по закупкам (счетам на оплату, отборочным накладным). |
|
14.03.2011, 16:07 | #9 |
MCP
|
Цитата:
Я имел ввиду создать индекс из нескольких полей, включив туда в т.ч. дату. |
|
14.03.2011, 16:26 | #10 |
Участник
|
Начиная с DAX4 не будет - вылетит до этого . Там появилась история аналитик и, в случае отсутствия InternalInvoiceId ошибка уникальности в момент создания новой накладной вылезет там.
|
|
|
За это сообщение автора поблагодарили: Starling (1). |
14.03.2011, 16:59 | #11 |
Участник
|
Цитата:
Искал способ как это правильно сделать, вот и решил задать на форуме вопрос, который меня давно интересовал. Дата накладной в этом случае не спасает, так как в моем примере все критерии, в том числе и дата будут совпадать, т.е. опять же одна строка ссылается на две накладных. В общем случае, добиться от системы такого поведения как я написал в скрипте не так уж и просто, так как необходимо чтобы: 1. Была отключена нумерация внутренних номеров накладных. 2. Была отключена проверка на совпадения внешних номеров накладных. Ни 1-ое, ни 2-ое я на реальных проектах не видел и экспериментировать желания у меня нет) Свою задачу решил просто – так как связь между накладной и новой таблицей 1 к 1, то я решил создать новое поле для связи на уровень накладной |
|
14.03.2011, 17:02 | #12 |
Участник
|
Спасибо, учту на будущее, но пока решил индексов и обязательности не добавлять, так как нешел другое решение - см. выше.
|
|