Проект

Общее

Профиль

Дополнительные обработки

1. Обработка заполнения данных формы без записи объекта

https://its.1c.ru/db/bsp246doc#content:31:1:issogl2_%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%D0%BE%D0%B5_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9

2. Сохраняемые параметры дополнительной обработки

При необходимости задать параметры для дополнительной обработки можно воспользоваться реквизитом ХранилищеНастроек справочника ДополнительныеОтчетыИОбработки. Например, для заполнения документа Распределение прочих затрат необходимо получать цены по определенному, специально созданному для этих целей виду цен. Этот вид цен можно задавать с помощью сохраняемого параметра. В общем виде в реквизите ХранилищеНастроек можно сохранять произвольные параметры дополнительной обработки .(например, в виде структуры). Для доступа к реквизиту ХранилищеНастроек в команду выполнения обработки передается ссылка на связанный с ней элемент справочника ДополнительныеОтчетыИОбработки.

Пример кода для чтения параметра:

ХранилищеНастроек = ОбщегоНазначения.ЗначениеРеквизита(ОбработкаСсылка,"ХранилищеНастроек");
НастройкиСтруктура = ХранилищеНастроек.Получить();

для записи:

ДополнительнаяОбработкаОбъект = Параметры.ДополнительнаяОбработкаСсылка.ПолучитьОбъект();
ДополнительнаяОбработкаОбъект.ХранилищеНастроек = НовыйХранилищеЗначения(НастройкиСтруктура);
ДополнительнаяОбработкаОбъект.Записать();

3. Вызов процедуры модуля внешней обработки

&НаСервере
Функция ПроверитьНДСНаСервере(Отказ)
    ИмОбработки = "Пересчет суммы НДС по итоговой сумме";
    ОбработкаПроверки = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмОбработки);
    Если Не ЗначениеЗаполнено(ОбработкаПроверки) Тогда
            ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                                НСтр("ru = 'Не найдена обработка " + ИмОбработки),
                                КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
            Отказ = Истина;
            ВызватьИсключение ТекстСообщения;
    КонецЕсли;

    Если ОбработкаПроверки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет
        ИЛИ ОбработкаПроверки.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда
        Менеджер = ВнешниеОтчеты;
    Иначе
        Менеджер = ВнешниеОбработки;
    КонецЕсли;

    ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ОбработкаПроверки);

    МенеджерОбработки = Менеджер.Создать(ИмяОбработки);
    МенеджерОбработки.ДокументДляОбработки = Объект.СсылкаНаОбъект;
    РазницаСумм = МенеджерОбработки.СуммаНДСКорректна(); //Менеджер.Создать(ИмяОбработки).ВыгрузитьВExcel(СтрокаКлиенты.НастройкиВыгрузки);
    возврат РазницаСумм;
КонецФункции

4. Шаблон внешней обработки заполнения объекта на сервере

//Проект ХХХХ. Всеволод. ХХ.ХХ.ХХХХ

Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации                    = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.2.45");  
    ПараметрыРегистрации.Вид                = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
    ПараметрыРегистрации.БезопасныйРежим    = Истина;
    ПараметрыРегистрации.Наименование       = Метаданные().Синоним;
    ПараметрыРегистрации.Версия             = "02.06.2022";  
    ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");

    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление              = "Заполнить грузоотправителя по складу"; //Метаданные().Синоним;
    НоваяКоманда.Идентификатор              = Метаданные().Имя;  
    НоваяКоманда.Использование              = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение       = Ложь;

    Возврат ПараметрыРегистрации;
КонецФункции 

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

    Если ТипЗнч(ОбъектыНазначения) = Тип("Массив") Тогда

        Для каждого ДокСсылка Из ОбъектыНазначения Цикл

            ЧтотоСделать(ДокСсылка);

        КонецЦикла;
    Иначе
        ЗаписьЖурналаРегистрации("ВнешняяОбработкаЗаполнениеГрузоотправителяПоСкладу",,,,"Передан ошибочный тип (ТипЗнч(ОбъектыНазначения)): " + ТипЗнч(ОбъектыНазначения));
    КонецЕсли;

КонецПроцедуры // ()