Версия для печати темы (https://pro1c.org.ua/index.php?s=8f442f993cd7165b6a51e76c40eabf69&showtopic=5037)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Выполнить процедуру формы документа со своей обработки. Как?

Автор: Alaid 13.10.11, 13:29

Всем хорошего настроения!

Парни, извините, может вопрос ламерский. Восьмерку только осваиваю.

В своей обработке заполняю документы "Реализация товаров и услуг"
данными выгребенными из базы данных SQL. Возникла необходимость
выполнить Процедуру формы документа, но так как будто она выполнилась
с формы документа, "в контексте формы документа" кажется так это правильно
называется. Вопрос: как ее так вызвать?

Может ткните пальцем туда, где про это написано.

Заранее благодарен!

Автор: DartRomanius 13.10.11, 14:02

Если обращаться к документу в контексте объекта или ссылки то никак.

Автор: Vofka 13.10.11, 14:13

Форма = Ссылка.ПолучитьФорму("ФормаДокумента");
Форма.Открыть();
Форма.МояЛюбимаяПроцедурочка() // в форме должна быть объявлена как экспортная
Форма.Закрыть();

Автор: Alaid 13.10.11, 14:58

Уважаемый Vofka, то что Вы предложили как раз то, что мне нужно, но
у меня возникла сложность следующего характера, я теперь не знаю
как обратиться к этому элементу формы.

Номенклатура=Справочники.Номенклатура;
            Ном=Номенклатура.НайтиПоРеквизиту("ProdID", Rs2.Fields("ProdID").Value);
            Если Ном = Номенклатура.ПустаяСсылка() Тогда
                Сообщить("Номенклатура не найдена!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
            Иначе
                Сообщить(Ном);
                ОбъектДок=НовДок.Ссылка.ПолучитьОбъект();
                НоваяСтрока=ОбъектДок.Товары.Добавить();
                НоваяСтрока.Номенклатура=Ном;
                Форма = НовДок.Ссылка.ПолучитьФорму("ФормаДокумента");
                Форма.Открыть();
                Форма.ТоварыНоменклатураПриИзменении(Форма.Товары.Номенклатура); // Проблемная строка
                Форма.Закрыть();
                ОбъектДок.Записать();
            КонецЕсли;


Вываливается Предупреждение "Поле объекта не обнаружено (Номенклатура)"
Просто "Форма.Номенклатура" тоже не катит.

У меня здесь документ "Реализация товаров и услуг", табличная часть "Товары", Колонка "Номенклатура".

Автор: Vofka 13.10.11, 15:54

Ну и не будет конечно же работать. Откуда система знает какую строчку пересчитать? Что у вас находится в ТоварыНоменклатураПриИзменении() ?

Автор: Alaid 13.10.11, 17:00

Цитата(Vofka @ 13.10.11, 16:54) *
Ну и не будет конечно же работать. Откуда система знает какую строчку пересчитать? Что у вас находится в ТоварыНоменклатураПриИзменении() ?


Большое спасибо за отклик.

Процедура ТоварыНоменклатураПриИзменении(Элемент) Экспорт

    ПриИзмененииНоменклатурыТовары(Элемент);

КонецПроцедуры // ТоварыНоменклатураПриИзменении()


После описания процедуры ключевое слово "Экспорт"
добавил я.

Процедура ПриИзмененииНоменклатурыТовары(Элемент)

    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;

    // Выполнить общие действия для всех документов при изменении номенклатуры.
    ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл(СтрокаТабличнойЧасти, "Товары", ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете);
    ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти);

    // Рассчитать реквизиты табличной части.
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    
    УчетСерийныхНомеров.ПроверитьСерийныеНомера(СтрокаТабличнойЧасти, ЭтотОбъект);

    // Ввод состава набора
    УправлениеЗапасами.ДобавитьСоставНабора(СтрокаТабличнойЧасти, ЭтотОбъект);

КонецПроцедуры // ПриИзмененииНоменклатурыТовары()


Меня интересует заполнение всего двух полей (Единица измерения и Коэффициент) которые я мог бы заполнить и прямым
присваиванием, но хочется сделать все как-бы максимально правильно.

И еще вопрос такого плана. А что это за манера такая объявлять процедуру с единственной строчкой вызовом еще одной процедуры?

Автор: shurik_shurik 13.10.11, 17:53

Цитата(Alaid @ 13.10.11, 18:00) *
А что это за манера такая объявлять процедуру с единственной строчкой вызовом еще одной процедуры?

ТоварыНоменклатураПриИзменении(Элемент) Экспорт

Это обработчик события элемента формы, а это:
ПриИзмененииНоменклатурыТовары(Элемент)

Непосредственная процедура, которая делает нужную обработку и может вызыватся с других обработчиков...
Как по мне, правильным решением будет использовать процедуру
ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);

Передать в нее нужною строку и объект... без гемора с формой...

Автор: Alaid 14.10.11, 12:03

Цитата(shurik_shurik @ 13.10.11, 18:53) *
ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);

Передать в нее нужною строку и объект... без гемора с формой...


Вот она эта процедура.
ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуТабЧасти(НоваяСтрока, НовДок);


Спасибо большое, дорогие коллеги, без вас бы не справился!

Автор: MOTOPARTNER 23.10.20, 16:09

Цитата(Vofka @ 13.10.11, 15:13) *
Форма = Ссылка.ПолучитьФорму("ФормаДокумента");
Форма.Открыть();
Форма.МояЛюбимаяПроцедурочка() // в форме должна быть объявлена как экспортная
Форма.Закрыть();


Спасибо работает но в сам документ при выборе не вставляется информация она остается в той обработке(((

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua