Имя: Пароль:
1C
1С v8
УТ. Как программно выполнить процедуру в другом документе?
,
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
Всем спасибо!!!!!!!!!!