Меня зовут Севара, я системный аналитик в команде «Диадок.1С». Хочу рассказать о новом инструменте, который помогает автоматически собирать шаблоны подключаемых модулей (ПМ).
Мы часто получаем вопросы, связанные с доработками модуля для своих целей. Самые популярные:
- Как разобраться в архитектуре модуля Диадока.
- Как протестировать те доработки, которые сделал.
- Как сделать доработки и не снять с поддержки модуль Диадока.
- Где найти информацию о том, что можно доработать.
- Где найти примеры.
Мы проанализировали обращения пользователей и провели анализ того, какие доработки чаще реализуем для клиентов. Из этого родился новый инструмент — плагин «Генератор подключаемого модуля», где уже предопределены сценарии и встроены примеры для доработок. Поэтому вам достаточно выбрать интересующий сценарий или несколько сценариев и плагин автоматически сформирует шаблон кода для ПМ. Останется только адаптировать шаблон под особенности конфигурации или бизнес-процесса.
Теперь подробнее о том, как работает плагин.
Как запустить генератор?
1) Открываем модуль в режиме «1С:Предприятие» и в меню «Настройки» — «Расширенные настройки» выбираем пункт «Системные».
2) В открывшемся окне выбираем «Использовать плагины» и нажимаем «Сохранить». Затем перезапускаем модуль.
3) В меню «Настройки» — «Расширенные настройки» выбираем пункт «Плагины».
4) В открывшемся окне нажимаем «Добавить». Затем выбираем «Генератор подключаемого модуля» и нажимаем «Загрузить».
5) После того, как кнопка обновится на «Загружен», закрываем окно «Библиотека плагинов».
Как собрать ПМ?
Представим, что нам нужно собрать ПМ, в котором будем переопределять типовое заполнение поля «грузополучатель» в электронном документе. Для этого выполним следующие действия:
1) Во вкладке «Плагины» выбираем «Генератор подключаемого модуля» и нажимаем «Настройки».
2) В разделе «Сценарии» выбираем нужный нам «Перезаполнение грузополучателя» и ставим на него флаг.
3) В разделе «Описание сценария» читаем описание и убеждаемся, что сценарий подходит.
Текст описания сценария можно открыть в отдельном окне. Для этого щелкаем правой кнопкой мыши по тексту описания сценария. В контекстном меню нажимаем «Открыть».
Некоторые сценарии объясняют, как адаптировать шаблон под конкретную задачу. Внимательно ознакомьтесь с этой информацией, это поможет быстрее и правильнее адаптировать шаблон.
4) В разделе «Текст ПМ» просматриваем текст кода и редактируем его по необходимости.
Редактировать текст ПМ также можно в Конфигураторе. Для этого следует дополнительно выполнить пункты 7-8.
Обратите внимание, что плагин автоматически:
- Подставил нужное имя обрабатываемого события. В нашем примере это «ПодготовитьЭлектронныйДокумент».
- Выбрал оптимальный режим использования события, указав, что событие должно обрабатываться именно в режиме переопределения типовой логики, а не сбора контента с нуля.
- Указал, что переопределение должно работать только для документа УПД.
- Подставил готовый метод, в котором происходит перезаполнение данных грузополучателя.
Перем ОсновнойМодуль Экспорт;
Функция ОбработатьСобытие(ИмяСобытия, Параметры) Экспорт
Если ИмяСобытия = "ПодготовитьЭлектронныйДокумент" Тогда
Возврат ПодготовитьЭлектронныйДокумент(Параметры);
КонецЕсли;
КонецФункции
// Обработчики событий подключаемого модуля
Функция ПодготовитьЭлектронныйДокумент(Параметры)
// Имя шаблона: Перезаполнение грузополучателя
Если ТипЗнч(Параметры) = Тип("Структура") И Параметры.Свойство("Результат_ИМ") Тогда
Content = Параметры.Результат.Content;
Документ1С = Параметры.Результат.Документ1С;
ВидДокументаРазвернутый = Параметры.ВидДокументаРазвернутый;
ТипКонтента_XDTO = ВидДокументаРазвернутый.ТипКонтента;
Если ВРЕГ(ТипКонтента_XDTO) = ВРЕГ("Utd820SellerContent") Тогда
УПД_ИзменитьДанныеГрузополучателя(Content, Документ1С);
КонецЕсли;
Возврат Истина;
КонецЕсли;
КонецФункции
// Вспомогательные методы с бизнес-логикой
Процедура УПД_ИзменитьДанныеГрузополучателя(Content, Документ1С)
Consignee = Content.Consignees[0];
Если НЕ ЗначениеЗаполнено(Consignee.Ссылка) Тогда
Возврат;
КонецЕсли;
Контрагент = ЗначениеИзСтрокиВнутр(Consignee.Ссылка);
Наименование = УправлениеСвойствами.ЗначениеСвойства(Контрагент, "НаименованиеГрузополучателя");
ИНН = УправлениеСвойствами.ЗначениеСвойства(Контрагент, "ИННГрузополучателя");
КПП = УправлениеСвойствами.ЗначениеСвойства(Контрагент, "КППГрузополучателя");
Если СтрДлина(ИНН) = 12 Тогда
Тип = "IndividualEntity";
Иначе
Тип = "LegalEntity";
КонецЕсли;
УстановитьЗначениеXDTO(Consignee, "Name", Наименование);
УстановитьЗначениеXDTO(Consignee, "Inn" , ИНН);
УстановитьЗначениеXDTO(Consignee, "Kpp" , КПП);
УстановитьЗначениеXDTO(Consignee, "Type", Тип);
КонецПроцедуры
// Общие функции для использования в обработчиках событий
Процедура УстановитьЗначениеXDTO(Элемент, ИмяРеквизита, ЗначениеРеквизита, ЗаписыватьПустоеЗначениеТипа = Ложь)
ЗаписыватьПустоеЗначение = (ТипЗнч(ЗначениеРеквизита) = Тип("Булево")) ИЛИ ЗаписыватьПустоеЗначениеТипа;
Если НЕ ЗначениеЗаполнено(ЗначениеРеквизита) И НЕ ЗаписыватьПустоеЗначение Тогда
Возврат;
КонецЕсли;
Если Элемент.Свойства().Получить(ИмяРеквизита) = Неопределено Тогда // у объекта XDTO отсутствует такое свойство
Возврат;
КонецЕсли;
Элемент[ИмяРеквизита] = ЗначениеРеквизита;
КонецПроцедуры
// общие функции подключаемого модуля (БСП и взаимодействие с основным модулем)
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("Наименование", "Диадок (СКБ Контур): Подключаемый модуль");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Версия", ЭДО_ВерсияAPIПодключаемогоМодуля());
ПараметрыРегистрации.Вставить("Информация", "Модуль работы с электронными первичными документами через Диадок (подключаемая часть)");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Выполнение регламентных операций подключаемого модуля Диадок", "ВыполнитьРегламентныеДействияПМ", "ВызовСерверногоМетода");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды = Неопределено) Экспорт
Если ИдентификаторКоманды = "ВыполнитьРегламентныеДействияПМ" Тогда
ВыполнитьРегламентныеДействияПМ(ПараметрыВыполненияКоманды);
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьРегламентныеДействияПМ(Параметры)
// Регламентные действия, НЕ требующие инициализации основного модуля
КонецПроцедуры
Функция ЭДО_ВерсияAPIПодключаемогоМодуля() Экспорт
Возврат 4;
КонецФункции
Процедура ЭДО_СлужебнаяИнформацияГенератораШаблона()
// Данный метод не выполняет кода и содержит только настройки построителя ПМ в момент генерации кода.
// Предназначен для облегчения анализа изменений реального кода относительно шаблона.
// ВерсияПостроителя: 0.13.1
//{ Сценарии
// Перезаполнение грузополучателя
//} Сценарии
КонецПроцедуры
5) Указываем путь к файлу ПМ и нажимаем «Компилировать ПМ»
6) Готовый файл ПМ будет расположен по пути, указанному в предыдущем пункте.
Как редактировать текст ПМ в Конфигураторе?
Следующие действия нужны, если вы не выполнили пункт 4 или хотите отредактировать готовый файл ПМ.
7) Через конфигуратор открываем обработку из «C:\ПМ.epf».
8) Просматриваем текст ПМ и редактируем по необходимости.
Мы надеемся, что плагин «Генератор подключаемого модуля» поможет вам облегчить работу с кодом. Ждем в комментариях вопросы и пожелания, какие сценарии стоит добавить.
Ознакомиться с полным перечнем сценариев можно в самом плагине.
Про работу плагина и всего модуля можно прочитать в официальной документации модуля «Универсальный» Контур.Диадока.
Готовое решение
Обмен с ЭДО в 1С: Диадок, СБИС, Честный знак, ЦРПТ
Рабочее место для работы с ЭДО из 1С: Диадок, СБИС, ЭДО Лайт (Lite), Такском, Signatura.pro, Астрал.ЭДО, ГИС МТ (Честный знак, ЦРПТ). Загрузка и отправка УПД, УКД, ТОРГ12, Акта в 1С (сохранение в файл и последующая загрузка через личный кабинет не требуется). Отправка печатных форм и файлов, подписание, отклонение, аннулирование документов.