bdd2

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

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

Результат: 

 Результат


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

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

См. также

Добавить вознаграждение
Комментарии
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) 666 15.10.12 19:21 Сейчас в теме
Советую всем сначала посмотреть обработку с ИТС
С помощью неё все загрузки из excel на хрен не нужны и отпадает нужда создавать "одноразовые" обработки по загрузке данных
5. Алексей Гафуров (Alex_grem) 206 15.10.12 20:04 Сейчас в теме
(4) echo77, согласен. Если загрузка их таблиц с простой структурой, то быстрее будет загрузить через указанную обработку, но если таблицы сложной структуры и требуются специфические условия поиска и преобразования данных, то данный метод очень сэкономит время разработки и отладки.
6. Михаил Куклин (mihan) 93 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) 206 16.10.12 11:54 Сейчас в теме
(8) Eugeneer, Ответ на вопрос можно получить прочитав статью
10. Яков Коган (Yashazz) 1940 16.10.12 13:26 Сейчас в теме
Уже вроде были такие предложения, и готовые решения на основе Конвертации тоже были. Нэ?
11. Алексей Гафуров (Alex_grem) 206 16.10.12 13:29 Сейчас в теме
(10) Yashazz, я не нашел, поэтому написал, может кому пригодится схема загрузки
12. Eugeneer (Eugeneer) 16.10.12 15:14 Сейчас в теме
(9) Ответа в статье нет. Кроме как - "Вы много видели обработок, эта помогает"

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

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

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

Да и много других от авторов. Я не понимаю - зачем вообще тут КД ?? Вопрос стоит в том - решить задачу (а я не вижу тут готового решения) или просто написать через три колена метод который не дает решения.
13. Алексей Гафуров (Alex_grem) 206 16.10.12 15:36 Сейчас в теме
(12) Eugeneer, спасибо за рекламу.
Готового решения Вы тут не найдете - я описал методику, а использовать ее или нет каждый решает сам
Трактор; kabanoff; +2 Ответить
14. Андрей Крутских (K_A_O) 475 17.10.12 12:48 Сейчас в теме
15. Виталий (nafa) 624 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) 206 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) 32 22.10.12 06:06 Сейчас в теме
Здесь многие говорят о не целесообразности метода, но он интересен, не понимаю, почему 1с сама не развивает КД дальше и людям приходится выдумывать разные методики загрузки из других источников. Те, кто говорит, что работать с ней сложно и не понятно, просто не знают ее. По опыту могу сказать, что если нужно что-то перебросить между не типовыми конфигурациями с минимальными затратами по времени, то это однозначно КД.
24. Павел Никифоров (Lyns_owner) 259 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) 110 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с? И есть еще второй документ, когда сруктура тоже разрушена, но размеры как на картинке, не столбиком идут, а в одной ячейке, выпадающем списком?