Редактор правил обмена КД2

Обмен - Обмен через XML

РПО-2М – мощный редактор правил обмена для КД 2. Позволяет ускорить свою разработку и ознакомление/доработку чужих правил обмена. Превосходство над встроенным редактором достигается за счет удобного функционального интерфейса, применения шаблонизации кода правил, богатого инструментария, упрощающего разработку, и интеграции с Инструментами Разработчика.

Оглавление

  1. Системные требования
  2. Знакомство с интерфейсом
    1. Обзор
    2. Общие настройки
    3. Настройки условного оформления
    4. Прочие настройки
  3. Поиск в конвертации и отборы
  4. История, Избранное и Быстрые ПКО
  5. Шаблоны
  6. Инструменты
  7. Заключение

Системные требования

  1. КД 2.1.8.2 + 8.3. (где разрешили в расширении общие модули)
  2. Инструменты Разработчика //catalog.1c-e.ru/public/15126/ (необязательно, но придется немного выковыривать связанное с этой конфигурацией)
  3. Обработка загрузки метаданных конфигурации по СОМ(необязательно) //catalog.1c-e.ru/public/76688/
  4. Расширение РПО2 + модификация КД2 для клиент-серверного варианта(для файлового расширения достаточно). Расширение требуется для оповещения формы РПО об изменениях объектов.

Для клиент-серверного варианта необходимо сделать доработки в модулях форм справочников: Конвертацияи, ПВД, ПКО, ПКС, ПКЗ, Алгоритмы, Запросы, Обработки, Параметры - в событиях ПередЗаписью и ПослеЗаписи:

Процедура ПередЗаписью(Отказ)

    //*********************************

    РПО2_СобытияМодуляОбъекта.ОбработчикПередЗаписьюПосле(ЭтотОбъект);               

КонецПроцедуры

Процедура ПослеЗаписи()  

    //*********************************

    РПО2_СобытияМодуляОбъекта.ОбработчикПриЗаписиПосле(ЭтотОбъект);          

КонецПроцедуры

Знакомство с интерфейсом

Обзор

Удобство начинается с порядка. Порядок на рабочем месте – залог плодотворной и успешной работы. Представленный редактор правил обмена сочетает в себе практичность, эргономичность   и эффективный функционал для разработки. Настраиваемый интерфейс, условное оформление, быстрый доступ к глобальным обработчикам, обработчикам правил и т.д. -  эти механизмы призваны ускорить и облегчить работу.

Общие настройки

Общие настройки интуитивно понятны. Часть из них сохраняется для конвертации, часть для обработки в целом. К примеру, маленькие правила лучше просматривать, когда все объекты в одном дереве: глобальные обработчики, ПВД, алгоритмы и т.д., большие – с разбитием на вкладки; отбор ПКО из дерева ПВД я назначаю, если хочу ознакомиться с правилами или работаю с определенных их куском.

Настройки условного оформления

Настройки УО призваны выделить правила по заданным настройкам либо из макета, либо из файла. Работу флажка «ПоразрядноеСравнение» лучше показать на примере:

- если флаг сброшен, то проверяется условие ‘111’ == ‘101’ Ложь (УО не применяется) 

- если флаг установлен, то проверяется условие ‘111’ & ‘101’ = ‘101’ Истина (УО применяется)

‘111’ – значение полей правила(им присвоены коды)

‘101’ – проверяемые значения УО

Прочие настройки

На вкладке прочее расположены «Описание», соответствующее реквизиту «Описание» в конвертации, и обработчики после сохранения правил. Есть три варианта обработчиков: КОПИЯ, ИСТОРИЯ, АЛГОРИТМ 1С. КОПИЯ – дополнительное копирование файла правил. ИСТОРИЯ – то же самое копирование, но с изменением имени файла приемника, зависящего от выбранной периодичности. АЛГОРИТМ 1С – произвольный код выполняемый в базах Источнике, Приемнике (СОМ соединение) или непосредственно в КДхе.

Поиск в конвертации и отборы

Три режима поиска в конвертации: по имени объекта, по типу объекта(для поиска доступно только дерево ПКОПКСПКЗ), по алгоритмам объекта(есть режим поиска с помощью регулярных выражений). При поиске по алгоритмам существует возможность выбрать алгоритмы для поиска.

Отборы служат для ограничения списка правил только правилами, так или иначе связанными с выбранным правилом, а также для поиска использования выбранного ПКО.

 

История, Избранное и Быстрые ПКО

Список избранного служит для сохранения и последующего использования часто используемых правил. История хранит последние N объектов конвертации, которые были открыты. Панель быстрых ПКО позволяет отбирать ПКС набранных ПКО. Избранное и история восстанавливаются при открытии.

Шаблоны

Шаблоны кода необходимы для быстрого создания обработчиков правил. Ниже приведена таблица примеров(слева исходные данные, справа результирующий текст обработчика):

Запрос в значение (предполагает наличие в буфере обмена текста запроса)

ВЫБРАТЬ
    Объекты.Комментарий КАК Значение
ИЗ
    Справочник.Объекты КАК Объекты
ГДЕ
    Объекты.Ссылка = &Ссылка

 

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|	Объекты.Комментарий КАК Значение
|ИЗ
|	Справочник.Объекты КАК Объекты
|ГДЕ
|Объекты.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Источник);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Значение = Выборка.Значение;

 

Запрос в коллекцию  (предполагает наличие в буфере обмена текста запроса)

ВЫБРАТЬ
ЗаказКлиентаТовары.Номенклатура,
ЗаказКлиентаТовары.Содержание,
ЗаказКлиентаТовары.Количество,
ЗаказКлиентаТовары.Цена,
ЗаказКлиентаТовары.Сумма,
ЗаказКлиентаТовары.СтавкаНДС,
ЗаказКлиентаТовары.СуммаНДС,
ЗаказКлиентаТовары.СуммаСНДС
ИЗ
Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ Константа.чг_ВидНоменклатурыОС
КАК чг_ВидНоменклатурыОС
     ПО ЗаказКлиентаТовары.Номенклатура.ВидНоменклатуры <>
чг_ВидНоменклатурыОС.Значение
ГДЕ
  ЗаказКлиентаТовары.Ссылка = &Ссылка
  И ЗаказКлиентаТовары.Номенклатура.ТипНоменклатуры
В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга))
      И НЕ ЗаказКлиентаТовары.Отменено

 

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|ЗаказКлиентаТовары.Номенклатура,
|ЗаказКлиентаТовары.Содержание,
|ЗаказКлиентаТовары.Количество,
|ЗаказКлиентаТовары.Цена,
|ЗаказКлиентаТовары.Сумма,
|ЗаказКлиентаТовары.СтавкаНДС,
|ЗаказКлиентаТовары.СуммаНДС,
|ЗаказКлиентаТовары.СуммаСНДС
|ИЗ
|Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|   ВНУТРЕННЕЕ СОЕДИНЕНИЕ Константа.чг_ВидНоменклатурыОС
|КАК чг_ВидНоменклатурыОС
|     ПО ЗаказКлиентаТовары.Номенклатура.ВидНоменклатуры
|<> чг_ВидНоменклатурыОС.Значение
|ГДЕ
|  ЗаказКлиентаТовары.Ссылка = &Ссылка
|  И ЗаказКлиентаТовары.Номенклатура.ТипНоменклатуры В
|(ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга))
|И НЕ ЗаказКлиентаТовары.Отменено";

Запрос.УстановитьПараметр("Ссылка", Источник);

РезультатЗапроса = Запрос.Выполнить();
КоллекцияОбъектов = РезультатЗапроса.Выгрузить();

 

Запрос во вх. данные (ИК-КС)*(предполагает наличие в буфере обмена текста запроса)

ВЫБРАТЬ ПЕРВЫЕ 1
СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.ВидЦен КАК ТипЦен,
&ФормаОплаты КАК ФормаОплаты,
&ЭтоДоговорВзаимозачета КАК ЭтоДоговорВзаимозачета
ИЗ
    Справочник.СоглашенияСКлиентами.ЭтапыГрафикаОплаты
КАК СоглашенияСКлиентамиЭтапыГрафикаОплаты
ГДЕ
СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Партнер = &Партнер
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Контрагент = &Контрагент
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Организация = &Организация
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Валюта = &ВалютаВзаиморасчетов
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.ФормаОплаты = &ФормаОплаты
И СоглашенияСКлиентамиЭтапыГрафикаОплаты.ВариантОплаты =
ЗНАЧЕНИЕ(Перечисление.ВариантыОплатыКлиентом.КредитПослеОтгрузки)

 

Если ВходящиеДанные = Неопределено Тогда
    ВходящиеДанные = Новый Структура;
КонецЕсли;

ВходящиеДанные.Вставить("ТипЦен");
ВходящиеДанные.Вставить("_Менеджер");

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
|СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.ВидЦен КАК ТипЦен,
|СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Менеджер КАК _Менеджер,
|&ЭтоДоговорВзаимозачета КАК ЭтоДоговорВзаимозачета
|ИЗ
|    Справочник.СоглашенияСКлиентами.ЭтапыГрафикаОплаты
|КАК СоглашенияСКлиентамиЭтапыГрафикаОплаты
|ГДЕ
|СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Партнер = &Партнер
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Контрагент = &Контрагент
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Организация = &Организация
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.Валюта = &ВалютаВзаиморасчетов
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.Ссылка.ФормаОплаты = &ФормаОплаты
|И СоглашенияСКлиентамиЭтапыГрафикаОплаты.ВариантОплаты =
|ЗНАЧЕНИЕ(Перечисление.ВариантыОплатыКлиентом.КредитПослеОтгрузки)";

Запрос.УстановитьПараметр("Ссылка", Источник);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
    Для каждого Ит Из РезультатЗапроса.Колонки Цикл
        ВходящиеДанные.Вставить(Ит.Имя, Выборка[Ит.Имя]);
    КонецЦикла;
КонецЕсли;

 

Запрос во вх. данные (ЗК-КС)*(предполагает наличие в буфере обмена текста запроса)

ВЫБРАТЬ ПЕРВЫЕ 1
    ПартнерыКонтактнаяИнформация.Представление КАК Значение,
    ""Этаж"" КАК Ключ
ИЗ
    Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
ГДЕ
    ПартнерыКонтактнаяИнформация.Ссылка = &Ссылка
    И ПартнерыКонтактнаяИнформация.Тип =
ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое)
    И ПартнерыКонтактнаяИнформация.Вид = &ВидЭтаж

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ ПЕРВЫЕ 1
    ПартнерыКонтактнаяИнформация.Представление,
    ""Подъезд""
ИЗ
    Справочник.Партнеры.КонтактнаяИнформация КАК
ПартнерыКонтактнаяИнформация
ГДЕ
    ПартнерыКонтактнаяИнформация.Ссылка = &Ссылка
    И ПартнерыКонтактнаяИнформация.Тип =
ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое)
    И ПартнерыКонтактнаяИнформация.Вид = &ВидПодъезд

 

Если ВходящиеДанные = Неопределено Тогда
	ВходящиеДанные = Новый Структура;
КонецЕсли;

ВходящиеДанные.Вставить("Подъезд");
ВходящиеДанные.Вставить("Этаж");

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
|	ПартнерыКонтактнаяИнформация.Представление КАК Значение,
|	""Этаж"" КАК Ключ
|ИЗ
|	Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
|ГДЕ
|	ПартнерыКонтактнаяИнформация.Ссылка = &Ссылка
|	И ПартнерыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое)
|	И ПартнерыКонтактнаяИнформация.Вид = &ВидЭтаж
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
|	ПартнерыКонтактнаяИнформация.Представление,
|	""Подъезд""
|ИЗ
|	Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
|ГДЕ
|	ПартнерыКонтактнаяИнформация.Ссылка = &Ссылка
|	И ПартнерыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Другое)
|И ПартнерыКонтактнаяИнформация.Вид = &ВидПодъезд";

Запрос.УстановитьПараметр("Ссылка", Источник);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
	ВходящиеДанные.Вставить(Выборка.Ключ, Выборка.Значение);
КонецЕсли;

 

Инициализация вх. данных*

ВходящиеДанные = Новый Структура("Услуги, 
|Подразделение, НомерВходящегоДокумента");
ВходящиеДанные.Услуги = Новый ТаблицаЗначений;
ВходящиеДанные.Услуги.Колонки.Добавить("Номенклатура");
ВходящиеДанные.Услуги.Колонки.Добавить("Количество");
ВходящиеДанные.Услуги.Колонки.Добавить("СуммаНДС");
ВходящиеДанные.Услуги.Колонки.Добавить("Сумма");
ВходящиеДанные.Услуги.Колонки.Добавить("СтавкаНДС");
ВходящиеДанные.Услуги.Колонки.Добавить("Цена");
ВходящиеДанные.Услуги.Колонки.Добавить("Содержание");
ВходящиеДанные.Подразделение           = ;
ВходящиеДанные.НомерВходящегоДокумента = ;

 

Получение параметров объекта*

Если ПараметрыОбъекта <> Неопределено Тогда

ПараметрШапки = ПараметрыОбъекта.Получить("ПараметрШапки");
Если ЗначениеЗаполнено(ПараметрШапки) Тогда
    //Обработка параметра ПараметрШапки
КонецЕсли;

ПараметрВыданныеАвансыТабличнаяЧасть =
ПараметрыОбъекта.Получить("ВыданныеАвансыТабличнаяЧасть");
Если ЗначениеЗаполнено(ПараметрВыданныеАвансыТабличнаяЧасть) Тогда
    Для Каждого Ит Из ПараметрВыданныеАвансыТабличнаяЧасть Цикл

          Индекс = ПараметрВыданныеАвансыТабличнаяЧасть.Индекс(Ит);
          СтрокаВыданныеАвансы = Объект.ВыданныеАвансы[Индекс];

          Если ЗначениеЗаполнено(Ит.ПараметрТабличнойЧасти) Тогда
               //Обработка заполнения строки табличной части
          КонецЕсли;

        Если ЗначениеЗаполнено(Ит.ПараметрТабличнойЧасти2) Тогда
               //Обработка заполнения строки табличной части
          КонецЕсли;

    КонецЦикла;
КонецЕсли;

КонецЕсли;

 

*- параметризованный шаблон, т.е. зависит от выбранного ПКО в дереве ПКОПКСПКЗ

ИК-КС – Имя колонки – ключ структуры вх. данных

ЗК-КС  – Значение колонки – ключ структуры вх. данных

Инструменты

Инструмент копирования

Инструмент позволяет копировать выбранные ПКС одного ПКО в другое ПКО с сохранением всех его настроек. Так на рис. ниже оранжевым выделены ПКС для копирования, в которых пользователю предлагается реквизит приемник и, если требуется, источник ввести вручную. Зеленым выделены ПКС, готовые(с найденными реквизитами приемника) для копирования.

 

Инструмент создания структуры объекта

Инструмент служит для создания описания(структуры или таблицы значений) фиктивных (несуществующих на стороне источника) объектов для передачи в приемник.

Инструмент создания соответствия

Создание соответствий необходимо в случаях, когда нет возможности использовать БСПшный регистр СоответствиеОбъектовИнформационныхБаз. Для данного инструмента необходим экселевский файл с колонками поиска и колонками результата.

Заключение

Основная идея РПО2М - вывести максимум полезной информации в рабочую видимую область и минимизировать количество действий для получения результата. Благодаря реализации этой идеи  редактор упрощает разработку правил обмена.

Видео старой версии, но 70% актуально.

UPD 20/03/18

- интегрирован с ИР

- добавлены новые шаблоны и инструмент

- расширены возможности поиска

- переработан интерфейс

- исправлены мелкие и не очень ошибки

UPD 13/03/17

- добавлены новые возможности интерфейса

- добавлены обработчики после сохранения правил

- расширены возможности поиска

- оптимизированы алгоритмы поиска и построения дерева ПКО

- добавлены шаблоны текста обработчиков и новый инструмент - получение структуры по объекту.

UPD 01/02/16

- расширен функционал

- переработан интерфейс

- исправлены мелкие ошибки

Скачать файлы

Наименование Файл Версия Размер
Редактор правил обмена КД2
.epf 174,83Kb
20.03.18
4
.epf 174,83Kb 4 Скачать
Раширение РПО
.cfe 39,14Kb
20.03.18
2
.cfe 39,14Kb 2 Скачать
Обозреватель ПОД (очень старый)
.epf 145,92Kb
20.03.18
62
.epf 1.1.0.0 145,92Kb 62 Скачать
Обозреватель правил обмена данными (старый)
.epf 205,03Kb
20.03.18
19
.epf 1.3.0.0 205,03Kb 19 Скачать

См. также

Комментарии
1. Иван Петров (dgolovanov) 16.09.15 15:55 Сейчас в теме
2. Василий Пупкин (Cyberhawk) 103 16.09.15 17:40 Сейчас в теме
Автор, полагаю, молодец, но в статье не хватает сценариев использования. Поясню: было бы хорошо, если бы было описано, какие конкретно задачи с помощью этого обозревателя можно решить.
3. Andrey BedaNastala (Lem0n) 65 16.09.15 20:22 Сейчас в теме
(2) Cyberhawk, позволяет быстрее ознакомиться с большими правилами обмена, увидеть, управляя глубиной поиска, все ПКО так или иначе связанные с конкретным ПВД или ПКО, т.е. см. рисунок. В итоге в поле твоего зрения попадает только то, с чем ты собираешься работать.
Прикрепленные файлы:
4. Алексей Новиков (Новиков) 289 17.09.15 11:50 Сейчас в теме
Опробую в работе. Выглядит интересно!
5. Елена Балабанова (elenika) 17.09.15 13:46 Сейчас в теме
На мой взгляд, стоит добавить быстрый переход от ПКС к его ПКО
6. Andrey BedaNastala (Lem0n) 65 18.09.15 11:47 Сейчас в теме
(5) elenika, сделал...дельное замечание, ускоряющее навигацию
7. Serg (nkp14108) 67 23.09.15 09:10 Сейчас в теме
если б еще сравнение правил!
8. Михаил Кузнецов (hotey) 37 23.09.15 10:14 Сейчас в теме
9. Александр Крынецкий (echo77) 821 03.04.17 11:28 Сейчас в теме
10. Andrey BedaNastala (Lem0n) 65 03.04.17 14:10 Сейчас в теме
(9) Начиная с 16.09.15 15:51 (дата создания этой публикации) "хорошая вещь" не актуальна. Сожалею, что ты этого еще не понял/оценил.
11. Владислав Томашевич (tomvlad) 3488 04.04.17 11:47 Сейчас в теме
(10) Восхитительное самомнение...
12. Дмитрий Жиляков (Zhilyakovdr) 85 05.04.17 15:03 Сейчас в теме
"Позволяет быстрее ознакомиться со сложными правилами обмена" - в сложных правилах обмена вы этой поделкой ничего хорошего, а самое главное нужного не увидите.
13. Andrey BedaNastala (Lem0n) 65 05.04.17 17:28 Сейчас в теме
(12)Так поведай миру, что хорошее и что плохое, нужное и ненужное.
14. Иван Пантелеев (RailMen) 744 04.11.17 13:14 Сейчас в теме
Интересная обработка, заслуживающая как минимум лайка, но я всегда придерживаюсь идеи оптимально использовать только типовые инструменты, если это конечно возможно. За последние пол года штук 12 не самых тривиальных правил обмена написал. Про один из них написал статью и опубликовал на ИСе.https://infostart.ru/public/695916/ И во всех случаях типового инструментария мне хватало.
Оставьте свое сообщение