AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.02.2014, 14:29   #1  
igork-9y is offline
igork-9y
Участник
 
36 / 10 (1) +
Регистрация: 17.01.2011
Проблема характерна и для 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  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Через код без валидейтов создаете новую запись с нужным ключем, старую удаляет. Для таблиц, где нужно поправить ссылки на договор, еще один отчет, который поменяет не правильную ссылку на правильную.
Старый 18.02.2014, 16:49   #3  
igork-9y is offline
igork-9y
Участник
 
36 / 10 (1) +
Регистрация: 17.01.2011
Цитата:
Сообщение от InTacto Посмотреть сообщение
Через код без валидейтов создаете новую запись с нужным ключем, старую удаляет. Для таблиц, где нужно поправить ссылки на договор, еще один отчет, который поменяет не правильную ссылку на правильную.
К сожалению, способ ничем не отличается от правки в sql таблицах - то же ковыряние в связанных таблицах с риском поймать склероз.

И вообще, данная штука считается фичей или багом?
Старый 18.02.2014, 18:53   #4  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
а если открыть карточку того же поставщика, поставить фильтр на несуществующий код, то потом придется либо зуп файл удалять, либо через конструктор объект карточки модернизировать, ибо снять фильтр не получится, поставщик код не существует...

что делать, это вряд ли "фича", это такая наша система...
я бы в качестве профилактики в таблице сделал бы запрет на пустое поле Код.
Старый 19.02.2014, 10:33   #5  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Для избежания подобных проблем делайте на полях первичных ключей NotBlank = YES.
__________________
Want to believe...
Старый 19.02.2014, 12:08   #6  
igork-9y is offline
igork-9y
Участник
 
36 / 10 (1) +
Регистрация: 17.01.2011
Цитата:
Сообщение от DA_NEAL Посмотреть сообщение
Для избежания подобных проблем делайте на полях первичных ключей NotBlank = YES.
Ваши бы слова, да программистам Мелкомягкого в уши, потому как это стандартная функциональность
Старый 19.02.2014, 13:00   #7  
igork-9y is offline
igork-9y
Участник
 
36 / 10 (1) +
Регистрация: 17.01.2011
Продолжение эпопеи
Залез в 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.))

И почему я не удивлен, что в стандартной функциональности работает учет банковских операций с поставщиком и указанием договора?
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:09.