Как применить функцию СокрЛП при загрузке данных из табличного документа в 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При импорте больших массивов информации из внешних файлов (например, отчетов поставщиков или прайс-листов в формате Excel) пользователи и разработчики часто сталкиваются с неприятной проблемой — наличием невидимых ведущих или замыкающих пробелов в текстовых полях. Внешне строки могут выглядеть абсолютно одинаково, но для платформы 1С предприятия значения " Товар", "Товар " и "Товар" — это три абсолютно разные строки.

Наличие таких невидимых пробелов приводит к дублированию элементов в справочниках (например, в справочнике Номенклатура или Контрагенты), сбоям при поиске сопоставлений и ошибкам в аналитических отчетах. Для борьбы с этой проблемой во встроенном языке 1С существует стандартная функция СокрЛП (Сократить Левые Правые), которая эффективно удаляет все незначащие пробелы в начале и в конце строки.

В этой статье мы подробно разберем, как интегрировать вызов функции СокрЛП при использовании стандартной внешней обработки «Загрузка данных из табличного документа» без необходимости изменения ее исходного кода в конфигураторе.

Почему появляются лишние пробелы и чем это грозит?

Прежде чем перейти к технической реализации, давайте проанализируем ситуацию и выясним основные причины появления нежелательных пробелов в файлах импорта:

  1. Человеческий фактор: Операторы при ручном вводе данных в Excel часто случайно нажимают клавишу пробела до или после ввода основного текста.
  2. Ошибки выгрузки из других систем: При экспорте данных из сторонних баз данных или веб-сайтов текстовые поля фиксированной длины могут дополняться пробелами справа до максимального размера поля.
  3. Ошибки распознавания текста (OCR): Если данные предварительно сканировались и распознавались специальными программами, на стыках ячеек часто возникают артефакты в виде лишних пробельных символов.

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

Способ 1. Использование режима загрузки «Вычислять» для конкретного реквизита

Стандартная обработка загрузки данных обладает очень мощным и гибким функционалом, позволяющим выполнять произвольный код на встроенном языке 1С для каждого обрабатываемого поля. Нам не нужно открывать конфигуратор — все настройки выполняются непосредственно в режиме 1С:Предприятие.

Давайте разберем этот процесс по шагам:

  1. Запустите обработку «Загрузка данных из табличного документа» и откройте ваш файл с данными.
  2. Перейдите на вкладку «Настройка загрузки». В табличной части вы увидите список реквизитов выбранного объекта (например, справочника Номенклатура).
  3. Найдите реквизит, данные которого необходимо очистить от пробелов (например, Наименование или Артикул).
  4. В колонке «Режим загрузки» для выбранной строки измените значение по умолчанию на «Вычислять».
  5. Дважды кликните в колонке «Выражение» (в некоторых версиях обработки колонка называется «Условие связи / Выражение для значения») напротив этого реквизита. Откроется текстовое поле для ввода формулы.

В поле выражения мы можем использовать предопределенные переменные, предоставляемые обработкой. Рассмотрим основные из них:

Теперь рассмотрим варианты формул, которые можно написать в поле выражения:

Вариант А: Очистка значения текущей ячейки (классический вариант)

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

Результат = СокрЛП(ТекстЯчейки);

Вариант Б: Очистка предварительно вычисленного значения по умолчанию

Если для реквизита настроено заполнение значением по умолчанию и мы хотим гарантировать отсутствие пробелов в нем, используем конструкцию:

Результат = СокрЛП(Результат);

Вариант В: Получение данных из соседней колонки файла

Если при заполнении реквизита нам требуется взять данные не из текущей сопоставленной колонки, а из соседней (например, из первой колонки файла, индекс которой равен 0), мы пишем:

Результат = СокрЛП(ТекстыЯчеек[0]);

После ввода выражения нажмите кнопку подтверждения. Теперь при импорте система будет на лету вызывать встроенную функцию фильтрации для каждого элемента.

Способ 2. Глобальное применение СокрЛП ко всем реквизитам через события

Что делать, если в загружаемом файле содержится несколько десятков колонок, и практически каждая из них (наименование, артикул, полное наименование, комментарий, адрес, телефон) может содержать нежелательные пробелы? Прописывать формулу для каждого реквизита отдельно — трудоемкая задача.

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

  1. В окне обработки перейдите на вкладку «Настройка загрузки».
  2. В верхней командной панели найдите и нажмите кнопку «События».
  3. Перед вами откроется список доступных обработчиков событий, возникающих в процессе импорта данных. Найдите событие «Перед записью объекта».
  4. В поле ввода программного кода напишите инструкции по очистке нужных полей. В данном контексте нам доступна переменная Объект, которая представляет собой непосредственно записываемый элемент справочника или документ.

Пример кода для обработки события:


Объект.Наименование = СокрЛП(Объект.Наименование);
Объект.Артикул = СокрЛП(Объект.Артикул);
Объект.НаименованиеПолное = СокрЛП(Объект.НаименованиеПолное);

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

Способ 3. Предварительная очистка данных в табличном документе (без программирования)

Рассмотрим альтернативную ситуацию: вы не являетесь программистом 1С, у вас нет прав на редактирование настроек загрузки или вы боитесь допустить ошибку в кодовой части. В таком случае проблему можно решить еще до того, как данные попадут в обработку импорта — на этапе подготовки файла в табличном редакторе Microsoft Excel или непосредственно внутри встроенного текстового редактора 1С.

Если мы работаем в Microsoft Excel, воспользуемся стандартной текстовой функцией очистки:

  1. Откройте ваш рабочий лист Excel, содержащий колонку с неточными текстовыми данными.
  2. Рядом с обрабатываемой колонкой (допустим, это колонка A) создайте пустой вспомогательный столбец.
  3. В первой строке нового столбца введите формулу: =СЖПРОБЕЛЫ(A1) (если вы используете англоязычную версию Microsoft Excel, используйте формулу =TRIM(A1)).
  4. Растяните формулу вниз до конца таблицы, чтобы обработать все строки. Данная функция не только убирает пробелы в начале и в конце строки, но и заменяет повторяющиеся пробелы между словами внутри строки на один одиночный пробел, что делает текст еще более аккуратным.
  5. Выделите полученный столбец с формулами, скопируйте его в буфер обмена.
  6. Нажмите правой кнопкой мыши по исходной колонке A и выберите пункт меню «Вставить как значения» (Вставка специальных значений без сохранения формул).
  7. Удалите созданный ранее вспомогательный столбец и сохраните изменения в файле.

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

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

Выбирайте наиболее подходящий под ваши задачи метод и наслаждайтесь чистотой и корректностью данных в ваших информационных базах 1С!

← На главную