Альтернативная загрузка из файла в табличную часть или использование подсистемы БСП "Загрузка данных из файла"

12.04.23

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Пример альтернативной загрузки из файла в табличную часть объекта с использованием подсистемы БСП "Загрузка данных из файла".

Для решения типичной задачи загрузки ТЧ из файла обычно используют внешнюю/дополнительную обработку с видом "ЗаполнениеОбъекта". Решил рассмотреть альтернативный вариант - подсистему БСП "ЗагрузкаДанныхИзФайла".

Пользовательская документация сей подсистемы довольно подробно описана, а вот программный интерфейс - скуден. Пришлось немного поковыряться. Привожу практический пример.

Имеется документ "НастройкиНачисленийБонусов" с ТЧ "Контрагенты" и реквизитами "Контрагент", "Договор", "ЛимитСкидки", "ПланПродаж":

 

Имя реквизита Тип значения
Контрагент СправочникСсылка.Контрагенты
Договор СправочникСсылка.ДоговорыКонтрагентов
ЛимитСкидки Число(4,2)
ПланПродаж Число(15,2)

 

 

Требуется добавить возможность загрузки из файла в ТЧ.

1. Для начала создадим макет для этого документа. По умолчанию имя должно быть "ЗагрузкаИзФайла", но можно и переопределить. В макет по желанию можно добавлять примечания, чтобы пользователь мог увидеть описание колонки при загрузке. Для каждой ячейки колонки заголовка задаём имя:

 

 

2. Добавляем команду и обработчики на форму документа:

&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
	
	ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных();
	ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = "Документ.НастройкиНачисленийБонусов.Контрагенты";
	ПараметрыЗагрузки.Заголовок = НСтр("ru = 'Загрузка из файла';
										|en = 'Import from file'");
	Оповещение = Новый ОписаниеОповещения("ЗагрузитьИзФайлаЗавершение", ЭтотОбъект);
	ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьИзФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт
	
	Если АдресЗагруженныхДанных = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	ЗагрузитьИзФайлаНаСервере(АдресЗагруженныхДанных);
	
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьИзФайлаНаСервере(АдресЗагруженныхДанных)
	
	ЗагруженныеДанные = ПолучитьИзВременногоХранилища(АдресЗагруженныхДанных);
	
	Для каждого СтрокаТаблицы Из ЗагруженныеДанные Цикл 
	
		Если Не ЗначениеЗаполнено(СтрокаТаблицы.Контрагент) Тогда 
			Продолжить;
		КонецЕсли;
	
		ЗаполнитьЗначенияСвойств(Объект.Контрагенты.Добавить(), СтрокаТаблицы);

	КонецЦикла;

КонецПроцедуры

3. Идём в модуль менеджера этого документа, переопределяем параметры загрузки, где я типизирую колонки (имена совпадают со значениями имен колонок) и указываю обязательные поля, ну, и остаётся главная процедура - сопоставление объектов, где нужно из считанного файла найти/сопоставить объекты системы, поместив результат во временное хранилище с адресом "АдресТаблицыСопоставления".

Пару слов о параметре СписокНеоднозначностей: я намеренно его не рассматриваю, т.к. алгоритм сопоставления заметно усложняется. Вообще он нужен для того, чтобы в пользовательском интерфейсе рассмотреть случаи (кнопка "Устранить неоднозначность"), когда для ссылочного типа наш поиск нашёл несколько значений. Для этого нужно заполнить этот параметр, а затем ещё и переопределить метод ЗаполнитьСписокНеоднозначностей(), где уже определить дополнительный поиск значений таких полей.

#Область ЗагрузкаИзФайлаВТЧ

// Переопределяет параметры загрузки данных из файла.
//
// Параметры:
//  Параметры - Структура:
//   * ИмяМакетаСШаблоном - Строка - наименование макета. Например, "ЗагрузкаИзФайла".
//   * ИмяТабличнойЧасти - Строка - Полное имя табличной части. Например, "Документ._ДемоСчетНаОплатуПокупателю.ТабличнаяЧасть.Товары"
//   * ОбязательныеКолонки - Массив из Строка - наименования обязательных для заполнения колонок.
//   * ТипДанныхКолонки - Соответствие из КлючИЗначение:
//      * Ключ - Строка - имя колонки;
//      * Значение - ОписаниеТипов - тип колонки загружаемых данных.
//   * ДополнительныеПараметры - Структура
//
Процедура УстановитьПараметрыЗагрузкиИзФайлаВТЧ(Параметры) Экспорт
	
	ТипДанныхКолонки = Параметры.ТипДанныхКолонки;

	ТипДанныхКолонки.Вставить("ИНН",				 	Новый ОписаниеТипов("Строка",,	Новый КвалификаторыСтроки(12)));
	ТипДанныхКолонки.Вставить("КПП",			 		Новый ОписаниеТипов("Строка",,	Новый КвалификаторыСтроки(9)));
	ТипДанныхКолонки.Вставить("НаименованиеДоговора",	Новый ОписаниеТипов("Строка",,	Новый КвалификаторыСтроки(150)));
	ТипДанныхКолонки.Вставить("НомерДоговора", 			Новый ОписаниеТипов("Строка",,	Новый КвалификаторыСтроки(128)));
	ТипДанныхКолонки.Вставить("ЛимитСкидки",			Новый ОписаниеТипов("Число",,	Новый КвалификаторыЧисла(4, 2)));
	ТипДанныхКолонки.Вставить("ПланПродаж",				Новый ОписаниеТипов("Число",,	Новый КвалификаторыЧисла(15, 2)));
	
	МассивОбзятельныхКолонок = Новый Массив;
	МассивОбзятельныхКолонок.Добавить("ИНН");
	МассивОбзятельныхКолонок.Добавить("НаименованиеДоговора");
	
	Параметры.ОбязательныеКолонки = МассивОбзятельныхКолонок;
	
КонецПроцедуры

// Производит сопоставление данных, загружаемых в табличную часть ПолноеИмяТабличнойЧасти,
// с данными в ИБ, и заполняет параметры АдресТаблицыСопоставления и СписокНеоднозначностей.
// 
// Параметры:
// 	АдресЗагружаемыхДанных- Строка - адрес временного хранилища с таблицей значений, в которой
//                                   находятся загруженные данные из файла.
// 	АдресТаблицыСопоставления - Строка - адрес временного хранилища с пустой таблицей значений,
//                                       являющейся копией табличной части документа, 
//                                       которую необходимо заполнить из таблицы АдресЗагружаемыхДанных.
// 	СписокНеоднозначностей - ТаблицаЗначений - состоит из:
//  * Идентификатор - Число - идентификатор
//  * Колонка - Строка - имя колонки
// 	ПолноеИмяТабличнойЧасти - Строка - полное имя табличной части
// 	ДополнительныеПараметры - Структура - дополнительные параметры, переданные из формы-источнике.
//
Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
	
	Контрагенты = ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления); // ТаблицаЗначений
	ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(АдресЗагружаемыхДанных); // ТаблицаЗначений
	
	МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДанныеДляСопоставления.Идентификатор КАК ИдентификаторСтроки,
		|	ДанныеДляСопоставления.ИНН КАК ИНН,
		|	ДанныеДляСопоставления.КПП КАК КПП,
		|	ДанныеДляСопоставления.НаименованиеДоговора КАК НаименованиеДоговора,
		|	ДанныеДляСопоставления.НомерДоговора КАК НомерДоговора,
		|	ДанныеДляСопоставления.ЛимитСкидки КАК ЛимитСкидки,
		|	ДанныеДляСопоставления.ПланПродаж КАК ПланПродаж
		|ПОМЕСТИТЬ ДанныеДляСопоставления
		|ИЗ
		|	&ДанныеДляСопоставления КАК ДанныеДляСопоставления
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	ИдентификаторСтроки,
		|	ИНН,
		|	КПП,
		|	НаименованиеДоговора
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	МАКСИМУМ(Контрагенты.Ссылка) КАК Ссылка,
		|	ДанныеДляСопоставления.ИдентификаторСтроки КАК ИдентификаторСтроки
		|ПОМЕСТИТЬ СопоставленныеКонтрагенты
		|ИЗ
		|	ДанныеДляСопоставления КАК ДанныеДляСопоставления
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
		|		ПО (Контрагенты.ИНН = ДанныеДляСопоставления.ИНН)
		|			И (ВЫБОР
		|				КОГДА ДанныеДляСопоставления.КПП <> """"
		|					ТОГДА Контрагенты.КПП = ДанныеДляСопоставления.КПП
		|				ИНАЧЕ ИСТИНА
		|			КОНЕЦ)
		|
		|СГРУППИРОВАТЬ ПО
		|	ДанныеДляСопоставления.ИдентификаторСтроки
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	ИдентификаторСтроки
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	МАКСИМУМ(Договоры.Ссылка) КАК Ссылка,
		|	ДанныеДляСопоставления.ИдентификаторСтроки КАК ИдентификаторСтроки
		|ПОМЕСТИТЬ СопоставленныеДоговоры
		|ИЗ
		|	ДанныеДляСопоставления КАК ДанныеДляСопоставления
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ СопоставленныеКонтрагенты КАК СопоставленныеКонтрагенты
		|		ПО ДанныеДляСопоставления.ИдентификаторСтроки = СопоставленныеКонтрагенты.ИдентификаторСтроки
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК Договоры
		|		ПО (Договоры.Контрагент = СопоставленныеКонтрагенты.Ссылка)
		|			И ДанныеДляСопоставления.НаименованиеДоговора = Договоры.Наименование
		|			И (ВЫБОР
		|				КОГДА ДанныеДляСопоставления.НомерДоговора <> """"
		|					ТОГДА ДанныеДляСопоставления.НомерДоговора = Договоры.Номер
		|				ИНАЧЕ ИСТИНА
		|			КОНЕЦ)
		|
		|СГРУППИРОВАТЬ ПО
		|	ДанныеДляСопоставления.ИдентификаторСтроки
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	ИдентификаторСтроки
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	СопоставленныеКонтрагенты.Ссылка КАК Контрагент,
		|	СопоставленныеДоговоры.Ссылка КАК Договор,
		|	ДанныеДляСопоставления.ЛимитСкидки КАК ЛимитСкидки,
		|	ДанныеДляСопоставления.ПланПродаж КАК ПланПродаж
		|ИЗ
		|	ДанныеДляСопоставления КАК ДанныеДляСопоставления
		|		ЛЕВОЕ СОЕДИНЕНИЕ СопоставленныеКонтрагенты КАК СопоставленныеКонтрагенты
		|		ПО ДанныеДляСопоставления.ИдентификаторСтроки = СопоставленныеКонтрагенты.ИдентификаторСтроки
		|		ЛЕВОЕ СОЕДИНЕНИЕ СопоставленныеДоговоры КАК СопоставленныеДоговоры
		|		ПО ДанныеДляСопоставления.ИдентификаторСтроки = СопоставленныеДоговоры.ИдентификаторСтроки";

	Запрос.УстановитьПараметр("ДанныеДляСопоставления", ЗагружаемыеДанные);
	
	Выборка = Запрос.Выполнить().Выбрать();

	Пока Выборка.Следующий() Цикл
		
		ЗаполнитьЗначенияСвойств(Контрагенты.Добавить(), Выборка);
		
	КонецЦикла;
	
	ПоместитьВоВременноеХранилище(Контрагенты, АдресТаблицыСопоставления);
	
КонецПроцедуры

#КонецОбласти

Вуаля:

 

 

Вступайте в нашу телеграмм-группу Инфостарт

БСП ЗагрузкаДанныхИзФайла загрузка данных из файла excel csv.

См. также

НДС 22% Учетные задачи ККМ Файловый обмен (TXT, XML, DBF), FTP 1С 8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Бухгалтерский учет Налоговый учет НДС Платные (руб)

Готовое обновление для конфигурации 1С:Управление торговлей 10.3, 1С:Комплексная автоматизация 1.1 , 1С:Управление производственным предприятием 1.3 обеспечивающее полную поддержку новой ставки НДС 22%. Для 1С:УТ 10.3 реализована поддержка печати чеков ККМ, а также Правила обмена с 1С:БП 3.0. Решение встраивает необходимые изменения в перечисления и документы, включая торговые операции и печатные формы.

12200 руб.

16.12.2025    7691    83    0    

78

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.264.x) и БП 3.0 (3.0.192.x). Правила подходят для версии ПРОФ и КОРП.

38000 руб.

15.12.2021    32995    246    61    

187

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

22650 руб.

12.06.2017    158750    949    317    

478

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    186917    350    285    

412

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    61889    78    130    

77

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.25.x).

38000 руб.

23.07.2020    66631    311    88    

250

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 3, УНФ 3 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16531 руб.

18.02.2016    200799    663    543    

559
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Rotkiv_Vik 1 13.04.23 09:08 Сейчас в теме
Спасибо, полезная вещь.
2. ubnkfl 13.04.23 13:46 Сейчас в теме
Давно использую функционал, действительно, отличная замена самописным костылям.
Bassgood; triviumfan; kser87; +3 Ответить
3. triviumfan 101 13.04.23 13:52 Сейчас в теме
(2) А я вот только недавно стал, правда всегда имелся шаблон внешней обработки, но по функционалу он, конечно, проигрывает.
А тут сел, разобрался, и, похоже, что я теперь всегда буду использовать эту подсистему :)
4. ubnkfl 13.04.23 14:48 Сейчас в теме
(3) я прослезился, когда юзер САМ в моем документе сохранил шаблон Excel на диск, заполнил его и загрузил потом ТЧ через файл. Я это даже сам не пробовал )) А оно работает.
maxim_1c; +1 Ответить
5. ivan453 15.04.23 20:11 Сейчас в теме
Допиливал в свое время чтобы иерархию учитывал при загрузке спрпавочников
6. migele 163 07.09.23 14:28 Сейчас в теме
Спасибо!
Смешная опечатка
МассивОбзятельныхКолонок :)
triviumfan; +1 Ответить
7. user2115166 21.11.24 17:37 Сейчас в теме
Всем добрый день!
Есть ли возможность как то загружать данные не в таблицу объекта, а в реквизит таблицу на форме?
8. trofss 3 09.04.25 12:46 Сейчас в теме
Добрый день!
Попробовала данный подход к заполнению документов в Бухгалтерии, но у меня не открывается форма сопоставления, когда номенклатура не найдена, просто данные загружаются без сопоставленной строки.
Видимо свежая версия БСП это не предусматривает.
9. Viktor_Ermakov 399 13.08.25 08:46 Сейчас в теме
Автор открыл для себя подсистему БСП в 2023 году, и решил этим удивить все сообщество, переписав документацию ИТС...
Читать полезно, молодец!
10. SirAlex 15.08.25 07:33 Сейчас в теме
(9) Это да, но зато сколько плюсов статья получила. :)

Ещё бы обёртку в плане подачи материала поинтереснее сделать.
Мне самому давно пора стать автором на ИС, а тут идея для статей...
11. Bukaska 148 16.02.26 17:22 Сейчас в теме
(9) Оно сейчас в типовых скрыто. Но если порыться, можно найти общие модули, они до сих пор рабочие. Тоже норм заходит, только процедуру сопоставления для себя переделать и усе
12. Viktor_Ermakov 399 17.02.26 09:05 Сейчас в теме
(11) Кто и что скрыл от Вас? открываем на ИТС описание БСП нужной версии а там раздел "Загрузка данных из файла".
Этот раздел есть в любой версии БСП!
Прикрепленные файлы:
Для отправки сообщения требуется регистрация/авторизация