17.11.2008, 16:21 | #1 |
Участник
|
Добрый день. Есть проблема: уже не знаю, с какого края вообще подступиться.
Есть простенький кусок кода, который должен проставлять некое значение в поле таблицы. Не проставляет. Проверяла 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 |
Участник
|
У вас Error'а дальше по коду нигде нет, случайно?
|
|
17.11.2008, 16:47 | #3 |
Участник
|
Нет, Error'а нигде нету.
Весь остальной код - отрабатывает, вставляет нужные записи в таблицу, присваивает им нужные значения, создает новые документы - все путем. Проблема именно с этими двумя полями в этой таблице (все остальные поля в ЭТУ ЖЕ таблицу - тоже проставляются без проблем). Кстати, тип обоих полей - code. (это я просто уже не знаю, чем еще помочь отвечающим :-( ) |
|
17.11.2008, 16:49 | #4 |
Участник
|
Вспоминаем старый добрый FORTRAN: там был единственный метод отладки под названием "обложить принтами". Выведите правые и левые части выражений присваивания до MODIFY, а потом можно только левые - после.
|
|
17.11.2008, 17:14 | #5 |
Участник
|
А поставьте перед этим MESSAGE(recAnnualPlanHeader."OOS Personal Code" + recAnnualPlanHeader."No.")
Может ДО этого не находится запись recAnnualPlanHeader? |
|
17.11.2008, 17:17 | #6 |
Участник
|
А сам код у вас где расположен? Если, к примеру, на форме в OnAfterGetRecord, то могут быть догадки...
|
|
17.11.2008, 17:18 | #7 |
Участник
|
Я иногда усиливаю MODIFY явно прописывая TRUE
MODIFY(TRUE) Или просто по фильтру не нашлась recAddAgreementHeader2? |
|
17.11.2008, 17:19 | #8 |
Участник
|
Так, обложила мессагами до и после этого куска кода.
Получилось примерно так: Код: 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 |
Участник
|
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 |
Участник
|
Цитата:
В OnAfterGetRecord у меня были проблемы, только если закомментированный код там оставлять (даже без единой строчки рабочего кода). А это - код вызванный MenuItem'ом из MenuButton'а на форме. Вроде, с этими никогда чудес не было раньше (у меня, по крайней мере). |
|
17.11.2008, 17:30 | #11 |
Участник
|
Запускаете монитр клиента и ищете modify записи.
Скорее всего в коде уровнем выше лежит еще одна версия записи, которая и модифается после выполнения указанного кода |
|
17.11.2008, 17:34 | #12 |
Участник
|
Я бы еще рекомендовал сделать технический апгрейд до 3.70B или выше. Сам не сталкивался, но припоминаю, что на форумах очень ругали 3.70A. Там было несколько серьезных проблем на уровне ядра.
|
|
17.11.2008, 17:39 | #13 |
Участник
|
Цитата:
IGHG Спасибо, с валидейтом вместо прямого присвоения попробовала. (Мессаги, правда, пока только закомментила - совсем убирать боюсь). Вроде присваивается (тьфу-тьфу-тьфу). Сейчас еще несколько раз на различных документах попробую для успокоения. |
|
17.11.2008, 18:11 | #14 |
Участник
|
Получилось?
|
|
17.11.2008, 19:23 | #15 |
Участник
|
|
|
18.11.2008, 00:15 | #16 |
Участник
|
Цитата:
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 |
Участник
|
rmv
Простите, но я не поняла, где в Вашем посте логика, объясняющая, почему если MESSAGE поставить - то значение присвоится, а если убрать - не присвоится. И также не вижу ответа на вопрос, почему все нормально присваивается, если тот же код прогонять дебаггером. Кстати, "уровня выше" - у меня в этом коде нет. Буквально ВСЕ происходит по ONPush контрола. |
|