Пример правила конвертации объектов. Пример правила конвертации объектов Если просто меняются условия сделки

Задача этого правила обмена перенести остатки по взаиморасчетам из БП 2 в УТ11.

Поэтапное создание правила обмена с помощью конфигурации "Конвертация данных"(метаданные должны быть загружены):

1) Создаем правило выгрузки объекта для этого переходим на закладку "Правила выгрузки данных", жмем добавить. В появившемся окне выбираем объект выборки у нас это будет хозрасчетный регистр. Способ выборки меняем на произвольный алгоритм.

2) Переходим к написанию самого кода т.к. в УТ нет хозрасчетного регистра то мы должны его преобразовать. Сначала нам нужен запрос который по нашим параметрам будет возвращать остатки по взаиморасчетам. В обработчике события "Перед обработкой" пишем следующий запрос:

ТекстЗапроса = " ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет,
| ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
| ЕСТЬNULL(СУММА(ХозрасчетныйОстатки.СуммаОстатокДт),0) КАК СуммаОстатокДт,
| ЕСТЬNULL(СУММА(ХозрасчетныйОстатки.СуммаОстатокКт),0) КАК СуммаОстатокКт,
| МАКСИМУМ(ХозрасчетныйОстатки.Субконто2.Дата) КАК ДатаРасчетногоДокумента,
| МАКСИМУМ(ХозрасчетныйОстатки.Субконто2.Номер) КАК НомерРасчетногоДокумента
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&НаДату, Счет = &счет,) КАК ХозрасчетныйОстатки
|ГДЕ
<> &группа и
| ХозрасчетныйОстатки.Субконто1.Родитель <> &группа1
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОстатки.Счет,
| ХозрасчетныйОстатки.Субконто1,
| ХозрасчетныйОстатки.Субконто2
|УПОРЯДОЧИТЬ ПО
| Субконто1
|АВТОУПОРЯДОЧИВАНИЕ";

В моей задача стояли ограничения на группы контрагентов по которым выгружаются взаиморасчеты.

Определяем значения переменных которые будут использоваться в дальнейшем.

НаДату = дата("20130101");
ТД = ТекущаяДата();
группа = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели");
группа1 = Справочники.Контрагенты.НайтиПоНаименованию("Возвраты от ФИЗЛИЦ");

Создаем таблицу которую в последствии будем передавать в правило конвертации значений.

ТЗ = Новый ТаблицаЗначений();
ТЗ.Колонки.Добавить("Контрагент");
ТЗ.Колонки.Добавить("Сумма");
ТЗ.Колонки.Добавить("СуммаРЕГЛ");
ТЗ.Колонки.Добавить("РасчетныйДокумент");
ТЗ.Колонки.Добавить("ДатаРасчетногоДокумента");
ТЗ.Колонки.Добавить("НомерРасчетногоДокумента");
ТЗ.Колонки.Добавить("Партнер");
ТЗ.Колонки.Добавить("ВалютаВзаиморасчетов");
ТЗ.Колонки.Добавить("ДатаПлатежа");

Устанавливаем параметры, вызываем запрос, заполняем таблицу вызываем правило конвертации.

запрос = новый запрос(ТекстЗапроса);
запрос.УстановитьПараметр("группа",группа);запрос.УстановитьПараметр("группа1",группа1);
запрос.УстановитьПараметр("НаДату",НаДату);
запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.РасчетыСПрочимиПоставщикамиИПодрядчиками);//76.05
Выборка = запрос.Выполнить().Выбрать();
ТЗ.очистить();
Пока Выборка.Следующий() Цикл
если Выборка.СуммаОстатокКТ = 0 или Выборка.СуммаОстатокКТ = "" тогда
продолжить;
конецесли;
если Выборка.СуммаОстатокКТ < 0тогда
сообщить(""+Выборка.Субконто1+" отрицательное значение "+Выборка.СуммаОстатокКТ);
конецесли;
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Контрагент = Выборка.Субконто1;
СтрокаТЗ.сумма = Выборка.СуммаОстатокКТ;//Выборка.СуммаОстатокКт;
СтрокаТЗ.суммаРегл = Выборка.СуммаОстатокКТ;//Выборка.СуммаОстатокКт;
СтрокаТЗ.ДатаРасчетногоДокумента =Выборка.ДатаРасчетногоДокумента;
СтрокаТЗ.НомерРасчетногоДокумента = Выборка.НомерРасчетногоДокумента;
СтрокаТЗ.ДатаПлатежа = ТД;
КонецЦикла;
ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("Дата", ТекущаяДата());
ИсходящиеДанные.Вставить("РасчетыСПартнерами", ТЗ);
ИсходящиеДанные.Вставить("ТипОперации", "ОстаткиЗадолженностиПередПоставщиками");
ИсходящиеДанные.Вставить("Комментарий", "Сформировано по кредиту счета 76.05");
сообщить("76.05 КРЕДИТ начало");
ВыгрузитьПоПравилу(, ИсходящиеДанные, "ВводОстатковПоВзаиморасчетам_7605Кредит");

Аналогично проделываем ту же операцию и для остальных необходимых счетов(их описание как и готовое правило имеется во вложении).

3) Переходим к созданию правил конвертации объектов, для этого открываем закладку "Правила конвертации объектов". Добавим туда новое правило с именем "ВводОстатковПоВзаиморасчетам_7605Кредит" , объект источник оставим пустым, объект приемник установим документ "Ввод остатков", на вкладке настройки уберем флаг "Искать объект приемника по внутреннему идентификатору объекта источника".

В обработчике события "Перед загрузкой" напишем следующий код:

ГенерироватьНовыйНомерИлиКодЕслиНеУказан = истина;

В обработчике события "После загрузки" напишем:

выполнить(алгоритмы.ПослеЗагрузкиВводаОстатков);

он выполнит алгоритм со следующим содержанием:

валюта = Константы.ВалютаРегламентированногоУчета.Получить();
объект.Ответственный = ПараметрыСеанса.ТекущийПользователь;
объект.организация=параметры.порганизация;
для каждого стр из объект.расчетыспартнерами цикл
Стр.РасчетныйДокумент = Справочники.ДоговорыКонтрагентов.пустаяссылка();
Стр.ВалютаВзаиморасчетов = валюта;
если ЗначениеЗаполнено(стр.контрагент.партнер) тогда
стр.партнер = стр.контрагент.партнер;
иначе
парт = Справочники.Партнеры.НайтиПоНаименованию(стр.контрагент.Наименование);
если парт <> Неопределено и парт <> Справочники.Партнеры.пустаяссылка() тогда
стр.партнер = парт;

объект2.Партнер = парт;
объект2.Записать();
иначе
выполнить(алгоритмы.ДобавитьПартнера);
конецесли;

конецесли;

конеццикла;

Этот алгоритм будет исполнен на стороне приемника(БП). Кроме переноса остатков по взаиморасчетам стоит задача переноса контрагентов, но в УТ используются партнеры поэтому после формирования документа мы проверяем все ли контрагенты и партнеры имеются в базе приемнике, если по какой то причине их нет то мы их добавляем.

Добавление контрагентов осуществит правило конвертации справочника "Контрагенты" его можно создать точно также как и предыдущее правило, но разрешить системе самой сопоставить необходимые поля.

Для партнеров был создан алгоритм который выполняется на стороне приемника.

Для того чтобы выполнить алгоритм на стороне приемника, надо в правом верхнем углу окна алгоритма(при его редактировании) проставить флаг "Используется при загрузке".

Ниже приведен код алгоритма "Добавить партнера":

нПартнер = Справочники.Партнеры.СоздатьЭлемент();
нПартнер.Наименование =стр.контрагент.наименование;
нПартнер.Комментарий = "Создан при загрузке из БП";
нПартнер.НаименованиеПолное =стр.контрагент.НаименованиеПолное;
нПартнер.Поставщик = ?(найти(стр.контрагент.ДополнительнаяИнформация,"Поставщик")>0,истина,ложь);
нПартнер.Клиент = ?(найти(стр.контрагент.ДополнительнаяИнформация,"Клиент")>0,истина,ложь);
ПрочиеОтношения = ?(найти(стр.контрагент.ДополнительнаяИнформация,"Прочее")>0,истина,ложь);
нпартнер.Записать();
стр.партнер = нпартнер.ссылка;
контрагент = Справочники.Контрагенты.НайтиПоНаименованию(стр.контрагент.Наименование);
объект2 = контрагент.ПолучитьОбъект();
объект2.Партнер = нпартнер.ссылка;
объект2.Записать();

Возвращаемся обратно к правилу конвертации объекта. Теперь нам надо установить соответствия полей источника и приемника, это можно было сделать непосредственно перед написанием кода. Для того чтобы сопоставить поля в нижней табличной части имеется кнопка вызова мастера "Синхронизация свойств". В этом мастере мы можем либо сопоставить поля, либо оставить как без источника, так и без приемника. В нашем случае все поля и ТЧ мы оставляем без источника.

После того как необходимы поля были выбраны в нижней ТЧ для каждого поля выставляем флаг в колонке "Получить из входящих данных". Этот флаг говорит о том, что система будет искать это поле во входящих данных. Важно чтобы имя поля совпадало с именем во входящих данных, иначе будет выведено сообщение о том, что поле не найдено.

Текстом описаны не все нюансы процесса.

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

Перенос данных - это одна из самых ответственных частей работы по переходу с однй конфигурации на другую.

Для того, чтобы данные были перенесены в целости и сохранности, нужно доверить эту работу профессионалам. Наша команда качественно и в срок выполнит всю работу.

Этапы переноса

Перенос данных состоит из 5 этапов. Мы постарались описать их максимально подробно и понятно.

Почему наш перенос данных лучше?

Стоимость типового переноса данных

Обслуживание новой программы

После переноса всех данных Вам может понадобиться обслуживание Вашей программы. Мы готовы Вам его предоставить!

Переход на 1С 8.2

Подробно о других этапах перехода с одной платформы на другую. Апгрейд лицензий, настройка, обучение, сопровождение. Наши специалисты готовы предоставить Вам всю необходимую помощь!

Почему мы лучше?

Заказать перенос

Наша команда

Почему наш перенос 1С лучше?

  • Прозрачность
  • Перед переносом справочников 1С 8.2 и других Ваших данных наши специалисты подробно расскажут Вам обо всех этапах работы. Доверяя свою базу нам, Вы всегда знаете, что, в каком порядке делается, и сколько Вы платите за каждый этап работ.

  • Индивидуальный подход
  • Прежде чем приступить непосредственно к переносу 1С 7.7 в 1С 8.2, наши специалисты проведут углубленный анализ Вашей базы. Велика вероятность, что в новой версии 1С уже есть все те доработки, которые Вам были нужны. В любом случае, мы порекомендуем, что еще Вам может понадобиться для комфортной работы.

  • Качество
  • Перед самым ответственным этапом перноса наши специалисты всегда осуществляют пробный перенос баз 1С, чтобы выявить возможные ошибки, повторения и потери данных. Но и после самого переноса мы обязательно проверим все для еще большей уверенности в его качестве.

  • Работа на результат
  • Работа считается выполненной только после того, как Вы убедитесь, что перенос справочников 1С 8 и других данных произведен правильно, и Вы довольны результатом. Мы не бросаем своих клиентов!

    Этап 1. Общий анализ исходной базы

    Какая работа производится:

  • получение типовой конфигурации версии аналогичной базе-источнику;
  • общий анализ изменений в структуре данных (сопоставление с типовой конфигурацией);
  • общий анализ изменений в формах и модулях конфигурации (сопоставление с типовой конфигурацией);
  • контроль наличия нетиповых счетов учета для бухгалтерских конфигураций;
  • общий контроль корректности ведения учета в базе-источнике (наличие «красных» сальдо, незакрытых периодов, невосстановленных последовательностей и т.д.);
  • обновление базы-источника до версии, требуемой типовыми правилами переноса;
  • пробный перенос данных;
  • подготовка возможных рекомендаций по подготовке базы-источника к переносу справочников 1С 8 и других данных.
  • Зачем:

  • определение возможности использования типового переноса;
  • оценка трудоемкости доработок и подготовки тех.документации для переноса (если использование типового переноса невозможно).
  • После выполнения общего анализа базы-источника может быть получено подтверждение, что данные могут быть перенесены типовыми средствами, в этом случае дальнейшая стоимость услуги переноса определяется по прейскуранту типового переноса в зависимости от конфигурации.

    Если корректный типовой перенос невозможен, то готовится предложение со стоимостью работ по доработке конфигураций, правил обмена и нетипового переноса.

    Цена: 2 000 руб

    Этап 2. Подготовка технической документации для нетипового переноса

    Какая работа производится:

  • проводится углубленный анализ имеющихся доработок типовой конфигурации базы-источника, сопоставление этих доработок с аналогичной по версии типовой конфигурацией и со свежей версией типовой конфигурации базы-приемника;
  • общение с ответственными лицами Заказчика для установления потребности в выявленных доработках, выяснения методик использования доработок, сбора пожеланий по совершенствованию доработок (при необходимости);
  • оформляется перечень имеющихся доработок типовой конфигурации базы-источника;
  • оформляется и согласовывается перечень рекомендуемых доработок типовой конфигурации базы-приемника, с учетом стандартного функционала типовой конфигурации (возможно доработку не нужно переносить, если в конфигурации-приемнике уже имеется аналогичный стандартный функционал);
  • разрабатывается и согласовывается проект технического задания на доработку конфигурации базы-приемника, доработку правил обмена, описание
    процедуры нетипового переноса (при необходимости).
  • Зачем:

  • гарантия качества и прозрачности работ по нетиповому переносу баз данных 1С;
  • точная смета затрат и продолжительность работ;
  • возможность выполнять работы по переносу с привлечением штатного программиста 1С с обеспечением требуемого уровня качества.
  • Если не имеется указанного комплекта технической документации, нетиповые переносы между конфигурациями 1С осуществляются только на почасовой основе. В этом случае невозможно заранее точно гарантировать стоимость и продолжительность работ. Однако, в этом случае возможна некоторая экономия времени и затрат на подготовку комплекта документации.

    Цена: Уточняется по итогам общего анализа базы-источника.

    Этап 3. Доработка конфигурации-приемника

    Какая работа производится:

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

  • Вы получаете последнюю версию конфигурации с требуемыми Вам изменениями;
  • Вы получаете документацию по доработкам, необходимую для дальнейшего
    обновления сервис-инженером.
  • Этап 4. Доработка правил переноса

    Какая работа производится:

  • дорабатываются стандартные правила переноса от «1С» для учета изменений в структуре данных типовой конфигурации базы-источника, а также используемых в базе-источнике нетиповых счетов учета;
  • осуществляется предварительное тестирование переноса с учетом изменений.
  • Зачем:

    Обеспечивается корректный перенос данных, которые не переносятся типовыми правилами обмена;

    Доработка правил переноса может потребоваться также в случае, если учет в базе-источнике велся некорректно с точки зрения методологии типового решения, хотя конфигурация-источник могла не содержать доработок.

    Цена: формируется на основе комплекта технической документации.

    Этап 5. Перенос данных

    Какая работа производится:

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

    Вы получаете готовую к работе новую базу данных с Вашими актуальными остатками.

    Перенос выполняется с использованием правил переноса, разработанных компанией 1С, с применением доработок, выполненных специально для Заказчика. Состав переносимых данных может отличаться для разных версий конфигураций, наши специалисты проконсультируют Вас по возможным
    особенностям переноса.

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

    Проблема миграции данных (речь сугубо о продуктах компании 1С) из одного решение в другое возникла не вчера. Компания «1С» прекрасно понимает, с какими трудностями сталкиваются разработчики во время создания миграций, поэтому всячески старается помогать инструментами.

    За время развития платформы, компания представила ряд универсальных инструментов, а также технологий, упрощающих перенос данных. Они встроены во все типовые решения и проблема миграций между идентичными конфигурациями в целом решилась. Победу лишний раз подтверждает тесная интеграция типовых решений.

    С миграциями между не типовыми решениями ситуация несколько сложней. Широкий выбор технологий позволяет разработчикам самостоятельно выбирать оптимальный с их точки зрения способ решения задачи.

    Рассмотрим некоторые из них:

    • обмен через текстовые файлы;
    • использование планов обмена;
    • и т.д.

    У каждого из них свои плюсы и минусы. Если резюмировать, то главным минусом будет – многословность. Самостоятельная реализация алгоритмов миграции чревата существенными временными затратами, а также долгим процессом отладки. Про дальнейшее сопровождение подобных решений даже говорить не хочется.

    Сложность, дороговизна сопровождения, подтолкнули компанию «1С» на создание универсального решения. Технологии, позволяющей максимально упростить разработку и поддержку миграций. В итоге идея реализовалась в виде отдельной конфигурации – «Конвертация данных».

    Конвертация данных - типовое решение, самостоятельная конфигурация. Любой пользователь, обладающий подпиской “ИТС:Проф” может совершенно бесплатно загрузить этот пакет с сайта поддержки пользователей или диска ИТС. Установка выполняется стандартным способом - как и все остальные типовые решения от 1С.

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

    Второй жирный плюс - визуальные средства. Простые миграции создаются без программирования. Да-да, без единой строчки кода! Только ради этого стоит один раз потратить время на изучение технологии, а потом использовать бесценные навыки многократно.

    Третьим плюсов я бы отметил отсутствие ограничений на дистрибуцию данных. Разработчик сам выбирает способ доставки данных в конфигурацию приемник. Из коробки доступно два варианта: выгрузка в xml файл и прямое соединение с информационной базой (COM/OLE).

    Изучаем архитектуру

    Мы уже знаем, конвертация данных способна творить чудеса, но пока не совсем понятно, в чем же выражаются технические плюсы. Первое, что необходимо усвоить - в основе любой миграции данных (конвертации) лежат правила обмена. Правила обмена - обычный xml файл с описанием структуры, в которую будут выгружаться данные из ИБ. Сервисная обработка, осуществляющая выгрузку/загрузку данных, анализирует правила обмена и на их основании выполняет выгрузку. Во время загрузки происходит обратный процесс.

    Конфигурация “КД” – своего рода визуальный конструктор, с помощью которого разработчик создает правила обмена. Выполнять выгрузку данных она не умеет. За это отвечают дополнительные внешние сервисные обработки, входящие в дистрибутив КД. Их несколько (XX в имени файла - номер версии платформы):

    • MDXXExp.epf - обработка позволяет выгружать описание структуры информационной базы в xml файл. Описание структуры загружается в КД для дальнейшего анализа и создания правил обмена.
    • V8ExchanXX.epf - осуществляет выгрузку/загрузку данных из информационной базы в соответствии с правилами обмена. В большинстве типовых конфигураций обработка присутствует из коробки (см. пункт меню “Сервис”). Обработка универсальна и не привязывается к каким-то определенным конфигурациям/правилам.

    Хорошо, теперь на основании всего вышесказанного, определим этапы разработки новой конвертации:

    1. Определение задачи. Необходимо четко понимать какие данные требуется переносить (из каких объектов конфигурации) и самое главное куда переносить.
    2. Подготовка описания структур конфигураций (Источника/Приемника) для последующей загрузки в КД. Задача решается сервисной обработкой MDXXExp.epf.
    3. Загрузка подготовленных описаний структур в ИБ.
    4. Создание правил обмена при помощи визуальных средства КД.
    5. Выполнение выгрузки/загрузки по созданным правилам конвертации данных путем использования обработки V8ExchanXX.epf.
    6. Отладка правил обмена (при необходимости).

    Простейшая конвертация

    Для демонстрации нам потребуется две развернутые конфигурации. Я решил остановиться на варианте: “Управление торговлей” 10-й редакции и небольшим самописным решением. Задача будет заключаться в переносе данных из типовой конфигурации «УТ». Для краткости назовем самописное решение “Приемник”, а управление торговлей “Источником”. Решать задачу начнем с переноса элементов справочника «Номенклатура».

    Первым делом взглянем на схему конвертации данных и перечитаем список действий, которые необходимо проделать. Затем запускаем конфигурацию “Источник” и открываем в ней сервисную обработку MD82Exp.epf.

    Интерфейс обработки не блещет изобилием настроек. Пользователю лишь требуется указать типы объектов метаданных, которые не попадут в описание структуры. В большинстве случае эти настройки изменять не приходится, т.к. особого смысла в выгрузки движений по регистрам накопления (как пример) нет.

    Движение правильней формировать во время проведения документов в приемнике. Все движения будут сделаны документом самостоятельно после переноса. Второй аргумент в защиту настроек по умолчанию - сокращение размера файла с выгрузкой.

    Некоторые документы (особенно в типовых конфигурациях) формируют движения по множеству регистров. Выгрузка всего этого хозяйства сделает результирующий XML файл чересчур большим. Это может затруднить последующую транспортировку и загрузку в базу приемник. Чем больше файл с данными, тем больше потребуется оперативной памяти для его обработки. За свое практику мне довелось столкнуться с неприлично большими файлами выгрузки. Такие файлы напрочь отказывались разбираться стандартными средствами.

    Итак, оставляем все настройки по умолчанию и делаем выгрузку описания конфигурации в файл. Аналогичную процедуру повторяем для второй базы.

    Открываем КД и в главном меню выбираем “Справочники” -> “Конфигурации” . Справочник хранит описания структур всех конфигураций, которые помогут быть использованы для создания конвертаций. Мы один раз загружаем описание конфигурации, а потом можем использовать ее многократно для создания различных конвертаций.

    В окне справочника нажмем кнопку “Добавить ” и в появившемся окне выберем файл с описанием конфигурации. Отмечаем флажок “Загрузить в новую конфигурацию” и кликаем по кнопке “Выполнить загрузку”. Аналогичные действия проделываем с описанием структуры второй конфигурации.

    Теперь все готово для создания правил обмена. В главном меню КД выбираем “Справочники” -> “Конвертации”. Добавляем новый элемент. В окне создания новой конвертации требуется указать: конфигурацию источник (выбираем УТ) и конфигурацию приемник (выбираем «Приемник»). Далее открываем вкладку “Дополнительно” и заполняем следующие поля:

    • имя файла правил обмена - под таким именем будут сохраняться созданные правила обмена. Имя файла можно менять в любое время, но выгодней задать его сейчас. В будущем это сэкономит время. Правила для демонстрационного примера я назвал: «rules-ut-to-priemnik.xml».
    • наименование - название конвертации. Название может быть абсолютно любым, я ограничился “Демо. УТ в Приемник”.

    Все, нажимаем “Ok”. Сразу же перед нами появляется окно с вопросом создать все правила автоматически. Согласие на столь заманчивое предложение даст мастеру команду автоматически проанализировать описание выбранных конфигураций и самостоятельно сгенерировать правила обмена.

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

    Рассмотрим подробней окно “Настройки правил обмена”. Интерфейс может показаться слегка запутанным - большое количество вкладок, напичканных элементами управления. На самом деле все не так сложно, к этому безумству начинаешь привыкать через несколько часов работы с приложением.

    На данном этапе нас интересуют две вкладки: “Правила конвертации объектов” и “Правила выгрузки данных”. На первой мы должны настраивать правила соответствия, т.е. сопоставлять объекты двух конфигураций. На второй же, определять возможные объекты, которые будут доступны пользователю для выгрузки.

    Во второй половине вкладки “Правила конвертации объектов” расположена дополнительная панель с двумя вкладками: “Конвертация свойств” и “Конвертация значений ”. Первая будет отбирать свойства (реквизиты) выбранного объекта, а вторая необходима для работы с предопределенными значениями (например, предопределенные элементы справочников или элементы перечисления).

    Отлично, теперь создадим правила конвертации для справочников. Выполнить это действие можно двумя вариантами: воспользоваться мастером синхронизации объектов (кнопка “”) или добавить соответствия для каждого объекта вручную.

    Для экономии места воспользуемся первым вариантом. В окне мастера снимаем флажки с группы “Документы ” (нас интересуют только справочники) и раскрываем группу “Справочники ”. Внимательно пролистываем список и смотрим названия справочников, которые можно сопоставить.

    В моем случае таких справочников три: Номенклатура, Организации и Склады. Есть еще справочник Клиенты, выполняющий ту же самую смысловую нагрузку, что и “Контрагенты ” из конфигурации “УТ ”. Правда, мастер не смог их сопоставить в силу отличных имен.

    Исправить эту недоработку мы можем самостоятельно. Находим в окне «Соответствия объектов » справочник «Клиенты », а в колонке «Источник» выбираем справочник «Контрагенты». Затем устанавливаем флажок в колонке «Тип» и нажимаем кнопку “Ok”.

    Мастер синхронизации объектов предложит автоматически создать правила конвертации свойств всех выбранных объектов. Сопоставление свойств будет происходить по именам и для нашей демонстрации этого будет вполне достаточно, соглашаемся. Следующим вопросом будет предложение создания правил выгрузки. Согласимся и на него.

    Основа для правил обмена готова. Объекты для синхронизации выбрали мы, а правила для конвертации свойств и правила выгрузки были созданы автоматом. Сохраним правила обмена в файл, затем откроем ИБ “Источник” (в моем случае это УТ) и в ней запустим сервисную обработку V8Exchan82.epf .

    Первым делом в окне обработки выбираем созданные нами правила обмена. На вопрос загрузки правил отвечаем положительно. Обработка проанализирует правила обмена и построит одноименное дерево объектов, доступных для выгрузки. Для этого дерева мы можем устанавливать всевозможные отборы или узлы обмена, по изменения которых требуется выбирать данные. Мы хотим выгрузить абсолютно все данные, поэтому в установке фильтров необходимость отсутствует.

    После завершения процесса выгрузки данных в файл переходим в ИБ “Приемник ”. В ней также открываем обработку V8Exchan82.epf , только на этот раз переходим на закладку “Загрузка данных”. Выбираем файл с данными и нажимаем кнопку “Загрузить”. Все, данные успешно перенесены.

    Задачи из реального мира

    Первый демонстрационный пример мог ввести в заблуждение. Все выглядит достаточно простым и логичным. На самом деле это не совсем так. В реальной работе возникают задачи, решить которые одними визуальными средствами (без программирования) трудно или совсем невозможно.

    Чтобы не разочароваться в технологии, я приготовил несколько реальных задач. С ними обязательно сталкиваешься при работе. Они не выглядят столь тривиальными и заставляют посмотреть на конвертацию данных под новым углом. Внимательно рассмотрите представленные примеры, и смело используйте как сниппеты при решении реальных задач.

    Задача №1. Заполняем отсутствующие реквизиты

    Предположим, нам требуется перенести из УТ справочник “Контрагенты ”. В приемнике для этого есть похожий справочник “Клиенты”. Он полностью подходит для хранения данных, но в нем есть реквизит “Организация ”, позволяющий разделять контрагентов по принадлежности к организации. По умолчанию все контрагенты должны относиться к текущей организации (ее можно получить из одноименной константы).

    Решений у задачи несколько. Мы рассмотрим вариант заполнения реквизита “Организация ” прямо в базе “Приемник ”, т.е. в момент загрузки данных. Текущая организация хранится в константе, следовательно, нет никаких преград в получении этого значения. Откроем правило конвертации объекта (далее ПКО) “Клиенты ” (двойной клик по объекту) и в мастере настройки правил перейдем до раздела “Обработчики событий”. В списке обработчиков найдем “После загрузки ”.

    Опишем код получения текущей организации с последующим присвоением реквизиту. На момент срабатывания обработчика “После загрузки”, объект будет полностью сформирован, но еще не записан в БД. Никто не запрещает нам его изменять по своему усмотрению:

    Если НЕ Объект.ЭтоГруппа Тогда Объект.Организация = Константы.ТекущаяОрганизация.Получить(); КонецЕсли;

    Перед заполнением реквизита «Организация » обязательно необходимо проверить значение реквизита «ЭтоГруппа ». Для справочника «Клиенты » установлен признак иерархичности, поэтому проверка на группу необходима. Подобным образом выполняется заполнение любых реквизитов. Обязательно прочтите справку по другим параметрам обработчика «ПослеЗагрузки ». Например, среди них есть параметр «Отказ ». Если ему присвоить значение «Истина», то объект в базу записан не будет. Таким образом, появляется возможность ограничивать объекты для записи в момент загрузки.

    Задача №2. Реквизиты в регистр сведений

    В справочнике “Контрагенты ” конфигурации УТ, есть реквизиты “Покупатель ” и “Поставщик ”. Оба реквизита имеют тип “Булево ” и служат для определения типа контрагента. В ИБ “Приемник ”, у справочника “Клиенты ” аналогичных реквизитов нет, но есть регистр сведений “ВидыКлиентов ”. Он выполняет аналогичную функцию и может хранить для одного клиента несколько признаков. Наша задача заключается в переносе значений реквизитов в отдельные записи регистра сведений.

    Одними визуальными средствами здесь, к сожалению, тоже не справиться. Начнем с малого, создадим новое ПКО для регистра сведений “ВидыКлиентов ”. В качестве источника ничего не указывайте. От автоматического создания правил выгрузки откажитесь.

    Следующим шагом сформируем правила выгрузки. Переходим на соответствующую вкладку и нажимаем кнопку “Добавить ”. В окне добавления правил выгрузки заполняем:

    • Способ выборки. Меняем на “Произвольный алгоритм”;
    • Правило конвертации. Выбираем регистр сведений “ВидыКлиентов”;
    • Код (имя) правила. Записываем как “ВыгрузкаВидовКлиентов”;

    Теперь необходимо написать код для отбора данных для выгрузки. Здесь нам поможет параметр “ВыборкаДанных ”. В него мы можем поместить коллекцию с подготовленным набором данных. Параметр “ВыборкаДанных ” может принимать различные значения - результат запроса, выборка, коллекции значений и т.д. Мы его инициализируем в виде таблицы значений с двумя колонками: клиент и тип клиента.

    Ниже приведен код обработчика событий “Перед обработкой ”. В нем выполняется инициализация параметра “ВыборкаДанных ” с последующим заполнением данными из справочника “Контрагенты ”. Здесь стоит обратить внимание на заполнение колонки “ТипКлиента ”. В “УТ” у нас признаки имеют тип “Булево”, а в получателе перечисление.

    На данном этапе мы их не можем привести к нужному типу (его же нет в УТ), поэтому пока оставим в виде строк. Этого можно и не делать, но мне сразу хочется показать, как приводить к отсутствующему типу в источнике.

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

    Сохраним правило выгрузки данных и вернемся на вкладку “Правила конвертации объектов ”. Добавим для регистра сведений “ВидыКлиентов ” правила конвертации свойств: клиент и тип клиента. Источник оставим пустым, а в обработчике событий “Перед выгрузкой” пишем:

    //Для свойства “Клиент” Значение = Источник.Клиент; //Для свойства “ТипКлиента” Если Источник.Клиент = "Покупатель" Тогда Выражение = "Перечисления.ТипыКлиентов.Покупатель" ИначеЕсли Источник.Клиент = "Поставщик" Тогда Выражение = "Перечисления.ТипыКлиентов.Поставщик"; КонецЕсли;

    В листинге выполняется заполнение реквизитов на основе произведенной выборки данных. Клиента мы передаем просто в виде ссылки, а тип клиента записываем в параметр «Выражение ». Данные этого параметра будут интерпретированы в приемнике, и при выполнении реквизит будет заполненным корректным значением из перечисления.

    Все, правила обмена готовы Рассмотренный пример получился достаточно универсальным. Подобный подход частенько применяется при переносе данных из конфигураций, созданных на платформе 7.7. Яркий тому пример – перенос периодических реквизитов.

    Задача №3. Трюки с табличными частями

    Нередко попадаются задачи, требующие разноски строк одной табличной части в несколько. Например, в исходной конфигурации услуги и товары оформляются в одной табличной части, а приемнике хранение этих сущностей разделено. Визуальными средствами задачу опять же не решить. Здесь за основу удобно брать решение второй задачи.

    Делаем правило выгрузки данных, указываем произвольный алгоритм и в обработчике “Перед выгрузкой” пишем запрос для получения данных из табличной части.

    Для экономии места я не стану приводить код (вы всегда можете обратиться к исходникам) запроса - ничего необычного в нем нет. Полученную выборку перебираем, и отсортированные результаты размещаем в уже знакомый параметр “ВыборкаДанных ”. В качестве коллекции опять же удобно использовать таблицу значений:

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

    Задача №4. Перенос данных в операцию

    Если в организации используется несколько учетных систем, то рано или поздно возникнет необходимость в миграции данных с последующим формированием проводок.

    В конфигурации “БП ” есть универсальный документ “Операция ” и он идеально подходит для формирования большего количества проводок. Вот только одна не задача - документ сделан хитро, и так просто данные в него не перенести.

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

    Задача №5. Синхронизация данных по нескольким реквизитам

    Мы уже рассмотрели несколько примеров, но до сих пор не поговорили о синхронизации объектов во время переноса. Вот представим, что нам требуется перенести контрагентов и часть из них наверняка имеется в базе приемнике. Как перенести данные и не допустить появления дублей? На этот счет КД предлагает несколько способов синхронизации переносимых объектов.

    Первый из них - по уникальному идентификатору. Многие объекты обладают уникальным идентификатором, который гарантирует уникальность в пределах таблицы. Например, в справочнике “Контрагенты ” не может быть двух элементов с одинаковыми идентификаторами. КД делает на это расчет и для всех создаваемые ПКО сразу по умолчанию включается поиск по идентификатору. Во время создания ПКО вы должны были обратить внимание на изображение лупы возле имени объекта.

    Синхронизировать по уникальному идентификатору - способ надежный, но уместен он далеко не всегда. При объединении справочников “Контрагенты ” (из нескольких разных систем) он мало, чем поможет.

    В таких случаях правильней синхронизировать объекты по нескольким критериям. Контрагентов правильней искать по ИНН, КПП, Наименованию или разбивать поиск на несколько этапов.

    Конвертация данных не ограничивает разработчика в определении критерием поиска. Рассмотрим абстрактный пример. Пусть нам требуется синхронизировать справочники “Контрагенты ” из разных информационных баз. Подготовим ПКО и в настройках правил конвертации объекта установим флажок “Продолжить поиск полям поиска, если по идентификатору объект приемник не найден ”. Этим действием мы сразу определи два критерия поиска - по уникальному идентификатору и произвольным полям.

    Поля мы вправе выбирать сами. Отметив ИНН, КПП, Наименование мы сразу укажем несколько критериев поиска. Удобно? Вполне, но опять же этого бывает мало. А что ели мы захотим изменять критерии поиска? Например, сначала ищем по связке ИНН+КПП, а если ничего не находим, то начинаем пытать счастье с наименованием.

    Подобный алгоритм реализовать вполне по силам. В обработчике события “Поля поиска ” мы можем указать до 10 критериев поиска и для каждого из них определить свой состав полей поиска:

    Если НомерВариантаПоиска = 1 тогда СтрокаИменСвойствПоиска = “ИНН, КПП”; ИначеЕсли НомерВариантаПоиска = 2 Тогда СтрокаИменСвойствПоиска = “Наименование”; КонецЕсли;

    Решений всегда несколько

    Любая задача имеет несколько решений и перенос данных между различными конфигурациями не исключение. Каждый разработчик вправе выбирать свой путь решения, но если вам постоянно приходится разрабатывать сложные миграции данных, то настоятельно рекомендую обратить внимание на конфигурацию “”. Пусть вначале придется инвестировать ресурсы (время) в обучение, но они с лихвой окупятся на первом более-менее серьезном проекте.

    На мой взгляд, компания 1С незаслуженно обходит тему применения конвертации данных. За все время существования технологии, по ней вышла всего одна книга: “1С:Предприятие 8. Конвертация данных: обмен между прикладными решениями ”. Книга достаточно старая (2008 г.), но ознакомиться с ней все же желательно.

    Знание платформ все же необходимо

    » - универсальный инструмент, но если вы планируете применять его для создания миграций данных с конфигураций, разработанных для платформы 1С:Предприятие 7.7, то вам придется потратить время на знакомство со встроенным языком. Синтаксис и идеология языка сильно отличается, поэтому придется потратить время на изучение. В остальном принцип остается тем же.

    Наверное, каждый специалист по 1С сталкивался с ситуацией необходимости перенести данные из одной информационной базы в другую. В том случае, когда конфигурации разные, приходится писать правила конвертации данных. Данные правила создаются в конфигурации 1С «Конвертация данных».

    Так же данные можно переносить при помощи . Во многих конфигурациях 1С 8.3 есть типовой функционал для настройки синхронизации данных между различными конфигурациями и бесшовная интеграция с 1С Документооборот.

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

    Скачать данную обработку можно на диске ИТС, либо по ссылкам:

    Она является универсальной и подойдёт для любой конфигурации.

    Рассмотрим пример выгрузки справочника «Номенклатура» из одной информационной базы 1С 8.3 Бухгалтерия 3.0 в другую. Обязательным условием будет отбор по родителю (группе) «Деревообработка».

    Выгрузка данных из 1С в XML

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

    Откройте обработку выгрузки и загрузки данных XML (Ctrl+O).

    Нас интересует вкладка «Выгрузка». Первым делом укажите имя файла, в который будут выгружены данные и путь для сохранения. В данном случае данные выгружаются «В файл на сервере».

    В шапке обработки настраивается период, по которому будет осуществляться отбор. Так же, для периодических регистров можно указать способ применения отбора по периоду. В случае необходимости выгрузки движений вместе с документами, устанавливается соответствующий флаг. В данном случае мы перегружаем справочник, поэтому в шапке ничего настраивать не нужно.

    Перейдем к выбору данных для выгрузки. В табличной части формы обработки отметьте флажками те объекты конфигурации, которые вам нужно перенести.

    Колонка «Выгружать при необходимости» означает, необходимо ли перегружать данный объект, если на него ссылается реквизит перегружаемого нами справочника. Например, позиция перегружаемой вами номенклатуры имеет такую единицу измерения, которой нет в базе – приемнике. Если напротив справочника с единицами измерения будет установлен флаг в колонке «Выгружать при необходимости», создастся новая позиция. В противном случае в качестве значения реквизита будет надпись «<Объект не найден>» и его уникальный идентификатор.

    В простом случае без отборов настройка перегрузки номенклатуры будет выглядеть следующим образом.

    В данном примере нужно отобрать только ту номенклатуру, которая находится в папке «Деревообработка».

    Аналогичная обработка для 8.2 позволяет в удобной форме устанавливать отборы для каждого объекта конфигурации. В 8.3, к сожалению, такого функционала нет. Одним из вариантов выхода в данной ситуации будет отбор необходимых позиций на вкладке «Дополнительные объекты для выгрузки».

    Добавить объекты здесь можно как вручную (кнопка «Добавить»), так и запросом («Добавить запросом…»). При большом их количестве предпочтительнее второй вариант.

    В данном случае запрос будет следующим. Заполните параметры, выполните запрос, проверив данные, и нажмите на кнопку «Выбрать результат».

    После того, как вы указали все необходимые объекты и дополнительные элементы для выгрузки, нажмите на кнопку «Выгрузить данные». Они попадут в XML файл, имя и путь нахождения которого указывали ранее. Результаты данной операции отобразятся в сообщениях.

    В данном примере необходимо было выгрузить только 3 позиции, но выгрузилось пять. Всё потому, что напротив справочника «Номенклатура» в колонке «Выгружать при необходимости» был установлен флаг. Вместе с нужными позициями перегрузились их родители.

    Загрузка справочника из XML

    После успешной выгрузки данных из конфигурации – источника в XML файл, откройте базу – приемник. Структура объектов и их реквизитов должны совпадать между собой. В данном случае перенос осуществляется между двумя типовыми конфигурациями 1С:Бухгалтерия 3.0.

    Откройте обработку в базе – приемнике. Данная обработка используется как для выгрузки, так и для загрузки данных. Перейдите на вкладку «Загрузить» и укажите путь к XML файлу, в который ранее были выгружены данные. После этого нажмите на кнопку «Загрузить данные».

    Результат загрузки отобразится в сообщениях. В нашем случае всё прошло успешно.

    Справочник «Номенклатура» в базе – приемнике не был заполнен. Теперь в нем пять элементов: три номенклатурных позиции и две группы.

    Текстовые