Табличные части в документах и справочниках часто бывают достаточно большими — сотни и тысячи строк. Почти также часто требуется выполнять какую-либо обработку этих самых строк и разумеется очень желательно автоматизировать эту обработку. Изменять конфигурацию в каждом подобном случае было бы очень непрактично, поэтому компания «1С» создала механизм внешних обработок табличных частей.
Внешняя обработка табличных частей — это обычная внешняя обработка, соответствующая определенным требованиям. Такую обработку можно подключить к какой-либо типовой конфигурации и привязать к нужным документам и справочникам.
Кроме этого, нужно отметить, что создание внешних обработок табличных частей различается для обычного приложения (Бухгалтерия 2.0.*, ЗиУП 2.5.*, УТ 10.3.*) и управляемого приложения (Бухгалтерия 3.0.*, ЗиУП 3.*, УТ 11.*). В статье будут рассмотрены оба варианта.
Также нужно сказать, что вопросы отладки внешних обработок табличных частей для управляемого и для обычного приложения рассматриваются в отдельной статье.
Внешняя обработка табличных частей в управляемом приложении
Начнем с управляемого приложения. Тут нужно сказать, что в управляемом приложении обработки табличных частей заменены на более общие обработки заполнение объекта. В тексте ниже будет приведен пример создания и подключения обработки заполнения объекта на примере документа «Реализация товаров и услуг» (Бухгалтерия предприятия, редакция 3.0).
Создание
Итак, для начала нам нужно создать новую внешнюю обработку и в модуле объекта этой обработки размещаем такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; //указываем сведения о внешней печатной форме ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта"); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("ВерсияБСП", "3.0.1.287"); ПараметрыРегистрации.Вставить("Наименование", "Установка скидок в реализации"); ПараметрыРегистрации.Вставить("Информация", "Внешняя обработка заполнения табличной части"); //используем безопасный режим, это накладывает некоторые ограничения ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); //определим документы и/или справочники //в которых будет использоваться эта печатная форма ПараметрыРегистрации.Вставить("Назначение", Новый Массив); ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг"); //используется для дополнительных отчетов //подключенных к подсисстеме "Варианты отчетов" ПараметрыРегистрации.Вставить("ОпределитьНастройкиФормы", Ложь); //если требуются исключения из безопасного режима их можно запросить ПараметрыРегистрации.Вставить("Разрешения", Новый Массив); ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("https","yandex.ru",80,"очень надо")); //определяем таблицу команд ПараметрыРегистрации.Вставить("Команды", ПолучитьТаблицуКоманд()); //добавляем команду //вызов клиентского метода Команда = ПараметрыРегистрации.Команды.Добавить(); Команда.Представление = "Установить скидку на клиенте"; Команда.Идентификатор = "УстановитьСкидкуНаКлиенте"; Команда.Использование = "ВызовКлиентскогоМетода"; Команда.ПоказыватьОповещение = Истина; //добавляем команду //вызов серверного метода Команда = ПараметрыРегистрации.Команды.Добавить(); Команда.Представление = "Установить скидку на сервере"; Команда.Идентификатор = "УстановитьСкидкуНаСервере"; Команда.Использование = "ВызовСерверногоМетода"; Команда.ПоказыватьОповещение = Истина; //добавляем команду //заполнение формы без записи Команда = ПараметрыРегистрации.Команды.Добавить(); Команда.Представление = "Установить скидку без записи"; Команда.Идентификатор = "УстановитьСкидкуБезЗаписи"; Команда.Использование = "ЗаполнениеФормы"; Команда.ПоказыватьОповещение = Истина; Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ЗаменяемыеКоманды", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции |
В коде реализована экспортная функция СведенияОВнешнейОбработке(), она является обязательной и служит для описания внешнего обработки. Обязательными для заполнения являются параметры «Вид» (в нашем случае — «ЗаполнениеОбъекта»), «Версия» и «Команды». Необязательные параметры также очень желательно заполнять — это облегчает подключение и помогает избежать путаницы в дальнейшем.
Параметр «БезопасныйРежим» в значении «Истина» накладывает некоторые ограничения:
- игнорируется привилегированный режим;
- запрещена работа с COM;
- запрещена загрузка внешних компонент;
- запрещен запуск внешних приложений и команд ОС;
- запрещен доступ к файловой системе (кроме временных файлов);
- запрещен доступ к интернету.
При этом имеется возможность запросить исключения из безопасного режима (приме в коже выше).
В примере выше добавляются три команды разного типа. Команды типов «ВызовСерверногоМетода» и «ЗаполнениеФормы» должны быть реализованы в том же самом модуле объекта обработки — экспортная процедура ВыполнитьКоманду(). При этом команды типа «ЗаполнениеФормы» могут выполняться для новых (не записанных) объектов. Пример реализации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт Если ИдентификаторКоманды = "УстановитьСкидкуБезЗаписи" Тогда //для команд типа "ЗаполнениеФормы" //параметр ОбъектыНазначения не передается Для Каждого СтрТовары Из ПараметрыВыполнения.ЭтаФорма.Объект.Товары Цикл СтрТовары.Цена = СтрТовары.Цена*0.9; СтрТовары.Сумма = СтрТовары.Цена*СтрТовары.Количество; КонецЦикла; ИначеЕсли ИдентификаторКоманды = "УстановитьСкидкуНаСервере" Тогда //для команд типа "ВызовСерверногоМетода" //параметр ОбъектыНазначения содержит массив объектов //для которых вызвана команда Для Каждого ЭлементОбъектНазначения Из ОбъектыНазначения Цикл ОбъектНазначения = ЭлементОбъектНазначения.ПолучитьОбъект(); Для Каждого СтрТовары Из ОбъектНазначения.Товары Цикл СтрТовары.Цена = СтрТовары.Цена*0.9; СтрТовары.Сумма = СтрТовары.Цена*СтрТовары.Количество; КонецЦикла; ОбъектНазначения.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; КонецЕсли; КонецПроцедуры |
Команды типа «ВызовКлиентскогоМетода» должны быть реализованы в модуле основной формы обработки — экспортная процедура ВыполнитьКоманду(). То есть требуется создать форму (можно абсолютно пустую), выбрать эту форму в качестве основной для обработки и уже в модуле этой формы реализовать требуемую процедуру. Пример реализации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт Если ИдентификаторКоманды = "УстановитьСкидкуНаКлиенте" Тогда Если ВладелецФормы.ИмяФормы = "Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары" Тогда ОбъектФормы = ВладелецФормы.Объект; УстановитьСкидкуНаСервере(ОбъектФормы); КопироватьДанныеФормы(ОбъектФормы, ВладелецФормы.Объект); КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Процедура УстановитьСкидкуНаСервере(Объект) Для Каждого СтрТовары Из Объект.Товары Цикл СтрТовары.Цена = СтрТовары.Цена*0.9; СтрТовары.Сумма = СтрТовары.Цена*СтрТовары.Количество; КонецЦикла; КонецПроцедуры |
Выбор типа команды в первую очередь зависит от конкретной задачи.
Подключение
Подключение внешней обработки покажем на примере «Бухгалтерии предприятия, редакция 3.0».
Вкратце повторю основные этапы:
- Открываем вкладку «Администрирование» и переходим в раздел «Печатные формы, отчеты и обработки»;
- Устанавливаем галку «Дополнительные отчеты и обработки» и переходим в раздел «Дополнительные отчеты и обработки»;
- Жмем кнопку «Добавить из файла» и выбираем файл обработки;
- (Необязательно) Меняем наименование, комментарии, настраиваем видимость, изменяем размещение;
- Жмем кнопку «Записать и закрыть».
Внешняя обработка табличных частей в обычном приложении
Теперь создадим обработку табличных частей для обычного приложения — на примере документа «Реализация товаров и услуг» (Бухгалтерия предприятия, редакция 2.0).
Создание
В обычном приложении все гораздо проще — нам просто нужно создать обработку и в модуле объекта этой обработки реализовать экспортную процедуру Инициализировать(), которая имеет следующие параметры:
- Объект — объект (документ или справочник) для которого произошел вызов внешней обработки;
- ИмяТабличнойЧасти — имя табличной части, для которой вызвана обработка;
- ТабличноеПоле — табличное поле формы (элемент формы), для которого вызвана обработка.
Пример реализации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПоле) Экспорт Если ИмяТабличнойЧасти = "Товары" Тогда Для Каждого СтрТовары Из Объект.Товары Цикл СтрТовары.Цена = СтрТовары.Цена*0.9; СтрТовары.Сумма = СтрТовары.Цена*СтрТовары.Количество; КонецЦикла; КонецЕсли; КонецПроцедуры |
Кроме этого внешняя обработка табличных частей может содержать макет с названием «Параметры_Авторегистрации». Как следует из названия в этом макете можно указать параметры для автоматической регистрации внешней обработки ТЧ. Для этого в первой колонке нужно перечислить объекты метаданных, а во второй соответствующие названия табличных частей, например так:
Такой же макет (но без указания табличной части) используется во внешних печатных формах, о которых имеется отдельная статья.
Подключение
Подключим нашу внешнюю обработку табличных частей на примере «Бухгалтерии предприятия, редакция 2.0».
Основные этапы:
- Открываем справочник внешних обработок ТЧ (Сервис->Дополнительные отчеты и обработки->Дополнительные внешние обработки табличных частей);
- Добавляем новый элемент справочника и указываем файл обработки;
- Записываем элемент.
- (Необязательно) Меняем имеющиеся настройки — представления, отборы, дополнительные параметры и прочее.
На этом все, надеюсь, что эта статья была Вам полезна.
Загрузка...
Самое лучшее объяснение на просторах рунета.