Оглавление
- Системные требования
- Знакомство с интерфейсом
- Обзор
- Общие настройки
- Настройки условного оформления
- Прочие настройки
- Поиск в конвертации и отборы
- История, Избранное и Быстрые ПКО
- Шаблоны
- Запрос в значение
- Запрос в коллекцию
- Запрос во входящие данные 1
- Запрос во входящие данные 2
- Инициализация входящих данных
- Получение параметров объекта
- Произвольный алгоритм ПВД
- Инструменты
- Инструмент копирования
- Инструмент создания структуры объекты
- Инструмент создания соответствий
- Настройка HTTP-взаимодействия с другим ПО
- Обработчики "После сохранения правил"
- Заключение
Системные требования
- КД 2.1.8.2 + 8.3. (где разрешили в расширении общие модули)
- Инструменты Разработчика //infostart.ru/public/15126/ (необязательно, но придется немного выковыривать связанное с этой конфигурацией)
- Расширение РПО2 + модификация КД2 для клиент-серверного варианта(для файлового расширения достаточно).
Для клиент-серверного варианта необходимо сделать доработки в модулях форм элементов справочников: Конвертацияи, ПВД, ПКО, ПКС, ПКЗ, Алгоритмы, Запросы, Обработки, Параметры - в событиях ПередЗаписью и ПослеЗаписи (изменения необходимы для оповещения формы редактора о записи объектов):
Процедура ПередЗаписью(Отказ)
//*********************************
РПО2_СобытияМодуляОбъекта.ОбработчикПередЗаписьюПосле(ЭтотОбъект);
КонецПроцедуры
Процедура ПослеЗаписи()
//*********************************
РПО2_СобытияМодуляОбъекта.ОбработчикПриЗаписиПосле(ЭтотОбъект);
КонецПроцедуры
Знакомство с интерфейсом
Обзор
Удобство начинается с порядка. Порядок на рабочем месте – залог плодотворной и успешной работы. Представленный редактор правил обмена сочетает в себе практичность, эргономичность и эффективный функционал для разработки. Настраиваемый интерфейс, условное оформление, быстрый доступ к глобальным обработчикам, обработчикам правил и т.д. - эти механизмы призваны ускорить и облегчить работу.
Общие настройки
Общие настройки интуитивно понятны. Часть из них сохраняется для конвертации, часть для обработки в целом. К примеру, маленькие правила лучше просматривать, когда все объекты в одном дереве: глобальные обработчики, ПВД, алгоритмы и т.д., большие – с разбитием на вкладки; отбор ПКО из дерева ПВД я назначаю, если хочу ознакомиться с правилами или работаю с определенной их частью.
Настройки условного оформления
Настройки УО призваны выделить правила по заданным настройкам либо из макета, либо из файла. Установленный флаг «ПоразрядноеСравнение» определяет, что УО будет применяться, если все установленные проверки свойств правила выполенны успешно, при сброшенном флаге выполняются все проверки свойств.
Прочие настройки
На вкладке прочее расположены «Описание», соответствующее реквизиту «Описание» в конвертации.
Поиск в конвертации и отборы
Три режима поиска в конвертации: по имени объекта, по типу объекта(для поиска доступно только дерево ПКОПКСПКЗ), по алгоритмам объекта(есть режим поиска с помощью регулярных выражений). При поиске по алгоритмам существует возможность выбрать алгоритмы для поиска.
Отборы служат для ограничения списка правил только правилами, так или иначе связанными с выбранным правилом, а также для поиска использования выбранного ПКО.
История, Избранное и Быстрые ПКО
Список избранного служит для сохранения и последующего использования часто используемых правил. История хранит последние N объектов конвертации, которые были открыты. Панель быстрых ПКО позволяет отбирать ПКС набранных ПКО. Избранное и история восстанавливаются при открытии.
Шаблоны
Шаблоны кода необходимы для быстрого создания обработчиков правил. Список шаблон и результат(демонстрация работы) приведены ниже:
1. Запрос в значение (предполагает наличие в буфере обмена текста запроса)
ВЫБРАТЬ
Объекты.Комментарий КАК Значение
ИЗ
Справочник.Объекты КАК Объекты
ГДЕ
Объекты.Ссылка = &Ссылка
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Объекты.Комментарий КАК Значение
|ИЗ
| Справочник.Объекты КАК Объекты
|ГДЕ
|Объекты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Источник);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Значение = Выборка.Значение;
2. Запрос в коллекцию (предполагает наличие в буфере обмена текста запроса)
ВЫБРАТЬ
ЗаказКлиентаТовары.Номенклатура,
ЗаказКлиентаТовары.Содержание,
ЗаказКлиентаТовары.Количество,
ЗаказКлиентаТовары.Цена,
ЗаказКлиентаТовары.Сумма,
ЗаказКлиентаТовары.СтавкаНДС,
ЗаказКлиентаТовары.СуммаНДС,
ЗаказКлиентаТовары.СуммаСНДС
ИЗ
Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Константа.чг_ВидНоменклатурыОС
КАК чг_ВидНоменклатурыОС
ПО ЗаказКлиентаТовары.Номенклатура.ВидНоменклатуры <>
чг_ВидНоменклатурыОС.Значение
ГДЕ
ЗаказКлиентаТовары.Ссылка = &Ссылка
И ЗаказКлиентаТовары.Номенклатура.ТипНоменклатуры
В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга))
И НЕ ЗаказКлиентаТовары.Отменено
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|ЗаказКлиентаТовары.Номенклатура,
|ЗаказКлиентаТовары.Содержание,
|ЗаказКлиентаТовары.Количество,
|ЗаказКлиентаТовары.Цена,
|ЗаказКлиентаТовары.Сумма,
|ЗаказКлиентаТовары.СтавкаНДС,
|ЗаказКлиентаТовары.СуммаНДС,
|ЗаказКлиентаТовары.СуммаСНДС
|ИЗ
|Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Константа.чг_ВидНоменклатурыОС
|КАК чг_ВидНоменклатурыОС
| ПО ЗаказКлиентаТовары.Номенклатура.ВидНоменклатуры
|<> чг_ВидНоменклатурыОС.Значение
|ГДЕ
| ЗаказКлиентаТовары.Ссылка = &Ссылка
| И ЗаказКлиентаТовары.Номенклатура.ТипНоменклатуры В
|(ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга))
|И НЕ ЗаказКлиентаТовары.Отменено";
Запрос.УстановитьПараметр("Ссылка", Источник);
РезультатЗапроса = Запрос.Выполнить();
КоллекцияОбъектов = РезультатЗапроса.Выгрузить();
3. Запрос во вх. данные (ИК-КС)*(предполагает наличие в буфере обмена текста запроса)
ВЫБРАТЬ ПЕРВЫЕ 1
СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.ВидЦен КАК ТипЦен,
&ФормаОплаты КАК ФормаОплаты,
&ЭтоДоговорВзаимозачета КАК ЭтоДоговорВзаимозачета
ИЗ
Справочник.СоглашенияСКлиентами.ЭтапыГрафикаОплаты
КАК СоглашенияСКлиентамиЭтапыГрафикаОплаты
ГДЕ
СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Партнер = &Партнер
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Контрагент = &Контрагент
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Организация = &Организация
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Валюта = &ВалютаВзаиморасчетов
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.ФормаОплаты = &ФормаОплаты
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.ВариантОплаты =
ЗНАЧЕНИЕ(Перечисление.ВариантыОплатыКлиентом.КредитПослеОтгрузки)
Если ВходящиеДанные = Неопределено Тогда
ВходящиеДанные = Новый Структура;
КонецЕсли;
ВходящиеДанные.Вставить("ТипЦен");
ВходящиеДанные.Вставить("_Менеджер");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
|СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.ВидЦен КАК ТипЦен,
|СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Менеджер КАК _Менеджер,
|&ЭтоДоговорВзаимозачета КАК ЭтоДоговорВзаимозачета
|ИЗ
| Справочник.СоглашенияСКлиентами.ЭтапыГрафикаОплаты
|КАК СоглашенияСКлиентамиЭтапыГрафикаОплаты
|ГДЕ
|СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Партнер = &Партнер
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Контрагент = &Контрагент
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Организация = &Организация
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Валюта = &ВалютаВзаиморасчетов
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.ФормаОплаты = &ФормаОплаты
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.ВариантОплаты =
|ЗНАЧЕНИЕ(Перечисление.ВариантыОплатыКлиентом.КредитПослеОтгрузки)";
Запрос.УстановитьПараметр("Ссылка", Источник);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
Для каждого Ит Из РезультатЗапроса.Колонки Цикл
ВходящиеДанные.Вставить(Ит.Имя, Выборка[Ит.Имя]);
КонецЦикла;
КонецЕсли;
ИК-КС – Имя колонки – ключ структуры вх. данных
4. Запрос во вх. данные (ЗК-КС)*(предполагает наличие в буфере обмена текста запроса)
ВЫБРАТЬ ПЕРВЫЕ 1
ПартнерыКонтактнаяИнформация.Представление КАК Значение,
""Этаж"" КАК Ключ
ИЗ
Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
ГДЕ
ПартнерыКонтактнаяИнформация.Ссылка = &Ссылка
И ПартнерыКонтактнаяИнформация.Тип =
ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое)
И ПартнерыКонтактнаяИнформация.Вид = &ВидЭтаж
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ ПЕРВЫЕ 1
ПартнерыКонтактнаяИнформация.Представление,
""Подъезд""
ИЗ
Справочник.Партнеры.КонтактнаяИнформация КАК
ПартнерыКонтактнаяИнформация
ГДЕ
ПартнерыКонтактнаяИнформация.Ссылка = &Ссылка
И ПартнерыКонтактнаяИнформация.Тип =
ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое)
И ПартнерыКонтактнаяИнформация.Вид = &ВидПодъезд
Если ВходящиеДанные = Неопределено Тогда
ВходящиеДанные = Новый Структура;
КонецЕсли;
ВходящиеДанные.Вставить("Подъезд");
ВходящиеДанные.Вставить("Этаж");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| ПартнерыКонтактнаяИнформация.Представление КАК Значение,
| ""Этаж"" КАК Ключ
|ИЗ
| Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
|ГДЕ
| ПартнерыКонтактнаяИнформация.Ссылка = &Ссылка
| И ПартнерыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое)
| И ПартнерыКонтактнаяИнформация.Вид = &ВидЭтаж
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ПартнерыКонтактнаяИнформация.Представление,
| ""Подъезд""
|ИЗ
| Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
|ГДЕ
| ПартнерыКонтактнаяИнформация.Ссылка = &Ссылка
| И ПартнерыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое)
|И ПартнерыКонтактнаяИнформация.Вид = &ВидПодъезд";
Запрос.УстановитьПараметр("Ссылка", Источник);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
ВходящиеДанные.Вставить(Выборка.Ключ, Выборка.Значение);
КонецЕсли;
ЗК-КС – Значение колонки – ключ структуры вх. данных
5. Инициализация вх. данных*
ВходящиеДанные = Новый Структура("Услуги,
|Подразделение, НомерВходящегоДокумента");
ВходящиеДанные.Услуги = Новый ТаблицаЗначений;
ВходящиеДанные.Услуги.Колонки.Добавить("Номенклатура");
ВходящиеДанные.Услуги.Колонки.Добавить("Количество");
ВходящиеДанные.Услуги.Колонки.Добавить("СуммаНДС");
ВходящиеДанные.Услуги.Колонки.Добавить("Сумма");
ВходящиеДанные.Услуги.Колонки.Добавить("СтавкаНДС");
ВходящиеДанные.Услуги.Колонки.Добавить("Цена");
ВходящиеДанные.Услуги.Колонки.Добавить("Содержание");
ВходящиеДанные.Подразделение = ;
ВходящиеДанные.НомерВходящегоДокумента = ;
6. Получение параметров объекта*
Если ПараметрыОбъекта <> Неопределено Тогда
ПараметрШапки = ПараметрыОбъекта.Получить("ПараметрШапки");
Если ЗначениеЗаполнено(ПараметрШапки) Тогда
//Обработка параметра ПараметрШапки
КонецЕсли;
ПараметрВыданныеАвансыТабличнаяЧасть =
ПараметрыОбъекта.Получить("ВыданныеАвансыТабличнаяЧасть");
Если ЗначениеЗаполнено(ПараметрВыданныеАвансыТабличнаяЧасть) Тогда
Для Каждого Ит Из ПараметрВыданныеАвансыТабличнаяЧасть Цикл
Индекс = ПараметрВыданныеАвансыТабличнаяЧасть.Индекс(Ит);
СтрокаВыданныеАвансы = Объект.ВыданныеАвансы[Индекс];
Если ЗначениеЗаполнено(Ит.ПараметрТабличнойЧасти) Тогда
//Обработка заполнения строки табличной части
КонецЕсли;
Если ЗначениеЗаполнено(Ит.ПараметрТабличнойЧасти2) Тогда
//Обработка заполнения строки табличной части
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
7. Произвольный алгоритм ПВД*(предполагает наличие в буфере обмена текста запроса, учитывает параметры и поля итогов)
*- параметризованный шаблон, т.е. зависит от выбранного ПКО в дереве ПКОПКСПКЗ
Инструменты
Инструмент копирования
Инструмент позволяет копировать выбранные ПКС одного ПКО в другое ПКО с сохранением всех его настроек и обработчиков. Так на рис. ниже оранжевым выделены ПКС для копирования, в которых пользователю предлагается реквизит приемник и, если требуется, источник ввести вручную. Зеленым выделены ПКС, готовые(с найденными реквизитами приемника) для копирования.
Инструмент создания структуры объекта
Инструмент служит для создания описания(структуры или таблицы значений) фиктивных (несуществующих на стороне источника) объектов для передачи в приемник.
Инструмент создания соответствия
Создание соответствий необходимо в случаях, когда нет возможности использовать БСПшный регистр СоответствиеОбъектовИнформационныхБаз. Для данного инструмента необходим экселевский файл с колонками поиска и колонками результата. Реализовано два варианта шаблона кода: подмена объекта выгрузки и подмена идентификатора. В первом случае выгружается объект, указанный в таблице соответствий, во втором в файле выгрузки создается ссылка с подмененным идентификатором.
Публикация HTTP-сервиса "РПО2_ВзаимодействиеПК" из расширения имеет два нюанса: имя публикации "kd2" и необходимо разрешить запуск фоновых заданий в HTTP-соединении. Подключение осуществлять под тем пользователем, под которым осуществляется редактирование правил. Роли из расширения должны быть назначены этому пользователю.
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/kd2"
ib="Srvr="192.168.80.130";Ref="kd2server";"
enable="true">
<debug enable="true"
protocol="tcp"
url=""/>
<ws enable="false"
publishExtensionsByDefault="false"/>
<httpServices publishExtensionsByDefault="true"/>
<standardOdata enable="false"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
</point>
Обработка универсального обмена XML //infostart.ru/public/1099229/ сможет передавать метаданные конфигураций, получать правила обмена из КД2.
Обработчики "После сохранения правил"
После сохранения правил существует возможность выполнить ряд действий:
КОПИЯ - копирование созданного файла правил.
КОПИЯ ZIP - создание комплекта правил.
ИСТОРИЯ - создание копии файла правил, имя которого зависит от заданной периодичности.
АЛГОРИТМ 1С - произвольный код, выполнение которого возможно как в базе Приемнике или Источнике посредством СОМ-соединения, так и в КД.
Заключение
Основная идея РПО2М - вывести максимум полезной информации в рабочую видимую область и минимизировать количество действий для получения результата. Благодаря реализации этой идеи редактор упрощает разработку правил обмена.
Видео старой версии, но 70% актуально.
UPD 12/06/20
- исправлены ошибки
- добавлено возможность взаимодействия с другим ПО по HTTP
UPD 19/03/19
- добавлена проверка обновлений на ЯД
- добавлен новый шаблон "Произвольный алгоритм ПВД"
- расширены возможности инструмента "Мастер создания соответствий"
UPD 20/03/18
- интегрирован с ИР
- добавлены новые шаблоны и инструмент
- расширены возможности поиска
- переработан интерфейс
- исправлены мелкие и не очень ошибки
UPD 13/03/17
- добавлены новые возможности интерфейса
- добавлены обработчики после сохранения правил
- расширены возможности поиска
- оптимизированы алгоритмы поиска и построения дерева ПКО
- добавлены шаблоны текста обработчиков и новый инструмент - получение структуры по объекту.
UPD 01/02/16
- расширен функционал
- переработан интерфейс
- исправлены мелкие ошибки
Набор Инструментов для Разработки в КД2:
- Консоль кода перейти
- Улучшенная обработка универсального обмена перейти