Как реализовать загрузку заказов из Excel в 1С:Управление нашей фирмой (УНФ)

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

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

Использование стандартного функционала 1С:УНФ

Прежде чем приступать к написанию собственного программного кода, проанализируем возможности встроенного механизма. В конфигурации 1С:Управление нашей фирмой существует стандартная обработка «Загрузка данных из файла». Она доступна непосредственно из списков документов «Заказы покупателей» или «Заказы поставщикам».

Рассмотрим возможности этого инструмента:

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

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

Выбор метода чтения Excel: COM-объект vs Табличный документ

Разберем техническую сторону вопроса. Традиционный метод через Excel.Application требует обязательного наличия установленного Microsoft Office на рабочем месте. Если на компьютере используется LibreOffice или OpenOffice, этот метод работать не будет.

Проанализируем более современный и универсальный способ — использование объекта ТабличныйДокумент. Метод Прочитать() позволяет загружать файлы форматов .xlsx и .xls напрямую в память 1С без использования стороннего ПО.

Посмотрим на пример кода для инициализации чтения файла:


// Создаем объект табличного документа
ТабДок = Новый ТабличныйДокумент;

Попытка
    // Читаем файл Excel напрямую
    ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
    Сообщить("Не удалось прочитать файл: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

Этот метод работает значительно быстрее COM-соединения и корректно распознает типы данных. Кроме того, он позволяет работать с файлами даже на сервере под управлением Linux.

Обработка объединенных ячеек

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

Чтобы корректно обработать такие данные, проанализируем следующую логику: при чтении каждой ячейки необходимо проверять, не является ли она частью объединения. В 1С это реализуется через свойство Область.Объединенная.

Рассмотрим пример функции для получения значения даже из объединенной ячейки:


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

Работа с текстовыми штрихкодами и артикулами

Часто при загрузке штрихкодов из Excel возникают проблемы с форматированием. Например, длинные числовые коды могут отображаться в научном формате (4,6E+12). Чтобы избежать ошибок сопоставления, выполним следующие шаги:

  1. Принудительно приводим считанное значение к строке.
  2. Очищаем строку от невидимых пробелов и спецсимволов с помощью функции СокрЛП().
  3. Если штрихкод считан как число с разделителями групп разрядов, используем функцию Формат() с параметром ЧГ=0 для получения «чистой» строки цифр.

Универсальная архитектура обработки: использование профилей

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

Создадим структуру настроек (это может быть справочник или регистр сведений), где для каждого контрагента будут храниться:

Таким образом, основной код обработки становится универсальным. Проанализируем пример цикла загрузки:


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

Использование справочника «Номенклатура контрагентов»

В 1С:УНФ есть крайне полезный функционал — справочник «Номенклатура контрагентов». Это позволяет сопоставлять артикулы поставщика с вашими внутренними кодами. Рекомендуем при загрузке реализовывать следующий алгоритм поиска:

  1. Сначала ищем соответствие в справочнике НоменклатураКонтрагентов по владельцу (поставщику) и его артикулу/наименованию.
  2. Если соответствие найдено, получаем ссылку на нашу номенклатуру.
  3. Если не найдено — ищем в основном справочнике Номенклатура.

Такой подход избавляет от необходимости переименовывать товары в базе или заставлять поставщика менять его формат Excel.

Предварительная проверка и визуализация

Хорошей практикой считается создание промежуточной таблицы на форме обработки перед созданием документа. Это позволяет пользователю:

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

← На главную