Каждый владелец бизнеса или менеджер по закупкам рано или поздно сталкивается с необходимостью регулярно обновлять цены от поставщиков в своей учетной системе. Когда файлов немного (всего 3–4 штуки), а объем строк в них скромный (около 300 строк в каждом), кажется, что это задача на несколько минут. Однако при обращении к программистам 1С заказчик неожиданно может услышать оценку: «На выполнение задачи потребуется две недели».
В этой статье мы подробно разберем, почему возникает такой гигантский разрыв в оценках — от «двух минут» до «двух недель». Мы проанализируем стандартные возможности конфигурации 1С:Управление нашей фирмой (УНФ), рассмотрим программные способы импорта данных и выясним, какие «подводные камни» превращают простую загрузку таблицы в полноценный проект разработки.
Давайте разберем техническую сторону вопроса. Если файлы поставщиков идеально подготовлены, а в базе 1С уже созданы все соответствующие карточки товаров (номенклатура сопоставлена один-в-один), то процесс загрузки действительно занимает минимум времени:
Тогда откуда берется срок в две недели? Дело в том, что «просто загрузить цифры из Excel» и «построить надежно работающий бизнес-процесс» — это две совершенно разные задачи.
Срок в две недели обычно называют не за сам процесс нажатия кнопки «Импорт», а за создание комплексной системы автоматизации ценообразования. Давайте проанализируем, какие этапы и скрытые требования закладывает программист в эту оценку:
Если вам требуется именно такая интеллектуальная система, то две недели на проектирование, программирование, тестирование на реальных данных и внедрение — это абсолютно адекватный и даже сжатый срок.
Если бюджет ограничен, а требования минимальны, рассмотрим типовые инструменты конфигурации 1С:УНФ, которые доступны каждому пользователю «из коробки».
В современных редакциях 1С:УНФ (начиная с версий 1.6 и 3.0) присутствует мощный встроенный инструмент — ассистент «Загрузка данных из почты и файлов». Он позволяет существенно упростить процесс:
Для простых задач сопоставления этот инструмент полностью закрывает потребность в сторонних обработках и экономит деньги на услугах программиста.
Если стандартных возможностей УНФ недостаточно и вам необходимо написать собственную процедуру загрузки, крайне важно выбрать правильный технологический подход для чтения файлов Excel.
В процессе обсуждения специалисты упоминали технологии COM (объект Excel.Application) и ADO (работа с файлом как с базой данных). Однако современные стандарты разработки в среде 1С диктуют другие правила:
ТабличныйДокумент с методом Прочитать(). Это самый быстрый, надежный и кроссплатформенный вариант, не требующий стороннего ПО.Проанализируем пример программного кода, который реализует быстрое чтение XLSX-файла на стороне сервера без использования сторонних библиотек:
&НаСервере
Процедура ПрочитатьПрайсЛистНаСервере(ПутьКФайлу)
// Создаем объект табличного документа для загрузки файла
ТабДок = Новый ТабличныйДокумент;
Попытка
// Нативное чтение файла XLSX средствами платформы 1С
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияТабличногоДокумента.XLSX);
Исключение
ЗаписатьЛогОшибок("Не удалось прочитать файл. Возможно, он поврежден. Ошибка: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
ВысотаТаблицы = ТабДок.ВысотаТаблицы;
// Начинаем обход строк со второй (пропуская шапку таблицы)
Для НомерСтроки = 2 По ВысотаТаблицы Цикл
// Получаем значения ячеек по номерам колонок
АртикулПоставщика = СокрЛП(ТабДок.Область(НомерСтроки, 1).Текст);
НаименованиеТовара = СокрЛП(ТабДок.Область(НомерСтроки, 2).Текст);
ЦенаЗакупки = ТабДок.Область(НомерСтроки, 3).ТекущийРисунок(); // пример для картинок или текста
// Преобразуем текстовое представление цены в число
СтрокаЦены = СокрЛП(ТабДок.Область(НомерСтроки, 3).Текст);
ЦенаЧислом = 0;
Если НЕ ПустаяСтрока(СтрокаЦены) Тогда
ЦенаЧислом = Число(СтрЗаменить(СтрокаЦены, " ", "")); // Убираем неразрывные пробелы
КонецЕсли;
// Пропускаем строки без артикула
Если ПустаяСтрока(АртикулПоставщика) Тогда
Продолжить;
КонецЕсли;
// Вызываем функцию поиска номенклатуры и регистрации цен в базе данных
ОбработатьПолученнуюСтроку(АртикулПоставщика, НаименованиеТовара, ЦенаЧислом);
КонецЦикла;
КонецПроцедуры
Этот лаконичный алгоритм работает чрезвычайно быстро. На чтение прайс-листа из 300 строк уйдут сотые доли секунды. Он стабильно отработает как на локальном компьютере под Windows, так и на производительном сервере под Linux.
Выясним, какие неочевидные проблемы могут возникнуть на этапе внедрения даже самого простого алгоритма загрузки:
000543. При сохранении или открытии прайса в Excel программа часто автоматически преобразует эту строку в число 543. В результате 1С не сможет найти сопоставление. При написании загрузчика важно предусматривать функции нормализации строк и дополнения их лидирующими нулями.1 250,50 руб. или используют разные знаки разделителей (точка вместо запятой). Программный парсер должен уметь очищать строки от лишних символов перед преобразованием в число.Сколько времени займет загрузка цен в вашем случае?
Если ваша задача — разово загрузить несложные файлы, а номенклатура в базе уже заведена, не спешите заказывать дорогую разработку. Воспользуйтесь встроенным ассистентом «Загрузка данных из почты и файлов» в вашей 1С:УНФ. Вы потратите около часа на изучение инструкции и за 10 минут выполните задачу самостоятельно.
Если же вам требуется автоматическая система, которая будет работать без участия человека, самостоятельно сопоставлять товары по сложной логике, рассчитывать наценки, отслеживать динамику изменений и транслировать новые цены на ваш сайт — смело соглашайтесь на оценку в две недели. Это серьезный проект интеграции, который в будущем сбережет сотни человеко-часов ваших сотрудников и застрахует бизнес от досадных ошибок ручного ввода.