gifts2017

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

Опубликовал Алексей Гафуров (Alex_grem) в раздел Обмен - Загрузка и выгрузка в Excel

Наверно многие сталкивались с проблемой загрузки данных из 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" указываем правила, указываем файл выгрузки данных. Нажимаем "Выгрузить". Затем переходим на вкладку "Загрузка", указываем файл загрузки и нажимаем загрузить.

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

Результат: 

 Результат


Скачать файлы

Наименование Файл Версия Размер
Все файлы одним архивом 254
.rar 299,34Kb
13.10.12
254
.rar 299,34Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Роза (DoctorRoza) 15.10.12 09:49
Спасибо за информацию, хорошая статья!
2. Viktor Kupko (zipik) 15.10.12 18:43
3. Viktor Kupko (zipik) 15.10.12 18:43
4. Александр Крынецкий (echo77) 15.10.12 19:21
Советую всем сначала посмотреть обработку с ИТС
С помощью неё все загрузки из excel на хрен не нужны и отпадает нужда создавать "одноразовые" обработки по загрузке данных
5. Алексей Гафуров (Alex_grem) 15.10.12 20:04
(4) echo77, согласен. Если загрузка их таблиц с простой структурой, то быстрее будет загрузить через указанную обработку, но если таблицы сложной структуры и требуются специфические условия поиска и преобразования данных, то данный метод очень сэкономит время разработки и отладки.
6. Михаил Куклин (mihan) 15.10.12 22:47
по мне дак проще идти путем допила обработки "загрузка данных из табличного документа"
7. f f (fnv) 16.10.12 07:44
Сложный способ какой-то, по-моему, проще через Оле, чем через конвертацию.
8. Eugeneer (Eugeneer) 16.10.12 11:43
Жесть, А нафиг вот этот весь геммор?
9. Алексей Гафуров (Alex_grem) 16.10.12 11:54
(8) Eugeneer, Ответ на вопрос можно получить прочитав статью
10. Яков Коган (Yashazz) 16.10.12 13:26
Уже вроде были такие предложения, и готовые решения на основе Конвертации тоже были. Нэ?
11. Алексей Гафуров (Alex_grem) 16.10.12 13:29
(10) Yashazz, я не нашел, поэтому написал, может кому пригодится схема загрузки
12. Eugeneer (Eugeneer) 16.10.12 15:14
(9) Ответа в статье нет. Кроме как - "Вы много видели обработок, эта помогает"

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

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

А чтобы проблем не было ответ есть только один - надо покупать платные решения, с хорошей поддержкой, качеством, возможностью легко модифицировать под себя и т.д. и т.п. Вот пример одного из лучших решений (в котором собрано столько специфики, сколько только возможно) по импорту из экселя (для обычных пользователей) -
http://infostart.ru/public/21810/

Да и много других от авторов. Я не понимаю - зачем вообще тут КД ?? Вопрос стоит в том - решить задачу (а я не вижу тут готового решения) или просто написать через три колена метод который не дает решения.
13. Алексей Гафуров (Alex_grem) 16.10.12 15:36
(12) Eugeneer, спасибо за рекламу.
Готового решения Вы тут не найдете - я описал методику, а использовать ее или нет каждый решает сам
Трактор; kabanoff; +2 Ответить
15. Виталий (nafa) 20.10.12 12:55
(12)

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

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

Во-первых XLS это изначально черти что, где дата/число может оказаться строкой, где ячейка может быть с числом а может быть с формулой, в ячейке может быть забито 2,42, а может быть забито 2,416 и формат с двумя знаками, еще строку вместо того, чтобы удалить, могли скрыть и т.п.
Понятно, что нормальные люди используют четко структурированные форматы, пусть даже и примитивнейший DBF, хоть он и придуман 40 лет назад, но по крайней мере 0 там всегда 0, а 1 там всегда 1 безо всяких XSD схем, а 4х имеющихся там типов данных практически на всех хватает.
Но иногда просто вариантов нет, сейчас повальная мода на веб-приложения, например АШАН дает поставщикам расшифровки платежа и поставки на сайте в видет XLS или HTML. Вместо того, чтобы дать людям возможность сделать всего 2 примитивнейших http запроса. одним давать платежи, вторым неотфактуровки опять же в нормальном формате, безо всяких веб-интерфейсов, интерфейс и сами какой надо сделаем.

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

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

Я к тому, что в большинстве реальных ситуаций смысла возиться с типовыми обработками нет никакого вообще смысла. Все равно придете к тому что на каждый чих будете вставлять программный код. И реально быстрее написать программу, чем пытаться что-то настроить.
16. Владимир Клименко (KliMich) 20.10.12 13:09
Хорошая статья.
Применю на практике
17. Артем Боровлев (borrman) 20.10.12 13:23
Применимо. Буду реализовывать. Часто приходится грузить из XLS всякую ерунду и постоянно надо писать разные функции по поиску/созданию объектов. В КД это делать гораздо проще.
18. Eugeneer (Eugeneer) 20.10.12 16:10
(15) все праивльно описано! как есть в жизни.
И точно также правильно что написать быстрее чем настроить. Но делать это через КД... это просто пипец.
19. Алексей Гафуров (Alex_grem) 20.10.12 18:28
(18) Eugeneer, я понял, что надо купить вашу обработку и жизнь наладиться. Обещаю, как только заработаю куплю =))
20. Eugeneer (Eugeneer) 21.10.12 05:17
(19) желаю успехов заработать на своем труде!
21. Серж Драт (vervolf9) 21.10.12 08:10
А если использовать внешние источники данных? В новых релизах платформы данный механизм есть.
22. Сергей Валутин (Bacemo) 21.10.12 10:53
полностью согласен с echo77 . Лучше обработку с ИТС загрузка данных из табличного документа
23. Илья Низамов (Region102) 22.10.12 06:06
Здесь многие говорят о не целесообразности метода, но он интересен, не понимаю, почему 1с сама не развивает КД дальше и людям приходится выдумывать разные методики загрузки из других источников. Те, кто говорит, что работать с ней сложно и не понятно, просто не знают ее. По опыту могу сказать, что если нужно что-то перебросить между не типовыми конфигурациями с минимальными затратами по времени, то это однозначно КД.
24. Павел Никифоров (Lyns_owner) 23.10.12 02:48
А извращенцев и среди 1с-ков хватает, я погляжу)
25. Артем Боровлев (borrman) 24.10.12 20:26
Еще раз спасибо за идею
Чтобы тут не говорили - реализовал 2 загрузки данных - одну из XLS вторую из XML через КД. Очень удобно - не нужно делать всякие поиски и прочее. Особенно мне понравилось загружать иерархический справочник из XML.
26. Артем Боровлев (borrman) 24.10.12 20:29
(22)
Она не всегда подойдет. У меня в XLS файле было 3 справочника и документы установки цен номенклатуры за разные периоды.
как-то типовой обработкой это загружать не очень удобно.
27. Александр Беляев (~gekK@~) 26.10.12 10:35
возможно пригодится. надо взять на заметку
28. А Р (p1l1gr1m) 27.10.12 01:42
29. Игорь Хитров (Новенький_2209) 04.11.12 00:16
Отличная идея, возьму на вооружение!
30. Игор Мудрицкий (Zas1402) 06.11.12 15:25
31. Виктор Захаров (ZVN) 06.05.13 18:34
(15) nafa,
Сильно сказано
<quote>
Понятно, что нормальные люди используют четко структурированные форматы, пусть даже и примитивнейший DBF, хоть он и придуман 40 лет назад, но по крайней мере 0 там всегда 0, а 1 там всегда 1 безо всяких XSD схем, а 4х имеющихся там типов данных практически на всех хватает.
</quote>
Но за время работы с 1С Предприятие 7.7 файловый вариант DBF, я не раз при переносе данных обнаруживал вместо числа текст, хотя он и записан как число т.е. например значение 200 становилось числом только после того когда его ручками перебивали в БАЗЕ. Я так и не понял причину этого явления. Так что нужно всегда прикладывать голову к любой обработке.
34. Алексей Андреев (Saldor) 29.05.16 04:29
Вот, такой документ можно будет добавить в 1с? И есть еще второй документ, когда сруктура тоже разрушена, но размеры как на картинке, не столбиком идут, а в одной ячейке, выпадающем списком?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа