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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.11.2008, 16:21   #1  
TERRA is offline
TERRA
Участник
 
59 / 10 (1) +
Регистрация: 05.05.2005
Адрес: Moscow
Добрый день. Есть проблема: уже не знаю, с какого края вообще подступиться.
Есть простенький кусок кода, который должен проставлять некое значение в поле таблицы.
Не проставляет. Проверяла 20 раз - вроде все правильно, ничего не вижу, что могла бы пропустить. Да и пропскать и путать там НЕЧЕГО в принципе.
Решила глянуть дебаггером, в каком именно месте возникает косяк, и почему значение не проставляется. Смотрю - все правильно отрабатывается так, как и должно было. Результатом прогона всего кода построчно через дебаггер явились везде проставленные, где надо, значения.
Пробую опять запустить без дебаггера - опять не проставились значения.
Проверяю еще раз с дебаггером - снова все отлично.
Вот пока смотришь на код, и отслеживаешь выполнение каждой строчки - все выполняется на ура, как и должно.
Как только запустишь просто так - в результате имею пустые значения в полях...

Если кто с таким сталкивался, подскажите что-нибудь, пожалуйста. А то я уже просто НЕ ЗНАЮ, что с этим делать.

Версия: - 3.70А, на MSSQL.
Кусок кода (если нужен) вот:


Код:
	
	recAddAgreementHeader2."OOS Personal Code" := recAnnualPlanHeader."OOS Personal Code";
	recAddAgreementHeader2."Annual Plan No." := recAnnualPlanHeader."No.";
	recAddAgreementHeader2.MODIFY;
Старый 17.11.2008, 16:43   #2  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
У вас Error'а дальше по коду нигде нет, случайно?
Старый 17.11.2008, 16:47   #3  
TERRA is offline
TERRA
Участник
 
59 / 10 (1) +
Регистрация: 05.05.2005
Адрес: Moscow
Нет, Error'а нигде нету.
Весь остальной код - отрабатывает, вставляет нужные записи в таблицу, присваивает им нужные значения, создает новые документы - все путем.
Проблема именно с этими двумя полями в этой таблице (все остальные поля в ЭТУ ЖЕ таблицу - тоже проставляются без проблем).
Кстати, тип обоих полей - code. (это я просто уже не знаю, чем еще помочь отвечающим :-( )
Старый 17.11.2008, 16:49   #4  
Alex Che is offline
Alex Che
Участник
 
74 / 10 (1) +
Регистрация: 04.04.2006
Вспоминаем старый добрый FORTRAN: там был единственный метод отладки под названием "обложить принтами". Выведите правые и левые части выражений присваивания до MODIFY, а потом можно только левые - после.
Старый 17.11.2008, 17:14   #5  
IGG is offline
IGG
Участник
 
665 / 29 (2) +++
Регистрация: 24.08.2005
Адрес: СПб/Москва
А поставьте перед этим MESSAGE(recAnnualPlanHeader."OOS Personal Code" + recAnnualPlanHeader."No.")
Может ДО этого не находится запись recAnnualPlanHeader?
Старый 17.11.2008, 17:17   #6  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
А сам код у вас где расположен? Если, к примеру, на форме в OnAfterGetRecord, то могут быть догадки...
Старый 17.11.2008, 17:18   #7  
IGG is offline
IGG
Участник
 
665 / 29 (2) +++
Регистрация: 24.08.2005
Адрес: СПб/Москва
Я иногда усиливаю MODIFY явно прописывая TRUE
MODIFY(TRUE)
Или просто по фильтру не нашлась recAddAgreementHeader2?
Старый 17.11.2008, 17:19   #8  
TERRA is offline
TERRA
Участник
 
59 / 10 (1) +
Регистрация: 05.05.2005
Адрес: Moscow
Так, обложила мессагами до и после этого куска кода.
Получилось примерно так:

Код:
	MESSAGE ('recAnnualPlanHeader."OOS Personal Code" = %1', recAnnualPlanHeader."OOS Personal Code");
	MESSAGE ('recAnnualPlanHeader."No." =%1', recAnnualPlanHeader."No.");
	MESSAGE ('recAddAgreementHeader2."OOS Personal Code" = %1', recAddAgreementHeader2."OOS Personal Code");
	MESSAGE ('recAddAgreementHeader2."Annual Plan No." = %1', recAddAgreementHeader2."Annual Plan No.");

	recAddAgreementHeader2."OOS Personal Code" := recAnnualPlanHeader."OOS Personal Code";
	recAddAgreementHeader2."Annual Plan No." := recAnnualPlanHeader."No.";
	recAddAgreementHeader2.MODIFY;

	MESSAGE ('recAddAgreementHeader2."OOS Personal Code" = %1', recAddAgreementHeader2."OOS Personal Code");
	MESSAGE ('recAddAgreementHeader2."Annual Plan No." = %1', recAddAgreementHeader2."Annual Plan No.");
С мессагами вокруг - в мессагах все правильно, и код отрабатывает на ура.
Убираю мессаги - ОПЯТЬ не работает и не проставляет значения в эти поля...

Только не бейте. Я сама такие чудеса в первый раз вижу... :-(
Старый 17.11.2008, 17:23   #9  
IGG is offline
IGG
Участник
 
665 / 29 (2) +++
Регистрация: 24.08.2005
Адрес: СПб/Москва
recAddAgreementHeader2.VALIDATE("OOS Personal Code",recAnnualPlanHeader."OOS Personal Code") ;
recAddAgreementHeader2.VALIDATE("Annual Plan No.",recAnnualPlanHeader."No.");
попробуйте
Или если там префикс 2 у таблицы (recAddAgreementHeader2) может MODIFY первой таблицы стоит после MODIFY второй на той же записи?
Старый 17.11.2008, 17:23   #10  
TERRA is offline
TERRA
Участник
 
59 / 10 (1) +
Регистрация: 05.05.2005
Адрес: Moscow
Цитата:
Сообщение от Milk Посмотреть сообщение
А сам код у вас где расположен? Если, к примеру, на форме в OnAfterGetRecord, то могут быть догадки...

В OnAfterGetRecord у меня были проблемы, только если закомментированный код там оставлять (даже без единой строчки рабочего кода).
А это - код вызванный MenuItem'ом из MenuButton'а на форме. Вроде, с этими никогда чудес не было раньше (у меня, по крайней мере).
Старый 17.11.2008, 17:30   #11  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Запускаете монитр клиента и ищете modify записи.
Скорее всего в коде уровнем выше лежит еще одна версия записи, которая и модифается после выполнения указанного кода
Старый 17.11.2008, 17:34   #12  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Я бы еще рекомендовал сделать технический апгрейд до 3.70B или выше. Сам не сталкивался, но припоминаю, что на форумах очень ругали 3.70A. Там было несколько серьезных проблем на уровне ядра.
Старый 17.11.2008, 17:39   #13  
TERRA is offline
TERRA
Участник
 
59 / 10 (1) +
Регистрация: 05.05.2005
Адрес: Moscow
Цитата:
Сообщение от rmv Посмотреть сообщение
Запускаете монитр клиента и ищете modify записи.
Скорее всего в коде уровнем выше лежит еще одна версия записи, которая и модифается после выполнения указанного кода
И что же случается с "версией записи уровнем выше", если отслеживать через дебаггер или ставить MESSAGE ??? Вот если бы не этот досадный факт, я бы с Вами согласилась.

IGHG
Спасибо, с валидейтом вместо прямого присвоения попробовала. (Мессаги, правда, пока только закомментила - совсем убирать боюсь). Вроде присваивается (тьфу-тьфу-тьфу). Сейчас еще несколько раз на различных документах попробую для успокоения.
Старый 17.11.2008, 18:11   #14  
IGG is offline
IGG
Участник
 
665 / 29 (2) +++
Регистрация: 24.08.2005
Адрес: СПб/Москва
Получилось?
Старый 17.11.2008, 19:23   #15  
TERRA is offline
TERRA
Участник
 
59 / 10 (1) +
Регистрация: 05.05.2005
Адрес: Moscow
Цитата:
Сообщение от IGHG Посмотреть сообщение
Получилось?

Хммм... Ну, я боюсь сглазить, но вроде 6 раз проверила на разных документах и в разных вариациях - пока без накладок, и везде все проставилось.
Теперь подожду реальных криков юзверей, когда апдейт накатится на боевую базу.
Старый 18.11.2008, 00:15   #16  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Цитата:
Сообщение от TERRA Посмотреть сообщение
И что же случается с "версией записи уровнем выше", если отслеживать через дебаггер или ставить MESSAGE ??? Вот если бы не этот досадный факт, я бы с Вами согласилась.
Вкратце:

FormN.ControlM.OnPush:
Record.get(PrimaryKey);
codeunit1.Function1(PrimaryKey);
--Shit Here --> Record.Modify; <--Shit Here

codeunit1.Function1(PrimaryKey):
Record.get(PrimaryKey);
Record.SomeField1:=SomeValue1;
if Record.SomeField1=SomeValue1 then
message('Good')
else
message('Oops);
Record.Modify;

if Record.SomeField1=SomeValue1 then
message('All OK')
else
message('Shit Happens');
Старый 18.11.2008, 09:55   #17  
TERRA is offline
TERRA
Участник
 
59 / 10 (1) +
Регистрация: 05.05.2005
Адрес: Moscow
rmv
Простите, но я не поняла, где в Вашем посте логика, объясняющая, почему если MESSAGE поставить - то значение присвоится, а если убрать - не присвоится. И также не вижу ответа на вопрос, почему все нормально присваивается, если тот же код прогонять дебаггером.

Кстати, "уровня выше" - у меня в этом коде нет. Буквально ВСЕ происходит по ONPush контрола.
 


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

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

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