Ситуация, когда входящие электронные документы (УПД, акты, счета-фактуры) принимаются и подписываются в 1С:Документооборот (ДО), но должны отражаться в учетной системе 1С:Управление производственным предприятием (УПП), является классической для крупных организаций. Разберем подробно, как реализовать передачу данных между этими системами, чтобы исключить двойной ввод и обеспечить прозрачность процесса для пользователей обеих баз.
Первым делом проанализируем штатные возможности 1С. Для 1С:УПП 1.3 существует специальная версия Библиотеки интеграции с документооборотом. Это наиболее стабильный и поддерживаемый вендором путь. БИД позволяет реализовать так называемую «бесшовную интеграцию».
Рассмотрим, как это работает по шагам:
ПоступлениеТоваровУслуг.Если типовая библиотека кажется слишком тяжеловесной или требуется специфическая логика (например, полная копия всех XML-квитанций обмена), проанализируем вариант создания собственного решения на HTTP-сервисах. Это современная альтернатива устаревшему COMConnector.
Алгоритм реализации может быть следующим:
В базе 1С:Документооборот создаем подписку на событие при завершении процесса подписания электронного документа. В этой подписке инициируем HTTP-запрос к веб-сервису на стороне УПП.
Примерная структура кода для передачи данных из ДО в УПП:
// В базе ДО (отправка данных)
Процедура ПриЗавершенииЭДО(ДокументСсылка)
СервисУПП = "http://server/upp/hs/integration/receive_upd";
Запрос = Новый HTTPЗапрос(СервисУПП);
// Получаем XML файл самого УПД из присоединенных файлов
ФайлЭД = ПолучитьФайлЭлектронногоДокумента(ДокументСсылка);
Запрос.УстановитьТелоИзДвоичныхДанных(ФайлЭД);
Соединение = Новый HTTPСоединение("server", , "user", "pass");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
КонецПроцедуры
На стороне 1С:УПП создаем HTTP-сервис, который принимает XML-пакет, разбирает его и создает документ. Для разбора XML-файла УПД (формализованного документа) используем встроенные средства работы с XML или чтение по XSD-схеме оператора ЭДО.
// В базе УПП (прием данных)
Функция ReceiveUPD(Запрос)
ТелоЗапроса = Запрос.ПолучитьТелоКакДвоичныеДанные();
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьТекст(ПолучитьСтрокуИзДвоичныхДанных(ТелоЗапроса));
// Логика разбора XML согласно формату ФНС (Приказ ММВ-7-15/820@)
// Создаем документ ПоступлениеТоваровУслуг
НовоеПоступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
НовоеПоступление.Дата = ТекущаяДата();
// Заполняем табличную часть из данных XML
Пока ЧтениеXML.Прочитать() Цикл
// Читаем узлы номенклатуры, количества и цены
КонецЦикла;
НовоеПоступление.Записать(РежимЗаписиДокумента.Запись);
Возврат Новый HTTPСервисОтвет(200);
КонецФункции
Выясним, как поступить, если автоматическое создание документов в УПП пока не требуется, но бухгалтеру нужно видеть оригинал ЭД. В УПП можно хранить только навигационные ссылки на объекты в ДО.
Посмотрим на этот метод подробнее:
ХранилищеДополнительнойИнформации или через механизм «Дополнительные сведения» создается запись, содержащая ссылку вида e1c://... на карточку входящего документа в ДО.При любом выбранном варианте мы обязательно столкнемся с проблемой синхронизации нормативно-справочной информации (НСИ). Проанализируем критические моменты:
ИНН + КПП. Если используется обмен через Конвертацию данных 2.0, необходимо настроить правила поиска именно по этим полям.Номенклатура в УПП.Подведем итог. Если бюджет и время позволяют, наилучшим решением будет внедрение БИД. Это даст «бесшовность», которую так ценит бизнес: бухгалтер в УПП видит все процессы по документу в реальном времени.
Если же задача стоит остро и бюджет ограничен, разработайте HTTP-сервис в УПП, который будет принимать только готовый XML файл УПД. Это позволит «рождать» черновики поступлений в УПП автоматически. Не забудьте, что для юридической значимости файлы электронных подписей (.sig или .p7s) также должны быть доступны для просмотра из УПП, что реализуется либо через хранение путей к сетевым томам ДО, либо через передачу двоичных данных в справочник ХранилищеДополнительнойИнформации.