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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.09.2013, 13:24   #1  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Понимаю, что где-то не догоняю... но где и что?

Имеется отчет, который заполняет некую вспомогательную таблицу.
PrimaryKey которой COMPANY,Lfd. Nr.
В первом DataItem таблица очищается(SORT - та самая вспом. таблица)
Код:
SORT.RESET;
SORT.DELETEALL;
SORT."Lfd. Nr." := 0;
Я могу запускать отчет хоть неск. раз подряд. Таблица очищается, потом заполняется заново. Никаких проблем!
Теперь вношу в текст небольшое изменение, а именно закомментарила строчку с командой
Код:
 MESSAGE('....');
Сохраняю отчет, запускаю его снова, получаю:
---------------------------
Microsoft Dynamics NAV
---------------------------
Die SORT existiert bereits.Identifizierende Felder und Werte:COMPANY='COMPANY 1 NAME',Lfd. Nr.='0'
---------------------------
OK
---------------------------
т.е. как я понимаю имеем дубликат ключа.

Добавление записей в таблицу выполняется сл.об.:
Код:
SORT.INIT;
SORT.Debitor := Customer."No.";
SORT.Остальные поля := '';
SORT.COMPANY := UPPERCASE(Mandant.Name);
.....
SORT."Lfd. Nr." := SORT."Lfd. Nr." + 1;
SORT.INSERT;
Mandant - это первый DataItem.
У таблицы SORT свойство DataPerCompany = No, т.е. она общая для всех мандантов
Что интересно, при проходе с дебагером видно, что записи таки добавляются.
COMPANY='COMPANY 1 NAME',Lfd. Nr.='1'
потом появляется
COMPANY='COMPANY 1 NAME',Lfd. Nr.='2'
и т.д.
Потом в какой-то момент БАЦ! ... и примите и распишитесь - дубликат ключа.

Обращаюсь к старшим (в смысле опыта товарищам: помогите понять, где собака порылась?
Старый 05.09.2013, 13:40   #2  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Зачистка таблицы и присвоение 0 в поле "Lfd. Nr." делается в одном из триггеров датаайтема Mandant?
В каком?
Старый 05.09.2013, 13:40   #3  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Забыла указать
Код:
SORT.RESET;
SORT.DELETEALL;
SORT."Lfd. Nr." := 0;
Это выполняется в триггере OnPreDataitem для первого DI (Mandant)
Старый 05.09.2013, 13:44   #4  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от romeo Посмотреть сообщение
Зачистка таблицы и присвоение 0 в поле "Lfd. Nr." делается в одном из триггеров датаайтема Mandant?
В каком?
Одновременно писали

Не знаю важно это или нет, но на вс.сл.
в то же триггере OnPreDataitem перед очисткой таблицы устанавливается фильтр на мандантов
SETFILTER(Name, '%1|%2','Company 1 Name', 'Company 2 Name');
т.к. нужно собрать в таблицу данные только двух мандантов
Старый 05.09.2013, 13:47   #5  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
В ошибке указано, что в дубликате "Lfd. Nr." = 0. Отчет такую запись вставить не может, если вставка производится только таким образом, о котором Вы говорите. Дело не в отчете..
Триггеров никаких нет на таблице? На валидейтах не может попытаться вставить неинициализированную запись в таблицу?

Я тоже на время наших постов обратил внимание -)
Старый 05.09.2013, 14:05   #6  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от romeo Посмотреть сообщение
В ошибке указано, что в дубликате "Lfd. Nr." = 0. Отчет такую запись вставить не может, если вставка производится только таким образом, о котором Вы говорите. Дело не в отчете..
Триггеров никаких нет на таблице? На валидейтах не может попытаться вставить неинициализированную запись в таблицу?

Я тоже на время наших постов обратил внимание -)
Таблица проста до безобразия. Единственные триггер
OnInsert
Код:
IF STRLEN(Debitorname) > 40 THEN
  Debitorname := PADSTR(Debitorname,40);
IF STRLEN("Debitorname 2") > 50 THEN
  "Debitorname 2" := PADSTR("Debitorname 2",50);
Всё! больше нет ничего!

Только что на локальной базе ругнулся на Lfd.Nr = 3
Старый 05.09.2013, 14:12   #7  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Всё! нашла ошибку!!!

Код:
IF T36."Ship-to Country/Region Code" = '' THEN
   MESSAGE('....');
// тут стоял какой-то комментарий

   SORT."Lfd. Nr." := SORT."Lfd. Nr." + 1;
   SORT.INSERT;
Я ставила // перед MESSAGE. => поменялась логика заполнения одного из ключевых полей!!!
СемёёёёёнСемёёёёныч!!!! /> />
непростительная невнимательностть!! Стыдно />
Сорри, коллеги!
Старый 05.09.2013, 15:22   #8  
Alex NF is offline
Alex NF
Участник
 
10 / 10 (1) +
Регистрация: 16.02.2005
У меня сразу же возник вопрос - где же в приведённом коде этот закомментированный message? И я удивился, как коллеги могли отвечать, не видя того, что на самом деле. Если бы Вы в начале написали то, что в конце, наверное, и сами бы поняли />
Старый 05.09.2013, 15:36   #9  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от Alex NF Посмотреть сообщение
У меня сразу же возник вопрос - где же в приведённом коде этот закомментированный message? И я удивился, как коллеги могли отвечать, не видя того, что на самом деле. Если бы Вы в начале написали то, что в конце, наверное, и сами бы поняли />/>
MESSAGE как раз в первом посте есть, нет строки условия над ним...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 05.09.2013, 23:45   #10  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
Цитата:
Сообщение от Alex NF Посмотреть сообщение
...как коллеги могли отвечать, не видя того, что на самом деле...
Ромэо кросаффчег! плюсуем!
 

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

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:38.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.