В условиях современной торговли, особенно в табачной и легкой отраслях, работа через ЭДО (электронный документооборот) стала обязательной. Для пользователей устаревших, но надежных систем, таких как 1С:Предприятие 7.7, возникает серьезная проблема: как извлечь коды маркировки (QR-коды/DataMatrix) из входящих УПД, если типовые обработки не всегда предоставляют нужный функционал в удобном виде. Разберем, как автоматизировать процесс получения электронных документов напрямую из облака Диадока на локальный компьютер или сразу в учетную систему.
Типовая обработка Диадок_для_1С_7.7.ert предоставляет базовый интерфейс для загрузки и выгрузки документов. Однако при работе с маркированным товаром (например, табаком), отправитель передает перечень упаковок в расширенном формате XML. Проблема в том, что визуальная форма обработки в 1С 7.7 может не отображать все вложенные структуры кодов идентификации, которые физически присутствуют в файле. Пользователям часто приходится заходить в браузер, чтобы вручную скачивать XML, что сводит на нет смысл автоматизации. Проанализируем способы решения этой задачи с помощью программных методов API.
Если у вас оплачен доступ к API Диадока, интеграция происходит через внешнюю компоненту. Для работы с контентом документа в системе предусмотрены специализированные методы. Рассмотрим их подробнее.
Метод SaveContent
Этот метод предназначен для физического сохранения тела документа (XML-файла) на диск. Это именно то, что требовалось автору темы. Вызов метода выглядит следующим образом:
// Предположим, ОбъектДокумент уже получен через API
ПутьКФайлу = "C:\EDI_Exchange\Inbound\Document_123.xml";
ОбъектДокумент.SaveContent(ПутьКФайлу);
После выполнения этой команды файл появится в указанном каталоге, и вы сможете разобрать его стандартными средствами 1С 7.7 (например, через DOMDocument) или внешними парсерами.
Метод GetDynamicContent
Рассмотрим более продвинутый вариант. Чтобы не сохранять файл и не парсить его вручную, тратя ресурсы системы на чтение тяжелых XML-структур, можно использовать GetDynamicContent. Этот метод возвращает объектную модель документа. Выясним причину, по которой это удобнее: 1С 7.7 медленно работает с большими текстовыми строками, а объектный доступ позволяет обращаться к конкретным полям напрямую.
ДинамическийКонтент = ОбъектДокумент.GetDynamicContent();
// Теперь можно перебирать строки документа
Для НомерСтроки = 0 По ДинамическийКонтент.Items.Count() - 1 Цикл
ТекущаяСтрока = ДинамическийКонтент.Items.GetItem(НомерСтроки);
// Доступ к кодам маркировки (ItemIdentificationNumbers)
КодыМаркировки = ТекущаяСтрока.ItemIdentificationNumbers;
// Здесь реализуем цикл обхода кодов
КонецЦикла;
Если программирование через прямой API кажется слишком сложным или дорогостоящим, проанализируем ситуацию с использованием промежуточного ПО — Диадок.Коннект. Это решение работает по принципу «мониторинга папок» и отлично подходит для 1С 7.7.
Такой подход позволяет избежать прямой работы с COM-объектами Диадока внутри 1С, перенося логику авторизации и скачивания на внешнее приложение. Это значительно повышает стабильность работы старой платформы.
При разборе скачанного XML-файла (будь то через API или Коннект), мы обязательно столкнемся с особенностями формата УПД. Коды маркировки табачной продукции находятся в блоке НомСредИдентТов. Разберем по шагам, как правильно извлечь эти данные, используя MSXML2.DOMDocument, так как стандартная v7plus.dll часто дает сбои на файлах большого объема:
Процедура РазобратьУПД(ПутьКФайлу)
xmlDoc = СоздатьОбъект("MSXML2.DOMDocument.6.0");
xmlDoc.async = 0;
xmlDoc.load(ПутьКФайлу);
// Используем XPath для поиска всех узлов с кодами маркировки
УзлыКодов = xmlDoc.selectNodes("//НомСредИдентТов");
Для и = 0 По УзлыКодов.length - 1 Цикл
Узел = УзлыКодов.item(и);
// Код может быть в разных подтегах (КИЗ, НомУпак и т.д.)
ТекКод = Узел.text;
Сообщить("Найден код маркировки: " + ТекКод);
КонецЦикла;
КонецПроцедуры
Как отмечают участники обсуждения, связь с разработчиками Диадока через официальные каналы может быть затруднена бюрократией. Однако существует эффективный способ получить ответ на технический вопрос или предложить доработку — это GitHub-репозиторий Диадока. Там разработчики напрямую общаются с сообществом и оперативно исправляют ошибки в модулях интеграции. Если в вашей версии обработки .ert действительно не хватает кнопки сохранения контента, вы можете самостоятельно добавить её, используя приведенный выше метод SaveContent, так как исходный код типовых обработок для 7.7 открыт.
Важное замечание по стоимости: Помните, что использование API — это платная услуга (в обсуждении упоминались суммы от 11 800 до 18 000 рублей в год). Если бюджет ограничен, стоит рассмотреть вариант с ручной выгрузкой через Личный Кабинет браузера и последующей загрузкой файла в 1С, хотя это и менее удобно для массовой работы.