Импорт в 1с данных из любых документов

Часто нужно импортировать данные в 1С из внешних источников (Excell,Word,Pdf,Txt, Csv, Html и т.д.).

Чтобы не подключаться к каждому документу через Com объект, нужно создать свою обработку импорт из внешних источников в 1С.

В типовых конфигурациях есть такая обработка.

В данном примере мы будем создавать свою.

 

Алгоритм

1 В табличный документ подгружаем нужный макет

2 Пользователь копирует в табличный документ нужные данные

3 Программа 1с анализирует данные и готовит их к загрузке в нужные объекты 1с (документы/справочники)

4 Загрузка данных

 

 Реализация

1 Создаем форму 

1С импорт из Эксель, Водр, pdf, xls, txt, scv

Создаем реквизит формы ТабДок - табличный документ.

В него пользователь будет копировать нужные данные, а наша задача будет программно взять их оттуда и загрузить в 1С.

Перетащим реквизит ТабДок на форму и установим свойства как на рисунке.

 

Но сейчас ТабДок представляет собой обычный неразмеченный документ.

Куда будет пользователь грузить нужные колонки.

Для этого мы создадим макет:

Макет для загрузки данных в 1С

При открытии формы мы подгрузим этот макет в наш табличный документ "ТабДок" и пользователь будет знать куда ему грузить данные.

На рисунке я выделил где можно посмотреть адрес ячейки, адрес нам понадобится при импорте данных.

 

 

 Создадим на форме реквизит "Данные"  - таблица значений.

Сюда мы предварительно будем грузить введенные пользователем данные.

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

Реквизит "Данные" перенесем на другую страницу. В моем случае это "Создание участников".

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 открываем обработку ввода данных:

импорт в 1с запуск обработки

2 копируем нужные данные из Эксель для импорта в 1С:

скопировать данные из эксель для импорта в 1с

 

3 Вставляем в 1С в нашу обработку:

обработка импорта данных из эксель в 1С

 

4 Смотрим чтобы данные соответствовали столбцам:

1С обработка импорта из эксель, ворд и т.д.

 

5 Жмем далее (этой кнопкой вызывается процедура, указанная выше) и получаем результат:

Импорт в 1с результат

 

Мы получили данные в 1С. Теперь при нажатии "Создать участников" будут созданы элементы справочника "Участники". 

С этими данными мы можем делать что угодно - они уже загружены в 1С.

 

Спасибо за внимание.