05.09.2013, 13:24 | #1 |
Участник
|
Понимаю, что где-то не догоняю... но где и что?
Имеется отчет, который заполняет некую вспомогательную таблицу. 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; У таблицы SORT свойство DataPerCompany = No, т.е. она общая для всех мандантов Что интересно, при проходе с дебагером видно, что записи таки добавляются. COMPANY='COMPANY 1 NAME',Lfd. Nr.='1' потом появляется COMPANY='COMPANY 1 NAME',Lfd. Nr.='2' и т.д. Потом в какой-то момент БАЦ! ... и примите и распишитесь - дубликат ключа. Обращаюсь к старшим (в смысле опыта товарищам: помогите понять, где собака порылась? |
|
05.09.2013, 13:40 | #2 |
Участник
|
Зачистка таблицы и присвоение 0 в поле "Lfd. Nr." делается в одном из триггеров датаайтема Mandant?
В каком? |
|
05.09.2013, 13:40 | #3 |
Участник
|
Забыла указать
Код: SORT.RESET; SORT.DELETEALL; SORT."Lfd. Nr." := 0; |
|
05.09.2013, 13:44 | #4 |
Участник
|
Цитата:
Не знаю важно это или нет, но на вс.сл. в то же триггере OnPreDataitem перед очисткой таблицы устанавливается фильтр на мандантов SETFILTER(Name, '%1|%2','Company 1 Name', 'Company 2 Name'); т.к. нужно собрать в таблицу данные только двух мандантов |
|
05.09.2013, 13:47 | #5 |
Участник
|
В ошибке указано, что в дубликате "Lfd. Nr." = 0. Отчет такую запись вставить не может, если вставка производится только таким образом, о котором Вы говорите. Дело не в отчете..
Триггеров никаких нет на таблице? На валидейтах не может попытаться вставить неинициализированную запись в таблицу? Я тоже на время наших постов обратил внимание -) |
|
05.09.2013, 14:05 | #6 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
Всё! нашла ошибку!!!
Код: IF T36."Ship-to Country/Region Code" = '' THEN MESSAGE('....'); // тут стоял какой-то комментарий SORT."Lfd. Nr." := SORT."Lfd. Nr." + 1; SORT.INSERT; СемёёёёёнСемёёёёныч!!!! /> /> непростительная невнимательностть!! Стыдно /> Сорри, коллеги! |
|
05.09.2013, 15:22 | #8 |
Участник
|
У меня сразу же возник вопрос - где же в приведённом коде этот закомментированный message? И я удивился, как коллеги могли отвечать, не видя того, что на самом деле. Если бы Вы в начале написали то, что в конце, наверное, и сами бы поняли />
|
|
05.09.2013, 15:36 | #9 |
Участник
|
MESSAGE как раз в первом посте есть, нет строки условия над ним...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
05.09.2013, 23:45 | #10 |
Administrator
|
|
|