Загрузка из Excel с использованием КД 2.0










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

Последовательность такая:

1. Создаем обработку по настройке загрузки. В ней же пишем экпортную процедуру по возврату прочитанных данных из Excel в виде коллекции значений  

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

3.  В конвертации создаем правила выгрузки данных с произвольным алгоритмом. В нем прописываем получение данных Excel с помощью экпортной процедуры, созданной в п. 1.

4. Создаем правила конвертации объектов и их свойств

5. Выгружаем данные из Excel в xml файл с помощью обработки «Универсальный обмен данными в формате XML»

6. Загружаем данные в базу, используя ту же обработку.

Опишем шаги более подробно:

Шаг №1.

Обработка простейшая: есть форма настроек и экспортная процедура (обработка доступна для скачивания в архиве). Вот ее форма:

 Форма настройки

Шаг №2.

1. Выгружаем структуру метаданные той базы, в которую будем заливать данные с помощью обработки MD82Exp.epf (ее можно взять либо в папке с шаблоном конвертации данных либо из приложенного архива)

2. Открываем конфигурацию Конвертация данных (я использовал 2.1.6.4) и загружаем в нее выгруженную структуру метаданных (назовем ее ЗагрузкаExcel).

3. Создаем новые правила обмена данными (ПОД) из  ЗагрузкаExcel в  ЗагрузкаExcel (хотя источник нам совсем не важен, но указать мы его должны)

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

Подключение обработки

5. Пропишем открытие формы настройки перед выгрузкой данных

 Обработчик ПередВыгрузой

 

Шаг №3.

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

 ПВД

Шаг №4.

Создадим правила конвертации объектов (ПКО). Полностью ПОД смотрим в архиве файл ПравилаОбменаДанными.xml  

Перед началом создания ПКО подумаем по каким полям будем синхронизироваться:

4.1. Документ я буду синхронизировать по дате

4.2. Контрагента по наименованию

4.3. Договор по владельцу (контрагенту) и наименованию

4.4. Номенклатуру по наименованию и артикулу

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

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

ПКО «Приход товаров»

ПКО_ПриходТоваров 

Для того чтобы после загрузки документ проводился пропишем код в след. обработчиках:

ПКО_ПриходТоваров_Обработчики 

ПКО «Контрагенты»

Контрагентов складываем в папку Поставщики. Это устанавливается свойством Родитель. 

ПКО_Контрагенты

ПКО «Договоры контрагентов» 

 ПКО_Договоры

 ПКО «Товары»

ПКО_Товары 

 

Шаги 5 и 6.

Данные шаги примитивные: открываем обработку » Универсальный обмен данными в формате XML» указываем правила, указываем файл выгрузки данных. Нажимаем «Выгрузить». Затем переходим на вкладку «Загрузка», указываем файл загрузки и нажимаем загрузить.

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

Результат: 

 Результат


28 Comments

  1. DoctorRoza

    Спасибо за информацию, хорошая статья!

    Reply
  2. zipik

    Отличная статья!!

    Reply
  3. zipik

    ставлю ПЛЮС!

    Reply
  4. echo77

    Советую всем сначала посмотреть обработку с ИТС

    С помощью неё все загрузки из excel на хрен не нужны и отпадает нужда создавать «одноразовые» обработки по загрузке данных

    Reply
  5. Alex_grem

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

    Reply
  6. mihan

    по мне дак проще идти путем допила обработки «загрузка данных из табличного документа»

    Reply
  7. fnv

    Сложный способ какой-то, по-моему, проще через Оле, чем через конвертацию.

    Reply
  8. Alex_grem

    (8) Eugeneer, Ответ на вопрос можно получить прочитав статью

    Reply
  9. Yashazz

    Уже вроде были такие предложения, и готовые решения на основе Конвертации тоже были. Нэ?

    Reply
  10. Alex_grem

    (10) Yashazz, я не нашел, поэтому написал, может кому пригодится схема загрузки

    Reply
  11. Alex_grem

    (12) Eugeneer, спасибо за рекламу.

    Готового решения Вы тут не найдете — я описал методику, а использовать ее или нет каждый решает сам

    Reply
  12. K_A_O
  13. nafa

    (12)

    Вы когда статьи/комменты про загрузки с XLS пишете, указывайте, какая ситуация.

    Одно дело когда надо есть разовая задача, надо разово загрузить файл, ту же номенклатуру от поставщика, и пофиг что он загрузится на 80%, все равно когда будут конкретные документы вводиться все будет проверяться и исправляться. Тут кончено можно и с диска ИТс обработку взять.

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

    Ну какие обработки с диска ИТС, какие платные решения.

    Во-первых XLS это изначально черти что, где дата/число может оказаться строкой, где ячейка может быть с числом а может быть с формулой, в ячейке может быть забито 2,42, а может быть забито 2,416 и формат с двумя знаками, еще строку вместо того, чтобы удалить, могли скрыть и т.п.

    Понятно, что нормальные люди используют четко структурированные форматы, пусть даже и примитивнейший DBF, хоть он и придуман 40 лет назад, но по крайней мере 0 там всегда 0, а 1 там всегда 1 безо всяких XSD схем, а 4х имеющихся там типов данных практически на всех хватает.

    Но иногда просто вариантов нет, сейчас повальная мода на веб-приложения, например АШАН дает поставщикам расшифровки платежа и поставки на сайте в видет XLS или HTML. Вместо того, чтобы дать людям возможность сделать всего 2 примитивнейших http запроса. одним давать платежи, вторым неотфактуровки опять же в нормальном формате, безо всяких веб-интерфейсов, интерфейс и сами какой надо сделаем.

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

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

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

    Reply
  14. KliMich

    Хорошая статья.

    Применю на практике

    Reply
  15. borrman

    Применимо. Буду реализовывать. Часто приходится грузить из XLS всякую ерунду и постоянно надо писать разные функции по поиску/созданию объектов. В КД это делать гораздо проще.

    Reply
  16. Alex_grem

    (18) Eugeneer, я понял, что надо купить вашу обработку и жизнь наладиться. Обещаю, как только заработаю куплю =))

    Reply
  17. vervolf9

    А если использовать внешние источники данных? В новых релизах платформы данный механизм есть.

    Reply
  18. Bacemo

    полностью согласен с echo77 . Лучше обработку с ИТС загрузка данных из табличного документа

    Reply
  19. Region102

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

    Reply
  20. Lyns_owner

    А извращенцев и среди 1с-ков хватает, я погляжу)

    Reply
  21. borrman

    Еще раз спасибо за идею

    Чтобы тут не говорили — реализовал 2 загрузки данных — одну из XLS вторую из XML через КД. Очень удобно — не нужно делать всякие поиски и прочее. Особенно мне понравилось загружать иерархический справочник из XML.

    Reply
  22. borrman

    (22)

    Она не всегда подойдет. У меня в XLS файле было 3 справочника и документы установки цен номенклатуры за разные периоды.

    как-то типовой обработкой это загружать не очень удобно.

    Reply
  23. ~gekK@~

    возможно пригодится. надо взять на заметку

    Reply
  24. p1l1gr1m

    Здравая идея, плюсую

    Reply
  25. Новенький_2209

    Отличная идея, возьму на вооружение!

    Reply
  26. Zas1402

    Полезная инфа..

    Reply
  27. ZVN

    (15) nafa,

    Сильно сказано

    <quote>

    Понятно, что нормальные люди используют четко структурированные форматы, пусть даже и примитивнейший DBF, хоть он и придуман 40 лет назад, но по крайней мере 0 там всегда 0, а 1 там всегда 1 безо всяких XSD схем, а 4х имеющихся там типов данных практически на всех хватает.

    </quote>

    Но за время работы с 1С Предприятие 7.7 файловый вариант DBF, я не раз при переносе данных обнаруживал вместо числа текст, хотя он и записан как число т.е. например значение 200 становилось числом только после того когда его ручками перебивали в БАЗЕ. Я так и не понял причину этого явления. Так что нужно всегда прикладывать голову к любой обработке.

    Reply
  28. Saldor

    Вот, такой документ можно будет добавить в 1с? И есть еще второй документ, когда сруктура тоже разрушена, но размеры как на картинке, не столбиком идут, а в одной ячейке, выпадающем списком?

    Reply

Leave a Comment

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