Текст
                    ж
БИБЛИОТЕКА
В.Э. Бояркин, А.И. Филатов
1С:Предприятие 8.
КОНВЕРТАЦИЯ ДАННЫХ:
обмен данными между
прикладными решениями
11^=
ПАБЛИШИИГ
[^ППТЕР

ФИРМА"!С" РЕКОМЕНДУЕТ ФИРМА"! С" ИЗУЧАТЬ ПЛАТФОРМУ «1 С: ПРЕД ПРИЯТИЕ 8» В ЦЕНТРАХ СЕРТИФИЦИРОВАННОГО ОБУЧЕНИЯ Качественное обучение по стандартам «1 С» ________ • Единые программы курсов и методические материалы, разработанные специалистами «1 С» • Сертифицированные фирмой «1 С» преподаватели • Свидетельство единого образца от фирмы «1 С» Большой выбор курсов - от вводных до углубленных Для пользователей, специалистов по внедрению и сопровождению, разработчиков • Технологическая платформа • 1 С:Бухгалтерия • 1 С:Управление производственным предприятием • 1 С:Управление торговлей • 1 С:3арплата и управление персоналом • Курсы для Украины и Казахстана, разработанные для соответствующих национальных прикладных решений Подготовка к сдаче экзаменов на сертификаты «1С:Профессионал» и «1С:Специалист» Список ЦСО в Вашем городе можно посмотреть на сайте www.1c.ru/csc
В.Э. Бояркин, А.И. Филатов 1С:Предприятие 8 Конвертация данных: обмен данными между прикладными решениями БЛИШИНГ Москва ООО «1С-Паблишинг» СЕЛИГЕР Москва Санкт-Петербург Нижний Новгород Воронеж Ростов-на-Дону Екатеринбург - Самара - Новосибирск Киев • Харьков - Минск 2008
УДК 658.012.011.56:004.42 ББК 65:29 Б15 Б15 Бояркин В. Э., Филатов А. И. 1С:Предприятие 8. Конвертация данных: обмен данными между прикладны- ми решениями. - М.: ООО «1С-Паблишинг»; СПб.: Питер, 2008. - 187 с.: ил. + 1 CD-ROM. ISBN 978-5-9677-0871-8 ISBN 978-5-388-00467-3 1С:Предприятие является универсальной системой автоматизации деятельности предприятия и может использоваться для решения различных задач управления и учета. В настоящее время разработано большое количество типовых и специализи- рованных решений на платформе 1С:Предприятия, которые могут работать в тесной интеграции с другими решениями, как на этой платформе, так и с программным обеспечением сторонних производителей. Большое значение для эффективной работы имеет возможность организации обмена между различными информационными системами. Платформа 1С:Предприятия предоставляет разнообразные инструменты для обмена данными и интеграции прикладных решений. В книге подробно рассмотрен обмен данными в формате XML, являющийся на сегодняшний день общепринятым средством представления данных. Описаны процедуры разработки правил, применение которых обеспечит перенос информа- ции из одной информационной системы в другую, в том числе и обмен данными между типовыми конфигурациями 1С:Предприятия. К книге прилагается CD, содержащий демонстрационные информационные базы с примерами правил обмена и конфигурацию 1С:Предприятие. Конвертация данных. Компьютерная верстка и препресс: Ольга Шестакова. Корректор: Елена Семененко. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Полное или частичное копирование материалов книги без письменного разрешения фирмы «1С-Паблишинг» запрещается. ISBN 978-5-9677-0871 -8 © ООО «1С-Паблишинг», 2008. © Оформление. ООО «1С-Паблишинг». 2008. ISBN 978-5-388-00467-3 © Оформление. ЗАО «Издательский дом “Питер”», 2008. Фирма «1С», 123056, Москва, а/я 64, Селезневская ул., 21. Тел.: (495) 737-92-57, факс: (495) 681-44-07, e-mail: lc@lc.ru, URL: http: www.lc.ru Издательство ООО «1С-Паблишинг», 127473, Москва, ул. Достоевского, 1/21, строение 1. Тел.: (495) 681-02-21, факс: (495) 681-44-07, e-mail: publishing@lc.ru ООО «Питер Пресс», 198206, Санкт-Петербург, Петергофское шоссе, 73, лит. А29. Подписано в печать 30.04.2008. Формат 60x84 1/16. Усл.-печ. л. 10,75. Тираж 4000 экз. Заказ Налоговая льгота - общероссийский классификатор продукции ОК 005-93, том 2; 95 3005 - литература учебная. Отпечатано с оригиналов ООО «Ю-Паблишинг». Казанский производственный комбинат программных средств 420044, Казань, ул. Ямашева, 36.
Оглавление Введение...................................................7 Глава 1. Общие принципы настройки правил...................9 Создание правил обмена между идентичными конфигурациями........................10 Глава 2. Использование правил.............................19 Глава 3. Автоматическое создание правил...................29 Глава 4. Структура правил.................................39 Глава 5. Детальное изучение правил........................53 Правило конвертации объектов............................53 Правило выгрузки данных.................................61 Правило конвертации свойств.............................62 Глава 6. Обработчики событий..............................71 Параметры...............................................72 Обработчики «Конвертации»...............................74 Обработчик «После загрузки правил обмена».............74 Обработчик «Перед выгрузкой данных»...................74 Обработчик «После выгрузки данных»....................75 Обработчик «Перед выгрузкой объекта»..................75 Обработчик «После выгрузки объекта»...................76 Обработчик «Перед конвертацией объекта»...............76 Обработчик «Перед загрузкой данных»...................77 Обработчик «После загрузки данных»....................78 Обработчик «Перед загрузкой объекта» .................78 Обработчик «После загрузки объекта»...................78 Обработчики «Правила выгрузки данных»...................79 Обработчик «Перед обработкой».........................79 Использование функции ВыгрузитьПоПравилу()........ 81 Обработчик «После обработки»..........................84 Обработчик «Перед выгрузкой»..........................84
4 1С:Предприятие 8. Конвертация данных Обработчик «После выгрузки».............................85 Обработчики «Правила конвертации объектов».................87 Обработчик «Перед выгрузкой»............................87 Обработчик «При выгрузке»...............................91 Обработчик «После выгрузки».............................92 Обработчик «Перед загрузкой»............................93 Обработчик «При загрузке»...............................94 Обработчик «После загрузки».............................95 Обработчики «Правила конвертации группы свойств»...........97 Обработчик «Перед обработкой»...........................97 Обработчик «После обработки»............................99 Обработчик «Перед выгрузкой»............................99 Обработчик «При выгрузке»..............................100 Обработчик «После выгрузки»............................101 Обработчики «Правила конвертации свойств».................102 Обработчик «Перед выгрузкой»...........................102 Обработчик «При выгрузке»..............................103 Обработчик «После выгрузки»............................106 Глава 7. Поля поиска.......................................109 Глава 8. Правила очистки данных............................113 Обработчик «Перед обработкой»..........................113 Обработчик «Перед удалением»...........................114 Обработчик «После обработки»...........................114 Глава 9. Алгоритмы и запросы...............................119 Глава 10. Типовые примеры правил. Обход проблем............123 Конвертация перечислений..................................123 Конвертация перечисления в справочник .................124 Передача предопределенных значений.....................127 Конвертация справочников..................................129 Перенос независимого справочника в подчиненный.........129 Перенос элементов справочника в отдельную группу.......132 Перенос одного справочника в два.......................133 Перенос строки в справочник............................135 Перенос иерархического справочника в неиерархический...136 Подбор реквизитов по типу значения в источнике............138 Подбор реквизитов по типу значения в приемнике.........139 Перенос периодического реквизита в регистр сведений....141 Перенос периодических реквизитов на платформе 1С:Предприятия 7.7........................143 Конвертация документов....................................145 Передача одной табличной части в две...................145
Оглавление 5 Передача двух табличных частей в одну..................146 Формирование набора движений в ПКГС........................147 Конвертация регистров сведений...............................150 Конвертация периодических регистров сведений, не подчиненных регистратору............................150 Конвертация регистров сведений, подчиненных регистратору...151 Конвертация плана счетов.................................154 Конвертация плана видов характеристик....................155 Конвертация плана видов расчета..........................159 Конвертация констант 1 С:Предприятия 7.7.................165 Конвертация бухгалтерской операции 1 (^Предприятия 7.7...171 Глава 11. Оптимизация правил...............................181 Правила выгрузки данных..................................181 Порядок правил выгрузки данных.........................181 Выбирать данные для выгрузки одним запросом.........182 Правила конвертации объектов ............................183 Использовать быстрый поиск объекта при выгрузке и загрузке.183 Не выгружать объекты свойств по ссылкам ...............183 Не запоминать выгруженные объекты......................184 Использование переменной КлючВыгружаемыхДанных.........185 Общие обработчики событий для всех объектов............185 Обработка «Универсальный обмен данными XML»..............186 Использовать оптимизированный формат для обмена данными .... 186 Загружать данные в режиме обмена.......................187 Записывать только измененные объекты...................187 Оптимизированная запись объектов.......................187 Записывать регистры наборами записей...................187 Обмен данными через СОМ ...............................187
6 1 (/Предприятие 8. Конвертация данных
Введение 1С:Предприятие 8 является универсальной системой автоматизации деятельности предприятия и может использоваться для решения различных задач управления и учета. В настоящее время разработано большое количество типовых и специализированных решений на платформе 1С:Предприятия 8, которые могут работать в тесной интеграции с другими решениями, как на этой платформе, так и с программным обеспечением сторонних производи- телей. Опыт внедрения прикладных решений показывает, что система позволя- ет решать задачи различной степени сложности - от автоматизации одного рабочего места до создания информационных систем масштаба предприятия с большим количеством удаленных рабочих мест. Большое значение в сложившейся ситуации имеет возможность орга- низации обмена между различными информационными системами. Платформа 1С:Предприятия 8 предоставляет разнообразные инструмен- ты для обмена данными и интеграции прикладных решений. Существуют разные подходы к организации обмена между различны- ми информационными системами. Одним из подходов является обмен данными в формате XML. Система 1 (^Предприятие 8 позволяет выполнять интеграцию с прикладными системами с использованием XML-документов, являющихся на сегодняшний день общепринятым средством представления данных. При этом обмен можно организо- вать при помощи правил обмена. Для выполнения обмена достаточ- но разработать правила, по которым можно переносить информацию из одной информационной системы в другую. Когда правила обмена готовы, с их помощью из информационной системы источника можно выгрузить необходимую информацию в файл, из которого, в свою очередь, эти данные можно загрузить в информационную систему приемника.
8 1С:Предприятие 8. Конвертация данных Для разработки правил обмена между различными информационными базами, функционирующими как на платформе 1С.Предприятия 7.7, так и 1С:Предприятия 8, фирмой «1С» разработана конфигурация Конверта- ция данных, редакция 2.0. Конфигурация позволяет специалисту (программисту или внедренцу) в области 1С:Предприятия 8 разрабатывать правила обмена в привычной для него среде. Конвертация данных 2.0 обладает большими возможнос- тями по созданию правил преобразования данных в процессе обмена, позволяет полностью использовать возможности встроенного языка, не требует от разработчика специфических знаний синтаксиса языка XML. В то же время для успешной и быстрой разработки новых правил обмена и редактирования существующих требуется знание основных приемов работы с конфигурацией. Авторы постарались передать свой опыт, накопленный при разработке правил обмена для типовых конфигураций. Все примеры, приведенные в книге, созданы для информационных баз, разработанных специально для демонстрации основных моментов, возникающих при настройке правил обмена.
Глава 1 Общие принципы настройки правил Конфигурация Конвертация данных 2.0 является мощным средством для организации обмена данными между информационными базами любой структуры и сложности, функционирующими как на платформе 1С:Предприятия 7.7, так и на платформе 1 (^Предприятия 8. Рассмотрим принципиальную схему обмена между информационными базами. Обмен по технологии Конвертация данных 2.0 можно разделить на две стадии: стадию подготовки правил обмена и стадию обмена данными. Схема 1. Технология подготовки правил обмена данными Рассмотрим подробнее первую стадию на примере обмена между идентичны- ми по структуре информа- ционными базами. Подготовка правил обмена является, безусловно, самым сложным и ответственным этапом. Процесс подготовки правил обмена представлен на схеме 1. Перед тем как приступить непосредственно к разра- ботке правил, необходи- мо передать в конфигура- цию Конвертация данных 2.0 информацию о структуре метаданных информаци- онных баз, участвующих в обмене. В состав конфигурации Конвертация данных 2.0 входят обработки MD81Exp.epf и MD77Exp.ert, предназначенные для формирования XML- файла, содержащего информацию о структуре метаданных.
10 1С:Предприятие 8. Конвертация данных Создание правил обмена между идентичными конфигурациями Рассмотрим процесс создания правил обмена между идентичны- ми конфигурациями на примере демонстрационной конфигурации Источник 8. Для подготовки файла, содержащего описание структуры метадан- ных конфигурации Источник 8, необходимо в режиме 1С:Предприятие запустить внешнюю обработку MD81Exp.epf, указать путь к файлу для сохранения информации о метаданных и нажать кнопку Выгрузить. Рис. 1.1. Окно выгрузки описания структуры метаданных Флажки настроек позволяют отключать выгрузку некоторых объектов метаданных для ускорения выполнения обработки и упрощения настройки правил. Так, если при переносе информации предполага- ется передавать документы из одной информационной базы в другую непроведенными, т. е. без наборов движений, то имеет смысл поставить флажок Не выгружать движения документов. Однако этого делать нельзя, если в конфигурации имеются документы, для которых установлен запрет проведения, но эти документы являются регистраторами каких- либо движений, например, документ ОперацияБух. Для выгрузки информации о структуре конфигурации на платформе 1 (^Предприятия 7.7 используется обработка MD77Exp.ert. Перед началом работы необходимо обеспечить наличие в каталоге информационной базы компонента V7plus.dll, совместимого с XML- parser 4, который находится на диске ИТС \1Clts\EXE\EXTCOMR Загрузка метаданных в информационную базу Конвертация данных 2.0 выполняется в режиме 1С:Предприятие.
Глава 1. Общие принципы настройки правил 11 Для загрузки метаданных и создания правил можно воспользоваться услугами стартового помощника. На предложение указать действие ответим: Создать новые правила обмена данными (с нуля), как показано на рис. 1.2. Рис 1.2. Окно стартового помощника В окне Создание новой настройки для обмена данными для загрузки метаданных новой конфигурации нажмем кнопку Новая. Стартовый помощник _ □ X Создание новой настройки для обмена данными Для создания настройки обмена данными необходимо указать, из какой конфигурации в какую планируется переносить данные, то есть указать, какая конфигурация будет истопником, а какая приемником при обмене Конфигурация - источник: I '• Новая"~] Конфигурация - приемник: I WIT Новая- | Дополнительная информация_______________________________________________________ 0 Возможно, среди имеющихся описаний конфигураций нет той, с которой нужно организовать обмен датыьм. В этом случае необходимо из информационней базы по лучить сгмсанме ее структуры, а затем загрузить данное огмсан« в текущую инфермациаькдо базу | .i' Подробнее... 7 Назад | Далее Рис. 1.3. Окно новой настройки обмена
12 1С:Предприятие8. Конвертация данных В появившейся форме Загрузка структуры метаданных конфигурации укажем путь к созданному ранее файлу с описанием метаданных. Рис 1.4. Окно загрузки структуры После загрузки будет создан элемент справочника Конфигурации, посмотреть состав которого можно, нажав кнопку —. Рис. 1.5. Просмотр состава элемента справочника Вся необходимая информация о структуре конфигурации хранится после загрузки в информационной базе Конвертация данных 2.0, в соответствующих справочниках. Посмотреть загруженную структуру МОЖНО, нажав кнопку Показать опкзьиеконфигурации .
Глава 1. Общие принципы настройки правил 13 Стартовый помощник - □ X Создание новой настройки для обмена данными Для создания настройки обмена данными необходимо указать, из какой конфигурации в какую планируется переносить данные, то есть указать, какая конфигурация будет источником, а какая приемником при обмене Конфигурация - источник: [источник 1-~Н I'g Нома,. I S Конфигурация: Источник Конфигурация - приемник: [ №11< - О X Действия* , IS Efe Перейти* Наименование: | Ислочшк | Основные ; Параметры затеска - Дсослнйгельно_______________ Имя конфигурации: [Источник Синоним [Источник | Комментарий. | Дс-монстрациоиая конфигурация [ Приложение. 110 Предприятие 8.0 ~~| чфи-ураций нет той, с которой нужно организовать ) из информационной базы получить описание ее ение в текущую ^нФсрмациоиную базу. |д Подробнее... вЙ Назад | Далее !». Версия: 11,0.1 Л —IIJЗагрузить описание конфигурации.. ] {Показать огоюание конфигурации... ] ОК Записать Закрыть Рис. 1.6. Просмотр структуры конфигурации В форме описания конфигурации, в его верхней части, отображаются объекты: документы, справочники, перечисления и т. д. В нижней час- ти - свойства объектов: реквизиты, табличные части, наборы движений. На закладке Значения - предопределенные значения объектов. Рис. 1.7. Форма описания конфигурации
14 1С:Г1редприятие 8. Конвертация данных Объекты, предназначенные для хранения сведений о структуре метадан- ных. Для хранения информации о структуре метаданных информа- ционных баз, участвующих в обмене, в конфигурации Конвертация данных 2.0 предназначены следующие объекты: • справочник Конфигурации; • справочник Объекты - подчинен справочнику Конфигурации. Содержит информацию о типе объекта, иерархии, нумерации, подчиненности. Все объекты сгруппированы по типам объектов; • справочник Свойства - подчинен справочнику Объекты. В справоч- нике хранится информация о реквизитах объекта, свойствах, табличных частях, наборах движений, измерениях, ресурсах. Содержит полную информацию о типе свойства; • справочник Значения - подчинен справочнику Объекты. Содержит информацию о предопределенных значениях объек тов. Все перечисленные объекты не предназначены для интерактивного редактирования и должны загружаться из XML-файла, созданного с помощью обработки MD81Exp.epf или MD77Exp.ert. Если структура информационной базы, участвующей в обмене, изменилась, то можно заново выгрузить структуру в файл и загрузить в информационную базу Конвертация данных 2.0, указав в окне загрузки структуры (рис. 1.4) Модифицировать существующую конфигурацию. После загрузки структуры демонстрационной конфигурации Источник 8 в окне Создание новой настройки для обмена данными стартового помощника выберем ее в качестве источника и приемника. Рис. 1.8. Выбраны конфигурации для обмена
Глава 1. Общие принципы настройки правил 15 После нажатия кнопки Далее в окне Задание соответствия объектов для обмена укажем Выбрать соответствие объектов из предложенных программой. Рис. 1.9. Определение режима создания новых правил В открывшейся форме Соответствие между объектами источника и приемника необходимо снять флажки у регистров сведений, режим записи которых установлен в подчинение регистратору. Рис. 110 Сопоставление объектов между источником и приемником После этого программа предложит автоматически создать правила конвертации свойств и значений, а также правила выгрузки данных.
1С:Предприятие 8. Конвертация данных 16 После создания правил обмена, несмотря на то, что большую часть работы программа выполнила самостоятельно, в открывшейся форме Настройка правил обмена рекомендуется выполнить некоторые действия. Во-первых, проверить настройку свойств созданных правил конверта- ции объектов, поскольку правила конвертации, созданные по ссылкам из других объектов, могут быть сформированы не полностью. В списке правил конвертации объектов для каждой строки выполним синхронизацию свойств объекта. Для этого нужно нажать кнопку Обработки и в появившемся меню выбрать пункт Синхронизация свойств... или нажать клавиши Alt + 1. Рис. 1.11. Выполнение синхронизации свойств объектов В открывшейся форме будут показаны правила конвертации свойств, которые создадутся после нажатия кнопки ОК. Рис. 1.12. Окно настройки правил конвертации свойств
Глава 1. Общие принципы настройки правил 17 Во-вторых, в форме Настройка правил обмена на закладке Поиск объектов в приемнике необходимо проверить настройку поиска объектов в приемнике. Рис. 1.13. Проверка настройки поиска объектов в приемнике Найдем правило конвертации объектов для плана видов расчета, откроем правило конвертации свойств ПериодДействияБазовый и на закладке Перед выгрузкой напишем: Отказ = Источник.Предопределенный; Ц Сократить правила Ji Ззрузшь пылила ^Проверке ^Изменение правил Запустить приложение * ? Q Открывать при входе Рис. 1.14. Отказ от выгрузки предопределенных элементов
18 1 С:Предприятие 8. Конвертация данных После нажатия кнопки Сохранить правила в форме Настройка правил обмена откроется форма Сохранение правил обмена. Рис. 1.15. Форма Сохранение правил обмена Если в форме сохранения установить флажок Выполнять выгрузку автоматически при открытии формы (рис. 1.15), то в дальнейшем сохране- ние правил будет происходить автоматически без ее открытия. Отменить режим автоматического сохранения можно в форме справоч- ника Пользователи. Правила обмена созданы и сохранены в файл. Теперь они могут быть использованы для выполнения обмена данными.
Глава 2 Использование правил Использование правил обмена — выгрузка данных из информацион- ной базы-источника и загрузка в информационную базу-приемник - реализуется с помощью универсальной обработки обмена. Обработка поставляется в составе дистрибутива Конвертация данных 2.0 в виде внешней обработки V8Exchan81 .epf, а также входит в состав конфигу- рации под именем УниверсальныйОбменДаннымиХМЬ. Схема 2. Технология обмена данными XML- файл описания правил обмена Источник’' ’ Внешняя обработка vaExefaoffi.epf XML- файл, содержащий выгруженные из Источника данные внешняя оврйбот» vrexchanBlaptf Как видно из схемы 2, с помощью обработ- ки, которая использует файл правил обмена, из информационной базы- источника выгружается XML-файл данных. Файл содержит уже преоб- разованную по правилам обмена, предназначенную для загрузки информацию, а также тексты обработ- чиков событий, которые должны выполняться в информационной базе- приемнике. Таким образом, при загрузке используется только один файл. Для проверки настроенных правил обмена создадим пустую информа- ционную базу с конфигурацией, аналогичной конфигурации источни- ка. То есть в режиме Конфигуратор выгрузим конфигурацию источника в файл, затем для пустой информационной базы в режиме Конфигуратор загрузим ее из файла. В результате у нас получилось две информационные базы с одинаковой конфигурацией, одна из которых заполнена данными, другая - пустая.
20 1С:Лредприятие 8. Конвертация данных Для выгрузки информации откроем информационную базу-источник в режиме 1С:Предприятие и запустим обработку V8Exchan81 .epf. Рис. 2.1. Универсальная обработка обмена данными В качестве правил укажем созданный ранее файл правил обмена. Программа предложит автоматически загрузить правила обмена. Это действие можно выполнить и позднее нажатием кнопки - перечитать правила обмена. В поле Имя файла данных указываем путь и имя файла, в который будут выгружаться данные В качестве периода выгрузки указываем период, за который будут выгружены документы, и периодические регистры сведений. В списке Правила выгрузки данных можно указать, какие именно типы объектов должны быть выгружены. Перед выгрузкой для отдельных типов объектов можно установить отбор по любому из реквизитов объекта, а с помощью флажка Отбор по периоду для всех можно указать, будет ли действовать ограничение по периоду действия на отобранные объекты.
Глава 2. Использование правил 21 Выгрузим с помощью полученных правил документы Изменение штатного расписания с установленным отбором по реквизиту табличной части Подразделение (рис. 2.2). Выгружаемые данные| Параметры выгрузки Комментарий_____________________________________________________ Период выгрузки: |02 01.2007 0:00:00 js| по |31.011,2008 23:59:59 ВЕЗ 0 Отбор по периоду для всех... Очистить отборы Узлы обмена’- Показать результат отбора •в________________ Q НачисленияСо грудникам Г~| ПриказОбУвольнении ' ПриказОПриеме______________ | | Установка Цен Номенклатуры .. ВводНачапьныхОстатковНом . Q СписаниеМатериалов □ ОказаниеУслуги ____________ Ц ЗаказПокупателя____________ ПриходнаяНакладная I ... Изменение 1U га того Расл. . р] i Документ^...] Равно Бухгалтерия Рис. 2.2. Указание ограничений для выгрузки В информационной базе-источнике имеется только один документ, соответствующий отбору. Рис. 2.3. Документ, соответствующий отбору
1С:Предприятие 8. Конвертация данных 22 Тем не менее, после нажатия кнопки Выгрузить данные програм- ма сообщает, что выгружено 6 объектов. Это связано с тем, что по ссылкам были выгружены объекты, являющиеся значениями реквизи- тов документа: элементы справочников Должности и Подразделения. ► Выгрузить данные 02.01.200712:00:01 .* Уг-’Г саяьк "Л обмен да^Аыю ль f? 0 221 Выгр^кз данных { Загрузка данных Дополнительна настройки Удацеше данных Имя Файла правил: |рлКонвертации\Ех1Н1е5\И8_И8.хт1 ® Выгрузка в Файл обмена О Подключение и выгрузка данных в ИБ приемн-к. ЕЕВШ Имя Файла даыных: [РЛКонвертации\ЕхОе5\1 .xml П Сжимать исходящий файл обмена данными Выгружаемые данные] Параметры выгрузки Коммент, Период выгрузки: 102.01.2007 0 00 00 [@[ по |31 ?01J : Очистить отборы Узлы обмена- Показать результат отбора В р] Документы {Узел обмена Поле •и ИзмененисШ... [~~~| НачисленияСотр... Н I ПриказОбУволь... ТТмп Документ_И... Равно IB.-. JНачало выгрузки: 06.03.2008 15:39:26 Окончание выгрузки: 06.03.2008 15:39:26 Выгружено объектов: 6 В Рис. 2.4. Сообщение о выгрузке объектов Загрузим данные в пустую информационную базу. Все данные для загрузки в приемник содержатся в файле, указанном в поле Имя файла данных. Загрузка в информационную базу-приемник выполняется с помощью той же универсальной обработки V8Exchan81 .epf. На закладке Загрузка данных укажем файл, содержащий данные, выгруженные из источника, а также, при необходимости, дополнитель- ные настройки для загрузки.
Глава 2. Использование правил 23 Рис. 2.5. Настройки загрузки данных Флаг Загружать данные в режиме обмена позволяет обойти проверки, выполняемые при записи объекта в приемник. При установленном флажке Использовать транзакции имеется возможность указать количество объектов, записываемых в одной транзакции. Записывать только измененные объекты - перед записью объекта в информационную базу программа определяет, был ли он изменен, и только после этого принимается решение о записи. Флажок Оптимизированная запись объектов устанавливает режим, при котором запись созданных или измененных объектов выполня- ется однократно, порциями не менее 100 объектов. Записывать регистры наборами записей - устанавливает режим записи регистров сведений наборами. При снятом флажке Задавать вопрос при автоматической загрузке данных загрузка из последнего выбранного файла выполняется автоматически, без участия пользователя при открытии обработки.
1С:Предприятие 8. Конвертация данных 24 После установки необходимых настроек загрузим информацию из полученного файла обмена, нажав кнопку Загрузить данные. Программа сообщает, что загружено шесть объектов. Откроем загруженный документ Изменение штатного расписания Мы видим, что помимо указанного документа в информационную базу приемника были загружены элементы справочников Подразделения и Должности. Действия * = .у. . УЬ LJs Перейти * Номер: }___________________________________ * од ООООГШП Администрация ЦЦ ‘‘0000001 Бухгалтерия Дета- [02.01.200712 00:01 Администрация 3| Бухгалтерия |Гл бухгалтер Прсгра.'1'Л-тгг । | Директор__________ 2,00 СправочннкДолжности :U3-:X —-Ц ^Выбрать Действия* ОК Зависеть ; Закрыт Программист Гл бухгалтер Директор Дата выгрузки данных: 07.03.200813 Период выгрузки данных: Январь 2007: в «Окончание загрузки: 07.03.2008 14:00:04 Загружено объектов: б Рис. 2.6. Загруженные объекты Дополнительные сведения были переданы из источника в приемник по ссылкам из перенесенного документа. На закладке Дополнительные настройки обработки Универсальный обмен данными в формате XML можно указать настройки, влияющие на процесс выгрузки и загрузки.
Глава 2. Использование правил 25 Рис. 2.7. Настройки выгрузки и загрузки данных Рассмотрим некоторые из них. • Флажок Режим отладки предназначен для вывода расширенных сообщений при возникновении ошибки во время выполнения обмена данными. В режиме отладки возникновение ошибки не приводит к прерыванию процесса выгрузки или загрузки. • Вывод информационных сообщений в окно сообщений - определя- ет режим, при котором пользователю выдаются сообщения после успешной выгрузки или загрузки каждого объекта. • Использовать оптимизированный формат для обмена данными - при установке флажка информация о типах свойств объектов выгружа- ется один раз и записывается в файл обмена непосредственно после правил. Это касается только тех свойств объектов, которые имеют не составной тип данных. Кроме того, при установленном флажке в файл данных не записывается значение пустых свойств. При большом объеме передаваемой информации настройка позволяет уменьшить объем файла обмена и увеличить скорость передачи данных.
26 1С:Предприятие 8. Конвертация данных • Использовать транзакции при выгрузке для планов обмена - включает режим выгрузки изменений для узла обмена в транзакциях. Позволяет указать количество объектов, выгружаемых в одной транзакции. • Выгружать объекты, на которые есть права доступа - запрещает выгрузку объектов, чтение которых не разрешено пользователю. • Автоматически удалять недопустимые символы из строк для записи в XML - перед записью в XML-файл информация проверяется на наличие недопустимых символов. Недопустимые символы удаляются. • Изменения регистрации для узлов обмена после выгрузки - позволя- ет управлять режимом регистрации изменений для узлов планов обмена. Параметры группы Протокол обмена позволяют управлять записью информационных сообщений в текстовый файл: • В поле Имя файла, протокола обмена можно указать расположе- ние и имя файла, в который будут записываться сообщения при выгрузке и загрузке через файл обмена. • Протокол загрузки (для СОМ-соединения) - предназначен для ведения файла протокола на стороне загрузки при обмене через COM-соединение. В этом случае информация, записываемая на стороне выгрузки, будет помещена в файл с именем Имя файла, протокола обмена, а на стороне загрузки - в Протокол загрузки (для СОМ-соединения). • Дописывать данные в протокол обмена - если файл протоко- ла существует, то его содержимое сохраняется. Если файл не существует, то он будет создан. • Вывод в протокол информационных сообщений - в текстовый файл будет записываться информация об успешной выгрузке или загрузке объектов, в противном случае только сообщения об ошибках. • Открывать файлы протоколов обмена после выполнения опера- ций — после завершения всех действий файл протокола обмена будет открыт программой автоматически, если обмен выполняет- ся в интерактивном режиме. На закладке Удаление данных обработки Универсальный обмен данными можно удалить объекты информационной базы.
Глава 2. Использование правил 27 Рис. 2.8. Закладка Удаление данных Однако пользоваться этой возможностью рекомендуется только в целях отладки, поскольку удаление происходит непосредственно, без проверки наличия ссылок на удаляемый объект.
28 1 С:Предприятие 8. Конвертация данных
Глава 3 Автоматическое создание правил Общие принципы обмена данными. Правила обмена данными, с помощью которых осуществляется обмен между разными информационными базами, включают в себя объекты нескольких типов. Основные объекты конвертации: Правила выгрузки данных (ПВД); Правила конвертации объектов (ПКО); Правила конвертации свойств (ПКС); Правила конвертации группы свойств (ПКГС); Правила конвертации значений (ПКЗ). Каждый из этих объектов несет определенную функциональную нагрузку. Рассмотрим, как происходит обмен в общем случае. Любые правила содержат список правил выгрузки данных. Рис. 3.1. Список правил выгрузки данных
30 1С:Предприятие 8. Конвертация данных Универсальная обработка обмена выбирает правила выгрузки, подлежа- щие выполнению, в определенном порядке и запускает на выполнение. В свою очередь, правило выгрузки данных осуществляет отбор объек- тов, которые должны быть выгружены. Причем объекты, подлежащие выгрузке, могут быть как прикладными объектами информационной базы, так и объектами, созданными искусственно, в виде каких-либо универсальных коллекций, например, таблицы значений, структуры, списка значений. Каждый из полученных таким образом объектов правило выгрузки данных передает для преобразования правилу конвертации объекта. Рис. 3.2. Форма настройки правил обмена ПКО отвечает за преобразование объекта источника в объект приемни- ка. Правило содержит информацию о типе объекта, о способах поиска объекта в приемнике и пр. Для преобразования реквизитов объекта источника в реквизиты объекта приемника правило конвертации объектов обращается к подчиненным правилам конвертации свойств, показанных в нижней части формы на рис. 3.2. Если значение реквизита, переданное в ПКС, не является значением примитивного типа, то для его конвертации ПКС может вызвать другое правило конвертации объекта.
Глава 3. Автоматическое создание правил 31 Если значение объекта, переданного в ПКО, является предопреде- ленным, то ПКО делает попытку найти соответствие для получен- ного значения источника в списке подчиненных правил конвертации значений. Рис. 3.3. Поиск соответствия для полученного значения Выгрузка заканчивается, когда все объекты, отобранные правилами выгрузки данных, обработаны, то есть успешно выгружены в файл обмена. Конфигурация Конвертация данных 2.0 предоставляет широкие возможности по автоматическому созданию правил обмена. Основным инструментом для разработки правил является форма Настройка правил обмена. Рис. 3.4. Автоматическое создание правил обмена
32 1С:Предприятие 8. Конвертация данных Кнопка Синхронизация объектов... предназначена для быстрого создания правил конвертации объектов. После ее нажатия открывается форма Соответствие между объектами источника и приемника, в которой отображается предлагаемое соответствие объектов конфигураций источника и приемника. Подбор объектов осуществляется по типу и наименованию. Для тех объектов, которые не были сопоставлены автоматически, можно указать соответствие в интерактивном режиме, выбрав подходя- щий тип объекта. Рис. 3.5. Интерактивное сопоставление объектов После нажатия кнопки ОК программа предложит автоматически создать для новых правил конвертации объектов правила конвертации свойств и значений, а также правила выгрузки данных. Рекурсивное создание правил конвертации объектов. Если объект, для которого создается правило конвертации, имеет реквизиты ссылочных типов, то для конвертации этих реквизитов будут созданы, в свою очередь, правила конвертации объектов. Создаваемые рекурсивно правила конвертации объектов имеют правила конвертации свойств
Глава 3. Автоматическое создание правил 33 только для реквизитов, по которым будет осуществляться поиск в информационной базе-приемнике. Размещение автоматически созданных правил. Для правил, созданных автоматически, будут созданы группы с наименованиями, соответству- ющими типам объектов: Документы, Справочники, Планы видов расчета. Планы видов характеристик, Планы счетов, Перечисления, Планы обмена, Регистры бухгалтерии, Регистры накопления, Регистры расчета, Регистры сведений, Бизнес-процессы. Пример. Создадим новую конвертацию. В качестве источника выберем созданный раннее элемент справочника Конфигурации - Источник. В качестве приемника - Приемник. На предложение автоматически создать все правила обмена ответим отказом. * Н Срой/ ч Ц Сохранить правила Затравить правила Проверка ^Изменение правил Конвертация:' [Источник -> Приемник Конверт. | ^Объект источник" Объект приемник Правила конвертации объект...] ft] Правила конвертации объектов [ Правила еьгрузки данных Поиск объектов в пр«м Д Синхронизация объектов... Обработки’ 'Действия ” ^Добавить Рис. 3.6. Создание новой конвертации Нажмем кнопку «йксинхронизатя объектов.... R открывшемся окне установим флажок только у документа Заказ покупателя. Нажмем кнопку ОК и ответим утвердительно на предложение создать правила конвертации свойств.
34 1 (^Предприятие 8 Конвертация данных & Настройка нранма обмена ______________ - а х Щ Сохранить сразила ^Загрузить правила Проверка Изменение правил Загустить приложение ♦ .(? '). [^Отарыаатытри входе | Конвертация- [Источник -> Приемник )• fo] | Новая коно<утацияТ| |1gj- Скогероаатькюаертаияо ] I5 Правила конвертации объектов | Правмв вьгружи данных Поиск объектов в приемнике , f^jemna очистки дднньк Апг<длнмы\3апрссы t Д ^Синхронизация объектов Обработки » Действия ~ ^Добавить Ей -Ц, *0. : ! Помощь t < й (?) ' Статусы.. Настройка .. МНННШШННМШКЯ1ЙНИННШ^ Для создаваемых правил конвертации объектов программа может автоматически создать правила конвертации свойств и значений Создать правила автоматически? Рис. 3 7. Сообщение о создании правил конвертации свойств Посмотрим, какие правила будут созданы автоматически. Объект источник Объект приемник Алгоритм п Правила конвертации объектов Jfa Документы I- ЗаказПокупателя ДокумемтСсылка.ЗаказПокупателя Д оку мемтСсы л ка. Зака ‘ П скупате ля ! » ОказаниеУ слуги Д оку менгЕсы л ка. ОказаниеУ слуги ДокументСсытжаОказаниеУслуги 1Н Стравсм-рки =-‘-" Контрагенты СправочникСсыткаКонтрагенты СправочникСсылка Контрагенты •• Номенклатура СправочникСсылкаНоменк сатура Сграво'НикСсылка Номенклатура эциястЭстеП [Конвертация значений__________________________________________________________________________________________________ <$чСт#«р<хтзациясвойств.. Действия» ^Добавить ка _С‘‘ Г,Помощь Q I ОМСК Источник Получи... Приемник Правило конверта Т ип источника ЗаказыПокупателей п ЗаказыПокупателей Набор движений регистра накопления 3 Актменостъ п Активность Булево 3 ВидДвиженчя п ВидДвижения 1 Заказ п Заказ ЗаказПокупателя ДокументСсылка ЗаказПокупателя 3 Клиент п Клиент Контрагенты СправочникСсылка Контрагенты 3 Количество п Количество Число (15.3] 3 Номенклатура п Номенклатура Номенклатура СгрввочникСсылк.аН оменк лагура 1_ Период п Период Дата и время 3 Регистратор п Регистратор ДокументСсылкаЗаказПокупагеля ДокументСсылка ОказаниеУслуги 3 Сумма п Сумма Число (15.2] Рис. 3.8. Правила, созданные автоматически При создании правил конвертации свойств для подчиненного докумен- ту регистра Заказы покупателей программа обнаружила ссылки на реквизиты других типов, для которых ранее не было создано правил
Глава 3. Автоматическое создание правил 35 конвертации: справочник-ссылка Контрагенты, справочник-ссылка Номенклатура, документ-ссылка Оказание услуги. Для этих объектов были созданы правила только с настроенными правилами конверта- ции свойств для реквизитов, по которым выполняется поиск объектов: для документа Оказание услуги - Дата и Номер; для справочников - Код, Наименование, Родитель, ЭтоГруппа. Подменю Обработки предоставляет несколько различных вариантов автоматического создания правил обмена: • Автоматически создать все возможные правила обмена - после нажатия на кнопку будут созданы все правила конвертации для объектов источника и приемника с совпадающими именами и одинаковым типом. Для всех свойств, реквизитов, реквизитов табличных частей и наборов движений объектов с совпадающим именем, т. е. без учета типа реквизита, будут созданы правила конвертации свойств. • Автоматически создать правила конвертации свойств и значе- ний - после нажатия на кнопку для текущего правила конвертации объекта будут созданы все правила конвертации свойств и значений в соответствии с совпадениями имен реквизитов, табличных частей, наборов движений, предопределенных значений. • Синхронизация свойств... - после нажатия на кнопку откроется форма Настройка правил конвертации свойств. Рис. 3-9. Форма настройки правил конвертации свойств
36 1С:Предприятие 8. Конвертация данных Программа предлагает возможные варианты для создания правил конвертации свойств. По умолчанию отображаются только ненастроен- ные свойства объектов, однако по кнопке Все можно отобразить и уже созданные правила. Кнопка Не показывать наборы движений позволя- ет убрать с экрана наборы движений документов. В этом случае для них не будут созданы правила конвертации. Для тех свойств, которые программа не смогла сопоставить самостоятельно, можно указать соответствие интерактивно. Такой способ создания правил конвертации свойств является типовым при настройке обмена между неидентичными по структуре информаци- онными базами, поэтому для вызова пункта меню назначено сочетание клавиш Alt + 1. Синхронизация значений... - после нажатия на кнопку открыва- ется форма Настройка правил конвертации значений. В форме по умолчанию выводятся только несопоставленные значения. Для тех значений, которые программа не смогла сопоставить самосто- ятельно, можно указать соответствие интерактивно. Рис. 3.10. Форма настройки правил конвертации значений Такой способ создания правил конвертации значений является типовым при настройке обмена, поэтому для вызова пункта меню назначено сочетание клавиш Alt + 2. При настройке правил конвертации значений для планов счетов полезно вывести в форму синонимы значений, поскольку в нем содержится код счета. Однако синонимы значений заполняются только после загрузки метаданных из файла. Если загружались правила обмена и метаданные конфигураций не обновлялись, то синонимы не будут заполнены.
Глава 3. Автоматическое создание правил 37 Настройка правил конвертации значений (Основной) _ □ X Й? |5Р ГЦ Вге[ ppawwKj hz- !--и- ч^Т Источник______________ Общехозяйственные?1... О сновноеПроизводство ПриобретениеОС________ РасчетыСПоставщика... Т овары Приемник____________' ОбщехозяйственмыеР. О сновноеПроизводство ПриобретениеОС РасчетыСПоставщика... Т овары С11ноним11сточника Синони i! 1риег 26 20 08 60 41 20 08 £0 41 Настройка списка □ X Колонки I Прочее р Правило КЗ К« <✓ Источник </ Приемник 0 Т ип источника П.Т ип приемника @ СинонимИсточника [Z СмнонимПриемника г- Колонка---------- Положение. | Новая колонка Изменение размера- [Изменять ——_ В У ОК 1 [ Отмена [ Применить [ Справка Рис. 3.11. Дополнительная информация при сопоставлении значений Групповое создание правил конвертации свойств и значений... позволяет автоматически синхронизировать свойства и значения для выбранных правил конвертации объектов. Создание правил выгрузки... — после нажатия на кнопку открывается форма, в которой для существующих правил конвертации объектов предлагается создать отсутствующие правила выгрузки данных. Правила конвертации объектов, для которых уже созданы правила выгрузки данных, выделены цветом и не отмечены флажком. Рис 3.12. Форма создания правил выгрузки данных
38 1С:Предприятие 8. Конвертация данных
Глава 4 Структура правил Для хранения информации о настроенных правилах обмена в конфигу- рации Конвертация данных 2.0 предназначены объекты: • справочник Конвертации; • справочник Правила конвертации объектов; • справочник Правила конвертации свойств; • справочник Правила конвертации значений; • справочник Правила выгрузки данных. Справочник Конвертации - каждый элемент справочника имеетреквизи- ты Источник и Приемник, которые ссылаются на справочник Конфигура- ции. Таким образом, в настройках конвертации прежде всего определя- ется, между какими конфигурациями осуществляется обмен. Рис. 4.1. Реквизиты конвертации
40 1С:Предприятие 8 Конвертация данных Справочник Правила конвертации объектов (ПКО) подчинен справочни- ку Конвертации. Основное назначение правил конвертации объектов - сопоставление объектов источника объектам приемника определенного типа. Например, правило, изображенное на рис. 4.2, предназначено для конвертации элемента справочника Внеоборотные активы в элемент справочника Номенклатура. Для задания соответствия в качестве объекта-источника выбран объект, подчиненный конфигурации источника, а в качестве приемника — конфигурации приемника. Рис. 4.2. Реквизиты правила конвертации объектов В качестве источника данных может выступать как прикладной объект конфигурации источника, так и произвольные данные. Таким образом, основными реквизитами правила конвертации объектов являются реквизиты Объект-источник и Объект-приемник, ссылающиеся на элементы справочника Объекты конфигураций источника и приемника соответственно. Для удобства правила конвертации можно объединять в группы. Справочник Правила конвертации свойств (ПКС) подчинен справочнику Правила конвертации объектов.
Глава 4. Структура правил 41 Правила конвертации свойств предназначены для сопоставления реквизитов объекта-источника реквизитам объекта-приемника. Рис. 4.3. Реквизиты правила конвертации свойств В качестве источника данных может выступать свойство объекта- источника или произвольные данные. Таким образом, основны- ми реквизитами правила конвертации свойств являются реквизи- ты Свойство-источник и Свойство-приемник, ссылающиеся на элементы справочника Свойства объектов источника и приемни- ка соответственно. Если свойство-приемник имеет ссылочный (агрегатный) тип, то для него можно указать правило конвертации объектов. Например, при конвер сации реквизита Покупатель документа Расходная накладная указывается правило конвертации для объектов типа справочник Контрагенты. Если правило конвертации объектов для какого-то свойства не указано, например, когда свойство-источник имеет составной тип, то в процессе выгрузки данных для этого свойства будет предпринята попытка автоматического подбора правила конвертации в соответствии с типом значения свойства-источника. Справочник Правила конвертации свойств является иерархическим. Группы ИКС сокращенно будем называть ПКГС- Правила конвертации группы свойств. В группы, как правило, объединяются ПКС табличных частей и наборов движений.
42 1С:Предприятие 8. Конвертация данных Рис. 4.4. Группы правил конвертации свойств Разработчик правил обмена может создавать произвольные ПКГС для задания всем ПКС, входящим в группу, общих настроек. Е2 Настройка правил обмена _ □ X Ц Сохранить правила ,Д| Загрузить правила ; Проверка Изменение правил Запустить приложение - , ? Открывать при входе Конвертация' [Источник -> Приемник _ LldSl Новая конвертация"??] [~Ьг Скопировать конвертацию j Правила конвертации объек... [ Праеила выручки данных . Поиск объектов в приемнике Правила очистки данных АлгоритмыХЗатросы t Д ^Синхронизация объектов. Обработки- Действия- ^Добавить $ i‘.Помощь Объект источ-мк Имя В-1'1 {Нрменклагцре} ОбЬьТГГ Родитель ПометкаЦда Л/ Номенклатура ? ЬдиницыЙемерен1 i f' Д <74 Синхронизация свойств .[Источник ЭтоГрупла Рис. 4.5. Настройки правил конвертации группы свойств
Глава 4. Структура правил 43 Справочник Правила конвертации значений (ПКЗ) подчинен справочни- ку Правила конвертации объектов. Правила конвертации значений предназначены для конвертации предопределенных значений объектов: справочников, перечисле- ний, планов видов характеристик, планов счетов, планов видов расчета и т. п. Каждое правило конвертации значений определяет соответствие значения объекта-источника определенному значению объекта- приемника. Рис. 4.6. Настройка правил конвертации значений Основными реквизитами правила конвертации значений являются реквизиты Источник и Приемник, ссылающиеся на элементы справочни- ка Значения объектов источника и приемника. Правила выгрузки данных (ПВД). Любые правила обмена должны содержать правила выгрузки данных, поскольку именно эти правила определяют, какая именно информация должна быть выгружена. Правила выгрузки данных вызываются в порядке, определенном реквизитом правила Порядок выполнения.
44 1С:Предприятие 8. Конвертация данных Каждое правило выгрузки данных определяет перечень объектов источника, подлежащих выгрузке, и передает эти объекты правилу конвертации объектов. Информация о ПВД хранится в конфигурации в справочнике Правила выгрузки данных, который подчинен справочнику Конвертации. Для удобства правила можно объединять в группы. Например, можно создать группы Справочники и Документы. Заметим, что именно правила выгрузки данных отображаются в обработ- ке Универсальная выгрузка данных в виде иерархического списка. Выгружаемые данные I Параметры вьгрузки Комментарий Период выгрузки: 101.01.2007 ОДО: 00' |Й| по [ 31.01.2008 23:59:59 Д |... j И Отбор по периоду для в... (5? Очистить отборы ’ Узлы обмена * | Показать результат отбора Правила выручки данных_________ Ш-|у] Справочники____________ д--р| Планы счетов___________ . L- П Основной______________ g-jg Планы видов расчета_____ -р7| Начисления Ё- [^] Планы видов характеристик I И Виды субконто____________ Ё-0 Документы____________________________j Щ р] Регистры сведений___________________1 Ё [j/j Документы ввода остатков 1 Рис. 4.7. Иерархический список правил выгрузки данных Перед выгрузкой пользователь может установить флажки у правил, по которым необходимо выгружать информацию. Наиболее типичным использованием правила выгрузки данных является автоматическая стандартная выборка объектов определен- ного типа и указание правила конвертации объектов, в соответствии с которым будет осуществляться конвертация объекта-источника в объект-приемник. Связь между правилами различных типов. В общем случае правило выгрузки данных определяет перечень объектов источника, которые должны быть выгружены, и ПКО, по которому каждый из этих объектов должен быть сконвертирован в объект приемника. Правило конвертации объекта определяет, каким образом должен быть преобразован объект источника в объект приемника. Рассмотрим процесс обмена на примере переноса справочника Склады. Для переноса справочника предназначено ПВД со стандартной выгрузкой данных.
Глава 4 Структура правил 45 Рис. 4.8. Реквизиты правил выгрузки данных Правило выгрузки выбирает все элементы объекта выборки, т. е. спра- вочника Склады. Затем передает каждый из этих элементов по очереди в правило конвертации объектов, указанное в реквизите Правило конвертации, т. е. в ПКО Склады. Рис. 4.9. Правила конвертации свойств Справочник имеет предопределенный элемент - склад Основной.
46 1 (^Предприятие 8. Конвертация данных Рис. 4.10. Предопределенный элемент справочника Для этого элемента настроено правило конвертации значения (рис. 4.11). Если переданное в ПКО Склады значение объекта является предопреде- ленным, то правило конвертации объектов ищет для него соответствие в подчиненных правилах конвертации значений. Рис. 4.11. Правила конвертации значений Если подходящее правило будет найдено, то в файл обмена записыва- ется значение приемника. Затем для каждого правила конвертации свойств происходит выгрузка реквизитов. Например, значения реквизитов элемента справочника Код, Наименова- ние, ПометкаУдаления будут преобразованы по правилам конвертации свойств (рис. 4.9).
Глава 4. Структура правил 47 В результате в файл обмена будет помещен текст для предопределен- ного элемента: «Объект Нпп="1" Тип="СправочникСсылка. Склады" ИмяПравила="Склады"> «Ссылка Нпп="1"» «Свойство Имя="{ИмяПредопределенногоЭлемента}"> «Значение>Основной«/Значение> «/Свойство» «Свойство Имя="{УникальныйИдентификатор}"> «Значение»?£7872еД-08<17-4£1с-ЬДЗс-05334£591ГОе«/Значение> «/Свойство> «Свойство Имя="Код"» «Значение>000000001 «/Значение» «/Свойство» </Ссылка> «Свойство Имя="Наименование"» «Значение>0сновной«/3начение> «/Свойство «Свойство Ймя="ПометкаУдаления"/» «/Объект» А для второго, непредопределенного элемента справочника, будет помещен текст: «Объект Нпп="2" Тип="СправочникСсылка.Склады" ИмяПравила="Склады"> «Ссылка Нпп="2"> «Свойство Имя="{УникальныйИдентификатор}"> «Значение»79200с04-2е04-11<1с-82а2-000<18845Ьс91</Значение> «/Свойство «Свойство Имя="Код"> «Значение>000000002 «/Значение» «/Свойство» «/Ссылка» «Свойство Имя="Наименование"> «Значение»Розничный</Значение» «/Свойство» «Свойство Имя="ПометкаУдаления”/» «/Объект» Как видим, в состав выгруженного объекта входит элемент под названи- ем Ссылка, в который вошли те свойства объекта, по которым он будет идентифицироваться в информационной базе-приемнике. XML-текст первого объекта имеет свойство Имя предопределенного элемента: {ИмяПредопределенногоЭлемента}. При загрузке будет сделана попытка найти предопределенный элемент с таким именем. В случае если объект не найден, будет сделана попытка найти объект по внутреннему идентификатору, свойство - {УникальныйИдентификатор}. Если и по нему поиск окончится неудачей, будет осуществлен поиск по реквизитам поиска (в настройках правила должно быть указано
48 1 С:Предприятие 8. Конвертация данных Продолжить поиск по полям поиска). Если объект не найден, то будет создан новый, после чего заполнятся все указанные в свойствах реквизиты объекта. Рассмотрим перенос справочника, имеющего реквизит ссылочного типа. Имеется ПВД Физические лица. Правило выгрузки данных: Физические лица Действия » ' 1 ® ® Информация по обработчикам.. [СправочникСсылка.ФизическнеЛица | Стандартная выборка Объект выборки: Способ выборки: Правило конвертации: [физическиеЛица________ П Выбирать данные для выгрузки одним запросом Основная | Дополнительно j_________ Код (имя) правила: | ФизическиеЛица I Перед обработкой I Перед выгрузкой g i После выгрузки р: После обработки Рис. 4.12. Правило выгрузки данных Физические лица Правило выгрузки данных должно выбрать все элементы справочни- ка Физические лица и передать каждый элемент в ПКО, указанное в реквизите Правило конвертации, т. е. ПКО Физические лица. Имя Объект источник Объект приемник {§! СправочникСсылка. Должности Л ' " ФизическиеЛица СправочникСсылка ФизическиеЛица ? СправочникСсылка ФизическиеЛица i fe 1ЙЙ-(Прочее} — — — й Конвертация свойств Г) | Котеергация значений_____________________________________________________________________________ f Д Синхронизация свойств... ! Действия ” ^Добавить fe Д;|¥]А1.1 а Т-.Помощь I Q I Отключить Поиск Источник Получ.. Приемник Правило конвер.. Т ил приемника м Наименование п Наименование Строка (П 50] □ п ДатаРождения п ДатаРождения Дата □ п Код п Код Строка (Ф9) □ п Пол п Пол Пол П еречислениеСсы лка. П о л «* □ п ПометкаУдаления п ПометкаУдаления Булево □ Т рудовая Деятельно... п Трудовая Деятель. Т абличная часть в Рис. 4.13. Правила конвертации свойств Физические лица Если какой-то реквизит объекта является реквизитом ссылочного типа (документ, элемент справочника, перечисление и пр.), то для его конвертации ПКС передает полученное значение свойства другому ПКО в качестве объекта-источника. Реквизит справочника Пол будет передан в качестве источника правилу конвертации объектов Пол.
Глава 4 Структура правил 49 Й Йй Перечисления ' — Пол Перечне лениеСсылка Пол энвертация свойств ] Конвертация значений П |___________________________________________ t Д Синхронизация значений... | Действия ▼ ^Источник ДУГенскин " [Мужской ^Добавить ____________________Приемник ____________________Женский Мужской Рис. 4 14 Правила конвертации значений Пол Рассмотрим более сложный пример создания элемента справочника Организации из значений констант. В конфигурации информационной базы-источника справочник Организации отсутствует, конфигурация предназначена для ведения учета в одной организации. Вся информация об организации содержит- ся в константах: НазваниеОрганизации, ИНН, КПП, ПрефиксНумерации. В конфигурации приемника имеется справочник Организации с реквизи- тами: Наименование, НаименованиеПолное, ИНН, КПП, Префикс. В форме Настройка правил обмена создадим новое ПКО, нажав кноп- ку Добавить. В качестве реквизита Объект-приемник укажем Спра- вочникСсылка.Организации. Реквизит Объект-источник оставим незапол- ненным. S Правило конвертации объектов (ПКО): Новый “ Действия» Ьг S’ Перейти * I (?] j Информация по обработчикам Объект - источник | Объект - приемник: | СправочникСсылка. Организации Имя правила: |Организации Обработчики событий [ Настройки ; Дополнительно ___________________________ | Перед выгрузкой" i При выгрузке После выгрузки ♦ Перед загрузкой ; При загрузке Паглс 'ssrrttw'Tj Рис. 4.15. Создание нового правила конвертации объектов Нажмем кнопку Синхронизация свойств... (клавиши Alt + 1) и установим флажки у свойств: Наименование, Наименование Полное, ИНН, КПП, Префикс.
50 1С:Предприятие 8. Конвертация данных Рис. 4.16. Выбор свойств Поскольку источник у ПКО пустой, значения, передаваемые в реквизи- ты справочника, зададим в обработчиках ПКС Перед выгрузкой как значения констант источника. | Сгравсм-жСсыгка Организации Организации Н 1И Перечисления нация свойств Г) | Конвертация значт-й :______________________________________________________________________________________________________________ | Ош рсгмзациясвойств Действия’ ^Добавить bi ’S -0L [^]^1 J3 ^Помощь | Q X Откгжтигь IKS Источник Получтт Приемник Пра Тип ист Типгри-мгмка AjTOpnrM перед выгрузкой свойства □ и ‘V п Наименование Строка(П50) Значение - Константы НазваниеОрганизацми.ПолучитьО, □ п п Наименоесгч® Полное Строка (Неогр) Значение = Константы.Назван*0рганизации.Пслучцгь(). □ м У п ИНН Строка(П12) Значение = Константы. И НН. По лучить)); □ и -у п КПП Строка[ПЭ] Значение = Константы. КПП. По лучить)). □ □ □ Префикс Строка (ПЗ) Значение = Константы ПреФИКсН;^л=рацни ГюлуигьЦ. Рис. 4.17. Правила конвертации свойств Установив поиск по ключевым реквизитам, мы получим ПКО, которое будет формировать в приемнике один и тот же элемент справочника Организации независимо от переданного в правило значения источника. Однако для того чтобы система знала, что объект уже был выгружен, всегда будем передавать в него одно и то же значение. Создадим правило выгрузки для ПКО. Для этого в форме Настройка правил обмена нажмем на кнопку S».*, в появившемся меню выберем Правила выгрузки данных. Укажем способ выборки Произвольный алгоритм и в качестве алгоритма в обработчике Перед обработкой напишем: ВыгрузитьПоПравилу(1,„,"Организации”); В дальнейшем, обращаясь к ПКО Организации, будем передавать в это правило значение 1. Рассмотрим, как можно с помощью одного ПВД перенести один справоч- ник в два других, связанных между собой регистром сведений.
Глава 4. Структура правил 51 В конфигурации-источнике имеется справочник Подразделения. В конфигурации-приемнике: • справочник Подразделения; • справочник Подразделения организации, подчиненный справочни- ку Организации; • регистр сведений Соответствие подразделений и подразделе- ний организаций с реквизитами: Подразделение, Подразделение организации и Организация. Создадим три ПКО: Подразделения. " Подразделения | СгравочникСсылка. П одразделения | СправочникСсылка П сдразде/ свойств [”) | Конвертация знамений I________________________________________________________________ Синхронизация свойств... | Действия* । «^Добавить i Помощь Q ’ чить Поиск Источник Получ... Приемник Правило конвертации Тип и... Тип приемн... Аг й Код п Код Стр... Число (9.0) п Наиме... п Наименование Строк... Строка (П 40] п Помет... п ПометкаУдаления Булево Булево □ Родите... □ Родитель Подразделения Спра... Справочник... Рис. 4.18. Справочник Подразделения Подразделения организаций. Подразделения!] рганизаций ^СправочникСсылка.Подразделения |СправочникСсылка.ПодразделенияОрган... | действ (’’) | Конвертация знамен.# \________________________________________________________________________ Синхронизация свойств.. Действия- Добавить .• Й i\ Помощь I нить Поиск Источник Получи.. Приемник Правило конвер. . Т ип источника Т ил приемника Алгоритм перед в м Код п Код Строка (Ф9) Число (3.0) п Наименование п Наименование Строка[П40] Строка [H4Gj п ПометкаУдаления п ПометкаУдаления Булево Булево п Родитель п Родитель Справочн икСсылк... Справочнике.. р| □ Владелец Организации Справочни... Значение = 1; Рис. 4.19. Справочник Подразделения организаций Соответствие подразделений и подразделений организаций. СоогветствиеПодразделенийИПодра...| Справочник Ссылка Подразделения | РегистрСведенийЗапись СоответствиеПо... .ия свойств П [Конвертация значений_________________________________________ _________________________________________ Синхронизация свойств... Действия-' ^^обавить Ш । I® Помощь | Q .1 глючить Поиск Источник Получ.. Приемник Правило конвертации Т ил и... Тип приемн... Алгоритм перед выгруз п St. ... п Организация Организации Справочник. Значение = 1; п п Подразделение Подразделения Справочник... Значение = Источник. □ St п П одразделениеО рганиз... П сдразде ленияОрганизаций Справочник... Значение = Источник; Рис. 4.20. Справочник Соответствие подразделений и подразделений организации
52 1С:Предприятие 8. Конвертация данных Создадим одно ПВД, в котором объектом выборки будет справочник Подразделения, способ выборки - Стандартная, а правило конверта- ции - Соответствие подразделений и подразделении организаций. В результате созданное ПВД будет передавать выбранные элементы справочника Подразделения в ПКО Соответствие подразделений и подразделений организаций, которое, в свою очередь, через ПКС Подразделения и Подразделения организаций будет передавать их в соответствующие ПКО. Таким образом, при создании записи регистра сведений элементы справочников будут созданы по ссылкам.
Глава 5 Детальное изучение правил Подробно рассмотрим основные настройки правил, влияющие на процесс обмена данными. Правило конвертации объектов Детальное изучение правил обмена начнем с ПКО, как одного из наи- более важных. Откроем форму элемента справочника ПКО. На закладке Настройки имеется ряд флажков, влияющих на поведение правила на этапе выгрузки и загрузки. Рис. 5.1. Настройки загрузки и выгрузки данных
54 1С:Предприятие 8. Конвертация данных • Искать объект приемника по внутреннему идентификатору объекта- источника. Если флажок установлен, то при загрузке выполняет- ся попытка найти элемент по уникальному идентификатору. Если такой объект не будет найден, то при создании новому объекту будет установлен уникальный идентификатор объекта источника. Только для платформы 1С:Предприятия 8. Для рассмотренного ранее примера конвертации справочника Склады проанализируем варианты повторной загрузки с установленным поиском по внутреннему идентификатору и без него. Откроем в информационной базе-приемнике загруженный ранее справочник Склады. Изменим код и наименование непредопределен- ного элемента. *, Справочник Склады - □ X Действия- -g 1g «g, 'Д - Т ?J [аименование‘ - А [Основной Розничный «^000000001 М000000002 Рис. 5.2. Изменение кода и наименования элемента Если в ПКО Склады установлен поиск по внутреннему идентифика- тору, то при повторной загрузке элемент справочника будет найден, измененные реквизиты будут восстановлены. Рис. 5.3. Результат поиска по внутреннему идентификатору Если же поиск по внутреннему идентификатору не установлен, то при повторной загрузке будет сделана безуспешная попытка найти элемент справочника по коду, и будет создан новый элемент.
Глава 5. Детальное изучение правил 55 Рис. 5 4. Новый элемент справочника • Продолжить поиск по полям поиска, если по идентификатору объект приемник не найден. Если по уникальному идентификатору объект не найден, то поиск будет продолжен по полям, для которых установлен флажок Поиск. Устанавливать флажок имеет смысл только в том случае, если установлен поиск по внутреннему идентификатору. Только для платформы 1С:Предприятия 8. Рассмотрим еще раз пример со справочником Склады (рис. 5.3). Сделаем загрузку складов с установленной настройкой Продолжить поиск по полям поиска. Тогда по уникальному идентификатору будет найден элемент с кодом 33, поскольку ранее он был загружен с установленным флажком Искать объект приемника по внутреннему идентификатору. Реквизиты этого элемента будут изменены. Рис. 5.5. Результат загрузки данных Если же перед загрузкой удалить элемент с кодом 33 (пометить на удаление и сделать удаление помеченных объектов), то при загрузке будет найден элемент с кодом 000000002. • Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их. Если в информацион- ной базе-приемнике объект существует, то при загрузке он будет найден и не будет изменен. Это необходимо в тех случаях, когда объекты выгружаются неоднократно и в промежутках между
56 1 С:Предприятие 8. Конвертация данных выгрузками могут изменяться в приемнике. Установка флажка позволяет сохранить изменения, сделанные в информационной базе-приемнике между загрузками. В правиле конвертации объекта Склады установим флажки настроек. Правило конвертации объектов (ПКО): Склады Действия* 151 Перейти* [J Информация по йбрабстчи! Объект - источник. |СправочникСсылка. Склады ___________________ Объект - приемник: | Справочник Ссылка. Склады Имя правила: | Склады ___________________________ Обработчики событий | Настройки [ Дополнительно Загрузка данным 0 Искать объект приемника по внутреннему идентификатору объекта ис 0 Продолжить поиск по полям поиска, если по идентификатору объек 0 Не замещать существующие объекты в приемнике при загрузке, а то. | ] Не создавать новый объект в приемнике, если он НЕ найден I j Автоматически генерировать номер или код, если он не задан Выгрузка данных П Не выгружать объекты свойств источника по ссылкам 0 Не запоминать выгруженные объекты | | Использовать быстрый поиск объекта при выгрузке и загрузке Рис. 5.6. Настройки правила конвертации объекта Склады В приемнике удалим все элементы справочника Склады, кроме предопределенного. Выполним выгрузку и загрузку, после чего изменим загруженный элемент. Рис. 5.7. Изменение загруженного элемента Если заново выполнить загрузку, то элемент справочника с кодом 2 изменен не будет.
Глава 5. Детальное изучение правил 57 • Не создавать новый объект в приемнике, если он НЕ найден. Устанавливает режим, при котором выполняется только поиск объекта в приемнике, новый объект не создается. Только для платформы 1С:Г1редприятия 8. Настроим правило конвертации объекта Склады так, как показано на рис. 5.8. Рис. 5.8. Настройка правила конвертации объекта Склады Создадим в источни- ке документ Оказание услуги, в котором в ка- честве склада укажем новый, заведомо отсутс- твующий в приемнике склад Новый магазин. Рис 5.9. Документ Оказание услуги
58 1С:Предприятие 8. Конвертация данных При переносе этого документа в приемнике будет создан документ с пустым складом. Рис. 5.10. Документ Оказание услуги с пустым складом • Автоматически генерировать номер или код, если он не задан. Если номер или код объекта не определен, то при загрузке он будет сгенерирован по правилам, определенным для этого типа объекта в информационной базе-приемнике. Только для платформы 1С:Предприятия 8. Настройку можно использовать в случаях, когда в приемник загружа- ется объект, отсутствующий в источнике. Пример — создание элемента справочника Организации. Также данную настройку можно использовать при загрузке объектов нескольких различных типов в один. Например, справочники Внеоборотные активы и Номенклатура источника загружаются в один справочник Номенклатура. Для того чтобы не нарушилась уникаль- ность нумерации, код справочника выгружать из источника не следует. Его можно сформировать непосредственно в приемнике. • Не выгружать объекты свойств источника по ссылкам. Позволя- ет увеличить скорость обмена. При установленном флажке не происходит выгрузка объектов по ссылкам для ПКО. В файл об- мена помещаются только ссылки на объекты. Для использова- ния этой возможности необходимо предусмотреть выгрузку всех объектов, на которые ссылается выгружаемый объект. Если мы выгружаем какой-то объект, имеющий реквизиты ссылочных
Глава 5. Детальное изучение правил 59 типов, то программа сделает попытку найти ссылки на значения реквизитов выгружаемого объекта. Если поиск окончится неудачей, значения объектов будут созданы, но заполнены у них будут только реквизиты поиска. Установим в ПКО Приходная накладная флажок Не выгружать объекты свойств источника по ссылкам. Выгрузим из источника документ с заведомо отсутствующим в приемнике контрагентом. Для этого создадим нового поставщика. S Приходная накладная Приходная накладная Ц...:37 _ П X Действия * Jr . IIS Qj • Перейти * j (? j Номер: [ЦБОООООООСП | Дата: 110.03.20081G |в| Контрагент: | ООО "Оптовик" |‘“|х| Склад: | Основной О * Справочник Контрагенты _ П X ^Выбрать Действия- =;'М -^1 VJ fci ” Рис. 5.11. Создадим нового поставщика Выгрузим из источника только документ Приходная накладная. После загрузки в приемнике будет создан элемент справочника Контрагенты, У которого будет заполнена только часть реквизитов.
60 1 (/Предприятие 8. Конвертация данных В Приходная«акладная: Прижодная накладная Ц...:35 м П X Действия * J ; Ш £4 ' iB* Перейти - j !ч?) larepHErf ” |ЕЙ Кс-лич.. |Ксз- Шена Сумма ю.ооо|1 ооо| 100,00|l ООО,.. [Шланг резиновый Рис. 5.12. Элемент справочника Контрагенты Посмотрев правило конвертации объекта Контрагенты, убедимся, что заполнены только реквизиты с установленным флажком Поиск. Если же в ПКО Приходная накладная не стоит флажок Не выгружать объекты свойств источника по ссылкам, контрагент будет загружен в приемник полностью. • Не запоминать выгруженные объекты. В процессе выгрузки програм- ма запоминает все объекты, которые были выгружены по правилу. Если какой-то объект уже был выгружен ранее именно этим правилом конвертации объектов, то повторно он не выгружается, а в файл обмена помещается только ссылка на объект. Установ- ка флажка позволяет не запоминать выгруженные объекты. Это имеет смысл, если заведомо известно, что каждый объект будет выгружаться только один раз, например, документы ввода остатков.
Глава 5. Детальное изучение правил 61 Использовать быстрый поиск объекта при выгрузке и загрузке. Установ- ка флажка оказывает влияние на процесс обмена данными только в том случае, если во время выгрузки данных используется режим Использовать оптимизированный формат обмена данными. Тогда в файл обмена при повторной выгрузке одного и того же объекта помещается не полная ссылка на объект с перечнем реквизитов поиска, а только его глобальный порядковый номер. При загрузке программа запоминает ссылку на такие объекты и не производит повторный поиск. В-йй {Контрагенты} {j- “ Контрагенты : ; ™ ДоговорыКонтрагентоБ i ...... КонтактныеЛица СправочникСсы л ка. Контрагенты_______ СправочникСсылка. ДоговорыКонтрагентов СправочникСсылка. КонгактныеЛ ица .онвертациясвойств(*) [Конвертациязначений_________________________________________________ t I Синхронизация свойств. . i Действия’ ^Добавить ,"й Отключить □ □ ZL □ □ Q □ □ □ □ 0 0 0 □ 0 □ □ □ □ □ □ [□ ЗтоГрдппа ИНН КПП______________________ Наименование ПолноеНаименование Родитель ДолжностьРуководителя С сновноеКонтактное Л ицо О сновной ДоговорКонтрагента ФИО Г лБуягалтера ФИО Руководителя_________ П ометкаУдаления Получить ..[Приемник □ □ □ □ □ □ □ □ ЗтоГ руппа ИНН КПП____________________ Наименование ПолноеНаимен о в ан ие Родитель Должност ьРуковод ите ля О сновноеКонтактное Л ицо О сновной ДоговорКонтраге. Ф И ОГлБ ухгалтера_____ ФИОРуководителя________ П ометкаУдаления Рис. 5.13. Правила конвертации свойств Контрагенты Правило выгрузки данных Выбирать данные для выгрузки одним запросом. Настройка предназначена для ускорения процесса выгрузки данных. Наибольший эффект достигается, если выгружаемый объект не имеет табличных частей. Если флажок установлен, то при стандартной выборке выполняется запрос с выбором всех полей объекта: ЗАБРАТЬ * ИЗ <Имя йипа объекта> КАК Объект ДляЙыгрузкй Дальнейшая работа ведется с выборкой из результата запроса. То есть в правило конвертации объекта передается не ссылка на объект, а выборка запроса.
62 1С:Г1редприятие 8. Конвертация данных Если флажок не установлен, то запросом выбираются ссылки на объекты, которые затем передаются в правило конвертации объекта: ВЫБРАТЬ СбъектДляВыгрузки.Ссылка КАК Ссыпка ИЗ СИ- я .ипа объекта> КАК Объект. ляВыгрузки, • Отключить правило. Если флажок установлен, то после загрузки правил обмена выгрузка по правилу отключается. Правило конвертации свойств Получить значение из входящих данных. Если флажок установлен, то значение, предназначенное для передачи в приемник, будет взято не из реквизита Источник, а из вспомогательного объекта Входя- щиеДанные, переданного в ПКО. ВходящиеДанные-это, какправило, структура, в которой значение ключа одного из элементов должно совпадать с наименованием реквизита приемника, получаемого из входящих данных. На платформе 1С:Предприятия 7.7 входящие данные - это, как правило, список значений, в котором представ- ление одного из значений совпадает с наименованием реквизита приемника. Если в ПКО имеются правила конвертации свойств с установленным флажком Получить значение из входящих данных, то в ПКС должны быть определены ИсходящиеДанные: ИсходящиеДанные - Новый Структура("Код, Наименование, I СтавкаНДС, Размер*'); ИсходящиеДанные.СтавкаНДС ~ Источник.СтавкаНДС; ИсходящиеДанные.Код = "Без НДС"; ИсходящиеДанные.Наименование = "Без НДС"; ИсходящиеДанные. Размер «= 0 ; . . .< На платформе 1 С:Предприятия 7.7: ИсходящиеДанные = СоздатьОбъек.т ("СписокЗначений"); ИсходящиеДанные.Установить("СтавкаНДС", Источник.СтавкаНДС); ИсходящиеДанные.Установить("Код", "Без НДС"); ИсходящиеДанные.Установить("Наименование", "Бёз НДС"); ИсходящиеДанные . :• становить ("Размер", 01 ; В самом ПКО коллекция будет доступна как ВходящиеДанные и может быть изменена.
Глава 5. Детальное изучение правил 63 • Поиск объекта при загрузке по свойству. При загрузке объекта в приемник будет осуществлен поиск по реквизитам с установлен- ным флажком. Если в самом ПКО установлен флажок Искать объект приемника по внутреннему идентификатору и не установлен флажок Продолжить поиск по полям поиска, то поиск объекта но свойствам игнорируется. Если флажок Поиск объекта при загрузке по свойству установлен у нескольких правил, то поиск будет успешным, если совпадут все реквизиты поиска. То есть условия поиска соединяются логическим оператором И. Важно понимать, что данная настройка определяет поведение системы только при загрузке в приемник. Наличие данных флажков не влияет на поиск объектов в списке уже выгруженных на стороне источника. • Поиск по дате на равенство. Отключает поиск документов по дате и номеру с помощью метода НайтиПоНомеру(). Настройка влияет только на поиск документов и только на платформе 1 С: Предпри- ятия 8. Если в качестве свойств поиска для ПКО документа указаны два рекви- зита - Дата и Номер, то при неустановленном флажке Поиск по дате на равенство выполняется попытка найти документ с помощью метода Най- тиПоНомеру(). То есть поиск выполняется по номеру документа в пределах периода уникальности номеров документов, включающего указанную дату. В результате если в информационной базе-источнике изменена дата документа, ранее перенесенного в приемник, то при повторном пе- реносе документ будет найден и, при необходимости, изменен. При установленном флажке Поиск по дате на равенство такой режим отменяется, поиск выполняется запросом на точное соответствие даты. • Отключить обработку правила. Обработка правила с установлен- ным флажком не осуществляется, то есть при выгрузке данных это правило игнорируется. • Не замещать значение свойства у существующих объектов в приемни- ке. Значения свойств, в ПКС которых установлен флажок, записыва- ются только для вновь созданных при загрузке объектов. Если же объект в приемнике был найден, то свойства не перезаписываются. Такая настройка действует также на реквизиты с установленным флажком Поиск, даже если в обработчике Поля поиска определена переменная: УсаанавливатьУОб'ьектаВсеСвойстваПоиска = Истина;
64 1С:Предприятие 8. Конвертация данных Откроем форму ПКС Наименование —> ПолноеНаименование ПКО Номенклатура. Установим флажок Не замещать значение свойства у существующих объектов в приемнике. Рис. 5.14. Конвертация наименования Настроенными таким образом правилами перенесем справочник Номенклатура из источника в приемник. Затем откроем какой-либо элемент справочника в приемнике, например Ботинки мужские. Внесем изменения в реквизиты Наименование и Полное наименование. Напишем в обоих случаях: Ботинки мужские демисезонные. Рис. 5.15. Заполнение реквизитов элемента справочника После повторной загрузки реквизит Наименование будет восстановлен, а Полное наименование останется неизменным.
Глава 5. Детальное изучение правил 65 Рис. 5.16. Результат после обмена • Автоматически приводить значение к длине приемника. Настройка предназначена для корректного заполнения номеров и кодов объектов. При этом префиксы сохраняются, а числовые части преобразуются под длину поля в приемнике. Рядом с флажком имеется кнопка Приведе- ние к длине..., которая позволяет увидеть результат преобразова- ния. Только для платформы 1С:Предприятия 8. На платформе 1 С:Предприятия 7.7 для приведения номера или кода к длине приемника можно использовать встроенную в обработку выгрузки данных функцию ПривестиНомерКДлине(). Для этого в обработ- чик При выгрузке() напишем: ПривестиНомерКДлине(Значение, <Длина>); Длина - требуемая длина значения в приемнике. • Передавать данные в параметр. Флажок позволяет поместить данные не в реквизит объекта, а в параметр с произвольным именем. Такой подход можно использовать в тех случаях, когда нужно передать какое-либо значение в приемник, но нет реквизи- та, в который можно поместить значение. Впоследствии, анализи- руя дополнительные параметры, переданные в приемник, можно изменить логику заполнения объекта приемника. Помимо имени параметра в правилах можно указать ПКО, по которому должно быть сконвертировано передаваемое значение. Если параметр используется в табличных частях или наборах движений, для каждой строки формируется отдельная структура, в которой хранится информация. Доступ к этим данным возможен в событии после загрузки через соответствие ПараметрыОбъекта, где ключом является имя параметра. Если в параметр передается значение реквизита табличной части, то в обработчике После загрузки в соответствии ПараметрыОбъекта будет содержаться элемент КлючИЗначение, ключом в котором будет строка, содержащая наименование табличной части и строку ТабличнаяЧасть.
66 1С Предприятие 8. Конвертация данных Значение в этом элементе будет равно таблице значений, наименования колонок которой будут совпадать с наименованиями параметров Если в параметр передается значение реквизита набора движений докумен- та, ключ элемента будет содержать строку НаборЗаписей. Рассмотрим перенос свойств, признаков учета плана счетов и видов субконто счета. Будем считать, что план счетов имеет только два субконто. Создадим серию ПКС с пустым источником, с передачей данных в параметры. Передаваемые значения зададим в обработчике Перед выгрузкой, как показано на рис 5.17. В -ЙИ П.чыпсм счетов I I I I ВЦ Нсноьной |ПланСчетовСсылка.Осноеной I i=^ ПланСчетоеСсылка Основной j | Документы [ | I I чвертация свойств Г) | Конвертация значений (*} т_______________________________________________________ I ^Сгифошзациясвойств... ; Действия» ‘^Добавить Помощь , Q > I Отключить | Поиск Источник Поручит Приемник Имя. параметра . {Правило . Алгоритм перед выгрузкой свойства 1 0 Код - Код Г п Наименование - Наименование . г п П ометкаУдаления - ПометкаУдаления — п а ТипПриемника = "Строка". Значение =СтрокаГИсточни<.Вид]; п п •у Забалансовый ТмпПриемника = "Булево"; Значение = Источник Забалансовый. п У Количествг-нный ТипПриммника = "Булево"; Значение = Источник Количественны ч. а> п г Родитель Основной Значение * Мсточник.Родитель; 1Й I Рис. 5.17. Перенос плана счетов По количеству субконто создадим два ПКГС, в обработчике Перед обработкой которых добавим проверку на наличие соответствующего вида субконто: Если Источник.ВидыСубкоито.КоличествоО < 1 Тогда Отказ Л Истина; КонецЕсли; В каждом ПКГС создадим набор ПКС для свойств вида субконто. ВидыСубконто П ланВ цдовХарактеристикСсылка.В идыСу бконго ПланВцдоЕХарактеристикСсылка. q-й'П Планы видов расчета Э-Jtl Планы счетов - “ Основной ПланСчетовСсылкаОсновной §1 ПланСчетовСсылкаОсновной j Документы = ттация свойств (") | Конвертация значений П ______________________________________________________________________________________ J. Синхронизация свойств.. Действия» -Ц Добавить № ‘О. £> Помощь ; Q «Ф 1 Отключить Поиск Источник Получит... Прием.. Имя пераметра Правило конв.. Алгоритм перед выгрузкой свойства п □ □ п □ ВидСубконто! ВидыСубконто Значение = Источник ВцдыСубконто[0].ВидСубконго. □ п □ ТолькоОбороты! Значение = Источник. ВццыСубконго[0].ТолькоОбороты; о □ St □ Количестве™ ый1 Значение = Источник ВидыСубкомго[0].Количественный. Рис. 5.18. Перенос реквизитов плана счетов
Глава 5. Детальное изучение правил 67 В обработчике После загрузки ПКО Основной будет доступно соответс- твие ПараметрыОбъекта с элементами. Ключ Значение "Т олькоОборспы! " "Забалансовый" ' 'Количественный'' "true" "ВидСубконто! " Материалы "Родитель" "Вид" "Активный" "Количественный!" "true" Рис. 5.19. Доступные параметры при загрузке Запишем в обработчик программный код, в котором заполним свойства объекта, проанализировав значения, полученные из параметров: Если Не Объект.Предопределенный Тогда Объект.Родитель = ПараметрыОбъекта.Получить("Родитель"); Объект.Порядок = Объект.ПолучитьПорядокКода(); Объект. Количественный = ПараметрыОбъекта.Получить("Количественный"); Объект.Забалансовый = ПараметрыОбъекта,Получить("Забалансовый"); Вид = ПараметрыОбъекта.Получить("Вид"); Если Вид = "Активный" Тогда Объект.Вид = ВидСчета.Активный; ИначеЕсли Вид = "Пассивный" Тогда Объект.Вид = ВидСчета.Пассивный; ИначеЕсли Вид = "Активный/Пассивный" Тогда Объект.Вид = ВидСчета.Активнопассивный; КонецЕсли; Если ПараметрыОбъекта("ВидСубконто!”] О Неопределено Тогда Если Объект.ВидыСубконто.Количество() > О Тогда ВидСубконто = Объект.ВидыСубконто(О]; Иначе ВидСубконто = Объект.ВидыСубконто.Вставить(0); КонецЕсли; ВидСубконто.ВидСубконто = ПараметрыОбъекта["ВидСубконто!"]; ВидСубконто.Количественный = ПараметрыОбъекта["Количественный!"]; ВидСубконто.ТолькоОбороты = ПараметрыОбъекта("ТолькоОбороты!"]; ИначеЕсли Объект.ВидыСубконто.Количество() > 0 Тогда Объект.ВидыСубконто.Удалить(0); КонецЕсли; Если ПараметрыОбъекта["ВидСубконто2"] о Неопределено Тогда Если Объект.ВидыСубконто.Количество() >1 Тогда ВидСубконто = Объект.ВидыСубконто(1]; Иначе ВидСубконто = Объект.ВидыСубконто.Вставить(1); КонецЕсли; ВидСубконто.ВидСубконто = Парамет Объекта["ВидСубконто2"];
68 1 (/Предприятие 8. Конвертация данных ВидСубконто.Количественный = ПараметрыОбъекта["Количественный2"]; ВидСубконто.ТолькоОбороты = ПараметрыОбъекта["ТолькоОбороты2"]; ИначеЕсли Объект.ВидыСубконто.Количество() > 1 Тогда Объект.ВидыСубконто.Удалить(1); КоненЕсли; КонецЕсли; Рассмотрим использование параметров в табличных частях и наборах движений. Для примера разберем перенос реквизита Сотрудник таблич- ной части и набора движений документа Начисление сотрудникам. 5 — НачисленияСотрудникам ДокументСсылка НачисленияСотрудникам | J S ДокументыОстатков | 4ия свойств (*) [ Конвертация значеа^ ^Синхронизация свойств ... | Действия - ^Добавить Вы | : 1 i,Помощь [ Q 4" I ключи тъ Поиск Источник Получит. Приемник Имя параметра Правило конверт.. Тип приемника Начисления р— Начисления Табличная часть п ВидРасчета □ ВидРасчета Начисления План Ви довРасчетаСсылка.Начисления п ГраФикРаботы ГраФикРаб... ГраФикиРаботы СправочникСсылка .Графики Работы п ДатаНачала □ ДатаНачала Дата п ДатаОкончания □ ДатаОконч... Дата п Должность □ Должность Должности СправочникСсылка Должности п Подразделение □ Подраздел... Подразделения СправочникСсылка Подразделения п Результат □ Результат Число (15.2) п Сотрудник □ Сотрудник <РизическиеПица Рис. 5.20. Параметры в табличных частях Для этого в ПКГС табличной части и набора движений ПКО документа Начисления создадим одинаковые ПКС с передачей данных в параметр. Параметр назовем Сотрудник. В обработчике После загрузки из соответствия ПараметрыОбъекта можно получить таблицы значений, в которых имеется колонка, соответству- ющая переданному параметру Сотрудник. Выполнить (Правило -ПослеЗагрузки} ; В ПареметрыОбъекта^НачисленияТабпичнаяЧасть"] ТаблицаЗначений = Индексы ИндексыКоллекции 1 ЁЬ Колонки КзлпекцияКолонокТаблицыЗначений | Е ИмяПараметра Колонка Таб лицыЗначений I Ё-НомерСтроки КолонкаТабпицыЗначений Ё Сотрудник КолонкаТабпицыЗначений ЕПараметрыОбъекгаГ'НачисленияНаборЗаписей’1] ТабпицаЗначений ; Индексы ИндексыКоллекции I Ё- Колонки КоллекцияКопонокТабпицыЗначений Ё ИмяПараметра КолонквТаблицыЗначений I Ё- НомерСтроки КолонкаТабпицыЗначений ; Ё- Сотрудник КолонкаТабпицыЗначений Рис. 5.21. Доступные значения параметров при загрузке
Глава 5. Детальное изучение правил 69 Поместив в обработчике После загрузки текст, запишем переданные значения в табличную часть и в набор движений документа: Для Сч = 0 По Объект.Начисления.Количество()-1 Цикл Объект.Начисления[Сч].Сотрудник = ПараметрыОбъекта РНачисленияТабличнаяЧасть"]{Сч].Сотрудник; КонецЦикла; Для Сч “ 0 По Объект.Движения,Начисления.Количествен-1 Цикл Объект.Движения.Начисления[Сч].Сотрудник = ПараметрыОбъекта["НачисленияНаборЗаписей"][Сч].Сотрудник; КонецЦикла;
70 1С:Предприятие 8. Конвертация данных
Глава 6 Обработчики событий Механизм обработчиков событий является одним из ключевых в техно- логии обмена данными при помощи правил обмена. Грамотное и умелое использование механизма позволяет решать практически любые задачи по преобразованию данных. С помощью технологии обработчиков легко реализуется отбор данных, преобразование данных разных типов, слож- ные выборки, настройка параметров и многие другие задачи. Рассмотрим основные приемы разработки обработчиков событий. Об- работка Универсальный обмен данными устроена таким образом, что в ключевых точках алгоритмов выгрузки и загрузки данных есть воз- можность исполнения программного кода, взятого из правил обмена данными, а не встроенного в обработку. Конвертация данных 2.0 пре- доставляет возможности для сохранения программного кода в правила обмена данными. На платформе 1С:Предприятия 8 выполнение обработчиков реализова- но с помощью оператора Выполнить. На платформе 1 (^Предприятия 7.7 выгрузка и загрузка данных осущест- вляются с помощью внешних обработок V77Exp.ert и V77lmp.ert. Для реализации механизма выполнения обработчиков при сохране- нии правил обмена установим флажки: Выгружать модуль обработки выгрузки (загрузки) данных для платформы 7.7. В результате в текстовые файлы, указанные в форме конвертации, будут сохранены тексты модулей, содержащие обработчики событий. Затем в конфигураторе 1 (^Предприятия 7.7 заменим текст внешней обработки на полученный при сохранении правил. Если обработчики используются при выгрузке из 1С:Предприятия 7.7, то заменим модуль обработки V77Exp.ert, если при загрузке в 1 (^Предприятие 7.7 - V77lmp ert. Код обработчиков событий связан с объектами правил обмена - эле- ментами справочников: конвертации, правила конвертации объектов, правила конвертации свойств, правила выгрузки данных и правила очис- тки данных. Естественно, что код обработчиков должен удовлетворять ряду требований.
72 1 С:Предприятие 8. Конвертация данных Параметры Параметры - это специализированная структура данных в алгоритмах выгрузки и загрузки. Настройка структуры параметров для правил конвертации выполняется в конфигурации Конвертация данных 2.0 в форме элемента справочника Конвертации на закладке Параметры. Рис. 6.1. Настройка структуры параметров правил конвертации Можно указать тип параметра. Если установлен флажок Диалог, то в форме обработки выгрузки данных возможна интерактивная установ- ка значения параметра. Рис. 6.2. Интерактивная установка значения параметра
Глава 6 Обработчики событий 73 Если установлен флажок При загрузке, то к параметру можно обращать- ся на стороне загрузки в приемник. Однако такая настройка не означает, что значение параметра будет передано из источника в приемник. Для передачи значения установим флажок Передавать при выгрузке и, при необходимости, укажем правило конвертации значения параметра. Запись в файл обмена передаваемого значения параметра происходит в начале процесса выгрузки. Поэтому передать из источника в приемник можно только параметры, значение которых установлено в диалоге обработки выгрузки. Передача параметра из источника в приемник доступна только при обмене между информационными базами на платформе 1С:Предприятия 8. Обработчик После загрузки параметра. После загрузки значения параметра в приемник выполняется обработчик После загрузки парамет- ра(). В обработчике доступны переменные: • Имя - строка, содержащая имя параметра; • Значение - значение загруженного параметра. Рис. 6.3. Окно настройки параметров Структура Параметры - это глобальная переменная обработки выгрузки и загрузки данных, доступ к которой возможен в любых обработчиках событий правил обмена. Обращение к параметрам осуществляется сле- дующим образом: Параметры.<ИмяПараметра> Инициализация параметров выполняется, как правило, в обработчиках конвертации.
74 1 (^Предприятие 8. Конвертация данных Обработчики «Конвертации» Обработчик «После загрузки правил обмена» Обработчик события выполняется непосредственно после считывания и загрузки правил обмена и может использоваться для инициализации глобальных параметров конвертации и реквизитов формы обработки обмена. Пример: Если Не ЗначениеЗаполнёно(ДатаНачала) Тогда ДатаНачала = НачалоГода(ТекущаяДата()); КонецЕсли; Если Не ЗначениеЗаполнено(ДатаОкончания) Тогда ДатаОкончания = ТекущаяДата(); КонецЕсли; Если Параметры.МаксКоличестеоСтрок <=0 Тогда Параметры.МаксКоличествоСтрок = 500; КонецЕсли; Обработчик можно использовать только при выгрузке из источника на платформе 1С:Предприятия 8. Обработчик «Перед выгрузкой данных» Обработчик события выполняется самым первым перед началом выгрузки данных, непосредственно после нажатия кнопки Выгрузить данные. Файл обмена открыт для записи, в него записаны правила обмена, информация о времени выгрузки и периоде выгрузки: ДатаНача- ла, ДатаОкончания. Параметры конвертации, введенные в диалоге, инициализированы. В обработчике возможно изменение параметров, в том числе предназначенных для передачи в приемник. В файл обмена могут быть записаны дополнительные данные. На платформе 1С:Предприятия 8 с использованием переменной ФайлОбмена - тип ЗаписьТекста. На платформе 1С:Предприятих 7.7 доступен головной узел - rootNode.
Глава 6. Обработчики событий 75 С помощью переменной Отказ можно отказаться от выгрузки данных, например: Если Йе ЗначениеЗаполнено(ДатаНачала) Тогда Предупреждение(’Не указана дата ввода остатков (Дата начала)"); Отказ = 1; КонецЕсли; Параметры. ДатаВводаОстатков = НачалоДня (ДатаНачала) ?-1; Параметры.Граница - Новый Граница(Параметры,ДатаВводаОстатков, ВидГраницы.Включая); Если установлен флажок Использовать оптимизированный формат для обмена данными, то после выполнения обработчика выполняется запись информации о типах данных приемника. Только для платформы 1С:Предприятия 8. После этого в файл обмена будут записаны параметры, предназна- ченные для передачи данных в приемник, и программа приступит к обработке правил выгрузки данных. Обработчик «После выгрузки данных» Обработчик события выполняется после обработки всех правил выгрузки данных, когда все данные уже помещены в файл обмена, но файл еще не закрыт для записи. Событие выполняется только один раз. Таким образом, в файл могут быть записаны дополнительные произвольные данные. Пример: Сообщить("Выгрузка завершена!"); Обработчик «Перед выгрузкой объекта» Обработчик события выполняется для каждого объекта, выгружаемого с помощью правила выгрузки данных. Событие возникает непосредственно перед вызовом одноименно- го обработчика Правила выгрузки данных. То есть перед выгрузкой каждого объекта, для любого ПВД. Могут использоваться все парамет- ры, определенные для одноименного обработчика правила выгрузки данных. По сути это тот же обработчик, но определенный на глобаль- ном уровне, то есть вызываемый для всех правил выгрузки данных. Обработчик удобен, например, когда для документов всех видов нужно проверить одно и то же условие. Обработчик вызывается только для объектов, которые выгружаются непосредственно из ПВД. Обработчик
76 1С:Предприятие 8. Конвертация данных не выполняется при конвертации объекта по ссылкам. В этом случае вызываются только обработчики конвертации объекта. Пример: Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда Если Не Объект.Проведен Тогда Отказ ~ Истина; КонецЕсли; КонецЕсли; Обработчик «После выгрузки объекта» Обработчик события выполняется для каждого объекта, выгружаемого с помощью правила выгрузки данных. Событие возникает непосредственно перед вызовом одноименного обработчика Правила выгрузки данных. То есть после выгрузки каждого объекта, для любого ПВД. Могут использоваться все параметры, определенные для одноименного обработчика правила выгрузки данных. По сути это тот же обработчик, но определенный на глобальном уровне, то есть вызываемый для всех правил выгрузки данных. Обработчик вызывается только для объектов, которые выгружаются непосредственно из ПВД. Обработчик не выполняется при конвертации объекта по ссылкам. В этом случае вызываются обработчики конвертации объекта. Пример: Параметры.СписокВсехВыгруженныхОбъектов,Добавить(Объект); Обработчик «Перед конвертацией объекта» Обработчик события выполняется перед конвертацией каждого объекта независимо от того, каким образом инициализирована его выгрузка: из правила выгрузки данных или по ссылке из другого объекта. Событие выполняется для каждого ПКО непосредственно перед выполнением обработчика Перед выгрузкой правила конвертации объекта. Могут использоваться все параметры, определенные для указанного обработчика правила конвертации объектов. По сути это тот же обработ- чик, что и Перед выгрузкой в правиле конвертации, но определенный на глобальном уровне, то есть вызываемый для всех правил конвертации.
Глава 6. Обработчики событий 77 Обработчик удобен, например, когда для справочников всех видов нужно установить: еЗамещатьСбъектПриЗагрузке = Истина; ИЛИ В ееОбъектыВыгруж. тны = Лстина; Обработчик вызывается для всех объектов независимо от того, выгружается этот объект непосредственно или потому что на него есть ссылки. Пример: Если Лев(ПКО.Приемник, 10) = "Справочник" Тогда НеЗамещатьСбъектПриЗагрузке = Параметры.НеЗамещатьСправочникиПриЗагрузке; ЙначеЕСли Лев (ПКО.Приемник, 8) == "Документ" Тогда НеЗамещатьОбъектПриЗагрузке = Параметры.НеЗамещатьДбкументыПриЗагрузке; КонецЕсли; Обработчик «Перед загрузкой данных» Обработчик события выполняется самым первым перед началом загрузки данных из файла и только один раз после открытия файла для чтения. В обработчике могут быть инициализированы переменные, которые впоследствии предполагается использовать. Значения параметров, переданных в приемник из источника, в обработ- чике еще не определены. На платформе 1С:Предприятия 8 определены переменные ДатаНачала и ДатаОкончания, на платформе 1С:Предприятия 7.7 - ФормДатаНач и ФормДатаКон. Параметры: • Отказ - Булево. Если Истина, то загрузка данных производиться не будет. • Параметры - структура, в которой хранятся переменные, доступные во всех обработчиках. Пример: Сообщить("Перед загрузкой данных:"); Сообщить(Параметры.ДатаВводаОстЭтков); Если НачалоДня(ДатаНачала)-1 <= Константы.ДатаЗапретаРедактированйя,Получить() Тогда Отказ = 1; Иначе Параметры.ДатаВводаОстатков = НачалоДня(ДатаНачала)-1; Коне 1Если;
78 1С:Предприятие 8. Конвертация данных Обработчик «После загрузки данных» Обработчик события выполняется только один раз после загрузки данных из файла обмена, когда файл уже закрыт. В обработчике могут быть выполнены дополнительные действия в информационной базе- приемника, например, проведение документов, пометка на удаление документов, загруженных по ссылкам. Параметры: • Параметры - структу ра, в которой хранятся переменные, доступные во всех обработчиках. Пример: Сообщить("Загрузка данных полностью завершена!"); Обработчик «Перед загрузкой объекта» Обработчик события выполняется перед началом загрузки объекта. Вызов выполняется до вызова одноименного обработчика правила конвертации объектов, и могут использоваться все его параметры. По сути и назначению это тот же обработчик, что и Перед загрузкой объекта в правиле конвертации объектов, но определенный на глобальном уровне, то есть вызываемый для всех правил конвертации объектов. Пример: Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда ВежимПроведения - "ОтменаПроведения"; КснецЕсчи; Обработчик «После загрузки объекта» Обработчик события выполняется после загрузки объекта. Вызов вы- полняется до вызова одноименного обработчика правила конвертации объектов, и могут использоваться все его параметры. По сути и назна- чению это тот же обработчик, что и После загрузки объекта в правиле конвертации объектов, но определенный на глобальном уровне, то есть обработчик, вызываемый для всех правил конвертации объектов. Пример: Если НЕ ОбъектНайден Тогда Объект. Установить НовыйКодО; КонецЕсли; бъект.БазоваяЕдиницаИзмерения = Параметры.ЕдИзмеренияЩтуки;
Глава 6. Обработчики событий 79 Обработчики «Правила выгрузки данных» Обработчик «Перед обработкой» Обработчик события выполняется перед обработкой каждого правила выгрузки данных до формирования выборки объектов, подлежащих вы- грузке. Используется для установки дополнительных параметров перед выгрузкой данных, для переопределения выборки объектов, подлежа- щих выгрузке, либо для выгрузки дополнительной информации. Параметры: • Отказ - Булево. Если Истина, то выгрузка данных по правилу производиться не будет. • Параметры - структура, в которой хранятся переменные, доступные во всех обработчиках. • ИмяПКО - строка. Имя правила конвертации объектов, указанное по умолчанию в форме правила выгрузки данных как реквизит Правило конвертации. • Правило - ссылка на правило выгрузки данных. На платфор- ме 1С:Предприятия 8 - строка дерева значений, а на платформе 1С:Предприятия 7.7 - строка таблицы значений. Содержит колонки, соответствующие реквизитам справочника Правила выгрузки данных и некоторым дополнительным параметрам правила. • ИсходящиеДанные - произвольная вспомогательная информа- ция, доступная в обработчике ПВД Перед выгрузкой в качестве входящих данных. Исходящие данные, определенные в обработчи- ке ПВД Перед обработкой, не передаются автоматически обработ- чикам правила конвертации объектов. Передать в обработчик ПКО данные, определенные в событии Перед обработкой, можно указав в событии Перед выгрузкой: ИсходящиеДанные = ВходящиеДанные; • ВыборкаДанных - запрос, результат запроса, выборка из результа- та запроса или произвольная коллекция выгружаемых объектов. Используется, когда способ выгрузки данных - произвольный алгоритм. Если определить переменную, то обход коллекции и выгрузка объектов будут осуществляться автоматически. Пример: необходимо перенести данные регистра сведений Валюты, содержащего курсы валют. Создадим правило конвертации объекта для регистра сведений.
80 1С:Предприятие 8. Конвертация данных — КурсыВалют РегистрСв* ция свойств п | Конвертация значений________________________________________________________ ^Синхронизация свойств.. Действия* «^Добавить й 1 i Помощь ' Q ‘КЛЮЧИТЬ Поиск Источник Получ.. Приемник Имя парам... Правило кон... Т ип приемника Алгори 1 п Валюта п Валюта Валюты СправочникСсылка .Валюты 1 п Карс п Курс Число (10.3] 1 - □ Период □ Период Дата и время Рис. 6.4. Настройка переноса курса валют Стандартная выборка записей регистра сведений в данном случае нас не устраивает, поскольку помимо записей за период выгрузки необходимо перенести курсы валют и на дату начала периода. В обработчике Перед обработкой ПВД Курсы валют выберем объединен- ным запросом срез последних на дату начала периода выгрузки и все записи регистра за период: Запрос - Новый Запрос; Запрос.УстанОвитьПараметрС'ДатаНачала", ДатаНачала) ; Запрос.УстановитьПараыетр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараыетр("Граница", Параметры.Граница); Запрос.Установить Параметр("ДатаВводаОстатков", Параметры.ДатаВводаОстатков); Запрос.Текст = "ВЫБРАТЬ I адатаВвсдаОстатков КАК Период, | КурсыВалютСрезПоследних.Валюта КАК Валюта, 1 КурсыВалютСрезПоследних.Курс КАК Курс 1ИЗ IРегисТрСведений.Валюты.СрезПоследних(^Граница, ) | КАК КурсыВалютСрезПоследних I |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ I КурсыВалют.Период, | КурсыВалют.Валюта, | КурсыВалют.Курс |ИЗ I РегистрСведений.Валюты КАК КурсыВалют (ГДЕ I КурсыВалют»Период МЕЖДУ &ДатаНачала И &ДатаОкончания"; ВыборкаДанных = Запрос.Выполнить(); В способе выборки ПВД укажем - Произвольный алгоритм, объект выборки в том же ПВД можно не указывать, однако указание правила конвертации обязательно.
Глава 6. Обработчики событий 81 Использование функции ВыгрузитьПоПравилу() Другим широко распространенным способом выгрузки данных по произвольному алгоритму является использование функции Выгру- зитьПоПравилу(). Синтаксис функции: ЕЬЕгрузитьПоПравилу ( Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, УзелСсыДки, ТолькоПолучитьУзелСсылки, ПКО, ЭтоПравилоСГлобальнойВыгрузкойОбъектов, ВыборкаДляВыгрузкиДанных); Источник — произвольный источник данных, подлежащий конвертации. Это может быть ссылка на выгружаемый объект: справочник, документ и т. п. Может быть произвольный набор данных: структура, список значений, строка таблицы значений. Тип значения источника необяза- тельно должен совпадать с типом значения источника ПКО, с помощью которого будет осуществляться преобразование. Обязательно совпаде- ние структуры свойств источника и тех свойств ПКО, которые должны быть получены из источника. Приемник - XML-узел объекта приемника. ВходящиеДанные - произвольные вспомогательные данные, передавае- мые правилу конвертации объектов. Как правило, структура или список значений, соответствующий структуре свойств ПКО, с установленным флажком Получить из входящих данных. ИсходящиеДанные - произвольные вспомогательные данные, передава- емые правилам конвертации свойств. ИмяПКО - имя правила конвертации, согласно которому выполняется выгрузка. УзелСсылки - XML-узел ссылки объекта приемника. ТолькоПолучитьУзелСсылки - если Истина, то выгрузка объекта не производится, только формируется XML-узел ссылки. ПКО - ссылка на правило конвертации. Как правило, данная функция используется в обработчиках с парамет- рами: Источник. ВходящиеДанные, ИмяПКО: ВытрузитьПоПравилу(Источник,, ВходящиеДанные,, ИмяПКО);
1С:Предприятие 8. Конвертация данных 82 Пример: перенесем из информационной базы-источника в приемник документы Заказ покупателя, по которым есть остатки незакрытых заказов. Причем табличную часть документа перенесем не полностью, а только те строки и с тем количеством, которое есть на остатках в регистре накопления Заказы покупателей. Создадим правило конвертации объекта. * ЗаказПокупателоОстатхи ЯЯНННННННВВННН ДокументСсылка ЗаказПокупателя •нвертадля свойств f) j Конвертация значений __________________________________________ __________________________________________ f 4 ^Оя-иронизация свойств ... Действия - ^Добавить а [й] -^1 ! L Помощь Q J Отключить Поиск Источ... Полу,-ть (Приемник конве JTmh приемника — □ н Jfera It» га и время «• □ и О Номер Строка (ЛИ) — □□ □ S □ □ Оргагмзасдея Комментарий Организации СпржочникСсы1жз.Организа1»«и Строка (Неогр) Значение = 1; □ □ Клиент Контрагенты СправочникСсылка Контрагенты м □ п у □ ПометкаУдаления Булево Значение = Пожь; «м □ п Е Проведен Булево Значение - Пожь fia □ Е ПереченьНоменклатуры Табличная часть Рис. 6.5. Правило конвертации объекта ПКГС табличной части установим флажок Получить из входящих данных. — ЗаказПокупвтеляОстатки ДокументСсьшк онвертация свойств П | Конвертация значений_________________________________________ 1“ ^Синхронизация свойств ... Действия ▼ ^Добавить 51 Помощь Q Рис. 6.6. Правила переноса табличной части документа Создадим правило выгрузки данных Заказ покупателя остатки. В обработ- чике Перед обработкой запросом выберем остатки заказов покупателей. Сгруппируем по документу Заказ покупателя. Выгрузим все отобран- ные запросом документы с помощью функции ВыгрузитьПоПравилу(), причем в качестве табличной части передадим через входящие данные остатки регистра Заказы покупателей по каждому из них.
Глава 6. Обработчики событий g3 Запрос = Новый Запрос; Запрос.УстановитьПараметр("Граница", Параметры.Граница); Запрос.Текст = а "ВЫБРАТЬ | ЗаказыПокупателейОстатки.Заказ КАК Заказ, | ЗаказыПокупателейОстатки,Номенклатура, I ЗаказыПокупателейОстатки.КоличествоОстаток КАК Количество, | ЗаказыПокупателейОстатки.СуммаОстаток КАК Сумма, | ВЫБОР ] КОГДА ЗаказыПокупателейОстатки.КоличествоОстаток <> О | ТОГДА ЗаказыПокупателейОстатки.СуммаОстаток / | ЗаказыПокупателейОстатки.КоличествоОстаток • J ИНАЧЕ О В > КОНЕЦ КАК Цена ]ИЗ I РегистрНакопления.ЗаказыПокупатеЛей.Остатки(SГраница, ) КАК ЗаказыПокупателейОстатки : деоги по [ Заказ"; /;/ Выгрузим результат запроса в дерево значений ДЗ'= Запрос.Выполнить().Выгрузить( ОбходРезультатаЗапроса.ПоГруппировкам); Для Каждого Заказ Из ДЗ.Строки Цикл ИсходящиеДанные = Новый Структура)); 5’ИсходящиеДанные,Вставить("ПереченьНоменклатуры", Заказ.Строки); ИВыгрузитьПоПравилу(Заказ.Заказ,, ИсходящиеДанные,, "ЗаказПокупателяОстатки"); |>нецЦикла; к ... В обработчике в функцию ВыгрузитьПоПравилу() передаются параметры Источник и ВходящиеДанные, где Источник - это ссылка на документ, а через входящие данные передается сформированная табличная часть документа. Параметры Источник и ВходящиеДанные не являются обязательными, но один из этих параметров должен быть обязательно.
84 1 (^Предприятие 8. Конвертация данных Обработчик «После обработки» Обработчик события выполняется после выгрузки всех данных по определенному правилу выгрузки. Для каждого правила выполняется только один раз, если по нему выполнялась выгрузка данных. Параметры: • Правило - ссылка на правило выгрузки данных. • Параметры -структура, в которой хранятся переменные, доступные во всех обработчиках. • ИсходящиеДанные - произвольные вспомогательные данные, определенные в обработчике Перед обработкой. Пример: Сообщить("Выгрузка контрагентов завершена!"); Обработчик «Перед выгрузкой» Обработчик события выполняется при получении каждого объекта из выборки до передачи этого объекта правилу конвертации. Обработчик можно использовать для организации отбора выгружаемых объектов или переопределения объектов. Параметры: • Отказ - Булево. Если Истина, выгрузка объекта производиться не будет. • Параметры - структура, в которой хранятся переменные, доступные во всех обработчиках. • ИмяПКО - Строка. Имя правила конвертации объектов, указанное по умолчанию в правиле выгрузки данных. • Правило - ссылка на правило выгрузки данных. • ВходящиеДанные - произвольные вспомогательные данные, инициализированные в обработчике Перед обработкой правила выгрузки данных как ИсходящиеДанные. • ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилу конвертации объекта. В обработчиках ПКО данная информация будет доступна как ВходящиеДанные. • Объект - выгружаемый объект, который может быть переопреде- лен или назначен непосредственно в обработчике.
Глава 6. Обработчики событий 85 ——_----------------------------- Пример: *сли Объект.Предопределенный Тодда Отказ - Истина; КонецЕсли; Обработчик «После выгрузки» Обработчик события выполняется после выгрузки объекта по правилу конвертации. Выгруженный объект уже записан в файл обмена. Обработчик может использоваться для выгрузки дополнительной, связанной с выгруженным объектом информации. Параметры: • Параметры - структура, в которой хранятся переменные, доступные во всех обработчиках. • Объект - ссылка на выгруженный объект. • ИмяПКО - имя правила конвертации объектов, по которому была осуществлена выгрузка объекта источника. • ВходящиеДанные — произвольные вспомогательные данные, инициализированные в обработчике Перед обработкой правила выгрузки данных как ИсходящиеДанные. • ИсходящиеДанные - произвольные вспомогательные данные, переданные правилу конвертации объекта и, возможно, модифицированные в обработчиках событий правила конверта- ции объектов. • УзелСсылки - XML-узел ссылки выгруженного объекта. Пример: рассмотрим пример передачи информации, связанной с эле- ментом справочника Номенклатура. В информационной базе-источнике в справочнике Номенклатура имеются реквизиты Размер и Сезон, пред- назначенные для хранения свойств обуви и одежды. В приемнике такого реквизита нет, для хранения такого рода информации предназначен ме- ханизм дополнительных свойств. Если у элемента справочника Номенклатура данные реквизиты заполне- ны, то одновременно с переносом элемента необходимо в информацион- ной базе-приемнике создать элемент справочника Варианты номенкла- туры и запись в регистре сведений Значения свойств номенклатуры. Для передачи такого рода информации можно было бы воспользоваться одним из обработчиков ПКО Номенклатура. Однако в этом случае при
86 1С:Предприятие 8. Конвертация данных многократном обращении к ПКО Номенклатура по ссылкам из других ПКО происходила бы выгрузка дополнительной информации. Экономичнее в данном случае воспользоваться обработчиком ПВД. Причем именно обработчиком После выгрузки’ в первую очередь выгрузим основной элемент, а затем, если выгрузка прошла успешно, выгрузим дополнительную информацию. Дополнительно к ПКО Номенклатура создадим два ПКО Справочник Номенклатура —> Регистр сведений Значения свойств номенклатуры. Е) ДдРазмерСезон -» РазмерНоменклатуры СезоныВСаойства ОравоцкикСсылка .Номенклатура ;РегмстрСведен^Ззшг^ЗначеиияСвоЙств1к>матклатуры a,.y СгравочникСсыпка .Номенклатура РегистрСаеданийЗапись .ЗначенияСвойстаНоменклатуры ПеречиспениеСсы пка .Сезоны Сгфдво^атикСсыжа.ДопопнитепьныеСвойстБаНомежлату я свойств П~| Конвертация значений______________________________________________________________________________________________ КСиюфонизадя свойств... , Действия - ^Добавить i, Помощь Q 4“ I Рис. 6.7. Перенос значений свойств номенклатуры Значение реквизита Вид свойства с типом плана видов характеристик Свойства номенклатуры сформируем в обработчике ПКС Перед выгрузкой как структуру, соответствующую ПКО Свойства номенклатуры. Для размера: Значение = Новый Структура(); Значение.Вставить("Код", ; Значение. Вставить ("Наименование", " Размер"); Значение.Вставить("ПометкаУдаления", Ложь); Значение.Вставить("Предопределенный", Ложь); Значение.Вставить("ТипЗначения", Новый ОписаниеТипов( "СправочникСсылка.ДополнительныеСвойстваНоменклатуры")); Для сезона: Значение.Вставить("Наименование", "Сезон"); Тогда, в случае необходимости, будет создан элемент плана видов характеристик. Аналогично для реквизита Набор свойств создадим значение в виде структуры, соответствующей справочнику Варианты номенклатуры: Значение = Новый Структура(); Значение.Вставить("Код", ""); Значение.Вставить("ПометкаУдаления", Ложь); Значение.Вставить("Владелец", Источник);
Глава 6. Обработчики событий 87 Если Источник.Размер О 0 Тогда Наименование = "Размер: " + Источник.Размер; [онвцЕсли; Если Источник.Сезон о Перечисления.Сезоны.ПустаяСсылкаО Тогда Если Источник.Размер О 0 Тогда Наименование = Наименование + ", КонецЕсли; Наименование - Наименование + "Сезон: " + Источник.Сезон; КонецЕсли; Значение.Вставить("Наименование", Наименование); Запишем в обработчик После выгрузки ПВД Номенклатура код: Если (Не Объект.ЭтоГруппа) и (Объект.Размер О 0) Тогда выгрузитьПоПравилу(Объект,,,,"РазмерНоменклатуры") ; КонецЕсли; ЁСли (Не Объект.ЭтоГруппа) и (Объект.Сезон о Перечисления.Сезоны.ПустаяСсылка()) Тогда ВыгрузитьПоПравилу(Объект,,,,"СезонНоменклатуры"); конецЕсли; Таким образом, для каждого выгруженного объекта Номенклатура создадим, при необходимости, дополнительную информацию в регистре сведений. Обработчики «Правила конвертации объектов» Обработчик «Перед выгрузкой» Обработчик события выполняется перед выгрузкой каждого объекта в файл обмена независимо от того, как выгружается объект - по правилу выгрузки данных либо потому что на него есть ссылки. Событие вызывается, когда узел объекта приемника еще не создан и недоступен. Возможен отказ от выгрузки, например, в случае невыполнения каких- либо условий. Параметры: • Параметры - структура, в которой хранятся переменные, доступные во всех обработчиках.
88 1С:Предприятие 8. Конвертация данных • Источник - выгружаемый объект. Это может быть ссылка на объект информационной базы-источника или произвольные данные. Тип данных передаваемого объекта необязательно должен совпадать с типом объекта, указанного в качестве источника в ПКО. Важно, чтобы совпадала структура свойств передаваемого объекта со структурой свойств ПКО, получаемых из источника. Возможно создание ПКО с пустым источником. В этом случае структу- ра выгружаемого объекта Источник должна совпадать со структурой свойств приемника ПКО. Источник обязательно должен иметь набор всех реквизитов правила конвертации объекта, в ПКС которых установлен флажок Получить из входящих данных, и значение, которое не задано в обработчиках ПКС явно, например: Значение = Истина; • ВходящиеДанные — произвольные вспомогательные данные, переданные правилу конвертации из других правил, например, из правила выгрузки данных или правила конвертации свойств. При выгрузке из источника на платформе 1С:Предприятия 8 значение параметра, как правило, имеет тип Структура, где ключи значений соответствуют структуре свойств объекта приемника. При выгрузке из источника на платформе 1С:Предприятия 7.7 - Список значений, где представления значений соответствуют структуре свойств объекта приемника. Реквизиты выгружаемого объекта, в ПКС которых установлен флажок Получить из входящих данных, будут получены не из объекта Источник, а из структуры ВходящиеДанные. При разработке правил обмена для создания структуры входящих данных удобно пользоваться встроенным сервисом конфигура- ции Конвертация данных 2.0. Если ПКО имеет ПКС с установленным флажком Получить из входящих данных, то в форме элемента справочни- ка ПКО доступна закладка Параметры, получаемые из входящих данных. Нажатием кнопки Печать структуры входящих данных можно получить заготовку текста обработчика. • ИсходящиеДанные — произвольные вспомогательные данные, передаваемые правилам конвертации свойств. Определенный в обработчиках ПКО Перед выгрузкой или При выгрузке объект будет доступен и может быть переопределен во всех обработчиках всех ПКС. ИмяПКО — имя правила конвертации объектов.
Глава 6 Обработчики событий 89 • ПКО - ссылка на правило конвертации объектов, доступно только на платформе ЮПредприятия 8. • ВыгруженныеОбъекты — соответствие. Содержит перечень выгруженных по правилу объектов. Ключом соответствия являет- ся параметр КлючВыгружаемыхДанных, значением - число, номер объекта в файле. Может использоваться для проверки выгружен ли объект по ссылкам из других объектов. В целях оптимиза- ции при выгрузке больших массивов данных значение параметра может быть очищено. При выгрузке данных из источника на платформе 1С:Предприятия 7.7 в обработчике Перед выгрузкой список значений ВыгруженныеОбъекты недоступен, однако получить доступ к ним можно, поместив в обработ- чик код: НомерПКО = НайтиПравило( . ИмяПКО); ВыгруженныеОбъекты *= иТаблицаПравилКонвертацииОбъектов.ПолучитьЗначение( НомерПКО, "Выгруженные"); • КлючВыгружаемыхДанных - значение ключа в соответствии ВыгруженныеОбъекты. По умолчанию: КлючВыгружаемыхДанных = ЗначениеВСтрскуВнутр(Источник); Если источник не определен: КлючВыгружаемыхДанных « ИмяПКО; Подразумевается, что правило описывает в таком случае один объект- приемник. Параметр может быть использован, если одному объекту источника могут соответствовать несколько объектов приемника, например, в зависимости от входящих данных. А также в случаях, когда объект- приемник полностью заполняется из входящих данных, например, по результатам запроса, а объект-источник как таковой отсутствует. Пример: правило конвертации объектов Единицы измерения, у свойства Владелец установлен флажок Получить из входящих данных. КлючВыгружаемыхДанных = Строка(ТипЗНЧ(ВходящиеДанные.Владелец)) + ВходящиеДанные.Владелец.Код + Источник.Ко. ; Отказ - Булево. Если Истина, то объект выгружаться не будет.
90 1 ^Предприятие 8. Конвертация данных Пример: Если Источник.ЭтоГруппа Тогда Отказ = Истина; КонецЕсли; • ЗапоминатьВыгруженные - Булево. По умолчанию определяется в форме элемента правила конвертации объекта. Универсальная обработка выгрузки данных хранит все выгруженные объекты в специальном списке ВыгруженныеОбъекты, и таким образом многократно встречающиеся объекты по ссылкам из реквизитов других объектов выгружаются единожды. Однако, установив параметр в значение Ложь, можно отключить такой режим. Запоминание выгруженных объектов может быть использовано при оптимизации, например, когда точно известно, что на объекты нет ссылок, а также когда на основании одного объекта-источни- ка в зависимости от различных условий могут формироваться несколько различных объектов-приемников. На платформе 1С:Предприятия 7.7 доступна переменная НеЗапоми- натьВыгруженные - Число. • НеЗамещатьОбъектПриЗагрузке - Булево. По умолчанию определя- ется в форме элемента правила конвертации объекта. Если Истина, то объект, идентифицированный при загрузке, т. е. найденный в информационной базе-приемнике, не будет изменен. • НеСоздаватьЕслиНеНайден - Булево. По умолчанию определяется в форме элемента правила конвертации объекта. Если Истина, то выполняется только поиск объекта в приемнике, новый объект не создается. Только на платформе 1С:Предприятия 8. • ВсеОбъектыВыгружены - Булево. Если установить Истина, то объект не выгружается, лишь формируется узел ссылки. В списке выгруженных объектов поиск не производится. • ТолькоПолучитьУзелСсылки - Булево. Если - Истина, то объект не выгружается, только формируется узел ссылки. В списке выгруженных объектов поиск производится. • Приемник - Строка. Строковое представление объекта приемника. Может использоваться для тех правил, у которых приемник является значением примитивного типа (Строка, Число, Булево, Дата), или если при помощи правила предполагается идентифицировать по имени предопределенные значения какого-либо ссылочного типа. • РежимЗаписи - Строка. Режим записи документа. Имеет смысл, только если тип объекта-приемника - Документ. Возможные значения: Запись, Проведение, ОтменаПроведения.
Глава 6. Обработчики событий д'] • РежимПроведения - Строка. Режим проведения документа. Имеет смысл, только если тип объекта-приемника - Документ. Возможные значения: Неоперативный, Оперативный. • СинхронизироватьПоИдентификатору - Булево. Если Истина, то синхронизация объекта при загрузке будет осуществляться по внутреннему идентификатору ссылки. По умолчанию определя- ется в правиле конвертации объектов. Только на платформе 1С:Предприятия 8. Обработчик «При выгрузке» Обработчик события выполняется при выгрузке каждого объекта в файл обмена, независимо от того, как выгружается объект - по правилу выгрузки данных либо потому что на него есть ссылки. Принципиаль- ное отличие от события Перед выгрузкой() в том, что событие вызывает- ся, когда XML-узел объекта-приемника уже создан и доступен для изменения. Возможен отказ от выгрузки, например, в случае невыпол- нения каких-либо условий. Параметры (некоторые переменные, доступные в обработчике, совпада- ют с параметрами обработчика Перед выгрузкой и имеют то же назначе- ние): • Параметры—структура, в которой хранятся переменные, доступные во всех обработчиках. • Источник - выгружаемый объект. • ВходящиеДанные - произвольные вспомогательные данные, переданные правилу конвертации из других правил. • ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам конвертации свойств. • ИмяПКО имя правила конвертации объектов. * ПКО - ссылка на правило конвертации объектов. Только для платформы ЮЛредприятия 8. * ВыгруженныеОбъекты - соответствие. Содержит перечень выгру- женных по правилу объектов. Только для платформы ЮЛредпри- ятия 8. КлючВыгружаемыхДанных - значение ключа в соответствии ВыгруженныеОбъекты. Только для платформы ЮЛредприятия 8. Отказ - Булево. Если Истина, то объект выгружаться не будет.
92 1 С: Предприятие 8 Конвертация данных Помимо перечисленных переменных, в обработчике При выгрузке() доступны переменные, отсутствующие в событии Перед выгрузкой(): • СтандартнаяОбработка - Булево. Если Ложь, то стандартное заполне- ние приемника не производится, то есть не выполняется обработка правил конвертации свойств. В случае отключения стандартной обработки правила конвертации свойств (ПКС) не обрабатыва- ются, т. е. необходимо реализовать алгоритм, заполняющий узел приемника в соответствии с форматом файла обмена. • Приемник - инициализированный XML-узел объекта-приемни- ка. Может быть дополнен произвольным XML-содержимым, например, используемым при загрузке. • УзелСсылки - инициализированный XML-узел ссылки. Может использоваться, например, для инициализации свойств других объектов. Обработчик «После выгрузки» Обработчик события выполняется, когда XML-узел объекта-приемника полностью заполнен, но в файл обмена еще не записан. Возможен отказ от выгрузки, например, в случае невыполнения каких-либо условий. Событие можно использовать для выгрузки дополнительной информа- ции, связанной с выгруженным объектом. Параметры: • Параметры - структура, в которой хранятся переменные, доступные во всех обработчиках. • Источник — выгружаемый объект. • ВходящиеДанные — произвольные вспомогательные данные, переданные правилу конвертации из других правил. • ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам конвертации свойств. • ИмяПКО имя правила конвертации объектов. • ПКО - ссылка на правило конвертации объектов. Только для платформы ^Предприятия 8. • ВыгруженныеОбъекты - соответствие. Содержит перечень выгру- женных по правилу объектов. Только для платформы ^Предприя- тия 8. • КлючВыгружаемыхДанных - значение ключа в соответствии ВыгруженныеОбъекты. Только для платформы ЮПредприятия 8.
Глава 6. Обработчики событий 93 • Отказ Булево. Если Истина, то объект выгружаться не будет. • Приемник - XML-узел объекта-приемника, полностью заполнен- ный в соответствии с правилом. • УзелСсылки - инициализированный XML-узел ссылки. Может использоваться, например, для инициализации свойств других объектов. Обработчик «Перед загрузкой» Обработчик события выполняется, когда в файле обмена найден очередной объект, предназначенный для загрузки. Прочитана информа- ция о типе и правиле конвертации объекта. Возможен отказ от загрузки, например, в случае невыполнения каких- либо условий. Загружаемый в базу данных объект еще не инициализи- рован. Параметры: • Нпп - Число. Уникальный порядковый номер объекта в файле. Если выгрузка информации в файл обмена происходила в режиме Использовать оптимизированный формат для обмена данными и ПКО с установленным флажком Использовать быстрый поиск объекта при выгрузке и загрузке, то вместо Нпп будет использоваться ГНпп. • ИмяПравила - Строка. Имя правила конвертации. Пустая строка, если правила конвертации не используются. • Правило строка таблицы значений. Ссылка на правило конверта- ции объекта. • ГенерироватьНовыйНомерИлиКодЕслиНеУказан - Булево. Если Истина и номер или код объекта не заданы, то перед записью будет сгенерирован новый номер или код. • ТипОбъектаСтрокой - Строка. Тип загружаемого объекта строкой. Например: СправочникСсылка.Номенклатура. • ТипОбъекта значение типа Тип. Тип загружаемого объекта. * НеЗамещатьОбъект Булево. Если Истина, то объект, идентифици- рованный при загрузке (т. е. найденный в информационной базе- приемнике), не будет изменен или замещен. * РежимЗаписи - Строка. Режим записи документа. Имеет смысл, только если тип объекта-приемника - Документ. Возможные значения Запись, Проведение, ОтменаПроведения.
94 1С Предприятие 8. Конвертация данных ^llll I ГI • РежимПроведения - Строка. Режим проведения документа. Имеет смысл, только если тип объекта-приемника-Документ. Возможные значения: Неоперативный, Оперативный. При загрузке в информационную базу на платформе ЮЛредприятия 7.7 из перечисленных переменных доступна только ИмяПравила. Пример: РежимЗаписи = "ОтменаПроведения"; Обработчик «При загрузке» Обработчик события выполняется, когда из файла обмена прочитана ссылка на объект, то есть прочитаны реквизиты, по которым должен осуществляться поиск объекта. Сделана попытка найти его в информа- ционной базе. В случае успешной синхронизации доступен найденный объект. В противном случае его значение не определено. Можно произвести произвольную инициализацию объекта, заполняемого данными. Параметры: • ОбъектНайден - Булево. Определяет, найден или нет загружа- емый объект в информационной базе. Только для платформы ЮЛредприятия 8. • Объект - найденный в информационной базе объект. Если способ идентификации объекта в файле не указан, т. е. отсутствует узел Ссылка, содержащий реквизиты поиска, или объект по указанной ссылке не найден, то параметр содержит значение Неопределено. В этом случае в обработчике возможна произвольная инициализа- ция загружаемого объекта. • НеЗамещатьОбъект - Булево. Если Истина, то существующий объект информационной базы не будет изменен. Только для платформы ЮЛредприятия 8. • ОбъектМодифицирован - Булево. Флажок указывает на то, что в обработчике объект был модифицирован. По умолчанию содержит значение Истина. То есть обработка загрузки считает, что если выполнялся какой-либо обработчик, то объект мог быть модифицирован, и его необходимо записать в информацион- ную базу. Параметр относится только к текущему обработчику и только к найденным объектам. Если объект не был найден, то при любом значении он будет создан и записан. Только для платформы Ю Предприятия 8.
Глава 6 Обработчики событий 95 • При загрузке в информационную базу на платформе "^Предпри- ятия 7.7 обработчик выполняется только для объектов, имеющих тип Справочник или Документ. • Узел - XML-узел загружаемого объекта, из которого можно считать дополнительную информацию, записанную в файл обмена при выгрузке. Только на платформе 1С:Предприятия 7.7. Например: УзелПериодического - Узел.ВыбратьУзелР’ЦеныПродажи"); • ДатаУстановки - дата, на которую будет установлено значение периодического реквизита справочника при загрузке в информаци- онную базу на платформе 1С:Предприятия 7.7. Имеет смысл только для ПКО справочников. По умолчанию: ДатаУстановки = ТекушаяДатаО; Пример: //Для установки даты периодических реквизитов /7 на начало периода выгрузки. Для 1С:Предприятия 7.7 ДатаУстановки = ФормДатаНач; // на дату окончания периода выгрузки ДатаУстановки « ФормДатаКон; Обработчик «После загрузки» Обработчик события выполняется, когда из файла обмена прочитаны все реквизиты объекта, объект полностью изменен, но еще не записан в информационную базу. Параметры: • Объект - загруженный объект. • ПараметрыОбъекта - соответствие, в котором хранятся дополни- тельные параметры, переданные для объекта из источника в приемник. Если параметры переданы не были, то ПараметрыОбъ- екта = Неопределено. Только для платформы ЮЛредприятия 8. * ОбъектМодифицирован - Булево. Флажок указывает на то, что в обработчике объектбыл изменен. Поумолчанию содержит значение Истина. То есть обработка загрузки считает, что если выполнялся какой-либо обработчик, то объект мог быть модифицирован, и его необходимо записать в информационную базу. Параметр относит- ся только к текущему обработчику. Если объект был изменен ранее, то при любом значении переменной ОбъектМодифицирован он будет записан. Только для платформы ЮЛредприятия 8.
96 1С:Предприятие 8. Конвертация данных • При загрузке в информационную базу на платформе ^Предпри- ятия 7.7 обработчик выполняется только для объектов, имеющих тип Справочник или Документ. • УзелОбъекта - XML-узел загружаемого объекта, из которого можно считать дополнительную информацию, записанную в файл обмена при выгрузке. Только на платформе 1С:Предприятия 7.7. Например: УзелОперации - УзелОбъекта.ВыбратьУзел(“Операция"); Пример: в информационных базах, в которых ведется бухгалтерский учет, как правило, имеется возможность добавлять к существующим счетам бухгалтерского учета дополнительные виды субконто. При переносе движений регистра бухгалтерии, подчиненных какому- либо документу, может возникнуть ситуация, когда в коллекции субконто содержится субконто вида, которого нет на счете приемника, но есть на этом же счете в источнике. При записи объекта с таким набором движений возникнет ошибка. Для исключения такого рода ситуаций служит приведенный ниже текст обработчика После загрузки: // Необходимо проверить, соответствуют ли загруженные виды субконто // счету приемника. Для Каждого Корреспонденция ив Объект.Движения.Управленческий Цикл Для Каждого Субконто из Корреспонденция.СубконтоДт Цикл НайденоСубконто = Ложь; Для Каждого ВидыСубконто ив Корреспонденция.СчетДт.ВидыСубконто Цикл Если ВидыСубконто.ВидСубконто = Субконто.Ключ Тогда НайденоСубконто = Истина; Прервать; КонецЕсли; КонецЦикла; Если НЕ НайденоСубконто Тогда Корреспонденция.СубконтоДт.Удалить(Субконто.Ключ); КонецЕсли; КонецЦикла; Для Каждого Субконто из Корреспонденция.СубконтоКт Цикл НайденоСубконто = Ложь; Для Каждого ВидыСубконто из Корреспонденция.СчетКт.ВидыСубконто Цикл
Глава 6. Обработчики событий 97 Если ВидыСубконто.ВидСубконто = Субконто.Ключ Тогда НайденоСубконто = Истина; Прервать; КонецЕсли; КонецЦикла; Если НЕ НайденоСубконто Тогда Корреспонденция.СубконтоКт.Удалить(Субконто.Ключ); КонецЕсли; КонецЦикла; КонецЦикла; В приведенном коде происходит перебор всех загруженных движений регистра бухгалтерии и проверка соответствия вида субконто набору субконто счета бухгалтерского учета. Обработчики «Правила конвертации группы свойств» Правила конвертации группы свойств могут быть трех видов: • табличные части; • наборы движений; • простая группировка — произвольно объединенные в группу правила конвертации свойств, обычно для возможности отказа от выгрузки всех входящих в группу свойств, в зависимости от какого-либо условия. Обработчик «Перед обработкой» Обработчик события выполняется перед обработкой группы свойств, например, перед выгрузкой табличной части. Возможен отказ от выгрузки. Для табличных частей и наборов движений можно определить произвольную коллекцию, которая является источником данных. Параметры: • Отказ - Булево. Если Истина, то группа свойств не выгружается. • Источник - выгружаемый объект. • ВходящиеДанные - произвольные вспомогательные данные, переданные правилу конвертации из других правил, например, из правила выгрузки данных или правила конвертации свойств. • ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам конвертации свойств.
98 1С Предприятие 8. Конвертация данных • КоллекцияОбъектов - только для ПКГС вида табличная часть, набор движений. В коде обработчика можно присвоить произволь- ную коллекцию, например, таблицу значений, структура колонок которой должна совпадать со структурой свойств, входящих в группу. В этом случае таблица значений будет выгружена в качестве табличной части или набора движений. • НеЗамещать- Булево. Только для ПКГС вида табличная часть, набор движений. По умолчанию определяется в настройках правила. Если Истина, то для существующих объектов информационной базы, т. е. найденных в информационной базе приемника, загрузка строк табличной части или записей набора движений выполняться не будет. • НеОчищать - Булево. Только для ПКГС вида табличная часть, набор движений. Если Истина, то существующие подчиненные строки табличной части, записи набора движений, удаляться не будут. Загруженные записи будут добавлены к уже существующим. Переменную НеОчищать можно использовать для загрузки несколь- ких табличных частей в одну. Пример: документ Приходная накладная конфигурации источника имеет две табличные части: Материалы и Услуги. Табличная часть Материа- лы выгружается первой, т. к. имеет меньший порядок выполнения. В обработчике Перед обработкой ПКГС Услуги запишем: Если Источник.Материалы.Количество() > 0 Тогда НеОчищать = Истина; КонецЕсли; Пример: для ввода начальных остатков номенклатуры создано ПКО Ввод начальных остатков номенклатуры, в ПКГС наборов движений запишем: Запрос = Новый Запрос; Запрос.УстановитьПараметр("Граница", Параметры.Граница); Запрос,Текст == "ВЫБРАТЬ I ОстаткиМатериаловОстатки.Материал, | ОстаткиМатериаловОстатки.НаборСвойств, I ОстаткиМатериаловОстатки.Склад, I ОстаткиМатериаловОстатки.КоличествоОстаток КАК Количество |ИЗ I РегистрНакопления.ОстаткиМатериалов.Остатки(&Граница, ) I КАК ОстаткиМатериаловОстатки |ГДЕ | ОстаткиМатериаловОстатки.КоличествоОстаток > О"; КоллекцияОбъектов >» Запрос.Выполнить О.Выгрузить();
Глава 6. Обработчики событий 99 Структура полученной таблицы значений совпадает со структурой свойств, входящих в ПКГС, значение которых не заполняется явно в обработчиках ПКС. Обработчик «После обработки» Обработчик события выполняется после обработки группы свойств. Для простой группировки — после выгрузки всех свойств, входящих в группу. В этом случае невозможен отказ от записи. Для табличных частей и наборов движений регистра — после выгрузки всех строк или записей, когда узел коллекции объектов сформирован, но не записан в файл обмена. Возможен отказ от записи всей коллекции объектов. Параметры: • Отказ - Булево. Только для ПКГС вида табличная часть, набор движений. Если Истина, то УзелКоллекцииОбъектов в приемник не добавляется. • УзелКоллекцииОбъектов - XML-узел коллекции выгружен- ных объектов. Только для ПКГС вида табличная часть, набор движений. • Источник - выгружаемый объект. • ВходящиеДанные - произвольные вспомогательные данные, переданные правилу конвертации из других правил, например, из правила выгрузки данных или правила конвертации свойств. • ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам конвертации свойств. Обработчик «Перед выгрузкой» Обработчик события выполняется перед выгрузкой каждого объекта коллекции: строки табличной части, записи набора движений. Возможен отказ от выгрузки объекта коллекции: строки табличной части или движения регистра. XML-узел объекта коллекции еще не создан. Допустимо добавление произвольных записей в УзелКоллек- цииОбъектов, т. е. в узел всей табличной части или набора движений. Например, когда необходимо конвертировать одну строку табличной части в несколько. Параметры: • Источник - выгружаемый объект.
100 1С:Предприятие 8. Конвертация данных • ВходящиеДанные — произвольные вспомогательные данные, переданные правилу конвертации из других правил, например, из правила выгрузки данных или правила конвертации свойств. • ИсходящиеДанные — произвольные вспомогательные данные, передаваемые правилам конвертации свойств. • Отказ - Булево. Если Истина, то подчиненный объект - запись или строка — нс выгружается. • ОбъектКоллекции - объект из коллекции выгрузки. Например, строка табличной части, или запись регистра, или строка таблицы значений, или строка результата запроса и т. д. • УзелКоллекцииОбъектов - XML-узел коллекции объектов: табличной части или набора движений. Пример: документ Оказание услуги, имеющий в источнике одну табличную часть, необходимо выгрузить в аналогичный документ приемника, имеющий две табличные части. В обработчике Перед выгрузкой ПКГС Перечень Номенклатуры -> Перечень Номенклатуры запишем: Если ОбъектКоллекции.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда Отказ = Истина; КонецЕсли; В обработчике Перед выгрузкой ПКГС Перечень Номенклатуры --> Услуги: Если ОбъектКоллекции.Номенклатура.ВидНоменклатуры о Перечисления.ВидыНоменклатуры,Услуга Тогда Отказ = Истина; КонецЕсли; Обработчик «При выгрузке» Обработчик события выполняется при выгрузке каждого объекта коллекции, например, строки табличной части. Можно инициализиро- вать ИсходящиеДанные, необходимые для конвертации свойств объекта коллекции. Создан, но не заполнен XML-узел объекта коллекции, подчиненный XML-узлу коллекции объектов. В обработчике нет возможности отказаться от выгрузки объекта коллекции. Параметры: • Источник — выгружаемый объект.
Глава 6. Обработчики событий 101 • ВходящиеДанные - произвольные вспомогательные данные, переданные правилу конвертации из других правил, например, из правила выгрузки данных или правила конвертации свойств. • ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам конвертации свойств. • ОбъектКоллекции - объект из коллекции. Например, строка табличной части, или запись регистра, или строка таблицы значений, или строка результата запроса и т. д. • УзелКоллекцииОбъектов - XML-узел коллекции объектов. Например, табличной части или набора движений. • УзелОбъектаКоллекции - XML-узел объекта коллекции, например, строки табличной части или записи регистра. Правила конверта- ции свойств еще не обработаны, т. е. узел пустой. • СтандартнаяОбработка - Булево. Если Ложь, то стандартная обработ- ка выгрузки свойств объекта коллекции производиться не будет, т. е. не будут обрабатываться правила конвертации свойств. Обработчик «После выгрузки» Обработчик события выполняется после выгрузки каждого объекта коллекции. Узел объекта коллекции заполнен, но файл обмена не записан. Возможен отказ от добавления узла объекта в коллекцию. Параметры: • Отказ - Булево. Если Истина, то УзелОбъектаКоллекции не добавляет- ся в УзелКоллекцииОбъектов. • ОбъектКоллекции выгруженный объект коллекции. Например, строка табличной части, или запись регистра, или строка таблицы значений, или строка результата запроса и т. д. • УзелКоллекцииОбъектов - XML-узел коллекции объектов. Например, табличной части или набора движений. • УзелОбъектаКоллекции — XML-узел выгруженного объекта коллекции, например, строки табличной части или записи регистра, т. е. правила конвер тации свойств обработаны. • Источник — выгружаемый объект. • ВходящиеДанные - произвольные вспомогательные данные, переданные правилу конвертации из других правил, например, из правила выгрузки данных или правила конвертации свойств. • ИсходящиеДанные - произвольные вспомогательные данные, которые были переданы правилам конвертации свойств.
102 1 (^Предприятие 8. Конвертация данных Обработчики «Правила конвертации свойств» Обработчик «Перед выгрузкой» Обработчик события выполняется перед выгрузкой значения свойства. Возможен отказ от выгрузки. XML-узел свойства еще не создан, конвертируемое значение не определено. Параметры: • Источник — ссылка на выгружаемый объект, свойство которого выгружается. • Приемник - XML-узел формируемого объекта приемника. • ПКС — ссылка на текущее правило конвертации свойств. Только для платформы ЮЛредприятия 8. • ПКО - ссылка на правило конвертации объектов - родитель правила конвертации свойств. Только для платформы ЮЛредприятия 8. • ВходящиеДанные - произвольные вспомогательные данные, переданные правилу конвертации объекта (ПКО) из других правил, например, из правила выгрузки данных или правила конвертации свойств. Значение параметра, как правило, имеет тип Структура, где ключи значений соответствуют структуре свойств объекта- приемника. Если у правила конвертации свойств установлен флажок Получить из входящих данных, то в структуре ВходящиеДанные обязательно должен быть элемент с ключом, соответствующим наименованию свойства приемника. Значение свойства будет взято из элемента. • ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам конвертации объектов свойств (ПКО). Если в ПКС в обработчике Перед выгрузкой или При выгрузке определена структура ИсходящиеДанные, и ПКС имеет непустое значение реквизита Правило, или задана переменная ИмяПКО, то в обработчиках указанного ПКО эти данные будут доступны как ВходящиеДанные. • ОбъектКоллекции - ссылка на выгружаемый объект коллекции. Например, строка табличной части, или запись регистра, или строка таблицы значений, или строка результата запроса и т. д. Существует в том случае, если ПКС входит в группу свойств (ПКГС) табличной части или набора движений. • Отказ - Булево. Если Истина, то конвертация свойства не произво- дится, обработка правила конвертации свойств прекращается.
Глава 6. Обработчики событий 103 • Значение—значение свойства, подлежащее конвертации, в обработ- чике еще не определено. Если значение определить в коде обработ- чика, то стандартная процедура получения значения не будет происходить. • ТипПриемника — Строка. Строковой тип свойства приемника, например, СправочникСсылка.Организации. Для свойств несос- тавных типов всегда определен. Для свойств составных типов оп- ределяется либо правилом конвертации, либо разработчиком конвертации. • ИмяПКО — имя правила конвертации, по которому производит- ся преобразование значения свойства. Может быть выбрано в зависимости от каких-либо условий. • ИмяПКОВидСубконто - имя правила конвертации, по которому производится преобразование вида субконто. Имеет смысл только для свойств СубконтоДт и СубконтоКт записей регистра бухгалте- рии. Может быть выбрано в зависимости от каких-либо условий. • Пусто - Булево. Если Истина, то в приемник будет записано пустое значение свойства соответствующего типа, и дальнейшая обработ- ка правила конвертации свойств будет прекращена. • Выражение - может быть указано произвольное строковое выражение на встроенном языке, результат вычисления которого при загрузке будет присвоен значению свойства. Если Выражение определить в обработчике, то дальнейшая обработка ПКС будет прекращена. Только для платформы ЮЛредприятия 8. • НеЗамещать — Булево. По умолчанию определяется в настройках правила. Если Истина, то для существующих объектов информаци- онной базы установка свойства производиться не будет. Обработчик «При выгрузке» Обработчик события выполняется при начале выгрузки свойства. Уже создан XML-узел свойства, определено значение, подлежащее конвертации. Параметры: • Источник - ссылка на выгружаемый объект источника данных. • Приемник - XML-узел формируемого объекта приемника. • ПКС—ссылка на правило конвертации свойств. Только для платфор- мы ЮЛредприятия 8. • ПКО—ссылка на правило конвертации объектов—родитель правила конвертации свойств. Только для платформы ЮЛредприятия 8.
104 1С:Предприятие 8. Конвертация данных ВходящиеДанные - произвольные вспомогательные данные, переданные правилу конвертации объекта (ПКО) из других правил, например, из правила выгрузки данных или правила конвертации свойств. Значение параметра, как правило, имеет тип Структура, где ключи значений соответствуют структуре свойств объекта- приемника. Если у правила конвертации свойств установлен флажок Получить из входящих данных, то в структуре ВходящиеДанные обязательно должен быть элемент с ключом, соответствующим наименованию свойства приемника. Значение свойства будет взято из элемента. ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам конвертации объектов свойств (ПКО). Если в текущем ПКС в обработчике Перед выгрузкой или При выгрузке определена структура ИсходящиеДанные, и ПКС имеет непустое значение реквизита Правило, или задана переменная ИмяПКО, то в обработчиках указанного ПКО эти данные будут доступны как ВходящиеДанные. ОбъектКоллекции - ссылка на вьпружаемый объект коллекции. Например, строка табличной части, или запись регистра, или строка таблицы значений, или строка результата запроса и т. д. Отказ - Булево. Если Истина, то конвертация свойства не произво- дится, обработка правила конвертации свойств прекращается. Если объект, являющийся родителем свойства в базе-приемнике, будет найден, то свойство, выгрузка которого не производилась, очищен не будет. Значение - значение свойства. Пусто - Булево. Флажок определяет, что выгружаемое значение свойства оказалось пустым. Если в обработчике установить Пусто = Истина, то в приемник будет записано пустое значение свойства соответствующего типа и дальнейшая обработка ПКС будет прекращена. Если Значение в коде обработчика переопределено и по заверше- нии выполнения обработчика непустое, то Пусто автоматически станет равным Ложь, даже если в самом обработчике будет явно указано Пусто = Истина. ИмяПКО - имя правила конвертации, по которому будет произво- диться преобразование значения свойства. ПКОСвойств - строка таблицы значений, ссылка на правило кон- вертации объектов свойства. Определено, если правило конверта-
Глава 6. Обработчики событий 105 ции объектов указано в форме ПКС или ИмяПКО инициализирова- но в обработчике ПередВыгрузкой. В противном случае ПКОСвойств = Неопределено. • УзелСвойства - XML-узел свойства. Переменные для свойств СубконтоДт и СубконтоКт регистра бухгалтерии Если выгружается свойство СубконтоДт или СубконтоКт регистра бухгалтерии, то значение, доступное в обработчике, имеет тип РегистрБухгалтерииСубконто.<Имя регистра бухгалтерии;». То есть представляет собой коллекцию элементов КлючИЗначение. При необходимости в обработчике Перед выгрузкой в качестве перемен- ной Значение может быть задана любая коллекция, содержащая КлючИЗначение: соответствие, таблица значений с колонками Ключ и Значение. Обработчик ПриВыгрузке выполняется в цикле: Для каждого КлючИЗначение из Значение Цикл ВидСубконто = КлючИЗначение.Ключ; Субконто - КлючИЗначение.Значение; Выполнить(ПКС.ПриВыгрузке); КонецЦикла; Таким образом, в обработчике доступны для чтения и изменения; • КлючИЗначение - структура, содержащая ключ и значение субконто. • ВидСубконто - вид субконто (ключ), строго говоря, должен иметь тип ПланВидовХарактеристикСсылка.<Имя ПВХ>, но это зависит от того, как сделано ПКО, используемое в качестве ИмяПКОВидСуб- конто. • Субконто - значение субконто, которое будет конвертировано по правилу, заданному как ИмяПКО. • ИмяПКОВидСубконто - правило конвертации объектов, используе- мое для конвертации вида субконто.
106 1С:Предприятие 8. Конвертация данных Обработчик «После выгрузки» Обработчик события выполняется после выгрузки свойства. XML- узел свойства сформирован, но еще не записан. Возможен отказ от выгрузки. Параметры: • Источник - ссылка на выгружаемый объект источника данных. • Приемник - XML-узел формируемого объекта приемника. • ПКС - ссылка на правило конвертации свойств. Только для платфор- мы ЮЛредприятия 8. • ПКО ссылка на правило конвертации объектов - родитель правила конвертации свойств. Только для платформы ЮЛредприятия 8. • ВходящиеДанные - произвольные вспомогательные данные, переданные правилу конвертации объекта (ПКО) из других правил, например, из правила выгрузки данных или правила конвертации свойств. Значение параметра, как правило, имеет тип Структура, где ключи значений соответствуют структуре свойств объекта- приемника. Если у правила конвертации свойств установлен флажок Получить из входящих данных, то в структуре ВходящиеДанные обязательно должен быть элемент с ключом, соответствующим наименованию свойства приемника. Значение свойства будет взято из элемента. • ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам конвертации объектов свойств (ПКО). • ОбъектКоллекции - ссылка на выгружаемый объект коллекции. Например, строка табличной части, или запись регистра, или строка таблицы значений, или строка результата запроса и т. д. • Отказ - Булево. Если Истина, то сформированный узел свойства не добавляется в приемник. • Значение — выгруженное значение свойства источника. • ИмяПКО - имя правила конвертации, по которому было произведе- но преобразование значения свойства источника. • ПКОСвойств - строка таблицы значений, ссылка на правило конвертации объектов свойства, по которому было произведено преобразование значения свойства источника. • УзелСвойства - XML-узел выгруженного свойства.
Глава 6. Обработчики событий 107 • УзелСсылки - XML-узел ссылки свойства (для ссылочных типов данных, кроме перечислений). Переменные для свойств СубконтоДт и СубконтоКт регистра бухгалтерии • КлючИЗначение - структура, содержащая ключ и значение субконто. • ВидСубконто - вид субконто, ключ элемента коллекции КлючИЗна- чение. • Субконто - значение субконто, значение элемента коллекции КлючИЗначение. • ИмяПКОВидСубконто - имя правила конвертации, по которому было произведено преобразование вида субконто. • УзелСубконто — XML-узел выгруженного субконто.
108 •((/Предприятие 8. Конвертация данных
Глава 7 Поля поиска Обработчик Поля поиска предназначен для реализации сложных алгоритмов поиска загружаемых объектов ссылочного типа. Выполняется только при загрузке в информационную базу на платфор- ме 1С:Предприятия 8. Обработчик события вызывается при выполнении одного из условий: • в настройках ПКО не установлено свойство Искать объект приемни- ка по внутреннему идентификатору; • поиск по уникальному идентификатору нс дал результата, и уста- новлен флажок Продолжить поиск по полям поиска; • поиск по предопределенному значению не дал результата, и даль- нейший поиск по уникальному идентификатору также оказался неудачным. Если установлен поиск по уникальному идентификатору или по имени предопределенного элемента и программа нашла элемент, то поиск прекращается. Если поиск по уникальному идентификатору не дал положительного результата и указано, что нужно продолжить поиск, программа будет искать элемент с помощью алгоритма Поля поиска. В обработчике можно установить список полей, по которым должен производиться поиск. Выполняется не более 10 попыток поиска по разному набору полей. Если очередная попытка дала положительный результат, то поиск прекращается. Поиск возможен только по тем полям, у которых на этапе выгрузки был установлен флажок поиска данных. Текст обработчика Поля поиска привязан во время загрузки данных к типу загружаемого объекта, а не к ПКО. Поэтому если имеется несколь- ко ПКО, у которых приемник одного типа, то обработчик должен работать при загрузке объекта, выгруженного по любому из них.
110 1С:Предприятие 8. Конвертация данных Параметры: • НомерВариантаПоиска - Число. Номер попытки поиска, может принимать значения от 1 до 10. • СвойстваПоиска - соответствие, в котором хранятся значения реквизитов поиска, т. е. тех реквизитов, у которых установлен флажок Поиск. Ключ в соответствии — это наименование реквизи- та, а Значение - значение реквизита объекта. • ПрекратитьПоиск - Булево. Если Истина, то поиск объекта прекраща- ется. При этом если переменная СсылкаНаОбъект не заполнена, то будет создан новый объект. • СсылкаНаОбъект - ссылка на найденный объект. Если в обработчи- ке определить ссылку как непустую, то программа будет считать поиск успешно завершенным. • УстанавливатьУОбъектаВсеСвойстваПоиска - Булево. Определя- ет, нужно ли после удачного завершения поиска установить объекту все реквизиты поиска. Объект может быть найден по части реквизитов. Этот флажок определяет, нужно ли заменить у найденного объекта реквизиты, которые не участвовали в поиске, но по которым поиск возможен. Значение по умолчанию - Истина. Пример: реализуем поиск загруженных элементов справочника Контрагенты по реквизитам ИНН и КПП. Если они в источнике не заполне- ны, то искать по наименованию контрагента. ПКО Контрагенты настроим следующим образом: I м Контрагенты СправочникСсылка.Контрагенты | । L...e ДогсвсрыКснтрагентсв СправочникСсылка. ДоговорыКонтр... [ iHESf г тация свойств П | Конвертация значений I. Синхронизация свойств... Действия ’ Добавить h Отключить Поиск Источник Пстщч... Приемник * □ и ЗтоГ руппа п ЗтоГ руппа м □ и V инн п ИНН м □ и КПП п КПП * □ Н ^именование п Н амменование □ п ПолноеНаименование п П ол ноеН аименование м □ п Родитель п Родитель — □ □ ДолжностьРуководителя □ ДолжностьРуководителя Рис. 7.1. Правило конвертации объекта Контрагенты Если какой-либо из контрагентов не будет найден по уникальному идентификатору, то в обработчике Поля поиска будет доступно соответс- твие СвойстваПоиска, содержащее значения всех полей поиска.
Глава 7. Поля поиска 111 Ключ Значение "ЭтоГруппа" ложь "КПП" ' '{У ника л ьныйИ денгификатор}'' "fc3f4578-ef5c-11 dc-bb94-000102Ь8е1 аЗ" "ИНН" "270300917944" "Наименование"’ "Спиридонова Галина Станиславовна" Рис. 7.2. Значения свойств поиска Поместив в обработчик текст, реализуем требуемый алгоритм поиска: Если НомерВариантаПоиска = 1 Тогда Если ЗначениеЗаполнено(СвойстваПоиска.Получить("ИНН")) и ЗначениеЗаполнено(СвойстваПоиска.Получить("КПП")) Тогда СтрокаИменСвойствПоиска = "ЭтоГруппа, ИНН, КПП"; ИначеЕсли ЗначениеЗаполнено(СвойстваПоиска.Получить("ИНН")) Тогда СтрокаИменСвойствПоиска = "ЭтоГруппа, ИНН"; Иначе СтрокаИменСвойствПоиска = "ЭтоГруппа, Наименование"; КонецЕсли; КонецЕсли; Свойство ЭтоГруппа включено в поля поиска не случайно. Оно используется не только для поиска объекта, но и для создания новых элементов. Пример: в источнике справочник Номенклатура имеет реквизит ШтрихКод. В приемнике информация о штрихкодах хранится в регистре сведений. Необходимо проверить существование в приемнике номенклатуры с определенным штрихкодом. Для передачи реквизита ШтрихКод в соответствие Свойства поиска создадим ПКС ШтрихКод —> Комментарий. I СправочнмкСсылка,РдиницыУ1змерения В-Wl {Номенклатура! Г — Номенклатура : " Ьдиницыйзмерения I знвертаиия свойств (*] | Конвертация значений________________________________________ J" 4 Синхронизация свойств ... Действия’ Добавить fit pjrjd Отключить Поиск Источник Получить... Приемник м □ и Код □ Код — □ 0 ЭтоГруппа □ ЗтоГ руппа □ 0 Н амменование □ Н амменование □ 0 ШтрихКод р Комментарий — □ п Наименование □ П о лноеН амменование — □ □ Родитель □ Родитель — □ □ П ометкаУ да ления □ ПометкаУдаления ‘М □ Зс □ Рис. 7.3. Конвертация свойств номенклатуры
112 1С:Предприятие 8. Конвертация данных В алгоритм поиска добавим код: ели НомерВариантаПоиска = 1 Тогда II Попытаемся найти в регистре сведений запись с нужным штрихкодом Если ЗначениеЗаполнено(СвойстваПоиска.Получить("Комментарий")) Тогда Запрос = Новый Запрос; Запрос.УстановитьПараметр("ШтрихКод", СвойстваПоиска.Получить("Комментарий")); Запрос.Текст = "ВЫБРАТЬ | ШтрихКоды.Владелец |ИЗ | РегистрСведений.ШтрихКоды КАК ШтрихКоды 1ГДЕ | ШтрихКоды.ШтрихКод = ШтрихКод"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда СсылкаНаОбгьект = Выборка. Владелец ; ПрекратитьПоиск = Истина; Иначе СсылкаНаОбъект = Неопределено; КонецЕсли; КонецЕсли; ИначеЕсли НомерВариантаПоиска = 2 Тогда Если ЗначениеЗаполнено(СвойстваПоиска.Получить("Родитель")) Тогда СтрокаИменСвойствПоиска = "Наименование, Родитель, ЭтоГруппа"; Иначе СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа"; КонеЦЕсли; КонецЕсли; Поскольку обработчик поля поиска один на все ПКО, у которых тип объекта приемника СправочникСсылка.Номенклатура, то для ПКО ВнеоборотныеАктивы и ПКО ГруппаВнеоборотныеАктивы приведенный код должен быть работоспособным.
Глава 8 Правила очистки данных Правила очистки данных (ПОД) используются довольно редко. Их основная задача - пометить на удаление или удалить из информа- ционной базы некоторые объекты перед загрузкой данных. Очистка данных выполняется после выполнения глобального обрабо т- чика правил конвертации Перед загрузкой данных. Параметры, используемые при загрузке, инициализированы, но значения парамет- ров, переданных из источника, еще не загружены. С помощью правил очистки данных объекты можно пометить на удаление или удалить непосредственно. Настройка удаления определя- ется флажком Удалять непосредственно в форме правила. Предопределенные значения объектов не удаляются и на удаление не помечаются. В программе предусмотрено несколько обработчиков, выполняемых в процессе очистки данных. Обработчик «Перед обработкой» Обработчик события выполняется один раз для каждого правила перед началом удаления объектов. Возможен отказ от обработки правила, например, в случае невыполне- ния каких-либо условий. Параметры: • Правило - ссылка на правило очистки данных, строка дерева значений с колонками, соответствующими свойствам правила очистки. • Отказ - Булево. Если задать значение Истина, то очистка данных по правилу не производится.
114 1С:Предприятие 8. Конвертация данных • ИсходящиеДанные - произвольные вспомогательные данные, доступные при удалении объектов выборки. Если в обработчике определены какие-либо ИсходящиеДанные, то в обработчике Перед удалением они будут доступны как ВходящиеДанные. • ВыборкаДанных запрос, результат запроса, выборка из результа- та запроса или произвольная коллекция удаляемых объектов. Используется, когда способ очистки данных — произвольный алгоритм. Если определить переменную, то обход коллекции и удаление объектов будут осуществляться автоматически. • Параметры структура, в которой хранятся переменные, доступные во всех обработчиках. Обработчик «Перед удалением» Обработчик события выполняется перед удалением каждого объекта. Возможен отказ от удаления объекта, например, в случае невыполне- ния каких-либо условий. Параметры: • Правило - ссылка на правило очистки данных. • Объект - ссылка на удаляемый объект. • Отказ - Булево. Если Истина, то объект удаляться не будет. • УдалитьНепосредственно - Булево. По умолчанию определяется в настройках правила. Если Истина, то объект будет удален непосредс- твенно, в противном случае только помечен на удаление. • ВходящиеДанные - произвольные вспомогательные данные, инициализированные в обработчике Перед обработкой правила очистки как переменная ИсходящиеДанные. • Параметры структура, в которой хранятся переменные, доступные во всех обработчиках. Пример: УдалигьНепос,едственно = Не Объект.ЭтоГруппа; Обработчик «После обработки» Обработчик события выполняется один раз для каждого правила очистки данных после удаления всех объектов.
Глава 8. Правила очистки данных 115 Параметры: • Правило - ссылка на правило очистки данных. • Параметры - структура, в которой хранятся переменные, доступные во всех обработчиках. Пример: общить("Сп| авочник номенклат ы очищен"); Рассмотрим пример использования правил очистки данных со стандар- тной выборкой. Реализуем механизм, при котором перед загрузкой данных все элементы справочника Номенклатура помечались бы на удаление. В нашем случае мы будем ставить пометки на удаление. При синхрони- зации элемента справочника в момент загрузки пометка будет снята, поскольку загружаемые элементы номенклатуры не имеют пометки на удаление. В форме Настройка правил обмена на закладке Правила очистки данных добавим новое правило. «= Настройка правил обмена _ П X я Сохранить правила Загрузить правила -^Проверка ^Изменение правил . Запустить прила?у71 Открывать при входе Конвертация: | Источник -> Приемник [ «gj Новая конвертация -1 Скопировать конвертацию] Правила конвертации... . Правила выгрузки дан. Поиск объектов в при.. [правила очистки данных | АлгоритмыХЗапросы t < Действия- ^Добавить М tg g, |jS| Щ *1 Помощь [Отключить |Имя правила отбора данных |Непосредственно I Рис. 8.1. Добавление нового правила
116 1С:Предприятие 8. Конвертация данных В качестве объекта выборки укажем справочник Номенклатура. Флажок Удалять непосредственно не ставим. С помощью структуры ИсходящиеДанные реализуем счетчик удаленных объектов. Для этого в обработчике Перед обработкой зададим начальное значение счетчика: ИсходящиеДанные = Новый Структура("Счетчик", 0); В обработчике Перед удалением эта структура будет называться ВходящиеДанные: ходящиеДанные.Счетчик = ВходящиеДанные.Счетчик + 1; Сообщить("Перед удалением объекта № " + ВходящиеДанные.Счетчик); В обработчике После обработки имеем структуру ИсходящиеДанные, измененную в обработчиках Перед удалением: Сообщить("После обработки очистки, удалено: " + ИсходящиеДанные.Счетчик + "объектов"); Рассмотрим более сложный пример. В информационную базу-приемник загружаются документы ввода остатков номенклатуры. Для реализа- ции возможности повторной загрузки создадим правило, которое будет удалять документы ввода остатков, загруженные ранее. Для того чтобы документ, созданный при переносе, можно было отличить от документа, введенного вручную, в реквизит Комментарий документа запишем строку: Перенос Источник -> Приемник. г- -» ВвоаНачальныкОстатковНоменклат. | |Док>ду|ентСсып<.а.ВводНачальнь этация свойств Г) [конвертация значений!_______________________________________________________ I ^Симфогмзэциясвойств Действия* ; ^Добавить Помощь , Q 4“ X Отключить Поиск Источник Получит Приемник Правил Т ип приемника бхрчСи. СБЭррт,.». □ и ЙЕ □ Дата Дата и время Значение - Параметры ДатаВводаОстатков; □ р| □ Комментарий Строка (Неогр) Значение = "Перенос Источник -> Приемник". J п □ П ометк аУдаления Булево Значение = Ложь; □ яг □ Ост аткиМ атермалов Набор движений реги... □ □ СтатчосгьМатериалов Н абор движений реги . Рис. 8.2. Заполнение реквизитов ввода начальных остатков В обработчике Перед обработкой запишем текст, формирующий выборку данных.
Глава 8. Правила очистки данных 117 Основная] Дополнительно]_______________________________________________________________________________ Объект выборки: | Д окументСсылка.В водНачальныхОстагксвНоменклатуры Способ выборки: Код {имя) правила: [Произвольный алгоритм | ВводНачальныхОстатковНомён клатуры Перед обработкой Перед удалением После обработки Параметры.ДатаВводаОстатков = НачалоДня(ДатаНачала)-1; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаВводаОстатков", Параметры.ДатаВводаОстатков) ; Запрос.Текст = "ВЫБРАТЬ I ВводНачальныхОстатковНоменклатуры.Ссылка I ИЗ I Документ.ВводНачальныхОстатковНоменклатуры I КАК ВводНачальныхОстатковНоменклатуры |ГДЕ I ВводНачальныхОстатковНоменклатуры.Дата I = &ДатаВводаОстатков I И ВводНачальныхОстатковНоменклатуры.Комментарий I ПОДОБНО ""Перенос Источник -> Приемник"”"; ВыборкаДанных = Запрос.Выполнить() ; Рис. 8.3. Текст, формирующий выборку данных В результате работы правила будут удалены документы ввода начальных остатков, созданные ранее в процессе обмена.
118 1С:Предприятие 8. Конвертация данных
Глава 9 Алгоритмы и запросы Алгоритмы и запросы используются в тех случаях, когда необходимо неоднократно использовать какой-либо программный код в различных обработчиках правил обмена. Например, в обработчике события При выгрузке ПКС СубконтоДт и СубконтоКт наборов движений регистра бухгалтерии необходимо выполнить одинаковые действия. В зависимости от каких-то условий, как правило вида субконто, требуется определить правило конвертации объекта для значения и вида субконто - ИмяПКО и ИмяПКОВидСубконто соответствен но. На закладке Алгоритмы\3апросы формы Настройка правил обмена добавим новый алгоритм. Зададим ему имя ПриВыгрузкеСубконто. Рис. 9.1. Добавление нового алгоритма
120 1С:Предприятие 8. Конвертация данных Флажок Используется при загрузке предназначен для указания того, где будет использоваться алгоритм: на стороне источника или приемника. Если алгоритм используется при загрузке, то при выгрузке он будет недоступен. Запишем в форму алгоритма текст программного модуля, который необходимо выполнить, и сохраним созданный объект. Алгоритмы хранятся в одноименном справочнике, подчиненном справочнику Конвертации. Вызов алгоритма на платформе 1 (^Предприятия 8 осуществляется с помощью оператора Выпопнить(): Выполнить(Алгоритмы.ПриВыгрузкеСубконто) ; В коде алгоритма доступны все переменные, определенные в обработ- чике, из которого он вызывается. На платформе 1С:Предприятия 7.7 к алгоритму можно обращаться как к функции: ПриВыгрузкеСубконто О; При формировании текстов модулей обработок V77Exp.ert и V77lmp.ert вызов функции будет заменен вызовом с параметрами. В качестве параметров будут переданы все переменные, доступные в обработчике, из которого выполняется вызов. Для передачи в алгоритмы произвольных данных можно использо- вать механизм параметров. Откроем форму конвертации и на закладке Параметры добавим новый параметр ПараметрыАлгоритмов. Перед вызовом алгоритма можно поместить необходимые данные в параметр: Параметры.ПараметрыАлгоритмов = Новый Структура)); Параметры.ПараметрыАлгоритмов,Вставить("Субконто", Субконто); Параметры.ПараметрыАлгоритмов.Вставить("видСубконто", ВидСубконто); Выполнить(Алгоритмы.ПриВыгрузкеСубконто); А в алгоритме прочитать их: Субконто = Параметры.ПараметрыАлгоритмов.Субконто ; ВидСубконтОИсточника = Параметры,ПараметрыАлгоритмов.ВидСубконто;
Глава 9 Алгоритмы и запросы 121 Настройся правил обмена _ □ X Щ Сохранить правила ,J|3arpyaiTb правила ^Проверка ^Изменение правил Запустить приложение » ? ПТ!Открывать при входе Конвертация [Источник -> Приемник £ .]Q ; - ! Новая конаертагмя . Скопировать конвертацию 1 Правила ксттвертацни объектов Правите въгрузки данньк Поиск объектов в приемнике . Правила очистки данных Действия Действия • ^Др 'Чмязарооа алгоритма Рис. 9.2. Добавление параметра ПараметрыАлгоритмов Объекты типа Запрос могут использоваться только на платформе 1С:Предприятия 8. Создадим новый запрос. Настройка правил обмена _ С X Ц Сохраните правила ^Загрузить правила -^Проверка ^Изменение правил Запустеть приложение •- fi Открывать три входе Коннер гагия I Источнкк -> ГЬиемник ____ Действия - ^Добавить _4 |т»|А| [ Новаяконвертщия .J Скопировать конвертам» Действия - *?§йрбавитъ |Ирж алгоритма ПриЕЗыгрузкеСубконто Рис. 9.3. Новый запрос Объект сохранится в справочнике Запросы, подчиненном справочнику Конвертации.
122 1 (/Предприятие 8. Конвертация данных К нему можно обращаться следующим образом: Рис. 9.4. Обращение к объекту справочника
Глава 10 Типовые примеры правил. Обход проблем_________ Конвертация перечислений Поскольку перечисления имеют только предопределенные значения и не имеют свойств, настройка конвертации перечислений заключается в настройке соответствия значений источника значениям приемника, т. е. в создании правил конвертации значений. При создании правил конвертации значений (ПКЗ) желательно отслежи- вать, чтобы всем значениям источника было сопоставлено какое-либо значение приемника. В противном случае возможно возникновение ошибочной ситуации, при которой программа не знает, какое значение нужно сопоставлять значению источника. Рассмотрим пример, когда в источнике больше значений, чем в приемнике. Перечисление Состояния физлица имеет в источнике значения Сокращен и Не принят, для которых нет соответствия в приемнике. Рис 10.1. Соответствие значений По смыслу для значения Сокращен подходит значение Уволен, а для значения Не принят соответствия нет. В этом случае необходимо сопоставить значению источника Не принят пустое значение приемника.
124 1С:Предприятие 8. Конвертация данных Конвертация перечисления в справочник В справочнике Номенклатура в источнике реквизит СтавкаНДС имеет тип Перечисление, в приемнике реквизит СтавкаНДС - справочник. Рассмотрим несколько вариантов для организации такого обмена. Вариант 1 Создадим ПКО Перечисление ссылка: Ставки НДС -> Справочник ссылка: Ставки НДС. i СтавкиН Д С ______________ П еречислениеСсылка. СтавкиН ДС ПеречислениеСсылка. СтавкиН ДС | w ПеречислениеВСправочникСтавкиНДС1 ПеречислениеСсылка. СтавкиНДС СправочникСсылка. СтавкиНДС свойств (х) [ Конвертация значений Ссылки иг правил конвертации свойств ,_________________________________________ Синхронизация свойств.. Действия’- Добавить № ‘Ц’ ( О Помощь Q 1 эчить Поиск Исто. Пол... Приемник Правило кон... Тип .. Т ип приемника Алгоритм перед выгруз... п V п Код Строка (*4=9) Если Источник = Перечи... п ''V п Наименование Строка (П25) Если Источник = Перечи... м п СтавкаНДС СтавкиИДС ПеречислениеСсылка. СтавкиН Л С Значение = Источник; □ А □ Размер Число (6.3) Если Источник = Перечи. Рис. 10.2. Заполнение реквизитов в событиях Для реквизита приемника СтавкаНДС в обработчике Перед выгрузкой укажем: Значение = Источник; Установим по этому реквизиту поиск в приемнике. Для остальных реквизитов зададим значение в зависимости от значения источника, например для свойства Код: Если Источник = Перечисления.СтавкиИДС,БезНДС Тогда Значение - "Без НДС"; ИначеЕсли Источник = Перечисления.СтавкиИДС.НДС10_110 Тогда Значение = "10%/110%"; ИначеЕсли Источник = Перечисления.СтавкиИДС.НДС18_118 или Источник = Перечисления.СтавкиНДС.НДС20_120 Тогда Значение = "18%/118%"; ИначеЕсли Источник = Перечисления.СтавкиИДС.НДСО Тогда Значение =* "0%"; ИначеЕсли Источник = Перечисления.СтавкиИДС.НДС10 Тогда Значение = ИначеЕсли Источник = Перечисления.СтавкиИДС.НДС18 или Источник = Перечисления.СтавкиИДС.НДС20 Тогда Значение = "18%"; КонецЕсли;
Глава 10. Типовые примеры правил. Обход проблем 125 Зададим в настройках: Не замещать значение свойства у существующих объектов в приемнике. Созданное правило конвертации объектов можно использовать в ПКС, 1де источником будет перечисление, а приемником - справочник. Рис 10.3. Сопоставление типов Вариант 2 Создадим ПКО для справочника Ставки НДС с пустым источником, а у всех правил конвертации свойств установим флажок Получить из входящих данных. “ СправочникСтавкиНДС2 СправочникСсылка.СтавкиНДС “ СправочникСтавкиНДСЗ СправочникСсылка.СтавкиНДС стадия свойств (*) | Конвертация значений ' Ссылки из правил конвертации свой | фч Синхронизация свойств Действия ’ Добавить fe 1g ств -^1 JL Помощь Q I Отключить Поиск Источник Получи. Приетик Правило конверта... Тип ИС... Т ип приемника □ □ и Код Строка [Ф9] □ 11 м Наименование Строка (П 25) □ и й СтавкаНДС СтавкмНДС [ П еречислениеСсылка. СтавкиН ДС □ п Е Размер 1 Число [6.3] Рис. 10.4. Передача данных через входящие данные Поскольку источника в ПКО нет, то обязательно определяем в обработ- чике Перед выгрузкой переменную: КлючВыгружаемыхДанных = Строка(ВходящиеДанные.СтавкаНДС);
126 1С:Предприятие 8. Конвертация данных Затем в ПКО Номенклатура создаем ПКС для реквизита Ставка НДС с пустым источником, в обработчике Перед выгрузкой которого определяем ИсходящиеДанные в зависимости от значения реквизита источника: ИсходящиеДанные = Новый Структура("Код, Наименование, | СтавкаНДС, Размер"); ИсходящиеДанные.СтавкаНДС = Источник.СтавкаНДС; Если Источник.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда ИсходящиеДанные.Код = "Без НДС"; ИсходящиеДанные.Наименование = "Без НДС"; ИсходящиеДанные.Размер = 0; ИначеЕсли Источник.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 То гда ИсходящиеДанные.Код = ИсходящиеДанные.Наименование * "Расчетная Ставка НДС 10%"; ИсходящиеДанные.Размер = 10; ИначеЕсли Источник.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 или Источник.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда ИсходящиеДанные.Код = "18%/118%"; ИсходящиеДанные.Наименование - "Расчетная ставка НДС 18%"; ИсходящиеДанные. Размер - 18; ИначеЕсли Источник.СтавкаНДС ~ Перечисления.СтавкиНДС.НДСО Тогда ИсходящиеДанные.Код = ”0%"; ИсходящиеДанные.Наименование = "Ставка НДС 0%"; ИсходящиеДанные.Размер = С; ИначеЕсли Источник.СтавкаНДС = Перечисления. СтавкиНДС. НДС10 Тогда ИсходящиеДанные.Код = "10%"; ИсходящиеДанные.Наименование - "Ставка НДС 10%"; ИсходящиеДанные.Размер = 10; ИначеЕсли (Источник.СтавкаНДС = Перечисления.СтавкиНДС.НДС!8) или (Источник.СтавкаНДС = Перечисления.СтавкиНДС.НДС20) Тогда ИсходящиеДанные.Код = "18%"; ИсходящиеДанные.Наименование - "Ставка НДС 18%"; ИсходящиеДанные.Размер = 18; Иначе Отказ = Истина; КонецЕсли;
Глава 10. Типовые примеры правил. Обход проблем 127 Вариант 3 Создадим ПКО для справочника Ставки НДС с пустым источником, но, в отличие от предыдущего варианта, у правил конвертации свойств устанавливать флажок Получить из входящих данных не будем. < » СправочникСтавкиНДСЗ у | | СправочникСсылка СтавкиНДС свойств П | Конвертация значений , Ссылки из правил конвертации свойств .___________________________ Синхронизация свойств.. Действия^ > «^Добавить Efe О /1 Помощь . Q I ;ЧИТЬ Поиск Источник Получи... Приемник Правило конвертации Типи.. Т ип приемника □ □ Код Строка №5) п и Наименование Строка (П25) п СтавкаНДС СтавкиНДС Перечне лениеСсылка. СтавкиНДС □ □ Размер Число (6.3) Рис. 10.5. Передача параметров через структуру В этом случае в обработчике Перед выгрузкой ПКС Ставка НДС ПКО Номенклатура определим не ИсходящиеДанные, а значение реквизита источника: Значение = Новый Структура("Код, Наименование, 1 СтавкаНДС, Размер"); Значение.СтавкаНДС = Источник.СтавкаНДС; Передача предопределенных значений В некоторых случаях необходимо задать предопределенное значение реквизита, которое известно уже на стороне выгрузки. Например, выгрузить справочник Внеоборотные активы в справочник Номенклату- ра. В справочнике Внеоборотные активы нет реквизита Вид номенкла- туры, однако заведомо известно, что реквизит Вид номенклатуры должен принимать в приемнике значение Перечисления.ВидыНоменкла- туры.Материал. Вариант 1. Передача значения с помощью ПКО Можно создать для вида номенклатуры ПКС с пустым источником, указать правило конвертации для перечисления ВидыНоменклатуры и задать в обработчике ПередОбработкой значение источника.
128 1 С.Предприятие 8. Конвертация данных Рис. 10.6. Установка значения перед выгрузкой Вариант 2. Передача значения без ПКО Можно создать ПКС без указания правила конвертации объекта, а значение реквизита задать строкой, соответствующей предопределен- ному значению, как оно задано в конфигураторе в приемнике. Рис. 10.7. Значение реквизита
Глава 10. Типовые примеры правил Обход проблем 129 Вариант 3. Передача в выражение Можно создать ПКС аналогично предыдущему, но в обработчике задать выражение, которое будет выполнено на стороне приемника, а результат записан в реквизит: Выражение = Перечисления.ВидыНоменклатуры.Материал; Конвертация справочников Перенос независимого справочника в подчиненный Рассмотрим пример переноса независимого справочника Единицы измерения в подчиненный справочник. В источнике справочник Единицы измерения является независимым и имеет структуру. Рис. 10.8. Структура справочника Единицы измерения в источнике В приемнике справочник Единицы измерения подчинен справочнику Номенклатура и имеет реквизит Единица по классификатору
130 1С:Предприятие 8. Конвертация данных Рис. 10.9. Структура справочника Единицы измерения в приемнике СправочникКлассификаторединицизмеренияимеет структуру, соответс- твующую структуре справочника Единицы измерения источника. Создадим ПКО Классификатор единиц измерения. КлассиФикагорЕдинииНзмерения СгравочникСсылка.ЕдиницыИ змерения Пбхр.кт ... . ... , СправочникСсылка. КлассиФикагорЕд1*«1И змерения я свойств Г) | Конвертация значений П Ссылки из правил кснвергации свойств ______________________________________________ Действия * . Добавить № tg -Ц. |^j Jjg- jQ. i ,-л Помощь i Q й I точить Поиск Источник Получи □ Код □ Е____Наим □ □ |Пометк.„ Q Приемник_______ Код____________ Наименование П омегкаУда ления Тип источника Строка (Ф9) Строка (П25) Булево Т ип приемника Строка (Ф9] Строка (П25) Булево Рис. 10.10. Правило конвертации объекта Классификатор единиц измерения Рассмотрим два варианта решения проблемы. В первом случае справоч- ник Единицы измерения источника будет сопоставлен с одноименным справочником приемника, причем в качестве реквизита Единица по классификатору будет передаваться значение самого элемента справоч- ника Единицы измерения. Владелец элемента справочника должен быть получен из входящих данных. Во втором варианте в качестве источника зададим элемент справочника Номенклатура. В этом случае нет необходимости определять входящие данные, реквизит Единица по классификатору будет взят из реквизита справочника Номенклатура.
Глава 10. Типовые примеры правил. Обход проблем 131 Вариант 1 Создадим ПКО для справочника Единицы измерения. : -» ЕдиницыИзмерения! Спраао*и<Ссылка.ЕдиницыИзмерения |СправочникСсылка ЕдиныьИзмерения свойств П [Конвертация значений Ссылки из травил конвертации свойств_________________________________________________________________ Сгм<р<»нзгция свойств Действия» «^Добавить Йй "Ц. | -i' Помощь I Q 0 I МИТЬ Поиск Источник Полу. Приимик Правило конвертации Тип источни... Тип приемнжа Алгоритм пере п Наймем. 1 Кгмленсе^г^е Строка (П25) Строка (П50) у ту ЕдиницаПоКллс. К лассмфикаторЕдиницИ змерения СпраеочникСсылка.КлассиФикаторЕд... Значение = > Si и Владелец Номенклатура СвраеочникСсылка.Номенклатура 1 Коэффициент Число (103) Значение = 1: Помегк. ПометкаУда пения Булево Булево Рис. 10.11. Правило конвертации объекта Единицы измерения У правила конвертации свойств установим флажок Получить из входящих данных. В обработчике Перед выгрузкой ПКС ЕдиницаПоКпассификатору напишем: Значение = Источник; Зададим в обработчике Перед выгрузкой ПКО: КлючВыгружаемыхДанных = Строка(ТипЗНЧ(ВходящиеДанные.Владелец)) + ВходящиеДанные.Владелец.Код + Источник.Код; Реквизит Коэффициент, которого нет в источнике, зададим явно: Значение = 1; Поскольку реквизит Владелец должен быть получен из входящих данных, то во всех ПКС, которые используют правило, необходимо задать структуру исходящих данных: Исходящие .энные - Новый Структура("Владелец", Источник); ПКО может использоваться для переноса основной единицы измерения справочника Номенклатура. Это же ПКО будем использовать для задания значения единицы измерения при переносе справочника Внеоборотные активы в справоч- ник Номенклатура. Поскольку справочник Внеоборотные активы не имеет реквизита Основная единица измерения, то в ПКС реквизита определим значение как структуру, которое будет передано в ПКО Единицы измерения как источник: Значение = Новый Структура("Код, Наименование, ПометкаУдаления", "796", "Штука", Ложь)•
132 1С:Предприятие 8. Конвертация данных Вариант 2 В ПКС ОсновнаяЕдиницаИзмерения ПКО Номенклатура в обработчике Перед выгрузкой задать в качестве источника для единицы измерения саму номенклатуру: Если ЗначениеЗаполнено(Источник.ОснЕдиницаИзмерения) Тогда Значение = Источник; Иначе Отказ = Истина; КонецЕсли; Тогда нам понадобится ПКО Справочник ссылка: Номенклатура --> Справочник ссылка: Единицы измерения. Рис. 10.12. Конвертация номенклатуры в единицу измерения Значение наименования заполним из наименования основной единицы источника, в качестве владельца укажем сам источник. В обработчике Перед выгрузкой ПКО укажем: Если Источник.ЭтоГруппа Тогда Отказ = Истина; ИначеЕсли Не ЗначениеЗаполнено(Источник.ОснЕдиницаИэмеренин) Тогда Отказ = Истина; КонецЕсли; Перенос элементов справочника в отдельную группу В некоторых случаях требуется перенести все элементы справочника в отдельную группу приемника. Например, при объединении информа- ции нескольких организаций или при слиянии нескольких справочни- ков в один. Реализуем такой перенос следующим образом: при выгрузке элемента или группы справочника будем проверять, на каком уровне иерархии он находится. И если он находится на самом верхнем уровне, то в качестве
Глава 10. Типовые примеры правил. Обход проблем 133 родителя зададим ему созданную группу справочника приемника. То есть если элемент справочника находится на втором уровне, он будет перенесен в ту группу справочника, в которой и был. Но группа- родитель этого элемента будет перенесена в специально созданную группу. Рассмотрим пример переноса справочника Внеоборотные активы в справочник Номенклатура. Для того чтобы элементы справочни- ка Внеоборотные активы источника не смешивались в приемнике с остальной номенклатурой товаров и услуг, перенесем их в отдельную группу с наименованием Внеоборотные активы. Г ру ппаБнеоборотныеАктивь| | СправочнмкСсылка.Н оменкл атура свойств (’) | Конвертация значений Ссылки из правил конвертации свойств______________________________________________ Синхронизация свойств.. Действия* ^Добавить tat )чить [Поиск [Источник. Получи... Приемник____ Наименование Родитель ЭтоГ руппа Правило конвертации_______Алгоритм перед выгрузкой свойства_ _______________Значение *= “Внеоборотные активы”; Г руппаВнеоборотныеАктивы Пусто =1; ________ ___________ Значение = Истина; Рис. 10.13. Перенос внеоборотных активов в но менклатуру Тогда в ПКО Справочник ссылка: Внеоборотные активы —> Справочник ссылка: Номенклатура в ПКС Родитель укажем: |ЬправочникСсылка.Ьнеоооротные^ктивы | СправочникСсылка Номенклатура -1-~< — , 1ГпП| -Ц. Синхронизация свойств .. Действия * ^Добавить & |F^| |^-| jQ i Помощь Q I “ ВнеоборотныеАмивы ——Г пппп aP.uarihi-iniTrub.iiari свойств П I Конвертация значений 1 Ссылки из правил конвертации свойств чить Поиск Источник Получ Приемник Правило конвертации Алгоритм перед выгрузкой свойства м Наименование □ Наименование 1*1 Родитель 11 Родитель В необоротныеАктивы Если Источник.Уровень[) = 0 Тогда м Это! руппа U ЭтоГруппа 11 1 и ПометкаУдаления □ П ометкаУдаления □ Рис. 10.14. Укажем алгоритм правила конвертации Если Источник.Уровень() - 0 Тогда Значение = 1; ИмяПКО = "ГруппаВнеоборотныеАктивы"; КонецЕсли; Перенос одного справочника в два В источнике имеется справочник Подразделения. В приемнике - два справочника: независимый - Подразделения, подчиненный справочни- ку Организации — Подразделения организаций. Необходимо перенести
134 1С:Предприятие 8. Конвертация данных один справочник в два и создать запись регистра сведений Соответс- твие подразделений и подразделений организаций, связывающую эти два объекта. Решать эту задачу будем следующим образом: на основе справочни- ка Подразделения источника будем формировать регистр сведений приемника, а элементы справочников Подразделения и Подразделе- ния организаций приемника будут создаваться по ссылкам из записей регистра. Создадим ПКО Подразделения. hl* Подразделения СправочникСсылка. Подразделения 1 -- ** ПодразделенияО рганизаций СправочникСсылка.Подразделения Зправочн — Г., л-.п. Г-г*— -г--. , Г свойств П ГКонвертация значений <____________________________________________________________________________ Синхронизация свойств... Действия» , «^^обавить i -fr. Помощь Q "Ф I чигь Поиск Источник Получить... Приемник Правило конве... Т ип приемника и Код □ Код Число (9.0) п Наименование □ Наименование Строка (П40) п П ометкаУ деления □ ПометкаУдаления Булево □ Родитель п Родитель Подразделения СправочникСсылка. П сдразделения Рис. 10.15. Правило конвертации объекта Подразделения Создадим ПКО Подразделения организаций. ПодразделенияОрганизаций [оржочник&ъыкаПедраед^^ния ТсправочникСсылка. ПодраеделенияО рганизаци₽н| ойств (*) { Когсертация значений________________________________________________________ _________________________________________________ инхрснизациясвойств Действия-* -Ц Добавить JKПомощь \ Q * I ть Поиск Неточны; По . Приемник. Правило конвертации Тилгриемника Алгоритм перед вь н Код □ Код Числа (9.0J п Нгиленс ваше - Наименование Строка [П40] п ПометкаУдаления ПометкаУдаления Булево п Родитель Родитель Справо*««Ссылка.Псщразделения0рганизаций га А/ 3 Владелец Организации СправочникСсылка.Организации Значение = 1; Рис. 10.16. Правило конвертации объекта Подразделения конвертаций Создадим ПКО для регистра сведений, в котором источником является справочник Подразделения, приемником - регистр сведений. : — СоответствиеПодразделенийУ1ПодраааеленйМЗрганизаций СправсчникСсылка.Псдразделения^рРегистрСведенийЗапись СоответствиеПсдразделенийИПодразделвымО ция свойств [*] f Конеергация значений '________________________________________________________________________________________________________________ ^(Синхронизация свойств Действия- '• ^Добавить SB Помощь , Q I ключигь Поиск Источник По. Приемник Правило конвертации Тип гриеьшка Алгоритм перед выгруз. 1 п И Организация Организации СлравочникСсылка.Организации Значешес!. ] п & п Подразделение Подразделения Справотик Ссылка Подразделения Значение « Источник. 1 □ 3 ПодразделениеОрганизации ПодразделенияОрганизаций СграаочникСсЫлка ПодразделенияО рганизаций Значение = Источник. Рис. 10.17. Правило конвертации объекта для регистра сведений
Глава 10. Типовые примеры правил. Обход проблем 135 А для непосредственного переноса данных создадим одно ПВД. | СправочникСсылка. Подразделения [Стандартная выборка Объект выборки: Способ выборки: Правило конвертации: | СоответствиеПздразделенийИПодразделенийСрганиэаций I | Выбирать данные для выгрузки одним запросом Основная [ Дополнительно ________________________________________________ Код (имя) правила: |СоответствиеПодразделенийУ1Подразделений0рганизаций | Перед обработкой Перед выгрузкой После выгрузки После обработки Рис. 10.18. Правило выгрузки данных При выгрузке записи регистра сведений по ссылкам из ПКС будут вызваны ПКО для подразделений и подразделений организаций. В результате будут перенесены все созданные объекты. Перенос строки в справочник В практике создания правил обмена часто возникает потребность переноса информации из реквизита примитивного типа (Строка, Число) в реквизит, имеющий ссылочный тип данных. Для решения такой задачи, как правило, создается ПКО, в которое в качестве источника будет передаваться значение примитивного типа. Это значение должно быть передано в значение реквизита справочни- ка, по которому осуществляется поиск в приемнике. Рассмотрим пример конвертации строки в справочник. В справочни- ке Контрагенты в источнике - реквизит Должность строкового типа, в приемнике реквизит выбирается из справочника Должности. Создадим правило конвертации объекта, которое позволит по значению строки реквизита источника найти или создать в справочнике Должности информационной базы-приемника элемент с таким наименованием. Создадим ПКО для справочника Должности с пустым источником. СтрокаВ Должность | СправочникСсылка. Должности свойств П | Конвертация значений __________________________________________ Синхронизация свойств... Действия’ ‘ Добавить № |^| |^| । Помощь с чить Поиск Источник п... П риемник Правило ко... Т ип приемника Алгоритм перед выгрузкой 0 □ Н ^именование Строка (П25) Значение = Источник; Рис. 10.19. Правило конвертации объекта с пустым источником
136 1С Предприятие 8. Конвертация данных В настройках ПКО установим флажок Автоматически генерировать номер или код, если он не задан. В алгоритме Перед выгрузкой единственного ПКС зададим: Значение = Источник; С помощью полученного ПКО значение строки будет конвертировать- ся в наименование элемента справочника, и по нему будет осущест- вляться поиск. Перенос иерархического справочника в неиерархический Если при таком обмене ставится задача не потерять информацию о группах справочника и иметь возможность отличить в приемнике элементы, перенесенные из разных групп источника, то необходи- мо записать информацию о родителе элемента в один из реквизитов приемника, например, наименование группы родителя добавить к наименованию элемента. Настроим перенос многоуровневого справочника Должности в одноуров- невый. '•••» Должности | СправочникСсылкаДолжности [СправстникСсылкаДслжности СтрокаВ Должность|I СправочникСсылка Должности свойств Г) | Конвертация значений _______________________________________________________________ Синхронизация свойств... j Действия- «^Добавить fe |l^j| р«' ж]. sgf i Помощь Q 1ЧИТЬ Поиск Источник Получи... Приемник Правило к... Т ип приемника Алгоритм пер и Код п Код Строка [Ф11) п Наименование п Наименование Строка (П25) Если Знамени □ П ометкаУдаления □ П ометкаУдаления Булево Рис. 10.20. Перенос многоуровневого справочника в одноуровневый В обработчике Перед выгрузкой ПКО укажем: Если Источник.ЭтоГруппа Тогда Отказ = 1; КонецЕсли; Чтобы не потерять информацию о группе источника, запишем ее в наименование. Для этого в обработчике Перед выгрузкой ПКС Наимено- вание запишем: Если ЗначениеЗаполнено(Источник.Родитель) Тогда Значение = Источник.Наименование + " (" + Источник.Родитель.Наименование + ")"; КонецЕсли;
Глава 10. Типовые примеры правил. Обход проблем 137 В результате элементы справочника второго уровня будут перенесены без потери информации о группе (рис. 10.21, 10.22). Рис. 10.21. Элементы справочника второго уровня Рис. 10.22. Результат переноса Доработаем правило для выполнения предыдущей задачи, т. е. для конвертации строки в элемент справочника. Для этого в обработчиках правила предусмотрим случай, когда тип значения источника - Строка. Заменим текст обработчика Перед выгрузкой ПКО Должности на следующий: £сли ТипЗНЧ(Источник) <> Тип ("Строка") и Источник.ЭтоГруппа Тогда Отказ = 1; КонецЕсли; В обработчике Перед выгрузкой ПКС Код зададим пустое значение: Если ТипЗнч(Источник) = Тип("Строка") Тогда Пусто = 1; КонеиЕсли; А в настройках ПКО укажем Автоматически генерировать номер или код, если не указан.
138 1С Предприятие 8 Конвертация данных В обработчике Перед выгрузкой ПКС Наименование передадим источник в значение: Если ТипЗнч(Источник) = Тип("Строка") Тогда Значение = Источник; ИначеЕсли ЗначениеЗаполнено(Источник.Родитель) Тогда Значение = Источник.Наименование + " (" + Источник.Родитель.Наименование + ")"; КонецЕсли; Обработаем поиск в случае пустого кода. Для этого в полях поиска напишем: Если НомерВариантаПоиска - 1 Тогда СтрокаИменСвойствПоиска = "Кол”; ИначеЕсли НомерВариантаПоиска ~ 2 Тогда СтрокаИменСвойствПоиска = "Наименование"; КонецЕсли; Созданное правило можно использовать и в случае, когда источник - ссылка на справочник Должности, и в случае, когда источник - Строка. Подбор реквизитов по типу значения в источнике Рассмотрим перенос значения реквизита составного типа в реквизит простого типа. В типовых конфигурациях часто встречается набор реквизитов документов и справочников: Счет, Субконто1, Субконто2, СубконтоЗ. Для демонстрации переноса значений таких реквизитов в реквизи- ты определенного типа в демонстрационной конфигурации созданы документы: Требование накладная и Списание материалов. В документе Требование накладная есть реквизиты Субконто1 и Субконто2. В докумен- те Списание материалов - реквизиты Подразделение и Статья затрат. При выгрузке будем проверять тип значения реквизитов Субконто1 и Субконто2, и если тип совпадает с типом значения реквизита приемни- ка, то передадим это значение в приемник. В ПКО Документ ссылка: Требование накладная -> Документ ссылка: Списание материалов созданы ПКС для реквизитов Подразделение и Статья затрат с пустым источником.
Глава 10. Типовые примеры правил. Обход проблем -j 3g В обработчике Перед выгрузкой ПКС Подразделение помещен текст: Если ТипЗнч(Источник.Субконто!) = Тип("СправочникСсылка.Подразделения") Тогда Значение = Источник.Субконто!; ИначеЕсли ТипЗнч(Источник.Субконто2) ₽ Тип("СправочникСсылка.Подразделения") Тогда Значение - Источник.Субконто2; Иначе Отказ = Истина; КонецЕсли; В обработчике ПКС Статья затрат помещен текст: Если ТипЗнч(Источник.Субконто!) = Тип("СправочникСсылка,СтатьиЗатрат") Тогда Значение =< Источник.Субконто!; ИначеЕсли ТипЗнч(Источник.СубконтоЗ) = Тип("СправочникСсылка,СтатьиЗатрат") Тогда Значение = Источник.Субконто2; Иначе Отказ = Истина; КонецЕсли; В результате при выгрузке данных будет осуществляться подбор значений по типу реквизита источника. Подбор реквизитов по типу значения в приемнике Рассмотрим обратную задачу, когда необходимо значение определен- ного типа перенести в значение составного типа: Субконто1, Субконто2, СубконтоЗ. На стороне выгрузки мы не знаем, какие именно виды субконто соответс- твуют реквизиту Счет затрат приемника. То есть неизвестно, какой реквизит источника в какое субконто приемника можно переносить. Принцип решения проблемы такой: передадим значения реквизитов источника в реквизиты Субконто1, Субконто2. Причем безразлично какой реквизит в какой передавать. До окончательной записи загруженного объекта в информационную базу проверим соответствие загруженных значений видам субконто счета затрат и, если необходимо, поменяем значения загруженных субконто местами или откажемся от загрузки тех или иных значений.
140 1 С:Предприятие 8. Конвертация данных Для правила конвертации объекта Документ ссылка: Списание материа- лов —> Документ ссылка: Требование накладная настроим ПКС Подразде- ление —> Субконто1 и СтатьяЗатрат —> Субконто2. : Списанием атериалов " ‘ [документОсылкаСписаниеМатериалое ДокдменгСсылкаТребованмеНакладная I нация свойств П [ Конвертация значений_________________________________________________________________________ | ^Синхронизациясвойств.. Действия- ^Добавить 1а Г]1 i,Помощь Q I Отключить Поиск Источник Получ.. Приемник Правило конвертации Тип приемника □ и Лата п Лата Дата и время □ Р1 Номер п Номер Строка (ПТ 1) □ и п Организация Организации С правочникСсыл □ п Склад П Склад Склады СправочникСсылка. □ п СчетЗатрат п СчетЗатрат Основной П ланСчетовСсылка □ п П ометкаУдаления п ПометкаУдаления Булево □ п Проведен п Проезде^ Булево □ п Подразделение п Субконго! П одразделенияОрганизаций СгравочникСсылка. □ п СтатьяЗатрат Q__j Субконго2 СтатьиЗатрат СправочникСсылка. Рис. 10.23. Настроим правила конвертации свойств В обработчике После загрузки ПКО, т. е. когда объект уже полностью создан, но еще не записан, проверим соответствие загруженных субконто видам субконто реквизита Счет затрат: Субконто= " Субконто''; Счет = Объект.СчетЗатрат; //запоминаем счет //Запоминаем загруженные субконто источника в структуру КоллекцияСубконто = Новый Структура]); Для Сч = 1 По 2 Цикл КоллекцияСубконто.Вставить(Субконто+Сч, Объект[Субконто+Сч]); КонецЦикла; //для каждого субконто счета Для СчС = 1 По Счет.ВидыСубконто.Количество() Цикл //Счетчик субконто-источника Для Сч = 1 По 2 Цикл Если Счет.ВидыСубконто[СчС- 1].ВидСубконто.ТипЗначения.СодержитТип( ТипЗнч(КоллекцияСубконто[Субконто+Сч])) Тогда // Если тип субконто совпадает, //то присваиваем значение субконто-источника приемнику Объект[Субконто+СчС] = КоллекцияСубконто[Субконто+Сч]; Прервать; КонецЕсли; КонецЦикла; КонецЦикла;
Глава 10 Типовые примеры правил. Обход проблем 141 В этом случае мы использовали реквизиты приемника Субконто1 и Субконто2 для передачи информации в приемник и в зависимости от значения счета затрат приемника и его видов субконто приняли решение о возможности использования переданных значений в качестве субконто. Перенос периодического реквизита в регистр сведений При создании правил обмена между информационными базами на платформе ЮЛредприятия 7.7 и ЮЛредприятия 8 часто возникает задача передачи значений периодического реквизита в справочник регистра сведений. Для решения задачи выберем значения периодического реквизи- та источника за определенный период и сформируем из получен- ной информации таблицу значений со структурой, соответствующей структуре регистра сведений. Типичный пример - конвертация курсов валют. В информационной базе-источнике на платформе ЮЛредприятия 7.7 имеется справочник Валюты с периодическим реквизитом Курс. В приемнике для хранения информации о курсах валют имеется регистр сведений Валюты с измерением Валюта и ресурсом Курс. Вначале создадим ПКО с пустым источником для регистра сведений Валюты. Рис. 10.24. Правило конвертации объекта с пустым источником Поскольку мы заведомо знаем, что запись регистра будет выгружать- ся один раз, поставим в настройках правила флажок Не запоминать выгруженные объекты. Создадим ПВД для этого правила с произвольным алгоритмом выгрузки, который запишем в обработчике Перед обработкой. В начале
142 1С:Предприятие 8. Конвертация данных алгоритма создадим таблицу значений, соответствующую по структу- ре свойствам ПКО: ВыборкаДанных = СоздатьОбъект("ТаблицаЗначений"); ВыборкаДанных.НоваяКолонка("Валюта",,,,,); ВыборкаДанных.НоваяКолонка("Период", "Дата",,,,); ВыборкаДанных.НоваяКолонка("Курс","Число",10,3,,); Затем выберем все элементы справочника Валюта. Для каждого элемента выберем значения периодического реквизита и создадим запись в таблице значений: СправочникВалюты = СоздатьОбъект("Справочник.Валюты"); СправочникВалюты.ВыбратьЭлементы(); Пока СправочникВалюты.ПолучитьЭлемент() > 0 Цикл КурсВалюты = СоздатьОб-ьект ("Периодический") ; КурсВалюты.ИспользоватьОбъект("Курс", СправочникВалюты.ТекущийЭлемент()) ; Если ПустоеЗначение(ДатаОкончания) = О Тогда КурсВалюты.ВыбратьЗначения(ДатаНачала, ДатаОкончания); Иначе КурсВалюты.ВыбратьЗначения(ДатаНачала); КонецЕсли; ЕстьКурс = 0; Пока КурсВалюты.ПолучитьЗначение() >0 Цикл Если КурсВалюты.ДатаЗнач = ДатаНачала Тогда ЕстьКурс =1; КонецЕсли; ВыборкаДанных.НоваяСтрока(); ВыборкаДанных.Период = КурсВалюты.ДатаЗнач; ВыборкаДанных.Валюта = СправочникВалюты.ТекущийЭлемент(); ВыборкаДанных.Курс = КурсВалюты.Значение; КонецЦикла; //Если на дату начала курс не менялся, //то возьмем последнее значение Если (ЕстьКурс = О) и (СправочникВалюты.ТекущийЭлемент().Курс.Получить(ДатаНачала) О 0) Тогда ВыборкаДанных.НоваяСтрока(); ВыборкаДанных.Период = ДатаНачала; ВыборкаДанных.Валюта = СправочникВалюты.ТекущийЭлемент(); ВыборкаДанных.Курс = СправочникВалюты.ТекущийЭлемент().Курс.Получить(ДатаНачала); КонецЕсли; КонецЦикла;
Глава 10. Типовые примеры правил. Обход проблем 143 В полученной выборке данных будут содержаться все изменения курсов валют за период выгрузки: ДатаНачала и ДатаОкончания, а также значения курсов валют на начало периода. Каждую строку таблицы значений Выборка данных ПВД будет передавать в ПКО Курсы валют, в результате чего будет осуществлена конвертация данных из периодического реквизита в периодический регистр сведений. Перенос периодических реквизитов на платформе 1С:Предприятия 7.7 Для передачи одного значения периодического реквизита справочника на определенную дату в обработчике Перед выгрузкой ПКС реквизита укажем, на какую дату будет взято значение: Значение = Источник.ЦенаПродажи.Получить(ДатаНачала); В обработчике При загрузке укажем дату установки: ДатаУстановки = Фо-мДатаНач; Передачу всей истории реквизита можно реализовать как передачу произвольных данных. Для этого мы создадим XML-узел, назовем его Периодический. Выберем все значения периодического реквизита справочника и для каждого значения на каждую дату создадим узел ПериодическоеЗначение, подчиненный узлу Периодический. В XML-узел ПериодическоеЗначение запишем в качестве атрибутов узла значение периодического реквизита и дату этого значения. Затем добавим узел Периодический в качестве подчиненного к узлу выгружаемого элемента справочника, который доступен в обработчике При выгрузке как переменная Приемник. При загрузке объекта будем считывать информацию из узла Периоди- ческий и средствами встроенного языка добавим необходимые значения периодического реквизита объекта-приемника. Передачу истории реквизита через произвольные данные рассмотрим на примере реквизита Цена продажи справочника Номенклатура. Чтобы поместить информацию о значениях периодического реквизи- та в файл обмена, воспользуемся обработчиком При выгрузке ПКО Номенклатура. В этом обработчике имеется доступ к переменной Приемник, содержащей XML-узел объекта-приемника.
144 1С Предприятие 8 Конвертация данных Запишем в обработчик текст, в котором создается XML-узел, содержа- щий информацию о значениях периодического реквизита Если Источник.ЭтоГруппа() = О Тогда Имя = "ЦенаПродажи"; Периодический = СоздатьОбъект("Периодический"); Периодический.ИспользоватьОбъект(Имя, Источник); УзелПериодического = СоздатьУзел("Периодический"); УстановитьАтрибут(УзелПериодического, "Имя", Имя); Если Периодический.ВыбратьЗначения()=1 Тогда Пока Периодический.ПолучитьЗначение()=1 Цикл Значение = Периодический.Значение; ДатаЗнач = Периодический.ДатаЗнач; УзелЗначения = СоздатьУзел("ПериодическоеЗначение"); УстановитьАтрибут(УзелЗначения, "ДатаЗнач", ДатаЗнач); УстановитьАтрибут(УзелЗначения, "Значение", Значение); ДобавитьПодчиненный(УзелПериодического, УзелЗначения); КонецЦикла; КонецЕсли; ДобавитьПодчиненный(Приемник, УзелПериодического); КонецЕсли; В результате в файл обмена, в узел объекта непосредственно после узла ссылки, будет помещен текст узла, который мы назвали Периодический. - «Объект Пип="14" Тип-'СправочникСсылка.Номенклатура" ИмяПравила="Номенклатура"> - «Ссылка Нпп="14"> - «Свойство Имя="Код" Тип="Строка"> «Значение>000000007«/Значение> «/Свойство> - «Свойство Имя="ЭтоГруппа" Тип="Число"> «Пусто /> «/Свойство «/Ссылка> _ : .. ...... * __________ - «Периодический Имя="ЦенаПродажи'5 «ПериодическоеЗначение ДатаЗнач="01.01.80" Значение="ЗОО" /> «ПериодическоеЗначение ДатаЗнач="01.01.07" Значение="600" /> «ПериодическоеЗначение ДатаЗнач="01.06.07" Значение="б50" /> «ПериодическоеЗначение ДатаЗнач="09.02.08" Значение="700" /> «/П ериодич еский> ~ «Свойство 14мя=’Наименование" Тип="Строка"> «Значение>Установка программного обеспечения«/3начение> «/Свойство> Рис. 10.25. Файл обмена данными
Глава 10. Типовые примеры правил. Обход проблем 145 Узел Периодический содержит, в свою очередь, узлы ПериодическоеЗна- чение с атрибутами ДатаЗнач и Значение. Прочитать эту информацию можно в обработчике При загрузке из переменной Узел: Если Объект.ЭтоГруппа() = О Тогда УзлыПериодического = Узел.ВыбратьУэлы("Периодический"); Для СчУзлов = 0 По УзлыПериодического.КоличествоУэлов-1 Цикл УзелПериодического = УзлыПериодического.ПолучитьУзел(СчУзлов); Имя = УзелПериодического.ПолучитьАтрибут("Имя”); Периодический = СоздатьОбъект("Периодический"); Периодическим ИспользоватьОбъект(Имя, Объект)- Выборка = УзелПериодического.ВыбратьУзлы("ПериодическоеЗначение"); Для Сч = 0 По Выборка.КоличествоУзлов-1 Цикл УзелЗначения = Выборка.ПолучитьУзел(Сч); ДатаЗнач = УзелЗначения.ПолучитьАтрибут("ДатаЗнач"); Значение = УзелЗначения.ПолучитьАтрибут("Значение"); Периодический.ДатаЗнач = ДатаЗнач; Периодический.Значение = Значение; Периодический.Записать(); КонецЦикла; КонецЦикла; КонецЕсли, В обработчике При загрузке элемент справочника уже найден или создан. Он доступен в качестве переменной Объект, в него мы и записали прочитанные из файла обмена значения. Конвертация документов Передача одной табличной части в две Задачу можно реализовать созданием двух ПКГС, в которых будет один и тот же источник, но разные приемники. Отбор строк для выгрузки в ту или иную табличную часть можно организовать в обработчике Перед выгрузкой, который выполняется для каждой строки. Рассмотрим конвертацию документа Оказание услуг, который в источни- ке содержит одну табличную часть, а в приемнике - две: отдельно для продаваемых материалов и для оказываемых услуг.
146 1С:Предприятие 8. Конвертация данных В ПКО для этого документа создадим два ПКГС. ' -» ОказаниеУслуги | ДокументСсылка.0казаниеУслупи Конвертация свойств (*] [ Конвертация значений , f Д ^Синхронизация свойств... Действия* «^Добавить a jg* р Отключить Поиск Источник Получ... Приемник «а □ п Клиент п Клиент □ п Мастер п Мастер ж □ п Склад п Склад «м □ п 0 бъектО снование п 0 бъектО снование « п п П ометкаУ деления п П ометкаУд аления э м □ □ □ Проведен ПереченьНоменклатуры □ п Проведен П ереченьН оменклатуры ЧИ □ ПереченьНоменклатуры □ Услуги Рис 10.26. Перенос одной табличной части в две В обработчике Перед выгрузкой первого укажем: Если ОбъектКоллекции.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда Отказ = Истина; КонецЕсли; В обработчике второго укажем: Если ОбъектКоллекции.Номенклатура.ВидНоменклатуры О Перечисления,ВидыНоменклатуры.Услуга Тогда Отказ = Истина; КонецЕсли; В результате табличная часть источника Перечень номенклатуры будет разделяться на две табличные части приемника. Передача двух табличных частей в одну Для конвертации двух табличных частей документа в одну использу- ем переменную НеОчищать, которая позволяет отключить очистку табличной части приемника перед загрузкой второй табличной части источника. Документ Приходная накладная источника имеет две табличные части: Материалы и Услуги. В приемнике - одна табличная часть.
Глава 10. Типовые примеры правил. Обход проблем 147 « ПрихсднаяНак ладная | Д оку меетСсылка. ПрихсднаяНак ладная конвертация свойств (*) [ Конвертация значений , t Д Синхронизация свойств . Действия ’ ^Добавить Ш * ев- Отключить Поиск Источник Получ... Приемник Правило kohbi □ I?! Дата п Дата «а □ й Номер п Номер «а □ ЕЛ п Организация «а □ П Контрагент п Контрагент Контрагенты <а □ п Склад п Склад Склады «а □ □ П ометкаУд а ления п П ометкаУ деления □ п Пповялен □ Провялен □ Материалы п Материалы * а □ Услуги □ Материалы * Рис. 11.27. Перенос двух табличных частей в одну В ПКГС второй табличной части Услуги в обработчике Перед обработ- кой укажем: Если Источник.Материалы.Количество() > 0 Тогда НеОчищать = Истина; КонецЕсли; Формирование набора движений в ПКГС Рассмотрим перенос ручной операции из информационной базы на платформе ЮЛредприятия 7.7 в информационную базу на платформе 1С:Предприятия 8. Проблема заключается в том, что документ Операция на платформе ЮЛредприятия 7.7 не имеет табличной части. Организу- ем перенос проводок в набор движений регистра бухгалтерии докумен- та Операция приемника на платформе ЮЛредприятия 8. Сделать это можно, выбрав на стороне источника средствами встроен- ного языка ЮЛредприятия 7.7 проводки операции и сформировав таблицу значений КоллекцияОбъектов, которая и будет выступать в качестве источника для набора движений регистра бухгалтерии. Структура таблицы значений должна совпадать со структурой набора движений, за исключением тех реквизитов, значения которых задаются в обработчиках ПКС этих реквизитов. Создадим ПКО для переноса ручной операции, в котором ПКГС для набора движений будет иметь пустой источник. Все ПКС для реквизитов набора движений также будут иметь пустой источник.
148 1С:Предприятие 8. Конвертация данных ' Операция ] ДокументСсылк.а Операция j ДокументСсылка. Операция конвертация свойств П | Конвертация значений , t 4 «^Синхронизация свойств.. Действия” 1 ^Добавить Ш 1g |F^j| ч! ' ЬЗ1 Ж' Помощь Q Отключить Поиск Источник Получит... Приемник Правило конве.. Т ип приемника > □ и Номер Док п Номер Строка (ПЭ) * □ и ДатаДок □ Дата Дата и время □ и □ Организация Организации СправочникСсылка. 0 рганизации п п ПометкаУ да ления гп ПометкаУдаления Булево Л fei □ □ Управленческий (Набор движений регистра бухгалтерии Рис. 10.28. Перепое операции j Ь Операция [ДокументСсылкаОперация [ ДокументСсылка Операция [ онвертация свойств Г) j Конвертация значений__________________________________________________________________ Ж Д «^Синхронизация свойств... j Действия ” Добавить Кй р%] *0. | J-'-Помощь Q Отключить Поиск Источник Получит... Приемчик Правило конве Тип приемника □ п Управленческий Набор движений регистра бухгалтерии □ п Ч П СубконтоДт СправочникСсылка.Субконго, Справоч.. м □ п Ч п СубконтоКт СправочникСсылка Субконто, Справоч.. > □ п /у п Организация Организации СправочникСсылка. Организации □ п □ КоличествоДт Число (15.3] в □ п п КоличествоКт Число (15.3) ж □ п п Сумма Число (15 2) м □ п п СчетДт Основной ПланСчетовСсылка Основной — □ и □ СчетКт Основной П ланСчетовСсылка.0 сновной Рис. 10.29. Правила конвертации свойств Операции В обработчик При выгрузке ПКС СубконтоДт и СубконтоКт поместим вызов алгоритма ПриВыгрузкеСубконто, аналогичного тому, что мы делали для информационной базы на платформе ЮЛредприятия 8: Параметры.ПараметрыАлгоритмсв.УдалитьВсе(); Параметры.ПараметрыАлгоритмов.Установить("Счет", ОбъектКоллекции.СчетКт); ПриВыгрузкеСубконто() ; Для формирования набора проводок в обработчике ПКГС Перед обработ- кой сформируем таблицу значений КоллекцияОбъектов. Структура таблицы значений должна соответствовать структуре набора движений приемника: |КоллекцияОбъек>гов = СоздатьОбъект ("ТаблицаЗначений") ; КоллекцияОбъектов.НоваяКолонка("СубконтоДт"); КоллекцияОбъектов.НоваяКолонка("СубконтоКт"); КоллекцияОбъектов.НоваяКолонка("КоличествоДт"); КоллекцияОбъектов.НоваяКолонка("КоличествоКт"); КоллекцияОбъектов.НоваяКолонка("Сумма"); КоллекцияОбъектов.НоваяКолонка("СчетДт"); КоллекцияОбъектов.НоваяКолонка("СчетКт");
Глава 10. Типовые примеры правил. Обход проблем 149 Операция = Источник.Операция; Операция.ВыбратьПроводки(); Пока Операция.ПолучитьПроводкуО = 1 Цикл КоллекцияОбъектов. НоваяСтрока () ; КоллекцияОбъектов. СчетДт = Операция. Дебет. Счет; КоллекцияОбъектов.СчетКт = Операция.Кредит.Счет; КоллекцияОб'ьектов . Сумма = Операция. Сумма ; КоллекцияОб'ьектов . КоличествоДт = Операция. Количество ; КоллекцияОб'ьектов.КоличествоКт = Операция Количество; КоллекцияОб'ьектов. СубконтоДт= Создать0бъект("ТаблицаЗначений") ; КоллекцияОбъектов.СубконтоДт.НоваяКолонка("Ключ"); КоллекцияОбъектов.СубконтоДт.НоваяКолонка("Значение'); Для НомерСубконто = 1 По Операция.Дебет.Счет.КоличествоСубконто() Цикл КоллекцияОбъектов.СубконтоДт.НоваяСтрока(); КоллекцияОбъектов.СубконтоДт.Ключ = Операция.Дебет Счет.ВидСубконто(НомерСубконто); КоллекцияОбъектов.СубконтоДт.Значение = Операция.Дебет.Субконто(НомерСубконто); КонецЦикла; КоллекцияОбъектов.СубконтоКт= СоздатьОбъект("ТаблицаЗначений"); КоллекцияОбъектов.СубконтоКт.НоваяКолонка("Ключ"); КоллекцияОбъектов.СубконтоКт.НоваяКолонка("Значение"); Для НомерСубконто = 1 По Операция.Кредит.Счет.КоличествоСубконто() Цикл КоллекцияОбъектов.СубконтоКт.НоваяСтрока(); КоллекцияОбъектов.СубконтоКт.Ключ = Операция.Кредит.Счет.ВидСубконто(НомерСубконто); КоллекцияОбъектов. СубконтоКт. Значение = Операция.Кредит.Субконто(НомерСубконто); КонецЦикла; КонецЦикла; Для каждой проводки операции источника создаем в таблице значений строку. На платформе ЮЛредприятия 7.7 значениями полей СубконтоДт и СубконтоКт могут быть только таблицы значений, содержащие колонки Ключ и Значение Ключ - это вид субконто. Для его конверта- ции в вид субконто приемника в обработчике Перед выгрузкой или При выгрузке необходимо задать название правила конвертации объек- та - ИмяПКОВидСубконто. Значение - это само субконто.
150 1С:Предприятие 8. Конвертация данных Конвертация регистров сведений Конвертация периодических регистров сведений, не подчиненных регистратору Как правило, при переносе записей регистров сведений требуется перенести остатки на дату начала периода выгрузки и все изменения за период. Выбрать необходимую информацию можно одним объединен- ным запросом. Рассмотрим, как это можно сделать на примере регистра Цены, который имеет одно измерение Номенклатура и один ресурс Цена. Создадим ПКО для регистра сведений. Имя =- Цены Объект источник |Объект приемник ]Не запоминать Per истрСведенийЗапись. Цене | РегистрСведенийЗапись.Цены |[^] Конвертация свойств (к) | Конвертация значений t Д Синхронизация свойств Действия Добавить |Е§]| г. Помощь Q Отключить Поиск Источник Получи... Приемник Правило конвертации Т ип приемника □ □ Номенклатура □ Номенклатура Номенклатура СправочникСсь1Лка.Номенклатура □ п Период п Период Дата и время □ п Цена п Цена Число (15 2) — □ □ Активность □ Активность Булево Рис. 10.30. Правило конвертации объекта для регистра сведений В обработчике Перед обработкой ПВД с произвольным алгоритмом запишем текст, в котором запросом объединим срез последних на дату начала периода выгрузки и все изменения за период: Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараметр("Граница", Параметры.Граница); Запрос.УстановитьПараметр("ДатаВводаОстатков", Параметры.ДатаВводаОстатков); Запрос.Текст = "ВЫБРАТЬ I ьДатаВводаОстатков КАК Период, 1 ЦеныСрезПоспедних.Номенклатура, ) ЦеныСрезПоследних.Цена, | ИСТИНА КАК Активность 1ИЗ I РегистрСведений.Цены.СрезПоследних(&Граница, ) | КАК сеныСрезПосле. них
Глава 10. Типовые примеры правил. Обход проблем “| 51 I £ (ОБЪЕДИНИТЬ ВСЕ 1 (ВЫБРАТЬ j Цены.Период, ( Цены.Номенклатура, I Цены.Цена, | ИСТИНА (ИЗ | РегистрСведений.Цены КАК Цены (ГДЕ | Цены.Период МЕЖДУ «.ДатаНачала И &ДатаОкончания"; ьыборкаДанных = Запрос.Выполнить(); Записи полученной выборки данных будут переданы на конвертацию в ПКО Цены. Конвертация регистров сведений, подчиненных регистратору Поскольку записи таких регистров сведений переносятся вместе с документами (если документы переносятся непроведенными, то создаются при проведении документов), то задача заключается только в переносе остатков на дату начала периода. Перенести остатки подчиненных регистров можно, сформировав документ, при проведении которого в приемнике будут созданы записи, соответствующие срезу последних регистра в источнике. Рассмотрим перенос остатков подчиненных регистров на примере регистра Цены поставщиков, который имеет два измерения - Поставщик и Номенклатура и один ресурс - Цена. Регистр подчинен документу Установка цен номенклатуры поставщика. Создадим ПКО для регистратора с пустым источником. Имя |0оьект истрчы г [Объект npnet.iHHK _ |Не запоминать выг Ыстанс1ВкаиенНсменклатурыПоставщик.а0стагки | | Док<дчентСсылка.Установка[1енНоменк.латурыПоставщик.а |0 конвертация свсйств (') [ Кдгеертация значений___________________________________________________ f Д. ^Синхронизация свойств.. ’Действия’ -Ц Добавить jta Ц Ж ЧЕ pg | £1 * Помощь Q I Рис. 10.31. Правило конвертации объекта с пустым источником
152 1С:Предприятие 8- Конвертация данных Значения заведомо известных реквизитов определим в обработчи- ках Перед выгрузкой, соответствующих ПКС. У остальных установим флажок Получить из входящих данных. В форме ПКО на закладке Параметры, получаемые из входящих данных нажмем кнопку Печать структуры запрашиваемых данных. Получим заготовку для текста обработчика. S Правило конвертации объектов (ПКО): УстановкаЦенНомепклатурыПоставщикаОстатки « □ X Действия» jff- Ifl/l Перейти» Г?) Информация по обработчикам... Объект - источник |_________________________________________________ Объект - приемчик | ДокументСсылка,0становкаЦенНоменклетурыПоставщика Имя правила | ИстановкаЦенН оменклатурыПоставщикаОстатки i | <• Сформировать Обработчики событий Настройки Дополнительно ] Параметры, получаемые из входящих данных | { Печать структуры запрашиваемых данных | {Тип --ht Товары - _J| иеныПоставщиков _______________________________{Вид ~ СправочникСсылка.Контрагенты Реквизит Т абличная часть Набор движений регистра сведений Рис. 10.32. Форма для текста обработчика Перенесем полученный код в обработчик Перед выгрузкой ПВД с произвольным алгоритмом и заполним полученную структуру докумен- та записями, полученными как срез последних регистра сведений: Запрос = Новый Запрос; Запрос.УстановитьПараметр("Граница", Параметры.Граница); Запрос.Текст - "ВЫБРАТЬ I ЦеныПоставщиковСрезПсследних.Поставщик, I ЦеныПоставщиковСрезПоследних.Номенклатура,
Глава 10. Типовые примеры правил. Обход проблем 153 ; ЦеныПоставщиковСрезПоследних. ена )ИЗ I РегистрСведений.ЦеныПоставщиков.СрезПоследних(&Граница, ) I КАК ЦеныПоставщиковСрезПоследних"; Выборка = Запрос.Выполнить().Выбрать(); // Движения ЦеныПоставщиков - Новый ТаблицаЗначений; ЦеныПоставщиков.Колонки.Добавить("Период"); ЦеныПоставщиков.Колонки.Добавить("Номенклатура"); ЦеныПоставщиков.Колонки.Добавить("Поставщик"); ЦеныПоставщиков.Колонки.Добавить("Цена"); Поставщик = Неопределено; Пока Выборка.Следующий() Цикл Если Выборка.Цена = 0 Тогда Продолжить; КонецЕсли; Если Поставщик О Выборка.Поставщик И Поставщик О Неопределено Тогда ИсходящиеДанные = Новый Структура("Контрагент, Товары, ЦеныПоставщиков"); ИсходящиеДанные.Контрагент = Поставщик; ИсходящиеДанные.Товары » ЦеныПоставщиков; ИсходящиеДанные.ЦеныПоставщиков = ЦеныПоставщиков; ВыгрузитьПоПравилу(,,ИсходящиеДанные,, "УстановкаЦенНоменклатурыПоставщикаОстатки"); ЦеныПоставщиков.Очистить(); КонецЕсли/.... Если Поставщик о Выборка.Поставщик Тогда Поставщик = Выборка.Поставщик; КонецЕсли; Строка = ЦеныПоставщиков.Добавить(); Строка.Период = Параметры.ДатаВводаОстатков; Строка.Номенклатура = Выборка.Номенклатура; Строка.Поставщик = Выборка.Поставщик; Строка.Цена = Выборка.Цена; КонецЦикла; Если ЦеныПоставщиков.Количество() > 0 Тогда ИсходящиеДанные = Новый Структура("Контрагент, Товары, ЦеныПоставщиков"); ИсходящиеДанные.Контрагент = Поставщик; ИсходящиеДанные.Товары = ЦеныПоставщиков; ИсходящиеДанные.ЦеныПоставщиков = ЦеныПоставщиков; ВыгрузитьПоПравилу(,,ИсходящиеДанные,, "УстановкаЦенНоменклатурыПоставщикаОстатки"); КонецЕсли;
154 1С:Предприятие 8. Конвертация данных Для каждого поставщика делаем выгрузку документа. Документ можно было бы переносить без набора движений регистра непроведенным. Тогда записи были бы сформированы при проведении документа. Конвертация плана счетов Перенос свойств и признаков учета плана счетов, а также свойств и признаков учета видов субконто между информационными базами на платформе 1С:Предприятия 8 мы подробно рассмотрели в главе 5. При обмене между информационной базой-источником на платформе 1С:Предприятия 7.7 и информационной базой-приемником на платфор- ме 1 (^Предприятия 8 возможно настроить ПКО для плана счетов таким образом, чтобы осуществлялся поиск счетов в приемнике по коду. Сделать это можно, принудительно записав на стороне выгрузки в значения свойств плана счетов код и наименование счета. Для этого помимо правил конвертации значений настраиваем правила конвертации свойств (рис. 10.33, 10.34). Рис. 10.33. Настройка правил конвертации значений ЁН Планы счетов Г-" Основной | П ланСчетовСсыл ка. У правленческий | | П ланСчетовСсылка. 0 сновной — .онвертация свойств (х) [ Конвертация значений П _____________________________________________________________ f 4 ^Синхронизациясвойсте... I Действият Добавить ОД tSj л! !. 4$ i.Помош J Отключить Поиск Источник Получить. Приемник Правило конве Тип приемника EZ м Код □ Код Строка (Ф9) п Наименование □ Наименование Строка [ПЗО] Рис. 10.34. Настройка правил конвертации свойств
Глава 10. Типовые примеры правил. Обход проблем -| 55 В настройках ПКС Код и Наименование установим флажок Не замещать значение свойства у существующих объектов в приемнике. В обработчике Перед выгрузкой ПКС Код напишем Если ТипЗначенияСтр(Источник) = "Строка" Тогда Значение = Источник; ИначеЕсли ТипЗначенияСтр(Источник) = "Счет" Тогда Значение = Источник.Код; КонецЕсли; В обработчике Перед выгрузкой ПКС Наименование напишем: Если ТипЗначенияСтр(Источник) = "Строка" Тогда Отказ = 1; ИначеЕсли ТипЗначенияСтр(Источник) = "Счет" Тогда Значение = Источник.Наименование; КонецЕсли; Такая настройка ПКО для плана счетов позволяет передавать в качестве источника ПКО ст роковое значение кода и осуществлять поиск счетов, созданных в пользовательском режиме, т. е. для которых не созданы ПКЗ. Заметим, что при переносе данных из информационной базы на платформе 1С:Предприятия 7.7 в информационную базу на платфор- ме 1С:Предприятия 8 возможна только настройка правил конвертации значений. Конвертация плана видов характеристик Рассмотрим перенос элементов плана видов характеристик на примере ПКО Виды субконто. Для настройки конвертации предопределенных значений достаточно настроить правила конвертации значений. Рис. 10.35. Перенос предопределенных значений
156 1С Предприятие 8 Конвертация данных Однако в план видов характеристик можно добавлять элементы и в пользовательском режиме. Для переноса таких видов характеристик настроим правила конвертации свойств. ВИЯ Планы видов хар... ж ВидыСубконто ПланВидоЕХарактеристикСсылка.Е1 цдыСубконто ПланВицовХарактеристикСсылка.ВидыСубко.. . , Н ' П панн тмдгв пас — онвертация СВОЙСТВ Г] "f Д <}КСинхронизаи Конвертация значений П Ссылки из правил конвертации свойств иясвойств... Действия'- «Ц Добавить >' § В 151 - Помош-Ь Отключить Поиск Источник По... Приемник Прави. Т ип источника 1Т ип приемника Алгоритм перед.. в □ Код п Код Строка (Ф11) [строка (Ф11] — □ и Наименование п Наименование Строка |П2^ Отказ = Источник Предопределенный, — □ □ ПомегкаУдаления □ П ометкаУ деления Булево | Булево Рис. 10.36. Настройка правил конвертации свойств Как видим, среди настраиваемых свойств плана видов характеристик отсутствует свойство Тип значения, которое имеет тип Описание типов. ® План видов характеристик Виды субконто _ □ X Кед Наименование ЦБ000000001 ЦБ000000002 000000004 000000002 000000001 ; Справочник ссылка: Субконто___ Справочник ссылка: Субконто, Справочник ссы|^3] Справочник ссылка: Внеоборотные активы Справочник ссылка: Контрагенты Справочник ссылка: Номенклатура Арендаторы Арендодатели Внеоборотные активы Клиенты Материалы Строка внеоборотные активы НЕ® хонтрагенты Номенклатура Подразделения | Статьи затрат адм Субконто | ок | £ Отмена ] Рис. 10.37. Настройка типов Для того чтобы поместить в файл обмена информацию о типе значения вида характеристики, можно в обработчике При выгрузке ПКО восполь- зоваться встроенной в обработку выгрузки функцией: УзелТипсвХМЬ = одПолучИтьХМЬПредставлениеОписанИяТипов{ Источник.ТипЗначения); ДобавитьПодчиненный(Приемник, УзелТиповХМЬ);
Глава 10. Типовые примеры правил. Обход проблем 157 Переменная УзелТиповХМ1_ содержит строку с информацией о типах. Если конфигурации не идентичны, то в этой строке необходимо заменить несовпадающие типы источника типами приемника В нашем случае окончательный текст будет таким: УзелТиповХМЬ= одПолучитьХМЬПредставлениеОписанияТипов(Источник.ТипЗначения); //Для переноса одного типа в другой заменим наименование УзелТиповХМЬ = СтрЗаменить(УзелТиповХМЬ, "СправочникСсылка.ВнеоборотныеАктивы", "СправочникСсылка.Номенклатура"); УзелТиповХМЬ = СтрЗаменить(УзелТиповХМЬ, "СправочникСсылка.Подразделения", "СправочникСсылка.ПодразделенияОрганизаций"); ДобавитьПодчиненный(Приемник, УзелТиповХМЬ); В типовых конфигурациях описание типов плана видов характерис- тик может включать в себя достаточно большое количество элементов. Строка УзелТиповХМЬ в этом случае будет достаточно длинной. Чтобы уменьшить объем передаваемой информации, можно организовать замену типов значения источника типами приемника уже при формиро- вании строки: ОписаниеТипов = Источник.ТипЗначения; УзелТипов = ООМ_СоздатьУзел("Типы"); КвЧисла = ОписаниеТипов.КвалификаторыЧисла; КвСтроки = ОписаниеТипов.КвалификаторыСтроки; КвДаты = ОписаниеТипов,КвалификаторыДаты; ООМ_УстановитьАтрибут (УзелТипов, "ДопустимниЗнак", СокрЛП(КвЧисла.ДопустимыйЗнак)); ООМ_УстановитьАтрибут(УзелТипов, "Разрядность", СокрЛП(КвЧисла.Разрядность)); ООМ_УстановитьАтрибут(УзелТипов, "РазрядностьДробнойЧасти", СокрЛП(КвЧисла.РазрядностьДробнойЧасти)); ООМ_УстановитьАтрибут(УзелТипов, "Длина", СокрЛП(КвСтроки.Длина)); ООМ_УстановитьАтрибут(УзелТипов, "ДопустимаяДлина", СокрЛП(КвСтроки.ДопустимаяДлина)); ООМ_УстановитьАтрибут(УзелТипов, "СоставДаты", СокрЛП(КвДаты.ЧастиДаты)); Для каждого Тип Ив писаниеТипов.Типы() Цикл //Заменим тип значения источника типом значения приемника Если Тип =
158 1С:Предприятие 8. Конвертация данных Тип("СправочникСсылка.ВнеоборотныеАктивы") Тогда ООМ_ДобавитьЭлемент(УзелТипов, "Тип", "СправочникСсылка.Номенклатура"); ИначеЕсли Тип = Тип("СправочникСсылка.Подразделения") Тогда ООМ_ДобавитьЭлемент(УзелТипов, "Тип", "СправочникСсылка.ПодраэделенияОрганизаций"); Иначе ООМ_ДобавитьЭлемент(УзелТипов, "Тип", одТипЗначенияСтрокой(Тип)); КонецЕсли; КонецЦикла; УзелТиповХМЪ = УзелТипов.XML; ДобавитьПодчиненный(Приемник, УзелТиповХМЬ); В результате в файл обмена в XML-узел объекта сразу после ссылки будет помещена информация о типах объекта: - «Объект цпп="7и Тип="ПланВидовХарактеристикСсылка.ВидыСубконто" ИмяПравила="Видь1Субконто“> - «Ссылка Нпп="7"> - «Свойство Имя="{УникальныйИдентификатор}?'> «Значение>51са6717-с72Ь-11<1с-ЬЬ5е-000102Ь8е1аЗ«/Значение> «/Свойство? - «Свойство Имя='Жод"> <Значение>ЦБ000000002«/Значение> «/Свойство - «Свойство Имя-'Наименование"? <Значвние>Арендодатели «/Значение? «/Свойство «/Ссылка? _________ ______________________ - «Типы ДдпустимыйЗнак="Любойг Разрядность=’10" РазрядностьДробноиЧасти=‘0' Длина=’О" ДбпустимаяДлина='Т1ерёменная СоставДаты="Дата и время"? «Тип>СправочникСсылка.Субконто«/Тип? <Т ип> Справочнике силка .Контрагенты «/Тип? <Тип?СправочникСсылка.ПодразделенияОрганизаций</Тип? __«/ТИПЬ1? _ . __ «Свойство Имя=,'ПометкаУдаления /> «/Объект? Рис. 10.38. Информация о типах объекта
Глава 10. Типовые примеры правил. Обход проблем 159 При загрузке информации специально ничего делать не нужно. I В Физические лица | ОК 11 Отмена | Рис. 10.39. Результат переноса типов Как видим из рис. 10.39, информация о субконто загрузилась в приемник полностью. Конвертация плана видов расчета Для настройки правил обмена для плана видов расчета необходимо настроить правила конвертации значений. Рис. 10.40. Правила конвертации значений
160 1С:Предприятие 8. Конвертация данных А также нужно настроить правила конвертации свойств. □ to Планы видов расчета «• Начисления V ПланВидовРасчетаСсылга Начисления f V ПланБидовРасчетаСсылкаНачисоения В М ГГланыцчётов ~ ... ( омвертация с войств (*)~Г Конвертация значений f| Ссылки из правил ксевертациы свойств_______________________________________________________________ f- Синхронизация свойств Действия ^Добавить йа [jsjj | RJ .'i Помощь О. I Отключить Поиск Источник Получ Чриеыник Правил. Г ип источ+к.а Гип приемника Алгоритм перед выгрузкой свойства □ и Код л Код Строка (Ф10) Строка (Ф10) □ “I Наименование □ Наименование Строка (П40) Строка (П40) □ г ПериодДействияБазовьй Ц-1 ПериодДеиствитДазовый Булево Булево Отказ = Источник Предопределенный. — □ □_ ПометкаУдаления ПометкаУдаления Булево Булево Рис. 10.41. Правила конвертации свойств При настройке правил конвертации свойств необходимо запретить перенос свойства Период действия базовый для предопределенных значений. План видов расчета содержит в общем случае три предопределенные табличные части: • базовые виды расчета - определена только для объектов тех планов видов расчета, которые имеют признак Использует период действия; • ведущие виды расчета; • вытесняющие виды расчета — определена только для объектов тех планов видов расчета, которые имеют признак Использует период действия. Перенос содержимого этих табличных частей реализуем как передачу произвольных данных. Для каждой предопределенной табличной части создадим XML-узел, подчиненный узлу Приемник. А для каждого вида расчета, входящего в состав табличной части, создадим узел, подчинен- ный узлу табличной части. В обработчике ПКО При загрузке мы можем прочитать выгруженную произвольную информацию и изменить соответствующим образом загружаемый в приемник объект. Для этого в обработчике При выгрузке запишем: Для Сч = 1 По 3 Цикл Если Сч = 1 Тогда ТЧ = Источник.БазовыеВидыРасчета; УзелТЧ = ООМ_СоздатьУзел("БазовыеВидыРасчета"); ИначеЕсли Сч = 2 Тогда ТЧ = Источник.ВедущиеВидыРасчета; УзелТЧ = 1Х)М_СоЗдатьУзел( "ВедущиеВидыРасчета"); ИначеЕсли Сч = 3 Тогда ТЧ = Источник. ВытеснякяциеВидыРасчета; УзелТЧ = РОМ_СоздатьУвел ("ВытеснякяциеВидыРасчета") ; КонецЕсли;
Глава 10. Типовые примеры правил. Обход проблем 161 Для Каждого ВРСтрока Из ТЧ Цикл ВР = ВРСтрока.ВидРасчета; УзелВидаРасчета = ВОМ_ДобавитьЭлемент(УзелТЧ, "ВидРасчета", ВР.Наименование); Если ТипЗнч(ВР) = Тип("ПланВидовРасчетаСсылка.Начисления") Тогда ИмяПлана = "Начисления"; КонецЕсли; Если ВР.Предопределенный Тогда ИмяПредопределенного = ПланыВидовРасчета[ИмяПлана].ПолучитьИмяПредопределенного(ВР); Иначе ИмяПредопределенного = ""; КонецЕсли; РОМ_УстановитьАтрибут(УзелВидаРасчета, "УникальныйИдентификатор", ВР.УникальныйИдентификатор()); ВОМ_УстановитьАтрибут(УзелВидаРасчета, "ИмяПредопределенногоЭлемента", ИмяПредопределенного); ЦОМ_УстановитьАтрибут(УзелВидаРасчета, "Код", ВР.Код); ЦОМ_УстановитьАтрибут(УзелВидаРасчета, "Наименование", ВР.Наименование); ВОМ_УстановитьАтрибут(УзелВидаРасчета, "ИмяПлана", ИмяПлана); КонецЦикла; УзелТЧ_ХМЬ = УзелТЧ.XML; ДобавитьПодчиненный(Приемник, УзелТЧ_ХМЬ); КонецЦикла;
162 1 (^Предприятие 8 Конвертация данных В результате в файл обмена будет помещен текст: - <БазовыеВидыРасчета> <ВидРасчета УникальныйИдентификатор="31бЬа0а^-а1с2-4842-8070-б4Ь2а1б8Ь174" ИмяПредопределенногоЭлемента=''Премия" Код="Премия" Наименование-'Премия" ИмяПлана="Начисления">Премия</ВидРасчета> <ВидРасчета УникальныиЙдентификатор="99Ь5с718-с812-1Шс-ЬЬ5е-000102Ь8е1аЗ" ИмяПредопределенногоЭлемента-"1 Код="ПрмМес" Наименование="Премия по итогам работы за месяц" ИмяПлана="Начисления">Премия по итогам работы за месяц</ВидРасчета> </БазовыеВидыРасчета> - <ВедущиеВидыРасчета> <ВидРасчета yHMK^bHbMHAeHT^MKaTop-'c2cl9302-5d21-43fd-9bc6-6e428e01c8b5‘' ИмяПредопределенногоЭлемента="Оклад" Код="Оклад" Наименование="Оклад" ИмяПлана="Начисления">Оклад</ВидРасчета> <ВидРасчета УникaлbныйИдeнтификaтop="316ba0ad-alc2-4842-8070-б4b2al68bl74', ИмяПредопределенногоЭлемента-’Премия" Код="Премия" Наименование-’Премия" ИмяПлана="Начисления">Лремия</ВидРасчета> <ВидРасчета УникальныйИдентификатор="132сН:52-9215-49Ь4-9354-Ь992б0801с65" ИмяПредопределенногоЭлемента="Невыход" Код="Невыход" Наименование="Невыход" НмяПлана="Начисления">Невыход</ВидРасчета> </ВедущиеВидь1Расчета> - <ВытесняющиеВидыРасчета> <ВидРасчета УникальныйИдентификатор="132с1Т52-9215~49Ь4-9354-Ь992б0801с65" ИмяПредопределенногоЭлемента=“Невыход" Код="Нввыход" Наименование-’Невыход" ИмяПлана="Начисления">Невыход</ВидРасчета> </ВытесняющиеВидыРасчета> Рис. 10.42. Результат выгрузки данных в файл обмена Мы добавили в файл обмена три XML-узла: • БазовыеВидыРасчета; • ВедущиеВидыРасчета; • ВытесняющиеВидыРасчета. В каждый из этих XML-узлов мы поместили XML-узлы видов расчета. В каждый XML-узел вида расчета мы поместили данные, необходимые для его поиска в приемнике. В обработчике ПКО При загрузке прочитаем выгруженную информа- цию и заполним табличные части: ОбъектНодифицирован = Ложь; Пока ФайлОбмена.Прочитать() Цикл ИмяУзла = ФайлОбмена.ЛокальноеИмя; ТипУзла = ФайлОбмена.ТипУзла; Если(ИмяУзла = "БазовыеВидыРасчета" или ИмяУзла = "ВедущиеВидыРасчета" или ИмяУзла = "ВытесняющиеВидыРасчета") И (ТипУзла = одТипУзлаХМЪ_НачалоЭлемента) Тогда НомерСтроки = О; ИмяТЧ = ИмяУзла; КонецЕсли•
Глава 10. Типовые примеры правил. Обход проблем -| gg Если ИмяУзла = "ВидРасчета" И (ТипУзла = одТипУзлаХМЬ_НачалоЭлемента) Тогда // Номер строки базового вида расчета НомерСтроки = НомерСтроки + 1; Если Объект[ИмяТЧ].Количество() >= НомерСтроки Тогда II Проверим, не является ли данная // строка предопределенной Если Объект[ИмяТЧ][НомерСтроки-1].Предопределенный Тогда Продолжить; КонецЕсли; КонецЕсли; УникальныйИдентификатор = ФайлОбмена.ПолучитьАтрибут("УникальныйИдентификатор"); ИмяПредопределенного = ФайлОбмена.ПолучитьАтрибут("ИмяПредопределенногоЭлемента"); Код = ФайлОбмена.ПолучитьАтрибут]"Код"); Наименование = ФайлОбмена.ПолучитьАтрибут("Наименование"); ИмяПлана = ФайлОбмена.ПолучитьАтрибут("ИмяПлана"); ВРСсылка = Неопределено; I/ Попробуем найти по уникальному идентификатору //Создадим новую ссылку ВРСсылка = ПланыВидовРасчета[ИмяПлана].ПолучитьСсылку( Новый УникальныйИдентификатор(УникальныйИдентификатор)); //Проверим, существует ли такая ссылка ВРОбъект = ВРСсылка.ПолучитьОбъект(); Если ВРОбъект = Неопределено Тогда ВРСсылка = Неопределено; КонецЕсли; Если ВРСсылка = Неопределено Тогда Если ЗначениеЗаполнено(ИмяПредопределенного) Тогда Попытка // попытаемся найти по // предопределенному значению ВРСсылка = ПланыВидовРасчета[ИмяПлана][ИмяПредопределенного]; Исключение ВРСсылка — ПланыВидовРасчета[ИмяПлана].НайтиПоКоду(Код); КонецПопытки;
164 1С:Предприятие 8 Конвертация данных Иначе ВРСсылка = ПланыВидовРасчета[ИмяПлана].НайтиПоКоду(Код); Если ВРСсылка.Пустая() Тогда ВРСсылка = Неопределено; КонецЕсли; КонецЕсли; КонецЕсли; Если ВРСсылка = Неопределено Тогда // Не нашли. Создадим вид расчета, // заполним только реквизиты поиска. // Предполагаем, что вид расчета будет //загружен в б.д. позднее ВРОбъект = ПланыВидовРасчета[ИмяПлана].СоздатьВидРасчета(); ВРОбъект.Код = Код; //ВРОбъект.Наименование = Наименование; ВРСсылка = ПланыВидовРасчета[ИмяПлана].ПолучитьСсылку( Новый УникальныйИдентификатор( УникальныйИдентификатор)); ВРОбъект.УстановитьСсылкуНового(ВРСсылка); КонецЕсли; Если Объект[ИмяТЧ].Количество() >= НомерСтроки Тогда Строка = Объект[ИмяТЧ][НомерСтроки-1]; Иначе Строка = Объект[ИмяТЧ].Вставить(НомерСтроки-1); КонецЕсли; Если Строка.ВидРасчета О ВРСсылка Тогда Строка.ВидРасчета = ВРСсылка; ОбъектМодифицирован = Истина; КонецЕсли; КонецЕсли; Если (ИмяУзла - ИмяТЧ) И (ТипУзла = одТипУзлаХМЬ_КонецЭлемента) Тогда // Удалим строки, которых не было в источнике Пока Объект[ИмяТЧ].Количество() > НомерСтроки Цикл // Проверим, не является ли // данная строка предопределенной Если Объект[ИмяТЧ][НомерСтроки].Предопределенный Тогда НомерСтроки = НомерСтроки +1; Иначе
Глава 10. Типовые примеры правил. Обход проблем 165 Объект[ИмяТЧ].Удалить(НомерСтроки); ОбъектМодифицирован = Истина; КонецЕсли; КонецЦикла; КонецЕсли; Если (ИмяУзла = "ВытесняющиеВидыРасчета") И (ТипУзла = одТипУзлаХМЬ_КонецЭлемента) Тогда Прервать; КонецЕсли; КонецЦикла; Приведенный код не является универсальным, поскольку мы предполо- жили, что наименования предопределенных значений видов расчета в источнике и приемнике совпадают. При разработке правил обмена между различающимися конфигурациями требуется реализовать замену значений источника значениями приемника. Конвертация констант 1С:Предприятия 7.7 Перенос констант между информационными базами на платформе ЮЛредприятия 7.7 возможен только как перенос произвольных данных. Задача сводится к выгрузке информации о значениях констант из информационной базы источника и загрузке этой информации в информационную базу приемника. Для передачи информации о константах создадим XML-узел Констан- ты, подчиненный головному узлу rootNode. Для каждой константы будем создавать узел Константа и записывать его как подчиненный узлу Константа. Информацию о наименовании константы, типе и виде значения добавим в узел как атрибуты. Сложность заключается в том, что константы могут иметь значения ссылочных типов и могут быть периодическими. Для периодических констант узел Константа будем создавать для каждого найденного значения на каждую дату. В этот узел, помимо прочих данных, будем помещать атрибут ДатаПериодического. Для выгрузки и загрузки значений ссылочных типов воспользуем- ся фрагментом программного кода обработок выгрузки и загрузки, используемого для конвертации свойств объектов.
166 1С:Предприятие 8. Конвертация данных При загрузке считаем информацию из узла Константы и средствами встроенного языка запишем значения констант в информационную базу приемника. Поместить в файл обмена произвольную информацию, не привязан- ную ни к какому объекту, можно с помощью обработчиков конверта- ции. Воспользуемся для этих целей обработчиком Перед выгрузкой данных. Текст выгрузки констант разместим в алгоритме, который назовем ВыгрузитьКонстанты, а в самом обработчике оставим только вызов алгоритма. Рис. 10.43. Вызов алгоритма для выгрузки констант В модуле алгоритма запишем текст, в котором создадим узел Констан- ты. В этот узел запишем узлы, соответствующие константам, и добавим его к головному узлу файла обмена rootNode. УзелКонстант = СоздатьУзел("Константы"); Для а = 1 по Метаданные.Константа() Цикл Идентификатор = Метаданные.Константа(а).Идентификатор; Тип = Метаданные.Константа(а).Тип; Вид = Метаданные.Константа(а).Вид; Периодический = Метаданные.Константа(а).Периодический; Если Периодический = О Тогда
Глава 10. Типовые примеры правил. Обход проблем 167 Значение = Константа.ПолучитьАтрибут(Идентификатор); Если ПустоеЗначение(Значение) = 0 Тогда УзелКонстанты = СоздатьУзел("Константа"); УстановитьАтрибут(УзелКонстанты, "Идентификатор", Идентификатор); Если Вид = "" Тогда УстановитьАтрибут(УзелКонстанты, "Тип", Тип); ЗаписатьЭлемент(УзелКонстанты, "Значение", Значение); ДобавитьПодчиненный(УзелКонстант, УзелКонстанты); Иначе УстановитьАтрибут(УзелКонстанты, "Тип", Тип+"."+Вид); ИмяПКО = Вид; //Если ИмяПКО совпадает с видом объекта УзелСсылки = ВыгрузитьПоПравилу(Значение,, ,, ИмяПКО) ; ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки); Если УзелСсылки = мПустоеЗначение Тогда Иначе Если ТипУзлаСсылки = "Строка” Тогда Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда ДобавитьПодчиненный(УзелКонстанты, УзелСсылки); Иначе ЗаписатьЭлемент(УзелКонстанты, "Значение", УзелСсылки); КонецЕсли ; ИначеЕсли ТипУзлаСсылки = "Число" Тогда ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки); Иначе ДобавитьПодчиненный(УзелКонстанты, УзелСсылки. cloneNode(1)); КонецЕсли; ДобавитьПодчиненный(УзелКонстант, УзелКонстанты); КонецЕсли; КонецЕсли; КонеЦЕсли; Иначе Периодический = СоздатьОбъект("Периодический"); Периодический.ИспольЗоватьОбъект(Идентификатор); Периодический.ВыбратьЗначения(); Пока Периодический.ПолучитьЗначение() = 1 Цикл ДатаПериодического = Периодический.ДатаЗнач; Значение = Периодический.Значение; УзелКонстанты = СоздатьУзел("Константа");
168 1С:Предприятие 8. Конвертация данных УстановитьАтрибут(УвелКонстанты, "Идентификатор", Идентификатор); УстановитьАтрибут(УвелКонстанты, "ДатаПериодического", ДатаПериодического); Если Вид = Тогда УстановитьАтрибут(УвелКонстанты, "Тип", Тип); ЗаписатьЭлемент(УвелКонстанты, "Значение", Значение); ДобавитьПодчиненный(УзелКонстант, УзелКонстанты); Иначе УстановитьАтрибут(УзелКонстанты, "Тип", Тип+".”+Вид); ИмяПКО = Вид; /Г&гхви ИмяПКО совпадает с видом объекта УзелСсылки = ВыгрузитьПоПравилу(Значение,, ,, ИмяПКО); ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки); Если УзелСсылки = мПустоеЗначение Тогда Иначе Если ТипУзлаСсылки = "Строка” Тогда Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда ДэбаыпъГкэдчиненньи(УэепКэнстан1Ь1 УзелСсылки ; Иначе ЗаписатьЭлемент(УзелКонстанты, "Значение",УзелСсылки); КонецЕсли; ИначеЕсли ТипУзлаСсылки = "Число" Тогда ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки), Иначе ДобавитьПодчиненный(УзелКонстанты, УзелСсылки.cloneNode(1)); КонецЕсли; ДобавитьПодчиненный(УзелКонстант, УзелКонстанты); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; ДобавитьПодчиненный(rootNode, УзелКонстант);
Глава 10. Типовые примеры правил. Обход проблем 169 Если ПустоеЗначение(Значение) = 0 Тогда - сКонстанты> - сКонстанта Идентификатор=="НазваниеОрганизации" Тип=“Строка"> сЗначение>ООО "Наша организация"с/3начение> с/Константа> - сКонстанта Идентификатор="ЮридическийАдрес" Тип="Строка"> сЗначенив>Севастопольская, д. 51Ас/Значенив> с/Константа> - сКонстанта Идентификатор="ИНН" Тип="Строка"> сЗначение>270304523544с/Значение> с/Константа> - сКонстанта Идентификатор-'КПП" Тип="Строка"> сЗначение>27ОЗО1ОО1с/Значение> с/Константа> - сКонстанта Идентификатор=,,ОсновнаяВалюта" Тип="Справочник.Валюты"> - сСсылка Нпп="1"> - сСвойство Имя='"Код" Тип="Строка"> сЗначение>810с/Значенив> с/Свойство> с/Ссылка> с/Константа> В результате в файл обмена после выгрузки будет помещен текст: Рис. 10.44. Выгрузка констант - сКонстанта Идентификатор="Руководитель" ДатаПериодического="01.01.07" Т ип="Справочник.Сотрудники"> - сСсылка Нпп="2"> - сСвойство Имя-'Код" Тип="Строка"> сЗначение>000000002с/Значение> с/Свойство> с/Ссылка> с/Константа> - сКонстанта Идентификатор="Руководитель" ДатаПериодического-'01.01.08" Тип="Справочник.Сотрудники"> - сСсылка Нпп="3"> - сСвойство Имя="Код" Тип="Строка"> с3начение>000000001с/3начение> с/Свойство> с/Ссылка> с/Константа> - сКонстанта Идентификатор-Руководитель" ДатаПериодического="23.03.08" Т ип="Справочник.Сотрудники"> - сСсылка Нпп="4"> - сСвойство Имя="Код" Тип="Строка"> сЗначение>000000004с/Значение> </Свойство> с/Ссылка> с/Константа> с/Константы> А для периодической константы - три значения:
170 1С:Предприятие 8. Конвертация данных Рис. 10.45. Выгрузка периодических констант Для загрузки данных в информационную базу-приемник создадим УэелКонстант = гФайл.ТекущийЭлементВВидеОбъекта(); Константы = УэелКонстант.ВыбратьУзлы("Константа"); Для Сч = 0 По Константы.КоличествоУзлов() - 1 Цикл Реквизит= Константы.ПолучитьУзел(Сч); ИдРеквизита = Реквизит.ПолучитьАтрибут("Идентификатор"); ДатаПериодического = Реквизит.ПолучитьАтрибут("ДатаПериодического"); ТипОбъектаРеквиЗита = ""; ВидОбъектаРеквизита = ""; Значение^ УстановитьРеквизитУв(Реквизит, ТипОбъектаРеквиЗита, ВидОбъектаРеквизита, ИдРеквизита); Если Метаданные.Константа(ИдРеквизита).Периодический = 1 Тогда Периодический = СоэдатьОбъект("Периодический"); Периодический.ИспольэоватьОбъект(ИдРеквизита); Если ПустоеЗначение(ДатаПериодического) = 1 Тогда Периодический.ДатаЗнач = ФормДатаНач; Иначе Периодический.ДатаЗнач = ДатаПериодического; КонецЕсли; Периодический.Значение = Значение; Периодический.Записать(); Иначе Константа.УстановитьАтрибут(ИдРеквизита, Значение); КонецЕсли; КонецЦикла; алгоритм ЗагрузитьКонстанты с текстом: Ппа я ттгпптлтлля о гпг»Г>а гтшлгл пПпяГАП'гинь-е Попоп qarnvovnu ТипТега = гФайл.Следующий(); Пока ТипТега О 4 Цикл //пока не достигнут конец файла Если ТипТега О 1 Тогда ТипТега = гФайл.Следующий(); Продолжить КонецЕсли; //пропускаем концы уровней и инструкции ИмяТега = гФайл.СвойстваТекущегоУзла.Имя; Если ИмяТега = "Объект" Тогда //Если в конфигурации имеются константы ссылочных типов, //то они будут записаны в виде объектов перед узлом Константы //После загрузки констант необходимо будет к ним вернуться. //Т.е. вернуться в начало файла обмена. ИначеЕсли ИмяТега = "Константы" Тогда
Глава 10. Типовые примеры правил. Обход проблем 171 ЗагруэитьКонстанты(); Прервать; Иначе ТипТега = гФайл.Спуститься(); Продолжить; КонецЕсли; ТипТега = гФайл.Следующий(); КонецЦикла; ТипТега = гФайл.Подняться(); гФайл = гХМЬАнализатор.СоздатьПоследовательноСчитываемыйДокумент(); гФайл.СвязатьСФайлом(ФормИмяФайлаДанных); ТипТега = гФайл.Спуститься(); ТипТега = гФайл.Спуститься(); данных напишем: Конвертация бухгалтерской операции 1С:Предприятия 7.7 Сложность переноса бухгалтерской операции между информацион- ными базами на платформе ЮПредприятия 7.7 заключается в том, что данный тип объекта не имеет табличных частей, и переносить нужно непосредственно движения документа - проводки. Для этого к узлу объекта добавим XML-узел Операция, в который будем добавлять для каждой проводки узел Проводка. Информацию о каждом реквизите операции или проводки будем помещать в XML- узел Свойство, причем также как и при выгрузке значений констант будем использовать часть кода обработки выгрузки. Для наборов субконто дебет и кредит создадим узлы с наименования- ми СубконтоДт и СубконтоКт, в которые поместим по два узла Свойство: для вида субконто и для значения. Считывать информацию о проводках будем после загрузки объекта, т. е. когда объект Операция уже создан или найден и его реквизиты
172 1С:Предприятие 8. Конвертация данных загружены. Для того чтобы иметь возможность оперировать с проводка- Имя Объект источник Объект приемник Fl-fegt Правила конвертации объектов В-ЙИ Документы ! * Операция 'Sy, ДокументСсылка. 0 перация iS/ ДокументСсылка Операция Й ?>« CnnaannMuku Конвертация свойств (*) | Конвертация значений t Д Синхронизация свойств.. Действия ▼ «^Добавить к /1' Помощь | Отключить Поиск Источник Получить из.. Приемник Т ип источника Т ип приемника «м □ и ДагтаДок □ ДатаДок Дата Дата □ 0 _ Номер Док □ Номер Док Строка (ПЭ) Строка (ПЭ) ми объекта, запишем его принудительно. Затем создадим или изменим его проводки, запишем их. После чего откажемся от повторной записи УзелОперации = СоздатьУзел("Операция"); Операция = СоэдатьОбъект("Операция"); Операция.НайтиОперацию(Источник); УзелСвойства = СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "Содержание"); УстановитьАтрибут(УзелСвойства, "Тип", "Строка"); ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.Содержание); ДобавитьПодчиненный(УзелОперации, УзелСвойства); УзелСвойства = СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "СуммаОперации"); УстановитьАтрибут(УзелСвойства, "Тип", "Число”); ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.СуммаОперации); ДобавитьПодчиненный(УзелОперации, УзелСвойства); Если Операция.ВыбратьПроводки() = 1 Тогда Пока Операция.ПолучитьПроводку() = 1 Цикл УэелПроводки = СоздатьУзел("Проводка"); УзелСвойства = СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "Сумма"); УстановитьАтрибут(УзелСвойства, "Тип", "Число"); ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.Сумма), ДобавитьПодчиненный(УзелПроводки, УзелСвойства); УзелСвойства = СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "ВалСумма"); УстановитьАтрибут(УзелСвойства, "Тип", "Число"); ЗаписатьЭлемент(УзелСвойства, "Значение", Операция. ВалСумма); ДобавитьПодчиненный(УзелПроводки, УзелСвойства); УзелСвойства = СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "Количество"); УстановитьАтрибут(УзелСвойства, "Тип", "Число"); ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.Количество); ДобавитьПодчиненный(УзелПроводки, УзелСвойства);
Глава 10. Типовые примеры правил. Обход проблем 173 УзелСвойства = СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "Количество"); УстановитьАтрибут(УзелСвойства, "Тип", "Число"); ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.Количество); ДобавитьПодчиненный(УзелПроводки, УзелСвойства); УзелСвойства = СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "СодержаниеПроводки"); УстановитьАтрибут(УзелСвойства, "Тип", "Строка"); ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.СодержаниеПроводки); ДобавитьПодчиненный(УзелПроводки, УзелСвойства); Если ПустоеЗначение(Операция.Валюта) = 0 Тогда УзелСвойства — СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "Валюта"); УстановитьАтрибут(УзелСвойства, "Тип", "СправочникСсылка.Валюты"); УзелСсылки = ВыгрузитьПоПравилу(Операция.Валюта,, ,, "Валюты"); ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки); Если УзелСсылки = мПустоеЗначение Тогда Иначе Если ТипУзлаСсылки = "Строка" Тогда Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда ДобавитьПодчиненный(УзелСвойства, УзелСсылки); Иначе ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки); КонеЦЕсли; ИначеЕсли ТипУзлаСсылки = "Число" Тогда ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки); Иначе ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1)); КонецЕсли; ДобавитьПодчиненный(УзелПроводки, УзелСвойства); КонецЕсли; КонецЕсли; Если ПустоеЗначение(Операция.Дебет.Счет) = 0 Тогда УзелСвойства - СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "СчетДт"); УстановитьАтрибут(УзелСвойства, "Тип", "ПланСчетовСсылка.Управленческий"); УзелСсылки — ВыгрузитьПоПравилу(Операция.Дебет.Счет,, ,, "Управленческий"); ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки); Если УзелСсылки = мПустоеЗначение Тогда
174 1 С: Предприятие 8. Конвертация данных Иначе Если ТипУзлаСсылки = "Строка" Тогда Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда ДобавитьПодчиненный(УзелСвойства, УзелСсылки); Иначе ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки): КонецЕсли; ИначеЕсли ТипУзлаСсылки = "Число" Тогда ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки); Иначе ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1)); КонецЕсли; ДобавитьПодчиненный(УэелПроводки, УзелСвойства); КонеЦЕсли; КонецЕсли; Если ПустоеЗначение(Операция.Кредит.Счет) = 0 Тогда УзелСвойства = СоэдатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "СчетКт"); УстановитьАтрибут(УзелСвойства, "Тип", "ПланСчетовСсылка.Управленческий"); УзелСсылки = ВыгрузитьПоПравилу(Операция.Кредит.Счет,, ,, "Управленческий"); ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки); Если УзелСсылки = мПустоеЗначение Тогда Иначе Если ТипУзлаСсылки = "Строка" Тогда Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда ДобавитьПодчиненный(УзелСвойства, УзелСсылки); Иначе ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки); КонецЕсли; ИначеЕсли ТипУзлаСсылки = "Число" Тогда ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки); Иначе ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1)); КонецЕсли; ДобавитьПодчиненный(УзелПроводки, УзелСвойства); КонецЕсли; КонецЕсли; Для НомерСубконто — 1 По Операция.Дебет.Счет.КоличествоСубконто() Цикл ВидСубконто = Операция.Дебет.Счет.ВидСубконто(НомерСубконто); Субконто = Операция.Дебет.Субконто(НомерСубконто),
Глава 10. Типовые примеры правил. Обход проблем 175 Если ПустоеЗначение(Субконто) = 0 Тогда УзелСубконто = СоздатьУзел ("СубконтоДт") ,- • // Ключ УзелСвойства = СоздатьУзел("Свойство"); УстановитьАтрибут(УзелСвойства, "Имя", "Ключ"); УстановитьАтрибут(УзелСвойства, "Тип", "ВидСубконто"); УзелСсылки = ВыгрузитьПоПравилу(ВидСубконто,, ,, "ВидСубконто"); ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки); Если УзелСсылки = мПустоеЗначение Тогда Продолжить; ИначеЕсли ТипУзлаСсылки = "Строка" Тогда Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда ДобавитьПодчиненный(УзелСвойства, УзелСсылки) ; Иначе ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки); КонецЕсли; ИначеЕсли ТипУзлаСсылки = "Число" Тогда ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки); Иначе ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1)); КонецЕсли; ДобавитьПодчиненный(УзелСубконто, УзелСвойства); // Значение УзелСвойства = СоздатьУзел("Свойство"); ИмяПКО = НомерПКОЗначение = НайтиПравило(Субконто, ИмяПКО); УстановитьАтрибут(УзелСвойства, "Имя", "Значение"); УстановитьАтрибут(УзелСвойства, "Тип", мТаблицаПравилКонвертацииОб'ьектов. ПолучитьЗначение ( НомерПКОЗначение, "Приемник")); УзелСсылки = ВыгрузитьПоПравилу(Субконто,, ,, ИмяПКО,, , НомерПКОЗначение) ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки) Если УзелСсылки = мПустоеЗначение Тогда Продолжить; ИначеЕсли ТипУзлаСсылки = "Строка" Тогда Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда ДобавитьПодчиненный(УзелСвойства, УзелСсылки) ; Иначе ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки); КонецЕсли;
176 1 (/Предприятие 8. Конвертация данных ИначеЕсли ТипУэлаСсылки = "Число" Тогда ЗаписатьЭлемент(УэелСвойства, "Нпп", УзелСсылки); Иначе ДобавитьПодчиненный(УЗелСвойства, УзелСсылки.cloneNode(l)); КонецЕсли; ДобавитьПодчиненный(УзелСубконто, УЗелСвойства); ДобавитьПодчиненный(УэелПроводки, УзелСубконто); КонецЕсли; КонецЦикла; Для НомерСубконто = 1 По Операция.Кредит.Счет.КоличествоСубконто() Цикл ВидСубконто = Операция.Кредит.Счет.ВидСубконто(НомерСубконто); Субконто = Операция.Кредит.Субконто(НомерСубконто); Если ПустоеЗначение(Субконто) = 0 Тогда УзелСубконто = СоздатьУзел("СубконтоКт"); // Ключ УЗелСвойства = СоздатьУзел("Свойство"); УстановитьАтрибут(УЗелСвойства, "Имя", "Ключ"); УстановитьАтрибут(УЗелСвойства, "Тип", "ВидСубконто"); УзелСсылки = ВыгруэитьПоПравилу(ВидСубконто,, ,, "ВидСубконто"); ТипУэлаСсылки = ТипЗначенияСтр(УзелСсылки); Если УзелСсылки = мПустоеЗначение Тогда Продолжить; ИначеЕсли ТипУэлаСсылки = "Строка" Тогда Если Найти(УзелСсылки, ”</Ссылка>") > 0 Тогда ДобавитьПодчиненный(УЗелСвойства, УзелСсылки); Иначе ЗаписатьЭлемент(УэелСвойства, "Значение", УзелСсылки); КонецЕсли; ИначеЕсли ТипУэлаСсылки = "Число" Тогда ЗаписатьЭлемент(УэелСвойства, "Нпп", УзелСсылки); Иначе ДобавитьПодчиненный(УэелСвойства, УзелСсылки.cloneNode(1)); КонецЕсли; ДобавитьПодчиненный(УзелСубконто, УэелСвойства); // Значение УэелСвойства = СоздатьУзел("Свойство"); НомерПКОЗначение = НайтиПравило(Субконто, ИмяПКО);
Глава 10. Типовые примеры правил. Обход проблем 177 УстановитьАтрибут(УэелСвойства, "Имя", "Значение"); УстановитьАтрибут(УэелСвойства, "Тип", мТаблицаПравилКонвертацииОбъектов.ПолучитьЗначение( НомерПКОЗначение, "Приемник")); УзелСсылки = ВыгруэитьПоПравилу(Субконто,, ,, ИмяПКО,, , НомерПКОЗначение); ТипУэлаСсылки = ТипЗначенияСтр(УзелСсылки); Если УзелСсылки = мПустоеЗначение Тогда Продолжить; ИначеЕсли ТипУэлаСсылки = "Строка" Тогда Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда ДобавитьПодчиненный(УЗелСвойства, УзелСсылки); Иначе ЗаписатьЭлемент(УэелСвойства, "Значение", УзелСсылки); КонецЕсли; ИначеЕсли ТипУэлаСсылки = "Число" Тогда ЗаписатьЭлемент(УЗелСвойства, "Нпп", УзелСсылки); Иначе ДобавитьПодчиненный(УЗелСвойства, УзелСсылки.cloneNode(1)); КонецЕсли; ДобавитьПодчиненный(УзелСубконто, УэелСвойства); ДобавитьПодчиненный(УэелПроводки, УзелСубконто); КонецЕсли; КонецЦикла; ДобавитьПодчиненный(УзелОперации , УэелПроводки); КонецЦикла; КонецЕсли; ДобавитьПодчиненный(Приемник , УзелОперации); объекта. Создадим ПКО для объекта Операция. Рис. 10.46. Правило конвертации объекта Операция В обработчик При выгрузке ПКО запишем:
178 1С:Предприятие 8. Конвертация данных Прочитать информацию из файла обмена и создать операцию загружа- емого объекта можно в обработчике ПКО После загрузки. Объект.Записать(); Операция = СоздатьОбъект("Операция"); Операция.НайтиОперацию(Объект); // Удаляем существующие проводки Пока Операция.ВыбратьПроводки() = 1 Цикл Операция ПолучитьПроводку(); Операция.УдалитьПроводку(); КонецЦикла; УзелОперации = УзелОбъекта.ВыбратьУзел("Операция"); Свойства = УзелОперации.ВыбратьУэлы("Свойство"); Для Сч = 0 По Свойства.КоличествоУзлов() - 1 Цикл Реквизит- Свойства.ПолучитьУзел(Сч); ИдРеквиэита = Реквизит.ПолучитьАтрибут("Имя"); ТипОбъектаРеквизита - ""; ВидОбъектаРеквизита = ""; Значение= УстановитьРеквиэитУв(Реквизит, ТипОбъектаРеквизита, ВидОбъектаРеквизита, ИдРеквиэита); Объект.Операция.УстановитьАтрибут(ИдРеквиэита, Значение); КонецЦикла; Проводки = УзелОперации.ВыбратьУзлы("Проводка"): Для Сч = 0 По Проводки.КоличествоУзлов() - 1 Цикл УзелПроводки= Проводки.ПолучитьУзел(Сч); Операция.НоваяПроводка(); Свойства = УзелПроводки.ВыбратьУзлы("Свойство"); Для Сч1 = 0 По Свойства.КоличествоУзлов() - 1 Цикл Реквизит= Свойства.ПолучитьУзел(Сч1); ИдРеквиэита = Реквизит.ПолучитьАтрибут("Имя"); ТипОбъектаРеквизита = ""; ВидОбъектаРеквизита = ""; Значение= УстановитьРеквизитУб(Реквизит, ТипОбъектаРеквизита, ВидОбъектаРеквизита, ИдРеквиэита); Если ИдРеквиэита = "СчетДт" Тогда Операция.Дебет.Счет = Значение; ИначеЕсли ИдРеквиэита = "СчетКт" Тогда Операция.Кредит.Счет = Значение; Иначе Операция.УстановитьАтрибут(ИдРеквиэита, Значение) КовецЕсли; КонецЦикла; УзлыСубконто = УзелПроводки.ВыбратьУзлы("СубконтоДт"); Для Сч1 = 0 По УзлыСубконто.КоличествоУзлов() - 1 Цикл• узелСубконто= УзлыСубконто.ПолучитьУзел(Сч1); Свойства = УзелСубконто.ВыбратьУзлы("Свойство"); ВидСубконто = ""; Субконто= "";
Глава 10. Типовые примеры правил. Обход проблем 179 Для Сч2 = 0 По Свойства.КоличествоУзлов() - 1 Цикл Реквизит= Свойства.ПолучитьУзел(Сч2); ИдРеквиэита = Реквизит.ПолучитьАтрибут("Имя"); ТипОбъектаРеквизита = ""; ВидОбъектаРеквизита = Если ИдРеквиэита = "Ключ" Тогда ВидСубконто = ВидыСубконто.ЗначениеПоИдентификатору( СокрЛП(Реквизит.ВыбратьУзел("*").Значение)); КонецЕсли; Если ИдРеквиэита = "Значение" Тогда Субконто= УстановитьРеквизитУв(Реквизит, ТипОбъектаРеквизита, ВидОбъектаРеквизита, ИдРеквиэита); КонецЕсли; КонецЦикла; Если (ПустоеЗначение(ВидСубконто) =0) и (ПустоеЗначение(Субконто) = 0) Тогда Нет = 1; Для НомерСубконто = 1 По Операция.Дебет.Счет.КоличествоСубконто() Цикл Если ВидСубконто = Операция.Дебет.Счет.ВидСубконто(НомерСубконто) Тогда Нет = 0; Прервать; КонецЕсли; КонецЦикла; Если Нет = 0 Тогда Операция.Дебет.Субконто(ВидСубконто,Субконто); КонецЕсли, КонецЕсли; КонецЦикла; УзлыСубконто = УзелПроводки.ВыбратьУэлы("СубконтоКт"); Для Сч1 = 0 По УзлыСубконто.КоличествоУзлов() - 1 Цикл УзелСубконто= УзлыСубконто.ПолучитьУзел(Сч1); Свойства = УзелСубконто.ВыбратьУзлы("Свойство"); ВидСубконто = ""; Субконто= ""; Для Сч2 = 0 По Свойства.КоличествоУзлов() - 1 Цикл Реквизит= Свойства.ПолучитьУзел(Сч2); ИдРеквиэита = Реквизит.ПолучитьАтрибут("Имя"); ТипОбъектаРеквизита = ”"; ВидОбъектаРеквизита = ; Если ИдРеквиэита = "Ключ" Тогда ВидСубконто = ВидыСубконто.ЗначениеПоИдентификатору( СокрЛП(Реквизит.ВыбратьУзел("*").Значение)); КонецЕсли; Если ИдРеквиэита = "Значение" Тогда Субконто= УстановитьРеквиэитУб(Реквизит,
180 1С:Предприятие 8. Конвертация данных Субконто= УстановитьРеквизитУв(Реквизит, ТипОбгьектаРеквивита, ВидОбъектаРеквизита, ИдРеквизита); КонецЕсли; КонецЦикла; Если (ПустоеЗначение(ВидСубконто) = 0) и (ПустоеЗначение(Субконто) = 0) Тогда Нет = 1; Для НомерСубконто = 1 По Операция.Кредит.Счет.КоличествоСубконто() Цикл Если ВидСубконто = Операция.Кредит.Счет.ВидСубконто(НомерСубконто) Тогда Нет = 0; Прервать; КонецЕсли; КонецЦикла; Если Нет = 0 Тогда Операция.Кредит.Субконто(ВидСубконто,Субконто); КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Операция.Записать(); Отказ = 1; В этом обработчике объект уже создан, но еще не записан. Осуществим
его принудительную запись, создадим для него операцию, осуществим запись операции и проводок. В самом конце алгоритма укажем Отказ = 1 для отказа от повторной записи объекта: В результате будет создана операция и проводки документа. Глава 11 Оптимизация правил Опыт внедрения прикладных решений на платформе ЮЛредприятия 8 показывает, что система позволяет решать задачи создания информа- ционных систем масштаба предприятия. В последнее время большое распространение получили крупные распределенные системы. Увеличились объемы данных информационных баз. В связи с этим все большее значение приобретает оптимизация правил обмена. Сейчас важно не только передать информацию из одной информационной базы в другую, но и сделать это максимально быстро. Правила конвертации объектов | Правила выгрузки даеных~{ Поиск объектов в приемнике Правила счистки данных 4 4 ^Создать правила выгрузки ... Действия- ^Добавить Жц nf1 Г-.Помо! Отключить Имя правила Объект выборки Правило конвертации Порядок ▼ т □ Справочники ьи м □ Организации Организации 50 м □ СоответствиеПодразд... СправочникСсылка. Подразделе... СоответствиеП одраздел... 100 м □ Склады СправочникСсылка. Склады Склады 150 •• □ КлассификаторЕдиниц... СправочникСсылка. Е диницыИ зм... К лассификаторЕдиницИ з... 200 □ Номенклатура СправочникСсылка Номенклатура Номенклатура 250 □ В ариантыН оменклатуры СправочникСсылкаВариантыНо... В ариантыН оменклатуры 300 □ Допо/мительныеСвойс.. СправочникСсылка. Дополните л... ДополнительныеСвойств... 350 □ Контрагенты СправочникСсылка. Контрагенты Контрагенты 400 □ ДоговорыКонтрагентов СправочникСсылка. ДоговорыКо... ДоговорыКонтрагентов 450 Предлагаем несколько рекомендаций, которые могут ускорить выгрузку
182 1С:Предприятие 8. Конвертация данных и загрузку данных и сократить объем передаваемой информации. Правила выгрузки данных Порядок правил выгрузки данных Порядок выполнения правил выгрузки данных задается одноименным реквизитом правила. Рис. 11.1. Реквизит выгрузки данных Рекомендуется располагать правила выгрузки данных в таком порядке, чтобы объекты, зависимые от других объектов, выгружались позже независимых. То есть самыми первыми должны располагаться правила выгрузки данных, объекты которых имеют реквизиты примитивных типов и не ссылаются на другие объекты. Затем должны идти правила выгрузки объектов, ссылающихся на первую группу, и т. д. Пример: выгрузим два справочника - Пользователи и Физические лица. Справочник Пользователи имеет реквизит ФизЛицо, тип которого - ссылка на справочник Физические лица. То есть справочник Пользовате- ли ссылается на справочник Физические лица. Рекомендуемая последо- вательность правил выгрузки в этом случае: • физические лица, • пользователи. Выбирать данные для выгрузки одним запросом Если в правиле конвертации объекта нет переноса табличных частей и движений и если в событиях перед выгрузкой нет обращений к выгружа- емому объекту, например, вызова процедуры объекта, рекомендуется в правиле выгрузки данных использовать режим Выбирать данные для выгрузки одним запросом. В этом случае для формирования выборки данных будет сформирован запрос с выборкой всех полей таблицы объекта: ВЫБРАТЬ * ИЗ <Имя типа объекта> КАК ОбъектДляВыгрузки
Глава 11. Оптимизация правил 183 Этот режим позволит одним запросом получить все выгружаемые данные определенного типа, а не строить отдельные запросы для выгрузки каждого объекта. В противном случае, если флажок не установлен, запросом выбираются ссылки на объекты, которые затем передаются в правило конвертации объекта: ВЫБРАТЬ ОбъектДляВыгрузки.Ссылка КАК Ссылка ИЗ <Имя типа объекта> КАК ОбъектДляВыгрузки, Правила конвертации объектов Использовать быстрый поиск объекта при выгрузке и загрузке Этот режим выгрузки и загрузки особенно эффективен при выполне- нии следующих условий: • общее количество объектов, выгружаемых данным правилом, относительно небольшое, до 1000 элементов; • на объекты данного типа имеется множество ссылок из других выгружаемых объектов. Установка флажка оказывает влияние на процесс обмена данными только в том случае, если во время выгрузки используется режим Использовать оптимизированный формат обмена данными. Тогда в файл обмена при повторной выгрузке одного и того же объекта помещается не полная ссылка на объект с перечнем реквизитов поиска, а только его глобальный порядковый номер. При загрузке программа запоминает ссылку на такие объекты и не производит повторный поиск. Пример: количество элементов справочника Пользователи не превосхо- дит 1000. Но практически все документы имеют ссылку на этот справочник. Не выгружать объекты свойств по ссылкам Если для правила конвертации объекта установлена такая настрой- ка, то объекты, на которые есть ссылки из выгружаемых реквизитов, не выгружаются полностью. Выгружаются только ссылки на данные объекты, т. е. набор свойств и реквизитов, необходимый для поиска объекта в приемнике. Если режим установлен, то при выгрузке будет выгружен сам объект
184 1С:Предприятие 8 Конвертация данных и информация для поиска значений всех его реквизитов, но полная информация о зависимых элементах выгружена не будет. При неустановленном флажке, если какой-то объект, выгружаемый правилом выгрузки, имеет ссылки на другие объекты, программа проверяет - был ли объект, являющийся значением реквизита, выгружен раннее. Если в списке выгруженных объектов он отсутствует, то программа помещает в файл обмена полную информацию об объекте. Если объект уже выгружался, то программа помещает в файл обмена только ссылку на него. То есть при установленном флажке предполага- ется, что все объекты, на которые есть ссылки, были выгружены ранее или будут выгружены в процессе обмена. Для использования настройки необходимо обеспечить выгрузку в при- емник всех объектов, на которые могут быть ссылки. Причем выгрузка зависимых объектов необязательно должна происходить в текущем се- ансе обмена. Такой способ оптимизации правил обмена можно использовать при выгрузке данных в несколько этапов. Например, на первом этапе выгружаются только справочники, на втором - документы. Также оптимизация должна дать хорошие результаты при регулярном обмене с помощью планов обмена. При правильном использовании можно в несколько раз ускорить выгрузку и загрузку данных. Не запоминать выгруженные объекты Как правило, при выгрузке информации программа запомина- ет объекты, которые были выгружены в процессе обмена. Список выгруженных объектов хранится для каждого правила конвертации объектов. Механизм прежде всего предназначен для исключения повторной выгрузки объектов. Однако можно отказаться от запомина- ния выгруженных объектов, что позволяет уменьшить объем использу- емой оперативной памяти. Если для объектов, выгружаемых с помощью определенного правила конвертации, заведомо не может быть ссылок из других объектов, то для правила рекомендуется установить флажок Не запоминать выгру- женные объекты. Это относится в первую очередь к регистрам сведений: поскольку ссылаться на записи регистра нельзя, то нет смысла запоминать записи регистра, которые были выгружены. Также нет смысла запоминать объекты, передаваемые в правила в виде
Глава 11. Оптимизация правил 185 структуры или списка значений, документы ввода остатков, нет смысла запоминать документы тех типов, которые не могут быть значениями реквизитов других объектов. Пример: в конфигурациях Источник и Приемник документы вида Приказ о приеме могут быть использованы в качестве значений реквизи- тов документов Приказ об увольнении. В ПКО для такого документа нежелательно указывать Не запоминать выгруженные объекты. Тогда как на документ Приказ об увольнении нет ссылок из других объектов, и данную настройку имеет смысл установить. Использование переменной КлючВыгружаемыхДанных Позволяет во многих случаях более экономично использовать оператив- ную память, что приводит к ускорению процесса выгрузки. Особенно это важно, если в качестве источника в правило конвертации объекта передается структура или список значений, поскольку по умолчанию КлючВыгружаемыхДанных = ЗначениеВСтрокуВнутр(Источник). Пример: при выгрузке остатков в правилах обмена создается вспомога- тельное подразделение в виде списка значений, которое затем передает- ся в правило конвертации объекта в качестве источника: ВспомогательноеПодразделение = СоздатьОбъект("СписокЗначений"); ВспомогательноеПодразделение.Установить("ПометкаУдаления",0); ВспомогательноеПодразделение.Установить ("Код",; ВспомогательноеПодразделение.Установить("Наименование", "Вспомогательное (для ввода остатков)"); ВспомогательноеПодразделение.Установить("Родитель",""); В этом случае в обработчике ПКО Перед выгрузкой желательно определить ключ выгружаемых данных явно: КлючВыгружаемыхДанных = Источник.Наименование; Значение должно быть уникальным для каждого выгружаемого по данному правилу конвертации объекта.
186 1С:Предприятие 8. Конвертация данных Общие обработчики событий для всех объектов Не рекомендуется использовать общие обработчики событий для всех объектов. Особенно это важно при выполнении обработчиков загрузки, поскольку обработка загрузки не знает, что будет выполняться в обра- ботчике, и инициирует перезапись объекта в информационную базу. ели есть необходимость использовать одни и те же алгоритмы обработ- ки данных для объектов различных типов, то рекомендуется создать новый алгоритм, а в событиях у нужных объектов его вызывать. В обработчиках на стороне загрузки можно использовать переменную ОбъектМодифицирован, которая при наличии обработчика принимает значение Истина. Если в обработчике принудительно задать значение Ложь, то это будет сигналом того, что объект не изменялся. Например, для задания во всех документах реквизита Ответственный и номера документа можно использовать глобальный обработчик правил обмена После загрузки объекта: Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда Объект.Ответственный = ГлТекущийПользователь; Если Не ЗначениеЗаполнено(Объект.Номер) Тогда Объект.УстановитьНовыйНомер(); КонецЕсли; КонецЕсли; Алгоритм будет выполняться после загрузки каждого объекта независи- мо от его типа. После окончания загрузки объекта в обработке обмена будет выполняться его запись. Объект.Записать(); Правильнее будет создать алгоритм с текстом: ОбъектМодифицирован = Ложь; Если Объект.Ответственный О глТекущийПользователь Тогда ОбъектМодифицирован = Истина; Объект.Ответственный = глТекущийПользователь; КонецЕсли; Если Не ЗначениеЗаполнено(Объект.Номер) Тогда ОбъектМодифицирован - Истина; Объект.УстановитьНовыйНомер(); КонецЕсли; После этого поместить вызов алгоритма в обработчике После загрузки
Глава 11. Оптимизация правил 187 каждого документа. Обработка «Универсальный обмен данными XML» Использовать оптимизированный формат для обмена данными При использовании оптимизированного формата обмена информа- ция о типах свойств объектов выгружается один раз и записывается в файл данных непосредственно после правил обмена. Это касается только тех свойств объектов, которые имеют несоставной тип данных. Кроме того, при установленном флажке в файл данных не записывается значение пустых свойств. При большом объеме передаваемой информа- ции настройка позволяет уменьшить объем XML-файла и увеличить скорость передачи информации. Загружать данные в режиме обмена Позволяет отказать от проверок, выполняемых при записи объекта на этапе загрузки данных. Записывать только измененные объекты Перед записью объекта в информационную базу программа определяет, был ли он изменен, и только после этого принимается решение о записи. Если объект изменен не был, то при загрузке он не будет перезаписан, что позволяет ускорить процесс загрузки. Оптимизированная запись объектов Режим позволяет резко сократить количество обращений к информаци- онной базе для записи объектов, поскольку запись выполняется только для тех объектов, реквизиты которых были изменены. Записывать регистры наборами записей Устанавливает режим записи измененных или созданных записей регистров сведений наборами записей, а не менеджерами записей.