Загрузка данных из файлов формата CSV или текстовых документов с разделителями — одна из самых частых задач, с которыми сталкивается разработчик 1С. Рассмотрим подробнее, как сделать этот процесс максимально быстрым, надежным и избежать распространенных ошибок, связанных с производительностью системы и некорректным парсингом строк.
Многие начинающие разработчики совершают ошибку, используя устаревший объект Текст, который был популярен еще в эпоху 1С 7.7. В современных версиях платформы он неэффективен и ограничен в работе с кодировками. Разберем по шагам, как организовать процесс с использованием современных инструментов.
ЧтениеТекста. Он позволяет гибко задавать кодировку (например, UTF-8, ANSI или Windows-1251), что критически важно, чтобы кириллические символы не превращались в «кракозябры».СтрРазделить(Строка, ";") подходит только для самых примитивных файлов. Если внутри полей встречаются кавычки или сами разделители (например, "Иванов; Иван; Иванович"), такой код приведет к ошибке данных.Добавить() внутри цикла чтения. Это вызывает обновление интерфейса на каждой итерации, что «убивает» скорость загрузки.Для достижения максимальной скорости выполнения программы, проанализируем следующую стратегию:
Шаг 1: Чтение и парсинг в память. Считываем данные из файла в массив или таблицу значений. Это промежуточное хранилище позволяет нам подготовить данные перед их переносом в объект 1С.
Шаг 2: Использование транзакций. Любое изменение данных в базе должно быть обернуто в транзакцию. Если вы создаете документы или справочники, используйте следующий шаблон:
НачатьТранзакцию();
Попытка
// Ваш код по созданию или заполнению объектов
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Сообщить(ОписаниеОшибки());
КонецПопытки;
Этот подход гарантирует, что индексы таблиц базы данных будут пересчитаны один раз после завершения всей операции, а не для каждой отдельной строки.
Если файл сложный, обычное разделение по символу-разделителю работать не будет. В таких случаях необходимо реализовывать автомат состояния (конечный автомат). Рассмотрим принцип работы такого алгоритма:
Идея заключается в последовательном чтении символов строки. Мы должны учитывать:
"")?Для таких задач профессионалы используют готовые парсеры, которые корректно обрабатывают кавычки и переносы строк внутри ячеек. Это позволяет избежать потери данных и ошибок преобразования типов.
При загрузке данных в табличную часть формы, обязательно отключайте обновление элемента управления. Это даст огромный прирост в скорости отображения:
Элементы.ИмяВашейТЧ.Видимость = Ложь;
// ... код загрузки данных ...
Элементы.ИмяВашейТЧ.Видимость = Истина;
Если объем данных превышает несколько тысяч строк, не пытайтесь выполнить это в основном потоке интерфейса. Выясним причину «зависания»: основная работа платформы блокируется отрисовкой форм. Вынос процесса в ФоновоеЗадание решит эту проблему, позволив пользователю продолжать работу с программой, пока данные загружаются в фоне.
Резюмируя наш разбор: для эффективной загрузки используйте ЧтениеТекста, применяйте транзакции для записи в базу, а при сложной структуре файла не изобретайте «велосипед» — используйте проверенные парсеры CSV, учитывающие кавычки. Такой подход обеспечит стабильность вашей обработки и высокую скорость работы даже с большими объемами информации.