Здравствуйте, Друзья!
Мне было интересно, в свое время, разобраться с функциональностью загрузки от конвертации 3.0. Я отметил, что данные объекта XDTO конвертируются в структуру и далее, уже полученная структура конвертируется в объекты БД. Ок, подумал я, а что если мы будем формировать собственные структуры и передавать их в процедуру конвертации структур в объекты БД? В процессе реализации начался новый процесс понимания как конвертация 3.0 генерирует модуль менеджера обмена, т.к. для метода СтруктураОбъектаXDTOВДанныеИБ требуется не просто структура, составленная, опять-таки, по строгим правилам, но и целая сложная сущность, называемая КомпонентыОбмена, в которую входят все те сущности создаваемые в модуле менеджера обмена 🙂 — ПравилаОбработкиДанных, ПравилаКонвертацииОбъектов, ПравилаКонвертацииПредопределенныхДанных …, вообщем много чего.
Почему Excel? Просто, в свое время, была задача произвести множественные загрузки из ёкселя — т.е. преобразовать данные ёкселя в объекты БД. Для такого преобразования требуется создать некие правила преобразований. Откуда их взять или что взять за основу, когда на входе структура из ёкселя, которая по определенным правилам должна преобразовываться в объекты БД? Конвертация 2.0 — это идеальный вариант для основы в части архитектуры такого решения. Что и было сделано. В итоге: ёксель данные преобразуем в структуру и конвертируем полученную структуру в объект БД.
В принципе, можно доработать и для входящих данных в виде xml документа, но это в будущем. Да, Вы и сами это сможете сделать :), если захотите.
Проверял на всех ссылочных типах: справочник, документ, ПВХ и ПВР. Также, должно работать и для бизнес-процесса и задачи. Независимый Регистр сведений (периодический и непериодический) — руки пока не дошли :).
И, как бы это смешно не звучало, но есть правилам обмена данными, написанные на конвертации 2.0 для выгрузки и загрузки обработкой "Универсальный обмен данными в формате xml" правил обмена, созданных в подсистеме "Обмен данными Excel".
Как работает подсистема в режиме предприятия.
Шаблон данных предназначен для хранения структуры Excel файла — поля (колонки). По команде "Сохранить бланк для заполнения…" будет создан Excel шаблон с шапкой колонок. Excel шаблон заполняется данными и готов к загрузке.
На основании Шаблона данных создаются "Правила загрузки Excel" (Правила загрузки). Правила загрузки содержат параметры загрузки. На основании Правил загрузки создаются "Правила конвертации объектов Excel" (ПКО).
Для создания ПКО применяется обработка "Настройка правил обмена Excel".
ПКО содержат объект метаданных — Приемник (Справочник, Документ, ПВХ, ПВР), в который будут конвертированы данные шаблона. У ПКО есть Реквизиты — "Правила конвертации свойств".
Для загрузки данных по шаблонам применяются обработки: "Обмен данными загрузка Excel" и "Обмен данными по шаблонам загрузки Excel".
Обработка "Обмен данными по шаблонам загрузки Excel" предназначена для загрузки по нескольким шаблонам данных.
Обработка "Обмен данными загрузка Excel" предназначена для загрузки по одному шаблону данных и множествам правил загрузки.
Для загрузки по нескольким шаблонам данных требуется создать "Шаблон загрузки данных", в котором указать шаблоны данных, правила загрузки и значения параметров загрузки по правилам загрузки.
Для ПКО и ПКС встроена справка.
Табличные части объектов в файле Excel вместе с реквизитами объекта — пока это особенность, т.к. вижу, что можно сделать и более красиво, но по скорости реализован такой вариант, т.к. явился более простым:
Реквизит1 Объекта | Реквизит2 Объекта | Реквизит1 ТЧ1 | Реквизит2 ТЧ1 | Реквизит1 ТЧ2 | Реквизит2 ТЧ2 |
значения… | |||||
Требования: адаптирована под БСП 2.4.5.7 100%. Под БСП более старшие может и потребуется адаптация, а может и нет, не пробовал, но думаю тоже взлетят :).
Платформа не ниже 8.3.10.
Конфигурация выполнена поставкой, поэтому при первом сравнении и объединении можно согласиться с постановкой на поддержку.
Внимание! Данная публикация является опытом автора и признана им поделиться. Если Вы планируете вводить результаты данной публикации в ОПЭ ваших продуктивных баз, то, пожалуйста, убедитесь, что все кейсы успешно отрабатывают на Ваших тестовых базах. По мере своего свободного времени буду исправлять баги, если таковые появятся, но без гарантии, т.к. ещё раз повторюсь — это некий интересный, на мой взгляд, опыт, которым я бы хотел с Вами поделиться, Друзья!
Спасибо и Продуктивного Всем кодинга!
P.S. На просторах интернета столько обработок загрузки из Excel и под каждую задачу приходиться создавать новую обработку или модифицировать существующую … Данная конфигурация полностью заменяет все обработки. Вам больше не требуется создавать новые обработки по загрузке … Включите данную подсистему и просто в режиме предприятия создавайте новые правила :).
Как-то не очень понятно — насколько сложные настройки надо делать.
Допустим, что у меня есть excel файл такой структуры:
Контрагент1, ИНН1, код1, адрес1
Договор1, ДатаДоговора1, НомерДоговора1
Договор2, ДатаДоговора2, НомерДоговора2
…..
,,,,..
Контрагент2, ИНН2, код2, адрес2
Договор21, ДатаДоговора21, НомерДоговора21
Договор22, ДатаДоговора22, НомерДоговора22
…..
,,,,..
Как по Вашей методике это загрузить в 1С Бухгалтерию 30?
( leosoft) Можно и так. 05.03.2019 вечером отвечу.
( leosoft) Каноническая модель структуры шаблона ёкселя — это поля(колонки) первой строки:
Контрагент, ИНН, Код контрагента, Адрес контрагента, Договор, Дата договора, Номер договора
Так работает ЗагрузкаДанныхИзФайла.
Если структура файла ёкселя это первая строка — данные контрагента, вторая, третья … договора и далее все в цикле, то требуется привести данные ёксель файла к каноническому виду. Потребуется создать два шаблона данных. Первый шаблон — каноническая модель — на основании данной модели мы будем создавать ПКО; второй шаблон — структура текущего ёксель файла, которая при загрузке будет преобразована в ТЗ и полученные данные ТЗ мы трансформируем в ТЗ канонической модели.
Создаем Шаблон данных, в основе структуры шаблона (имена колонок) каноническая модель. На закладке шаблона данных «Настройки преобразований» выбираем способ преобразования данных файла ёкселя = Внешняя обработка. Появится возможность загрузить внешнюю обработку. На этой же закладке добавляем строку в таблице: Имя листа = имя листа в ёкселе без тех. знаков и пробелов — нам требуется текущий ёксель файл немного подготовить; шаблон данных — структура текущего ёксель файла — для данного шаблона мы не создаем ПКО.
Создаем внешнюю обработку. Внешняя обработка должна иметь экспортную процедуру «ПреобразоватьДанныеФайлаПоСтруктуреШаблона (ПараметрыПреобразования)». ПараметрыПреобразования — это Структура с ключами: АдресФайла, АдресДанных, ИнформацияПоКолонкам, Расширение, ШаблоныПоЛистам.
Параметр АдресФайла — адрес Excel файла во временном хранилище; параметр АдресДанных — адрес во временном хранилище, в котором хранится нормализованная таблица значений под структуру шаблона; Расширение — «xls» или «xlsx»; ИнформацияПоКолонкам — структура шаблона; ШаблоныПоЛистам — соответствие, ключ — имя листа Excel, значение — информация по колонкам. Параметры структуры «ПараметрыПреобразования» доступны в процедуре по именам.
Процедура возвращает адрес во временном хранилище, в котором хранится нормализованная таблица значений под структуру шаблона.
Справка для шаблона данных есть.
Алексей, спасибо большое за информацию! Для меня это показалось сложным процессом, хотя Ваш подход интересный!
(leosoft) Все сложные преобразования Вы будете производить во внешней обработке, а затем её прикреплять к шаблону данных. Т.е. конфигурация останется неизменной. Как пример кода процедуры в которой трансформированы таблицы на листах в одну каноническую таблицу.
Показать
(4) Спасибо, Леонид, за Вопрос! Я постарался сделать конфигурацию универсальной, чтобы покрыть много «подводных камней» :).
Как нужно заполнять реквизиты в Excel для типов данных в 1С Хранилище значений, ДвочныеДанные (РегламентныеРасписания) например?Как в шаблон попадает загрузка табличной части Справочников и документов? Во многих Конфигурациях вывод на форму Элемента табличная часть является перевернутой т.е. Каждое значение Строка/Колонка хранится в отдельной строке табличной части с разными типами. Можно ли управлять Шаблонами Excel?
Приветствую, Андрей!
1. Хранилище значений, ДвоичныеДанные.
Да, может.
Для эксперимента выгрузил таблицу значений в строку в формате base64:
В ёксель ячейку «Двоич» вставил полученное значение. В обработчике реквизита «При загрузке» произвел чтение:
Все ок.
2. Загрузка с табличными частями. Пример в прикрепленном файла. Реквизиты документа идут вместе со значениями реквизитов табличных частей. Идентификатором документа в данном примере являются поля Номер документа и Дата документа, в правилах конвертации свойств данным полям устанавливаем Истина для реквизита Поиск.
3. Андрей, поясните, пожалуйста, что значит управлять шаблонами?
Интересный обмен +1
Взял на вооружение
Спасибо! На базе данной конфигурации я сейчас готовлю аналог для входящих документов xml как в конвертации 3.0.