суббота, 19 ноября 2016 г.

1С. Внешняя обработка заполнения объекта

Понадобилось сделать обработку заполнения ТЧ документа ПостоянноеУдержаниеВПользуТретьихЛиц в ЗУП 3.0. Заполняться ТЧ должна физлицами по определенному отбору.
Пример обработки взял из конфы БСП 2.3.
Ну, список физлиц я, конечно, получил запросом, обработку подключил в справочник. А вот дальше возникла проблема: в форме списка команда отрабатывает, а в форме документа - нет. И точкой останова ведь ничего не поймать.
Сначала думал, что намудрил где-то в параметрах. Но потом понял, что вообще код модуля формы обработки не срабатывает. Гугл не дал результатов.

Стал разбираться, как вообще это работает. С документацией у 1С проблемы - наверняка есть где-то, но ведь ничего не найдешь. Ну, да ладно, придется ковырять 1С-ный код замудренный.

Итак, команды на форму добавляются в процедуре модуля формы ПриСозданииНаСервере():

// Обработчик подсистемы "Дополнительные отчеты и обработки".
ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);

В результате в командах формы документа появляется следующий объект:
ЭтаФорма.Команды.КомандаДополнительнойОбработки со свойством:
ЭтаФорма.Команды.КомандаДополнительнойОбработки.Действие
Значение свойства - Подключаемый_ВыполнитьНазначаемуюКоманду
Т.е. подключаемая обработка должна запустить процедуру с именем Подключаемый_ВыполнитьНазначаемуюКоманду(Команда).
Ищем в модуле формы документа данную процедуру и.... понимаем, что ее там нет.
Вопрос к разработчикам 1С: а почему вы в данный документ не добавили эту процедуру?
Забыли что ли? Или данный документ категорически запрещается заполнять автоматом?
В общем выхода два:
1) Заполнять документ из формы списка;
2) Вносить изменения в конфу. В частности надо добавить 2 процедуры в модуль формы документа (копируем из БСП):
&НаКлиенте
Процедура Подключаемый_ВыполнитьНазначаемуюКоманду(Команда)
Если НЕ ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуНаКлиенте(ЭтотОбъект, Команда.Имя) Тогда
РезультатВыполнения = Неопределено;
ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(Команда.Имя, РезультатВыполнения);
ДополнительныеОтчетыИОбработкиКлиент.ПоказатьРезультатВыполненияКоманды(ЭтотОбъект, РезультатВыполнения);
КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(ИмяЭлемента, РезультатВыполнения)
ДополнительныеОтчетыИОбработки.ВыполнитьНазначаемуюКомандуНаСервере(ЭтотОбъект, ИмяЭлемента, РезультатВыполнения);
КонецПроцедуры

Комментариев нет:

Отправить комментарий