|
УТ. Как программно выполнить процедуру в другом документе? | ☑ | ||
---|---|---|---|---|
0
247tsm
08.07.14
✎
03:45
|
Доброй ночи гуру 1с82.
Вопрос у меня такой. В УТ я сделал свой документ Заказ. В документе Заказ по кнопке Накладная я создаю новый документ РеализацияТоваровУслуг и программно заполняю его. В табличной части документа РеализацияТоваровУслуг в поле Номенклатура я вставляю Номенклатуру, которая является набором. После сохранения и открытия созданного документа РеализацияТоваровУслуг на вкладке табличной части Товары я нажимаю кнопку "Состав набора", но получаю пустой состав набора, хотя реально набор состоит из двух товаров. Я понимаю, что при ручном заполнении табличной части документа РеализацияТоваровУслуг срабатывает процедура ТоварыНоменклатураПриИзменении(Элемент). ВОПРОС. Как мне программно из моего документа Заказ, кроме заполнения реквизитов документа РеализацияТоваровУслуг ещё и запустить эту процедуру - ТоварыНоменклатураПриИзменении(Элемент)? Или вопрос по-другому, что нужно сделать, чтобы при нажатии кнопки "Состав набора" я действительно увидел состав набора? Т.к. я еще не силен в 1с82, буду очень признателен, если в Ваших советах будет конкретный пример кода. Спасибо. |
|||
1
mehfk
08.07.14
✎
05:38
|
Посмотреть на функцию в первый раз и увидеть, что в ее определении отстутствует слово "Экспорт"
Посмотреть на функцию во второй раз и понять, что она находится в модуле формы. |
|||
2
Wobland
08.07.14
✎
05:51
|
сделаем вывод за ТС. необходимо повторять логику обработчика ПриИзменении в своём коде
|
|||
3
Escander
08.07.14
✎
05:54
|
(2) если логика вынесена в экспортную процедуру - решается вызовом её
|
|||
4
skunk
08.07.14
✎
07:06
|
(3)иногда это может привести к полной опе
|
|||
5
skunk
08.07.14
✎
07:07
|
хотя насчет полной наверное сильно приврал
|
|||
6
247tsm
08.07.14
✎
09:20
|
(1)-(5) Спасибо за рекомендации, НО...
Я попытался так сделать. Но ведь это, как снежный ком. Я перенес одну процедуру, затем вторую... До конца я так и не дошёл. Я придумал другой интересный способ. В документ я добавил реквизит "парам" и программно заполняю его, как "истина". А в процедуре "ПриОткрытии" проверяю его значение и если "истина", то пытаюсь выполнить процедуру "ТоварыНоменклатураПриИзменении(Элемент)": Если парам = истина Тогда Для Каждого ТекУслуга Из Товары Цикл ТоварыНоменклатураПриИзменении(ТекУслуга); КонецЦикла; КонецЕсли; Но для этого, я думаю, мне нужно передавать не строку ТекУслуга, а сделать активным первое поле - ТекУслуга.Номенклатура и его передавать в процедуру. Но как это сделать? |
|||
7
Wobland
08.07.14
✎
09:21
|
слово "логику" ты не увидел, да?
|
|||
8
247tsm
08.07.14
✎
09:28
|
(7) я еще не так хорошо, как ты, владею 1с82 и не смог понять до конца логику действий процедуры ТоварыНоменклатураПриИзменении() - там столько ссылок на разные процедуры(), что после перехода по очередной ссылке забываешь, что ищешь, поэтому и прошу помочь мне с помощью конкретного кода, который, думаю будет намного короче, чем простая сумма всех процедур.
|
|||
9
Мимохожий Однако
08.07.14
✎
09:29
|
(6)С этой логикой используй открытие формы заполняемого документа и вызов нужных функций этой формы. Но я так не люблю делать...Правильнее воспользоваться уже вышеприведенными советами.
|
|||
10
247tsm
08.07.14
✎
09:30
|
Я понимаю, что там заполняется реквизит КлючСтроки, а может, и КлючСвязи, но не смог до конца проследить что, как делается.
|
|||
11
ZaprosMan
08.07.14
✎
09:32
|
(9) говорит, нужно сделать процедуру ТоварыНоменклатураПриИзменении" Экспортной, получить форму, и выполняй свою процедуру наздоровье.
|
|||
12
247tsm
08.07.14
✎
09:35
|
(9) но я ж написал, что логику до конца не понял и поэтому прошу помочь мне конкретным кодом - я понимаю, что те, кто мне давал советы, говорили "вообще" - про теорию, я с ними полностью согласен. Но мне нужна не теория, а практика - программный код (если, конечно, кто-нибудь спустится "на землю" и посмотрит эти процедуры и сможет написать этот конкретный код).
|
|||
13
ZaprosMan
08.07.14
✎
09:35
|
(11)+ Но надо понимать, что это не совсем верно, с точки зрения чистоты кода, короче это говнакод. Но иногда, когда не охота заморачиваться, приходится так делать.
|
|||
14
247tsm
08.07.14
✎
09:36
|
(11) но я это делал. Но процедура ТоварыНоменклатураПриИзменении тянет за собой кучу других процедур!!!!!!!!!!!!!!! И я до конца так и не дошёл.
|
|||
15
ZaprosMan
08.07.14
✎
09:38
|
Процедура ТоварыНоменклатураПриИзменении(Элемент) Экспорт
//////...... КонецПроцедуры; |
|||
16
Wobland
08.07.14
✎
09:40
|
(12) мне лениво, у меня работа есть
|
|||
17
247tsm
08.07.14
✎
09:42
|
(15) показываю:
Процедура ТоварыНоменклатураПриИзменении(Элемент) СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные; ПриИзмененииНоменклатурыТовары(Элемент); РасчетАкциза(СтрокаТабличнойЧасти); КонецПроцедуры А процедуру ПриИзмененииНоменклатурыТовары() тоже надо сделать экспортной? Пожалуйста: Процедура ПриИзмененииНоменклатурыТовары(Элемент) СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные; // Выполнить общие действия для всех документов при изменении номенклатуры. ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти); // Рассчитать реквизиты табличной части. ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); УчетСерийныхНомеров.ПроверитьСерийныеНомера(СтрокаТабличнойЧасти, ЭтотОбъект); // Ввод состава набора УправлениеЗапасами.ДобавитьСоставНабора(СтрокаТабличнойЧасти, ЭтотОбъект); КонецПроцедуры // ПриИзмененииНоменклатурыТовары() А что делать с : ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти); И их делать экспортными? И т.д. |
|||
18
skunk
08.07.14
✎
09:43
|
ихмается тебе (6) надо переделать на нечто подобное
для каждого стчТовары из Товары ЭлементыФормы.Товары.ТекущаяСтрока = стчТовары; ТоварыНоменклатураПриИзменении(ЭлементыФормы.Товары.Колонки.Номенклатура.ЭлементУправления); конеццикла |
|||
19
ZaprosMan
08.07.14
✎
09:46
|
где находится процедура РасчетАкциза(СтрокаТабличнойЧасти);
В модуле объекта? |
|||
20
247tsm
08.07.14
✎
09:48
|
(18)Класс!!!!!!!!!! Получилось!!!!!!!!
СПАСИБО!!!!!!! |
|||
21
247tsm
08.07.14
✎
09:49
|
(19) нет в модуле формы.
|
|||
22
247tsm
08.07.14
✎
09:49
|
Всем спасибо!!!!!!!!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |