Проект

Общее

Профиль

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

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(СтрокаКлиенты.НастройкиВыгрузки);
    возврат РазницаСумм;
КонецФункции