|
20.01.2011, 11:35 | #1 |
Участник
|
Изменение номера накладной.
Коллеги, всем привет.
Бухгалтерия слезно просит функцию в накладных поставщика, позволяющую изменять номер накладной без ее отката и перепроведения (поле InvoiceId). В связи с большим потоком документов пользователи частенько ошибаются в этом поле. По сути поле является информационным (значение в этом поле не влияет ни на суммы проводок, ни на разноску), однако для исправления ошибки приходится проводить еще две накладные, что замедляет работу девочек-автоматов и повышает вероятность дополнительных ошибок. В ходе обследования были выявлены следующие таблицы, в которых функция должна менять значение поля: Заголовок накладной (VendInvoiceJour), Строки накладной (VendInvoiceTrans), Проводки по поставщику (VendTrans), Строки фактуры (FactureTrans_RU). Есть ли еще в системе таблицы, в которых сохраняется номер накладной? На какие грабли можно наступить при реализации подобной функции? |
|
20.01.2011, 11:40 | #2 |
MCTS
|
Таблица связей (VendInvoicePurchLink). Еще номер накладной точно сохраняется в складских проводках (InventTrans).
Если ведется учет ОС, то в справочнике ОС тоже сохраняется номер накладной по покупке/продаже. По хорошему, надо бы обновлять номер также в журнал накладных (LedgerJournalTrans), если накладная создана не по закупке. В функции стоит также учесть параметр "Проверка использованного номера накладной" в настройках модуля "Расчеты с поставщиками".
__________________
Dynamics AX Experience Последний раз редактировалось CDR; 20.01.2011 в 11:55. |
|
|
За это сообщение автора поблагодарили: Skvorcal (1). |
20.01.2011, 14:17 | #3 |
NavAx
|
Еще возможно EmplAdvLine_RU, правда у нас там поле DocumentNum содержит № накладной.
Последний раз редактировалось raz; 20.01.2011 в 14:19. |
|
|
За это сообщение автора поблагодарили: Skvorcal (1). |
20.01.2011, 14:50 | #4 |
Участник
|
Если изменение номера нужно для того, чтобы он корректно отображался в неких печатных формах, то, может быть, имеет смысл подумать о дополнительном поле вроде "Номер для печати"? А собственно InvoiceId формировать автоматически по номерной серии.
На InvoiceId построена ссылочная целостность. По сути, это фрагмент PrimaryKey. Как следствие, любые его изменения - это всегда риск нарушения целостности базы данных. Где-то, чего-то не досмотрели. Поэтому, по возможности, его лучше не трогать... |
|
|
За это сообщение автора поблагодарили: Skvorcal (1). |
20.01.2011, 15:31 | #5 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Если изменение номера нужно для того, чтобы он корректно отображался в неких печатных формах, то, может быть, имеет смысл подумать о дополнительном поле вроде "Номер для печати"? А собственно InvoiceId формировать автоматически по номерной серии.
На InvoiceId построена ссылочная целостность. По сути, это фрагмент PrimaryKey. Как следствие, любые его изменения - это всегда риск нарушения целостности базы данных. Где-то, чего-то не досмотрели. Поэтому, по возможности, его лучше не трогать... Отдельное поле влечет за собой допиливание отчетов, построение новых индексов, а также протаскивание этого поля в некоторые формы с которыми работают пользователи (проводки, спосоставления и т.п.)... Обновление значения в одной транзакции в нескольких таблицах по специальной кнопке показалось меньшим злом. Я понимаю, что invoiceId - часть первичного ключа (и пришла же кому-то в голову идея сделать его составным, блин...), но тем не менее ключевые связи в системе все-таки идут по ваучеру и дате. Главная связка с invoiceId - Проводка по поставщику -> Накладная -> Строки накладной -> Строки фактуры. Остальные места вроде как просто сохраняют значение для удобства использования. У нас в LedgerTrans нет поля Invoice. |
|
20.01.2011, 14:51 | #6 |
Участник
|
может просто добавить поле "Накладная поставщика"? и сделать его доступным на редактирование и выводить туда, где нужно бухгалтерии
пс уже опередили |
|
20.01.2011, 14:52 | #7 |
Участник
|
Не надо править этот номер !
Это составная часть ключа на таблице накладных. Если ошибетесь где нибудь - то долго разгребать последствия Кроме того если такое делать для накладных по клиентам, то могут быть проблемы при совпадении значений. Лучше уж завести еще одно поле InvoiceId4Print в шапке накладной и печатать в накладных его если оно заполнено, иначе печатать InvoiceId. Это просто и безопасно. |
|
20.01.2011, 14:59 | #8 |
Участник
|
в таблице ledgerTrans тоже есть поле invoice, по моему опыту для поставщиков это проходит (такая смена) безболезненно, а вот для клиентов я бы не стал делать
|
|
20.01.2011, 15:45 | #9 |
Участник
|
Понимаете, если Вы забыли "протащить" новое поле в отчет или форму, то это сразу видно. Пользователи тут же напомнят
А вот если Вы забудете модифицировать поле в какой-либо таблице, то это может "всплыть" очень не скоро. Сразу-то этого не видно! Никто и не вспомнит! При этом исправление может оказаться невозможным. Кроме того, если Вы создадите какой-либо новый функционал использующий то же самое поле, то Вы можете просто "забыть" про Вашу "одну транзакцию". Т.е. опять получите проблемы "на ровном месте". Другими словами, новое поле - сложнее в исполнении, но проще в сопровождении. А транзакция относительно проста в исполнении, но крайне сложна в сопровождении. |
|