1C Загрузка из текстового документа

Автор: | 11.04.2022

Как загрузить данные в 1С из текстового файла с разделителями (Часть 1)

Очень часто появляется необходимость в загрузке данных в 1С из других источников, например, файлов, текстовых документов, excel, xml и т.д. В интернете можно найти типовую обработку для для этих целей, либо написать собственную. Задачи подобного рода встречаются очень часто, поэтому каждый должен уметь это делать, тем более что это не очень сложно. Поэтому желательно написать обработку самостоятельно, в этом случае Вы узнаете обо всех нюансах и подводных камнях, да и такой опыт пригодиться 100%.

Общая схема загрузки данных из файлов выглядит следующим образом, создается обработка с табличной частью и двумя командами «Прочитать» и «Загрузить», с помощью первой сначала данные из файла читаются и отображаться в ТЧ, после их проверки пользователем они загружаются в базу уже с помощью второй команды.

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

Загрузка данных из текстового файла .txt

Для примера будем загружать данные о контрагентах из текстового документа «.txt», который будет выглядеть следующим образом, в каждой строчке будет находиться сначала «Краткое наименование», потом «Полное» и «ИНН», все это будет разделяться точкой с запятой «;».

1C Загрузка из текстового документа

Открываем конфигуратор и создаем новую обработку, назовем её «Загрузка Контрагентов».

Как загрузить данные в 1С из текстового файла с разделителями (Часть 1)

Переходим во вкладку «Данные» и добавляем один реквизит «Выбор файла», создаем табличную часть «Данные Файлы» с реквизитами «Наименование», «Расшифровка», «ИНН».

С помощью реквизита «Выбрать файл» мы собственно будем выбирать файл, и загружать его в табличную часть, поэтому количество реквизитов ТЧ должно совпадать с данными в файле.

Обработка для загрузки данных из файла в 1С

Все реквизиты будут с типом «Строка» только с разной длинной, тут Вы сами устанавливаете длину.

Как загрузить данные из текстового файла в 1с

Наименование можно установить «150», полное наименование скажем 250 ну и ИНН стандартно 12 символов.

Загрузка данных в 1С

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

Команда для загрузки данных из текстового файла

Для того чтобы появился возможность выбора фала в поле «Выбор файла» нужно открыть свойства этого реквизита, в разделе «Использование» найти пункт «Кнопка выбора» и переключить на «Да».

Как сделать поле выбора

Далее создаем событие «Начало выбора» для реквизита «Выбрать Файла».

Как добавить событие "Выбор файла"

И пишем вот такой код.

&НаКлиенте
 Процедура ВыбратьФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	// Вставить содержимое обработчика.
	СтандартнаяОбработка = Ложь;
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выбор файла";
	Диалог.Фильтр = "Текстовый документ (*.txt)|*.txt";
	Диалог.ИндексФильтра = 0;
	Диалог.ПредварительныйПросмотр = Ложь;
	Диалог.ПроверятьСуществованиеФайла = Истина;
	Диалог.МножественныйВыбор = Ложь; 
	Диалог.ПолноеИмяФайла = Объект.ВыбратьФайл;
	
	Если Диалог.Выбрать() Тогда
		Объект.ВыбратьФайл = Диалог.ПолноеИмяФайла;
	КонецЕсли;	
КонецПроцедуры

В принципе тут все стандартно.

1С выбор файла

После чего создаем процедуру для команды «Загрузить».

Процедура для загрузки файла

Вариантов может быть два, если файл небольшой то его можно сразу загружать целиком в массив, потом обрабатывать каждую строчку массива, если же файл большого размера то лучше загружать построчно. Для начала рассмотрим первый вариант, «ПоследовательноеЧтение = Ложь;» этот вариант рассмотрим немного позже.

&НаКлиенте
Процедура Загрузить(Команда)
	
	Объект.ДанныеФайла.Очистить();
	ПоследовательноеЧтение = Ложь;
	
	Текст = Новый ТекстовыйДокумент;
	Текст.Прочитать(Объект.ВыбратьФайл);
	Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл
		ТекСтрока = Текст.ПолучитьСтроку(НомерСТроки);
		МассивСлов = СтрРазделить(ТекСтрока, ";");
		Если МассивСлов.Количество() < 3 Тогда 
			Продолжить;
		КонецЕсли;
		НоваяСтрока = Объект.ДанныеФайла.Добавить();
		НоваяСТрока.Наименование = МассивСлов[0];
		НоваяСтрока.Расшифровка = МассивСлов[1];
		НоваяСтрока.ИНН = МассивСлов[2];
	КонецЦикла;
КонецПроцедуры

Сам код описывать не будут, тут все достаточно просто, но если будут вопросы пишите в комментариях. Если кратко то: Создаем переменную «Текст» сохраняем в неё данные выбранного файла в виде массива, далее в цикле читаем каждую строчку массива с разделителем, ну и присваиваем каждый элемент массива соответствующей колонке в ТЧ.

1С загрузка данных из файла

Сохраняем обработку и проверяем что получилось.

Обработка для загрузки данных из текстового файла

В поле «Выбрать файл» должен отображаться путь к нему, после нажатия кнопки «Загрузить» данные из файла должны отобразиться с табличной части.

Первый этап закончен, теперь необходимо описать способ последовательного чтения для больших файлов, а так же создать команду которая уже будет записать данные из ТЧ непосредственно в базу 1С.

Но об этом в следующей статье, так как информация получаемая небольшими объемами усваивается намного быстрей и лучше, я разобью эту тему на несколько частей.

1C Загрузка из текстового документа: 9 комментариев

  1. Nick

    Спасибо! Если в текстовом документе имеется «Дата» (Пример: дата договора) и в Обработке есть реквизит Дата (тип дата) , то при загрузке текстового файла поле дата не заполняется. Как исправить? (нужно, чтобы поле дата также заполнялось из файла txt).

    1. admin Автор записи

      скорее всего не соответствие типов данных

  2. Андрэ

    А подскажите, как загрузить несколько накладных в одном файле
    Накладная №1511;01.12.22;12(склад отправителя);48 (склад получателя);ООО Мильт
    44 (код);4107032274121 (ШК);Кепка красная Rit;шт.;1(корректировка);5 (количество);150.50(цена);752,5
    123 (код);4107123474121 (ШК);Кепка синяя Rit;шт.;1(корректировка);5 (количество);150.50(цена);752,5
    274 (код);4107032987621 (ШК);Кепка зеленая Rit;шт.;1(корректировка);5 (количество);150.50(цена);752,5
    Накладная №1598;08.12.22;12(склад отправителя);48 (склад получателя);ООО Мильт
    44 (код);4107032274121 (ШК);Кепка красная Rit;шт.;1(корректировка);1(количество);150.50(цена);150,5

    1. Андрэ

      Суть вопроса, из 7ки получаю текстовый файл, его необходимо прогрузить в УТ 11 (поступление или перемещение) еще не продумали.

    1. admin Автор записи

      Очень много работы не успеваем все(, да и порой просто вылетает из головы то что нужно дописать, спасибо что напомнили в ближайшие дни выложим.

  3. ALEKSANDR LEBEDEV

    А где продолжение, а именно команда, которая уже будет записать данные из ТЧ непосредственно в базу 1С?
    Очень жду!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *