18.02.2014, 14:29 | #1 |
Участник
|
Проблема характерна и для Nav 3.7 и для Nav2009R2.
Заключается в следующем: 1. Заводим карточку клиента/поставщика/договора. Присваиваем Но (первичный ключ), заполняем все необходимые данные. 2. В созданной карточке становимся на поле Но, жмем DEL, подтверждаем изменение первичного ключа (то есть он теперь равен "") 3. Спохватываемся, ой, как так получилось, не туда нажали, беда, беда, пробуем вернуть назад (переименовать первичный ключ "" во что то удобоваримое). Выдается ошибка: --------------------------- Microsoft Dynamics NAV Classic --------------------------- Запись не может быть переименована, так как прежним значением следующего поля является ''. Поле: Номер Таблица: Договор поставщика --------------------------- ОК --------------------------- 4. Как результат - существование в моем случае в БД договора с номером "" и невозможностью осуществить никаких операций по нему и существование в БД с номером клиента "" и невозможностью распечатать акты сверки и прочие документы. Дебаггером не ловится ни в одной из версий Nav, просмотр кода тоже не дает никаких предположений, как это поправить. Можно конечно залезть в sql-ую таблицу (14900/14901/14902 и т.д.) и там поправить, но все это влечет за собой лазание по еще десятку таблиц с риском где то накосячить. 1. Кто нибудь может подсказать, как эту каку поправить не лазая в sql-ую таблицу? Как в дальнейшем избежать понятно - убрать возможность ручной нумерации для серии номеров. |
|
18.02.2014, 15:47 | #2 |
Участник
|
Через код без валидейтов создаете новую запись с нужным ключем, старую удаляет. Для таблиц, где нужно поправить ссылки на договор, еще один отчет, который поменяет не правильную ссылку на правильную.
|
|
18.02.2014, 16:49 | #3 |
Участник
|
Цитата:
И вообще, данная штука считается фичей или багом? |
|
18.02.2014, 18:53 | #4 |
Administrator
|
а если открыть карточку того же поставщика, поставить фильтр на несуществующий код, то потом придется либо зуп файл удалять, либо через конструктор объект карточки модернизировать, ибо снять фильтр не получится, поставщик код не существует...
что делать, это вряд ли "фича", это такая наша система... я бы в качестве профилактики в таблице сделал бы запрет на пустое поле Код. |
|
19.02.2014, 10:33 | #5 |
Участник
|
Для избежания подобных проблем делайте на полях первичных ключей NotBlank = YES.
__________________
Want to believe... |
|
19.02.2014, 12:08 | #6 |
Участник
|
|
|
19.02.2014, 13:00 | #7 |
Участник
|
Продолжение эпопеи
Залез в sql-ую таблицу, заполнил первичный ключ. Лень было писать отчет по обновлению связанных таблиц, решил я поправить их руками (благо всего 2 операции). Дошел я до обновления Bank Account Ledger Entry, поля Agreement No. Не проставляется код договора, поле заполняется значением Кода Поставщика. При попытке проставить значение вручную (а не выбрать из списка) - ошибка: --------------------------- Microsoft Dynamics NAV Classic --------------------------- В фильтре отсутствует Договор поставщика. Фильтры: Код поставщика: ПДОГ000085 --------------------------- ОК --------------------------- Полез в код (свойства поля Agreement No.), а там вот это: IF (Bal. Account Type=CONST(Customer)) "Customer Agreement".No. WHERE (Customer No.=FIELD(Bal. Account No.)) ELSE IF (Bal. Account Type=CONST(Vendor)) "Vendor Agreement" WHERE (Vendor No.=FIELD(Bal. Account No.)) И почему я не удивлен, что в стандартной функциональности работает учет банковских операций с поставщиком и указанием договора? |
|