Hare.ru @ Коллективный разум / Hare.ru @ Дикое место

Архив hare.ru 
Мысли, конвертированные в текст

Полезные технологии


Все статьи раздела

Конвертация данных по шагам. Практические приёмы.

Дмитрий Бардиков (сентябрь 2002)

Практические приемы переноса данных

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

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

Особняком стоят вопросы конвертации перечисления в справочник и замена значений справочника на значения перечисления.

Принципиальные ограничения

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

Обратная задача не вызывает проблем, особенно если дополнять реквизит-источник до длины реквизита-приемника (см. преобразования реквизитов). В случае возникновения такой проблемы нужно либо придумать хитрое преобразование реквизита-источника, либо "удлинить" реквизит-приемник.

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

Заполнение реквизита-приемника предопределенным значением

Это "классическая" задача, которую ставит себе практически каждый, кто осваивает "Конвертацию данных". Ничего не понятно, дали хоть бы просто присвоить значение… Такое присвоение можно сделать только для реквизитов простых типов, не агрегатных. В правиле конвертации реквизита не указывается реквизит-источник, а указывается только реквизит-приемник. Такие правила 1С называет "виртуальными". В поле "Преобразование" выбирается пункт "Задать значение", затем значение задается, и на этом всё. Выглядит в итоге так:

В реквизит "Коэффициент" справочника-приемника будет записана единица, в любом случае.

Конвертация перечисления-источника в справочник-приемник

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

В данном случае перечисление "Резервы" переходит в элементы справочника "Резервы". Синхронизация выполняется по реквизиту "Наименование", который заполняется представлением конкретного элемента перечисления-источника.

Конвертация справочника-источника в перечисление-приемник

Классический пример – справочник "Ставки НДС" переходит в перечисление "Ставки НДС" (Конвертация "Компл26->Компл40").

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

Переход справочника-источника в справочник-приемник с сохранением иерархии

Пример правил реализующих данную задачу приведен ниже. Собственно иерархию обеспечивает наличие правила, говорящего о том, что "Родитель" экземпляра объекта-источника переходит в "Родителя" объекта-приемника по тому же правилу, по которому объект-источник переходит в объект-приемник.

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

Переход подчиненного справочника-источника в подчиненный справочник-приемник с сохранением подчинения

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

Разделение справочника-источника на два и более справочников-приемников без подчинения

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

Разделение справочника-источника на два и более справочников-приемников с подчинением

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

Приведенный выше рисунок описывает правило для переноса данных по описанной схеме. Текущий элемент справочника-источника "Клиенты" переходит во "Владельца" справочника-приемника "Договоры" с синхронизацией по владельцу. Правило перехода "Клиентов" во владельцев справочника-приемника "Договоры" описывается отдельно.

Слияние" справочников-источников в одном справочнике-приемнике

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

В данном случае речь идет о переносе элементов справочника-источника "Сотрудники" в справочник-приемник "Физ. лица". При этом туда же переходят те элементы справочника-источника "Клиенты", которые относятся к физическим лицам. На приведенном выше рисунке видно, что в случае, если "Родитель" элемента-источника является пустым значением (т.е. этот элемент принадлежит верхней ступени иерархии справочника-источника), то он переходит по правилу "Группа "Сотрудники"". Это правило представлено ниже.

Смысл его достаточно очевиден: ищется элемент справочника-приемника "ФизЛица", наименование которого "Сотрудники", он должен находиться в первом уровне иерархии и является группой. В случае отсутствия такового, он будет создан. Таким образом, всем элементам справочника-источника "Сотрудники" в случае отсутствия у них родителя в справочнике-приемнике при загрузке будет присвоен родитель – группа элементов с наименованием "Сотрудники".

Упущения автора

Честно могу признаться, что не изучил всех возможностей данной конфигурации. Не переносил лично остатки по регистрам, и сталкивался, конечно, не со всеми возможными случаями в жизни. Однако надеюсь, что даже мой личный опыт поможет кому-то разобраться в использовании механизмов "Конвертации данных".

Выводы и вопросы

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

Когда мне недавно предложили написать под клиента конфигурацию с переносом информации из старой версии, я не думал о том, что опять придется выгружать все в DBF или XLS, я сразу принялся за дело и за три неполных дня абсолютно отладил перенос всех справочников. И при этом я не особенно-то и напрягался.

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

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

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

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

Партнеры:


Также может быть интересно:

Канал Россия 1 на http://spbtvonline.ru/
   
 Сайт поддерживается за счет партнеров: Интерны онлайн серия смотреть онлайн.
:::... Сайт содержит архив двух версий hare.ru Карта сайта