Часто нужно импортировать данные в 1С из внешних источников (Excell,Word,Pdf,Txt, Csv, Html и т.д.).
Чтобы не подключаться к каждому документу через Com объект, нужно создать свою обработку импорт из внешних источников в 1С.
В типовых конфигурациях есть такая обработка.
В данном примере мы будем создавать свою.
Алгоритм
1 В табличный документ подгружаем нужный макет
2 Пользователь копирует в табличный документ нужные данные
3 Программа 1с анализирует данные и готовит их к загрузке в нужные объекты 1с (документы/справочники)
4 Загрузка данных
Реализация
1 Создаем форму
Создаем реквизит формы ТабДок - табличный документ.
В него пользователь будет копировать нужные данные, а наша задача будет программно взять их оттуда и загрузить в 1С.
Перетащим реквизит ТабДок на форму и установим свойства как на рисунке.
Но сейчас ТабДок представляет собой обычный неразмеченный документ.
Куда будет пользователь грузить нужные колонки.
Для этого мы создадим макет:
При открытии формы мы подгрузим этот макет в наш табличный документ "ТабДок" и пользователь будет знать куда ему грузить данные.
На рисунке я выделил где можно посмотреть адрес ячейки, адрес нам понадобится при импорте данных.
Создадим на форме реквизит "Данные" - таблица значений.
Сюда мы предварительно будем грузить введенные пользователем данные.
Это нужно для того чтобы пользователь мог скорректировать введенные данные, а мы могли бы ему точно указать на ошибку в загружаемых данных.
Реквизит "Данные" перенесем на другую страницу. В моем случае это "Создание участников".
Создадим процедуру, которой мы загрузим данные в 1с в таблицу значений "Данные", которую создали ранее и вывели на вторую страницу.
&НаКлиенте Процедура получитьДанныеУчастников() номСтр=0; номСтрДанные=0; Данные.Очистить(); // чистим таблицу значений от старых данных // пока истина цикл //+получаем данные из табличного документа номСтр=номСтр+1; облФамилияИмя=сокрЛП(табДок.Область("R"+номСтр+"C1").Текст); Если облФамилияИмя="Фамилия имя" тогда продолжить; конецЕсли; если СтрДлина(облФамилияИмя)=0 тогда прервать; конецЕсли; //считаем если область имя фамилия пустая, то данных больше нет пока СтрНайти(облФамилияИмя," ")<>0 цикл облФамилияИмя=СтрЗаменить(облФамилияИмя," "," "); конецЦикла; мФамИмя=общийм.РазложитьСтрокуВМассивПодстрок(облФамилияИмя," "); фамилия=мФамИмя[0]; имя=мФамИмя[1]; облПол=сокрлп(табДок.Область("R"+номСтр+"C2").Текст); если СтрДлина(облпол)>0 тогда если СтрНайти(нрег(облпол),"м")<>0 тогда пол=ПредопределенноеЗначение("Перечисление.Пол.Мужской"); иначе пол=ПредопределенноеЗначение("Перечисление.Пол.Женский"); конецЕсли; иначе пол=неопределено; конецЕсли; облДатаРождения=сокрЛП(табДок.Область("R"+номСтр+"C3").Текст); если СтрДлина(облДатаРождения)>0 тогда мДатаРождения=общийм.РазложитьСтрокуВМассивПодстрок(облДатаРождения,"."); датарождения=дата(мДатаРождения[2],мДатаРождения[1],мДатаРождения[0]); иначе датарождения=неопределено; конецЕсли; облОрг=сокрЛП(табДок.Область("R"+номСтр+"C4").Текст); Если стрдлина(облОрг)>0 тогда оргНайдено=найтиОрганизациюПоИмени(облОрг); если оргНайдено=неопределено или оргНайдено=ПредопределенноеЗначение("Справочник.Организации.ПустаяСсылка") тогда рез=Вопрос("Создать организацию "+облОрг+"?",РежимДиалогаВопрос.ДаНет); если рез=КодВозвратаДиалога.Да тогда оргНайдено=создатьОрг(облОрг); иначе оргНайдено=ПредопределенноеЗначение("Справочник.Организации.ПустаяСсылка"); конецЕсли; конецЕсли; иначе оргНайдено=ПредопределенноеЗначение("Справочник.Организации.ПустаяСсылка"); конецЕсли; //-получаем данные из табличного документа //добавляем в табл "Данные" на странице2 стр=Данные.Добавить(); номСтрДанные=номСтрДанные+1; стр.номСтр=номСтрДанные; стр.имя=имя; стр.фамилия=фамилия; стр.пол=пол; стр.организация=оргНайдено; стр.датаРождения=датарождения; если номСтр=6000 тогда прервать; конецЕсли; //на случай ошибки конецЦикла; КонецПроцедуры
Работает это так:
1 открываем обработку ввода данных:
2 копируем нужные данные из Эксель для импорта в 1С:
3 Вставляем в 1С в нашу обработку:
4 Смотрим чтобы данные соответствовали столбцам:
5 Жмем далее (этой кнопкой вызывается процедура, указанная выше) и получаем результат:
Мы получили данные в 1С. Теперь при нажатии "Создать участников" будут созданы элементы справочника "Участники".
С этими данными мы можем делать что угодно - они уже загружены в 1С.
Спасибо за внимание.