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

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

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

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

Заранее благодарен!
DartRomanius
Если обращаться к документу в контексте объекта или ссылки то никак.
Vofka
Форма = Ссылка.ПолучитьФорму("ФормаДокумента");
Форма.Открыть();
Форма.МояЛюбимаяПроцедурочка() // в форме должна быть объявлена как экспортная
Форма.Закрыть();
Alaid
Уважаемый Vofka, то что Вы предложили как раз то, что мне нужно, но
у меня возникла сложность следующего характера, я теперь не знаю
как обратиться к этому элементу формы.

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


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

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


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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

Передать в нее нужною строку и объект... без гемора с формой...
Alaid
Цитата(shurik_shurik @ 13.10.11, 18:53) необходимо зарегистрироваться для просмотра ссылки
ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);

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


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


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


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