17.03.2011, 14:04 | #1 |
Участник
|
Здравствуйте! Помогите плиз с очередным тупиком.
Необходимо сделать что в заказе был клиент по умолчанию при вставке новой записи. В тригере OnNewRecord формы Sales Order "Sell-to Customer No.":='К000002'; SalesHeader.VALIDATE("Sell-to Customer No.",'К000002'); Выдает ошибку. В тригере таблицы (OnInsert) никаких действий. Может кто сталкивался? Заранее благодарен. |
|
17.03.2011, 15:21 | #2 |
Участник
|
Прошу специалистов не закидывать меня камнями, но осмелюсь предложить свое решение.
Вижу в OnInsert триггере 36 таблицы код: Код: IF GETFILTER("Sell-to Customer No.") <> '' THEN IF GETRANGEMIN("Sell-to Customer No.") = GETRANGEMAX("Sell-to Customer No.") THEN VALIDATE("Sell-to Customer No.",GETRANGEMIN("Sell-to Customer No.")); Код: g_recSalesRecSetup.GET; g_recSalesRecSetup.TESTFIELD("Default Customer No."); SETRANGE("Sell-to Customer No.", g_recSalesRecSetup."Default Customer No."); Единственное - при сбрасывании всех фильтров система работать не будет p.s. Но возможно один раз сделать GET по настройке и потом на OnAfterGetCurrRecord ставить фильтр ) |
|
17.03.2011, 16:46 | #3 |
Участник
|
Я тут хотел уточнить:
g_recSalesRecSetup это 311 Sales & Receivables Setup? |
|
17.03.2011, 16:50 | #4 |
Участник
|
|
|
17.03.2011, 16:54 | #5 |
Участник
|
Спасибо за ответ.
Это частичное решение проблемы. Дальше надо как то вызвать тригер onValidate() поля "Sell-to Customer No." для того чтоб по коду заполнились все необходимые данные. А вот это как раз и не получается в связи с тем что это можно делать не из каждого триггера! |
|
17.03.2011, 17:01 | #6 |
Участник
|
Хотя нет! Извиняюсь! Validate проходит, но если выбрать других клиентов то учитывая фильтр, они естественно исчезают!
Да уж-с! Вот непруха-то! Но это уже прогресс! |
|
17.03.2011, 17:03 | #7 |
Участник
|
Цитата:
Но фильтр ведь останется на дефолтном клиенте, он никуда не денется. Или я не прав? В какой момент он слетит? |
|
17.03.2011, 17:13 | #8 |
Участник
|
Я наверное не досказал. В общем открываем новый заказ. Есть клиент по умолчанию "Розница". Все создается и валидэйтится.
Но например нужно для другого клиента заказ сварганить. Мы делаем новый заказ. В этот заказ вставляется клиент по умолчанию, а когда мы его меняем, то наш заказ (в связи с фильтром) перестает отображаться. Вот. |
|
17.03.2011, 17:34 | #9 |
Участник
|
Цитата:
Сообщение от nikshev
Я наверное не досказал. В общем открываем новый заказ. Есть клиент по умолчанию "Розница". Все создается и валидэйтится.
Но например нужно для другого клиента заказ сварганить. Мы делаем новый заказ. В этот заказ вставляется клиент по умолчанию, а когда мы его меняем, то наш заказ (в связи с фильтром) перестает отображаться. Вот. В ней пишем: Код: IF p_blIsFilter THEN SETRANGE("Sell-to Customer No.", g_recSalesRecSetup."Default Customer No.") ELSE SETRANGE("Sell-to Customer No."); На триггер этой галочки OnAfterValidate пишем: Код: fn_SetFilter(g_blOnlyDefault); CurrForm.UPDATE(FALSE) Код: g_blOnlyDefault := TRUE; fn_SetFilter(TRUE) Вариант № 2. Просто создайте новую форму без фильтров. Таким образом у Вас будет одна форма только для клиента "Розница", а вторая - для остальных. И никаких заморочек с признаками. Минус только в том, что придется покупать новую форму |
|
17.03.2011, 17:45 | #10 |
Участник
|
Большое спасибо! Будем-с копать!
|
|
17.03.2011, 23:26 | #11 |
Участник
|
Забудьте про фильтры.
У Вас должно быть следующего рода решение: Код: IF GETFILTER("Sell-to Customer No.") <> '' THEN IF GETRANGEMIN("Sell-to Customer No.") = GETRANGEMAX("Sell-to Customer No.") THEN VALIDATE("Sell-to Customer No.",GETRANGEMIN("Sell-to Customer No.")); // Начало доработки > IF ("Sell-to Customer No." = '') AND (SalesSetup."Default Customer No." <> '') THEN VALIDATE("Sell-to Customer No.",SalesSetup."Default Customer No.")); // Конец доработки < |
|