(C) Осипов Сергей Александрович, Москва 2003 год
Оглавление
Нужно выгрузить только накладные с определенным номером
Дополнительные сведения и рекомендации.
Обработка предназначена для обмена данными (справочниками и документами) между базами 1С, с одинаковыми или разными конфигурациями. Для обмена используется универсальный формат XML с очень простой структурой, что позволяет передавать данные для 1С практически из любого источника данных.
По умолчанию поддерживаются следующие источники: документы Excel, MXL-таблицы.
Для указания правил обмена используются конфигурационные файлы (также на XML). Настройки очень гибкие и позволяют отфильтровать выгружаемые и загружаемые объекты по каждому виду объектов, без изменения кода обработки.
Обработка может быть применена для решения широкого спектра задач:
Для хранения данных во внешнем XML файле используется простая, логичная и удобная структура.
Файл состоит из набора объектов–узлов Objects, хранящихся в узле Object.
Каждый объект содержит уникальный в пределах файла идентификатор (ID) и список свойств.
Каждое свойство имеет значение и тип.
Типы бывают следующими:
Такая структура позволяет описать любые данные. Пример структуры вы можете посмотреть в прилагающемся файле Struct.xml.
Для вычисления уникальных идентификаторов каждого объекта в 1С используется функция ЗначениеВСтрокуВнутр().
Для выгружаемых объектов выгружаются значения всех полей (выгрузка по значению). Состав полей можно регулировать фильтром. Если значение объекта представляет собой также объект, то выгружается также и этот объект в сокращенном виде (выгрузка по ссылке), чтобы потом его можно было найти в базе-приемнике.
Для справочников при выгрузке по значению выгружается все реквизиты и история периодических реквизитов, а по ссылке – только значения всех реквизитов. Периодические реквизиты в обоих случаях выгружаются по значению на рабочую дату.
Для документов при выгрузке по значению выгружается все реквизиты шапки и табличная часть, а по ссылке – только всех реквизитов шапки.
Реквизиты-объекты объектов, выгружаемых по ссылке, также выгружаются по ссылке. Поэтому даже один выгружаемый документ может повлечь за собой большое количество ссылок.
Состав выгружаемых реквизитов для ссылки может корректироваться. Например, если у товара есть уникальный код, то для ссылки достаточно этого кода, остальные реквизиты для экономии места можно отключить.
На этапе выгрузки пользователь обработки указывает виды объектов для выгрузки и фильтры, чтобы выгружались только нужные ему объекты. В результате получается XML файл.
Этот файл можно в дальнейшем конвертировать конвертором (стандартным или собственной разработки), а можно и без конвертирования передать на загрузку. Конвертор представляет собой ert-обработку, которая может использовать набор функций работы с XML (смотрите приложение «ФункцииКонвертора.TXT»).
На
этапе загрузки важно указать правила сопоставления объектов. Правила
сопоставления очень мощные, это изюминка обработки. Для объекта можно
использовать сразу несколько правил и если одно не подходит, искать другим
способом, а также делать проверку сопоставления. Можно также отфильтровать
загружаемые объекты, защитить от записи некоторые объекты.
Загрузка строится из двух этапов – поиска (сопоставления объектов) и,
собственно, загрузки. Поиск никаким образом не меняет данные, с его помощью
можно оценить качество указанных вами правил поиска.
По умолчанию правила загрузки настроены таким образом, что из списка загрузки выбираются объекты переданные по значению, объекты переданные по ссылке не изменяются, но если объект по ссылке не найден он заводится как новый и ему присваиваются все указанные в выгрузке значения свойств. Эти правила можно изменить.
Результаты выгрузки и загрузки отражаются в протоколе.
В отличии от первого поколения, где основные настройки делались в коде обработки, настройки указываются интерактивно пользователем в таблице и их можно сохранять/загружать в различных файлах (рисунок может частично не соответствовать оригиналу, т.к. форма постоянно дорабатывается, но общий принцип соблюден):
Существуют множество опций, уточняющих поведение программы при выгрузке-загрузке.
Для начала работы с конфигурацией нужно нажать кнопку «Заполнить», которая заполняет таблицу присутствующими в конфигурации видами объектов
В главной форме на закладке «Настройки» можно устанавливать параметры для каждого объекта по отдельности или сразу нескольким выбранным объектам.
Сначала нужно выбрать параметр из списка слева (щелкнуть дважды мышью или нажать на нем кнопку Enter).
Если устанавливается значение для одного объекта, нужно щелкнуть мышью в колонке
Затем нужно выбрать объекты, и далее нажать одну из кнопок установки параметров. Если дважды щелкнуть на ячейке таблицы, также можно установить параметры, но только для текущего вида.
Обработка может запускаться в автоматическом режиме, без участия пользователя. В случае работы с пользователем команды управления сосредоточены на закладке «Файл». Здесь указаны пути к файлам загрузки, выгрузки, к обработке конвертора.
Кнопки Запомнить/Восстановить используются для сохранения/восстановления настроек.
Кнопка «Выгрузить» запускает выгрузку.
Кнопка «Поиск» запускает поиск.
Кнопка «Загрузить» запускает загрузку. Загрузку можно запускать только после поиска.
Кнопка «Конвертировать» запускает конвертор из файла выгрузки в файл загрузки.
Кнопка «См» и «Печать» напротив надписи «Объекты» показывает и распечатывает текущее состояние таблицы Объекты (например для проверки результатов поиска) запускает выгрузку.
Обработка может быть весьма гибко настроена с помощью правил обмена, заполняемых пользователем.
В таблице приведены параметры, использующиеся при выгрузке и загрузке.
Параметр – название правила.
Варианты значения – варианты значений параметра. Если указан вариант «Условие», то можно указывать любое условие, которое будет вычисляться прежде, чем применится правило. Так как условия записываются на языке 1С, то они могут использовать следующие переменные и функции:
Кроме того, можно использовать специальные функции:
· УстСсылка(Зн) – устанавливает новое значение ссылки
· ВзятьПуть() – возвращает путь вида «Системные/Главные/Наименование».
· ПоискПоНомеру()
· ЛогНе(Зн) – инвертирует значение, возвращает из не-нуля ноль, из ноля единицу
· УстПериодНачДата() - устанавливает дату начала выгрузки периодических реквизитов (по умолч. ДатаНачала)
· УстПериодКонДата() - устанавливает дату конца выгрузки периодических реквизитов (по умолч. ДатаКонца)
· МодЗн(Зн)
· МодСв(Свойство)
·
МодЕще(Свойство,Зн)
Однако не всегда параметры и специальные функции имеют смысл, поэтому в таблице указано, какие из них можно использовать в каждом правиле.
Кроме этого, практически везде можно использовать дополнительные функции, код которых написан в обработке:
Правила записи условий:
При записи условий можно использовать операторы и функции 1С, т.к. для
вычисления условий используется мощная встроенная функция 1С – Шаблон.
Результатом
вычисления выражения должно быть число, которое при равенстве нулю
интерпретируется как ложь, в остальных случаях, как истина. Например:
:1=1 Истина :1=0 Ложь 1*0*1*(1+1) Ложь (аналог
операции И) 1+1+1+0 Истина (аналог операции ИЛИ)
Если вы хотите записывать простые условия ,которые дают не числовое, а логическое значение, в привычном для вас виде, то в начале условия ставьте знак «:», например :Об.Код=«00076». Такое условие автоматически заменится на ?(Об.Код==«00076»,1,0).
При вычислении условий может происходить побочный эффект, например устанавливаться некоторые переменные, поэтому важен порядок и состав вычисляемых выражений.
Можно указывать порядок непосредственно с помощью функции 1С ?(Условие, ЕслиИстина, ЕслиЛожь).
Общее правило такое – если результат выражения число, то можно его просто так записать в условии, а если результат – логическое значение, то надо начать его с двоеточия.
Правила Выгрузки |
|||
|
|||
Правило |
Варианты значений |
Описание |
Прим |
Выгружать |
1,0 |
Указывает, какие объекты конфигурации нужно выгружать. |
|
Подч |
Условие |
Выгружать подчиненные элементы справочников (у которых владелец – выгружаемый элемент справочника). По умолчанию Ссылка=0, т.е. выгружаются целиком. Параметры: Об – выгружаемый элемент и Подч – подчиненный элемент. Функции: |
ПараметрПодч пока не доступен |
История |
Условие |
Выгружать/загружать историю периодических реквизитов справочника за период выгрузки. Правило применяется к Направление («В» или «З»), Св – свойство, УстДок (1 – установлен документом, 0 – вручную). Функции: УстПериодКонДата() - устанавливает дату конца выгрузки (по умолч. ДатаКонца) Периодические реквизиты на рабочую дату всегда выгружаются вместе с остальными реквизитами справочника и загружаются на рабочую дату. |
Нет еще |
Операция |
Условие |
Условие выгрузки операции документа. По умолчанию не выгружается. |
|
ОбВыгр |
Условие |
Условие
выгрузки объекта. По умолчанию выгружаются все объекты. Функции: |
|
СвВыгр |
Условие |
Условие
выгрузки свойства. Функции: |
|
Правила загрузки |
|||
Правило |
Варианты значений |
Описание |
Прим |
Поиск |
Условие |
Правило сопоставления объектов. Параметры: нет Функции:
В
случае поиска по полям корректно обрабатывается сравнение агрегатных типов,
т.е. например для Единиц правило может быть таким: Правила можно комбинировать, например: {ЛогНе(ПоискПоПолям(«Артикул»)){ЛогНе(ПоискПоНаименованию()){ПоискПоКоду():}}} |
|
ОбЗагр |
Правило |
Условие загрузки объекта. По умолчанию :(Ссылка=0) ИЛИ (Род=1) , т.е. из потока объектов загружаются те, которые переданы по значению, или те, которые переданы как значения свойств переданных по значению объектов. Варианты: :(Ссылка=0) – только переданные по значению объекты :(Ссылка=1) – только переданные по ссылке объекты :(Род=0) – объекты только из основного потока
Параметры: |
|
ОбЗащ |
Правило |
Условие загрузки объекта поверх существующего. Контролируются только существующие объекты, ведь новые объекты должны заполниться. Если истинно, то объект загружается. Параметры: По умолчанию защищаются все существующие объекты, которые загружаются по ссылке. |
|
СвЗагр |
|
Условие загрузки свойства. Параметры: |
|
Проводить |
Условие |
Проводить документ. Пустое
условие: не проводить Функции: Только в этом режиме можно поменять дату & время проведенных документов. После окончания загрузки у документов устанавливается нужная дата & время, и они последовательно проводятся. Можно допровести документы вручную на закладке «Проведение» |
|
Удалять |
Условие |
Помечать на удаление объекты, которые должны быть помечены на удаление. Пустое условие: не удаляются. |
Нет еще |
Мод |
Условие |
Модифицирует значение свойства и название свойства объекта перед его выгрузкой, удобно для номера документа и т.п. Параметры: Свойство, Зн. Функции:
МодЗн(Зн) – модифицирует значение, МодСв(Свойство) – модифицирует имя
свойства при выгрузке, МодЕще(Свойство,Зн) – добавляет в выгрузку реквизит,
вычисляемый на основе текущего. Например, чтобы заменить свойство «Код» на
свойство «Артикул» и значение на 1000 больше, можно использовать следующее
правило: МодЕще(Св,Зн) |
Не работает МодЕще |
Код |
Условие |
Правило, по которому вычисляется код(номер документа). По умолчанию код сначала назначается таким, как он указан в выгрузке, если нарушается уникальность кода, то пробуем установить новый код, если и это не помогает, то объект не записывается и помечается как плохой. Это правило позволяет уточнить порядок назначения кода. Параметры: Об,
Код – каким должен быть код |
Нет еще |
КакНовые |
Условие |
Работает на этапе поиска. Помечает объект как не найденный, даже если он найден, следовательно объект будет заведен как новый. |
|
Новые |
- или + |
+
загружаются только новые, существующие не оформляются Для + правило :Найден=0 Для – правило :Найден<>0 |
|
Этап выгрузки объектов:
На этапе выгрузки источник объектов перебирает объекты всех видов, которые указаны к выгрузке, определяет как нужно их выгружать и выгружает в соответствии с настройками.
Алгоритм выгрузки объектов:
Этап загрузки объектов:
Процедура загрузки состоит из поиска и оформления объектов. На этапе поиска программа пытается сопоставить объекты из файла с объектами базы данных, при этом в текущей базе данных не производится никаких изменений.
На этапе оформления заводятся новые элементы и изменяются свойства существующих.
Алгоритм поиска объектов:
Этап оформления объектов:
Т.к. 1С накладывает жесткие ограничения на уникальность кода элемента, номера документа и наличие владельца у элемента, процедура загрузки объектов делится на этап заведения и оформления.
На этапе заведения заводятся новые элементы справочников и документы. При этом у справочников устанавливается только владелец, родитель и код, а у документов – только дата и номер.
На этапе оформления проставляются реквизиты объектов.
Алгоритм заведения объектов:
Алгоритм оформления объектов:
Т.к. все объекты уже присутствуют в
базе (кроме плохих), то можно установить значение любого свойства, даже
агрегатного.
При загрузке табличной части оставляется (добавляется) столько строк в
документ, сколько должно быть строк. Старые значения строк не удаляются, если
не замещаются новыми значениями. Если в табличной части в выгрузке 0 строк, то
табличная часть не удаляется.
Этап конвертации:
Загрузка операций:
Операции
загружаются построчно. Номер строки игнорируется. Строки загружаются
последовательно.
При выгрузке счета также выгружается информация о его видах субконто. Затем,
при загрузке субконто в счет, для текущего вида субконта счета и Т.к. часто
одинаковые субконто идут в счетах в различном порядке, при загрузке субконто
номер i в счет, в выгрузке ищется информация о том, какое
Для уяснения возможностей обработки и быстрого старта приводятся наиболее типичные или интересные приемы работы.
Выгрузка отдельного документа:
В ОбВыгр укажите СокрЛП(Об.НомерДок)=«1». Учтите, что атрибут НомерДок всегда возвращается как строка.
Выгрузка между различными конфигурациями с сохранением отсутствующих в базе-получателе реквизитов:
Если у объекта-получателя есть атрибут «Примечание» неограниченной длины, а теряются реквизиты Рекв1, Рекв2, …, в Мод укажите ?(Св=«Рекв1», МодСв(«Примечание»)+МодЗн(Строка(Рекв1)+Строка(Рекв2)+Строка(Рекв3)) ,0). Т.е. Рекв1 будет при выгрузке переименован в примечание а его значение будет преобразовано в строку, составленную из реквизитов.
Изменение типа объекта при выгрузке:
Если в исходной базе номенклатура называется «Товары», а в получателе «Номенклатура» можно записать Мод для справочника «Товары» так:
?(Св=«Вид», МодЗн(«Номенклатура») )
Загрузка только новых (только существующих):
Правило ОбЗагр укажите :Найден=0 :(Найден=1) соответственно.
Сделать, чтобы проводки документа загрузились в другой базе, как ручные операции без документа:
Использовать несколько Мод для нескольких реквизитов:
?(Св=«Вид», МодЗн(«Номенклатура»),0) +
?(Св=«Вид», МодЗн(«Номенклатура»),0)
Помните, что Мод и возвращает числа и их можно складывать (или) или умножать (и).
Мне нужно перенести номенклатуру, а тут столько много параметров, как бы попроще:
Все просто, нужно у номенклатуры установить свойства:
Выгружать 1
Поиск ПоискПоНаименованию() Если хотите по наименованию синхронизировать
И все, можно переносить.
Мне нужно перенести приходные накладные, а тут столько много параметров, как бы попроще:
Все просто, нужно у приходной накладной установить свойства:
Выгружать 1
У всех справочников установите:
Поиск ПоискПоНаименованию() Если хотите по наименованию синхронизировать
Новые «-» Чтобы новые элементы не заводились, будут дырки
И все, можно переносить.
В свойстве ОбВыгр указать :Найти("-1|1-2.7-1007|100-2-1010|99-1-1010|",СокрЛП(Об.НомерДок)+"|")<>0
Так как данные в XLS и MXL представляют собой таблицы в которых хранится некий текст, процедура импорта сделана единообразно. MXL работает более быстро, а большие объемы информации иногда трудно перенести из MXL в XLS без ухищрений (например через сохранение в промежуточном HTML-файл). Поэтому в дальнейшем импорт будет рассматриваться на примере таблиц EXCEL. Таблицы в MXL должны быть подготовлены точно так же.
Импорт
заключается в том, что данные из файла Excel (специальным образом
организованного) преобразуются в файл XML, в формате, который можно загрузить с
помощью данной обработки.
Пример таблицы для импорта указан в файле Импорт.xls
Каждая строка представляет значение одного или нескольких свойств одного объекта.
В первой строке указываются названия свойств, во второй строке – их тип.
Начиная
с третьей строки указываются значения свойств.
Последней колонкой считается первая колонка без названия, последней строкой –
первая строка, у которой ни в одной колонке нету данных.
Колонки серого цвета обязательно должны присутствовать (для справочников и документов):
ID |
Уникальный ключ объекта, к которому относятся свойства |
List |
Список объекта, в который попадают свойства |
Load |
Ссылка 1 – по ссылке, 0 – по значению |
Также, для загрузки в 1С, нужны колонки Тип и Вид. Возможно Наименование, Код, ДатаДок, НомерДок и т.п.
Тип свойства во второй строке можно указывать как Num, Str, Dat, Agr.
Внимание! Для объектов типа Agr должен указываться в значении свойства его ID. Отсюда следует, что этот объект должен также быть описан отдельной строкой с этим ID. Например если у вас в колонке «ВидТовара» стоит «штучный», то должна быть отдельная строка, где ID=”штучный”, Вид=«ВидыТоваров», Тип=«Перечисление».
Пустые значения ячеек пропускаются.
Если вам нужно организовать табличную часть у документа, используйте список «Таблица». Посмотрите, как это сделано в примере. Строки табличной части не обязательно должны идти вместе, но их порядок определяет результирующий порядок в документе.
Справочники и документы могут идти в любом порядке, загрузка поймет и загрузит их в нужном порядке.
Думаю, мне удалось реализовать очень удобный механизм импорта данных, конечно к нему нужно немного приспособиться, но зато потом все будет очень даже удобно.
Обработка для своей работы требует компоненты v7plus.dll в каталоге базы, а также наличия в системе MSXML-парсера от Miscrosoft не ниже 3.0. В Win2k Workstation он имеется по умолчанию, для Win98 и W2k Server его нужно скачать с сайта http://msdn.microsoft.com/downloads/default.asp (поиск по MSXML).
Файлы обмена удобно просматривать в любом интернет-браузере, для редактирования очень рекомендую программу XMLSpy.
Обработка зафиксирована в 2004 году и не дорабатывается. Можете спокойно развивать ее под своим авторством, если требуется со ссылкой на первоисточник.