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

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.

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

27633 руб.

12.06.2017    165222    1009    329    

493

SALE! 10%

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

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    37215    270    68    

204

Перенос данных 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, почту.

27572 руб.

18.02.2016    209414    686    559    

566

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

85400 руб.

05.10.2022    14601    17    8    

17

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

Специализированные обработки для загрузки кассовых чеков в локальных базах: 1С:БП 3.0, 1С:УНФ 3.0, 1С:Розница 3.0, 1С:КА. 2.5, 1С:ERP Управление предприятием 2.5 и 1С:УТ 11.5. Вы просто сканируете QR коды с бумажных и электронных чеков c помощью мобильного приложения ФНС или сканера штрихкодов и чеки автоматически (без ручного ввода) загружаются в документы 'Авансовый отчет', 'Расходы предпринимателя', 'Путевой лист', 'Приходная накладная', 'Поступление (акты, накладные, УПД)', 'Приобретение товаров и услуг', 'Отчет о розничных продажах', 'Поступление денежных документов' и 'Реестры выплат самозанятым'. Обработка будет работать на любой версии конфигурации управляемые формы: базовой, ПРОФ или КОРП. Для загрузки чеков самозанятых достаточно только ссылки на чек.

6990 руб.

19.08.2020    83895    383    93    

269

SALE! 10%

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

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

40000 36000 руб.

11.07.2019    30994    129    32    

38

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

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 07.10.2026, версия 9.5.0 - 10.9.0)

20740 руб.

20.11.2015    179888    430    401    

546
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Rotkiv_Vik 1 13.04.23 09:08 Сейчас в теме
Спасибо, полезная вещь.
2. ubnkfl 13.04.23 13:46 Сейчас в теме
Давно использую функционал, действительно, отличная замена самописным костылям.
Bassgood; triviumfan; kser87; +3 – Ответить
3. triviumfan 103 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 419 13.08.25 08:46 Сейчас в теме
Автор открыл для себя подсистему БСП в 2023 году, и решил этим удивить все сообщество, переписав документацию ИТС...
Читать полезно, молодец!
10. SirAlex 15.08.25 07:33 Сейчас в теме
(9) Это да, но зато сколько плюсов статья получила. :)

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