Последовательность такая:
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» указываем правила, указываем файл выгрузки данных. Нажимаем «Выгрузить». Затем переходим на вкладку «Загрузка», указываем файл загрузки и нажимаем загрузить.
Еще отмечу: если база, в которую происходит загрузка, работает в режиме управляемое приложение, то обязательно ее надо запустить в обычном приложении, по причине того что загрузка происходит на сервере, а интерактивная работа с формой настройки на сервере невозможна!
Результат:
Спасибо за информацию, хорошая статья!
Отличная статья!!
ставлю ПЛЮС!
Советую всем сначала посмотреть обработку с ИТС
С помощью неё все загрузки из excel на хрен не нужны и отпадает нужда создавать «одноразовые» обработки по загрузке данных
(4) echo77, согласен. Если загрузка их таблиц с простой структурой, то быстрее будет загрузить через указанную обработку, но если таблицы сложной структуры и требуются специфические условия поиска и преобразования данных, то данный метод очень сэкономит время разработки и отладки.
по мне дак проще идти путем допила обработки «загрузка данных из табличного документа»
Сложный способ какой-то, по-моему, проще через Оле, чем через конвертацию.
(8) Eugeneer, Ответ на вопрос можно получить прочитав статью
Уже вроде были такие предложения, и готовые решения на основе Конвертации тоже были. Нэ?
(10) Yashazz, я не нашел, поэтому написал, может кому пригодится схема загрузки
(12) Eugeneer, спасибо за рекламу.
Готового решения Вы тут не найдете — я описал методику, а использовать ее или нет каждый решает сам
(11)http://infostart.ru/public/16316/
(12)
Вы когда статьи/комменты про загрузки с XLS пишете, указывайте, какая ситуация.
Одно дело когда надо есть разовая задача, надо разово загрузить файл, ту же номенклатуру от поставщика, и пофиг что он загрузится на 80%, все равно когда будут конкретные документы вводиться все будет проверяться и исправляться. Тут кончено можно и с диска ИТс обработку взять.
И совершенно другое дело когда реально нужна система, работающая с минимальным участия человека. И когда сбой в работе означает реальные убытки, за которые кому-то придется заплатить.
Ну какие обработки с диска ИТС, какие платные решения.
Во-первых XLS это изначально черти что, где дата/число может оказаться строкой, где ячейка может быть с числом а может быть с формулой, в ячейке может быть забито 2,42, а может быть забито 2,416 и формат с двумя знаками, еще строку вместо того, чтобы удалить, могли скрыть и т.п.
Понятно, что нормальные люди используют четко структурированные форматы, пусть даже и примитивнейший DBF, хоть он и придуман 40 лет назад, но по крайней мере 0 там всегда 0, а 1 там всегда 1 безо всяких XSD схем, а 4х имеющихся там типов данных практически на всех хватает.
Но иногда просто вариантов нет, сейчас повальная мода на веб-приложения, например АШАН дает поставщикам расшифровки платежа и поставки на сайте в видет XLS или HTML. Вместо того, чтобы дать людям возможность сделать всего 2 примитивнейших http запроса. одним давать платежи, вторым неотфактуровки опять же в нормальном формате, безо всяких веб-интерфейсов, интерфейс и сами какой надо сделаем.
Во-вторых XLS изначально допускает совершенно произвольные изменения, типа колонку убрать колонку добавить где-то просто комментарий вписали и т.п. И их еще заметить надо прежде чем что-то грузить.
В третьих, это хорошо, когда вы просто справочник грузите. А когда документы, причем с перекрытием по времени (т.е. в исходном файле есть уже документы, которые были в предыдущем файле и которые загружены в систему). Да еще поставщик файла какие-нибуль коды поменял. И нужно проверять корректность данных да если надо еще и удаления правильные делать ?
Я к тому, что в большинстве реальных ситуаций смысла возиться с типовыми обработками нет никакого вообще смысла. Все равно придете к тому что на каждый чих будете вставлять программный код. И реально быстрее написать программу, чем пытаться что-то настроить.
Хорошая статья.
Применю на практике
Применимо. Буду реализовывать. Часто приходится грузить из XLS всякую ерунду и постоянно надо писать разные функции по поиску/созданию объектов. В КД это делать гораздо проще.
(18) Eugeneer, я понял, что надо купить вашу обработку и жизнь наладиться. Обещаю, как только заработаю куплю =))
А если использовать внешние источники данных? В новых релизах платформы данный механизм есть.
полностью согласен с echo77 . Лучше обработку с ИТС загрузка данных из табличного документа
Здесь многие говорят о не целесообразности метода, но он интересен, не понимаю, почему 1с сама не развивает КД дальше и людям приходится выдумывать разные методики загрузки из других источников. Те, кто говорит, что работать с ней сложно и не понятно, просто не знают ее. По опыту могу сказать, что если нужно что-то перебросить между не типовыми конфигурациями с минимальными затратами по времени, то это однозначно КД.
А извращенцев и среди 1с-ков хватает, я погляжу)
Еще раз спасибо за идею
Чтобы тут не говорили — реализовал 2 загрузки данных — одну из XLS вторую из XML через КД. Очень удобно — не нужно делать всякие поиски и прочее. Особенно мне понравилось загружать иерархический справочник из XML.
(22)
Она не всегда подойдет. У меня в XLS файле было 3 справочника и документы установки цен номенклатуры за разные периоды.
как-то типовой обработкой это загружать не очень удобно.
возможно пригодится. надо взять на заметку
Здравая идея, плюсую
Отличная идея, возьму на вооружение!
Полезная инфа..
(15) nafa,
Сильно сказано
<quote>
Понятно, что нормальные люди используют четко структурированные форматы, пусть даже и примитивнейший DBF, хоть он и придуман 40 лет назад, но по крайней мере 0 там всегда 0, а 1 там всегда 1 безо всяких XSD схем, а 4х имеющихся там типов данных практически на всех хватает.
</quote>
Но за время работы с 1С Предприятие 7.7 файловый вариант DBF, я не раз при переносе данных обнаруживал вместо числа текст, хотя он и записан как число т.е. например значение 200 становилось числом только после того когда его ручками перебивали в БАЗЕ. Я так и не понял причину этого явления. Так что нужно всегда прикладывать голову к любой обработке.
Вот, такой документ можно будет добавить в 1с? И есть еще второй документ, когда сруктура тоже разрушена, но размеры как на картинке, не столбиком идут, а в одной ячейке, выпадающем списком?