Почему созданные на портале ИС ЭСФ исходящие счета-фактуры не загружаются в 1С и как получить историю документов?

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

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

Разберем архитектурные причины такого поведения типовых конфигураций, проанализируем параметры API ИС ЭСФ для получения изменений и рассмотрим способы загрузки недостающих документов в учетную систему.

Причина поведения типового механизма обмена 1С

Проанализируем базовый принцип, заложенный разработчиками типовых конфигураций («1С:Бухгалтерия для Казахстана», «1С:ERP», «1С:Комплексная автоматизация»). В системе реализована концепция единой точки ввода:

  1. Исходящие документы должны первично оформляться в учетной базе: документ РеализацияТМЗиУслуг формирует учетный документ СчетФактураВыданный, на основании которого создается ЭСФ со статусом «К передаче».
  2. При регламентном или ручном обмене отправленный документ получает с портала регистрационный номер и статус («Принят», «Доставлен»).
  3. Штатный механизм автоматической синхронизации по умолчанию обрабатывает загрузку новых входящих ЭСФ (направление INBOUND) и только обновление статусов уже зарегистрированных в базе исходящих документов.

Если бы 1С автоматически создавала документ «ЭСФ выданный» при обнаружении любого исходящего документа на портале, в системе возникали бы «разорванные» цепочки учета: электронный документ присутствовал бы в базе, но не имел бы под собой проведенных документов реализации и проводок по бухгалтерскому и налоговому учету.

Как устроен механизм запроса обновлений через API ИС ЭСФ

Выясним, как работает веб-сервис синхронизации ИС ЭСФ. Для получения изменений со стороны учетной системы отправляется SOAP-запрос queryUpdatesRequest:


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:esf="esf">
   <soapenv:Header/>
   <soapenv:Body>
      <esf:queryUpdatesRequest>
         <sessionId>[sessionId]</sessionId>
         <lastEventDate>[lastEventDate]</lastEventDate>
         <lastInvoiceId>[lastInvoiceId]</lastInvoiceId>
         <direction>[direction]</direction>
         <limit>[limit]</limit>
         <fullInfoOnStatusChange>true</fullInfoOnStatusChange>
      </esf:queryUpdatesRequest>
   </soapenv:Body>
</soapenv:Envelope>

Рассмотрим назначение ключевых параметров этого запроса подробнее:

  1. lastEventDate и lastInvoiceId — пара параметров, задающая точку отсчета синхронизации. Портал возвращает события, произошедшие строго после указанного момента. Если необходимо восстановить данные с произвольной даты (например, при запуске новой информационной базы), в первом запросе передается нужная начальная дата в lastEventDate, а lastInvoiceId устанавливается равным 0.
  2. direction — направление выборки документов. Параметр может принимать значения для фильтрации входящего или исходящего потока, либо запрашивать все потоки сразу.
  3. limit — ограничение на количество записей в одном ответе (пагинация). Если изменений за период больше установленного лимита, требуется организовать циклический опрос, подставляя в каждый следующий запрос значения lastEventDate и lastInvoiceId из последнего полученного элемента.
  4. fullInfoOnStatusChange — управление полнотой возвращаемых данных. По умолчанию при изменении статуса документа портал возвращает служебную информацию без самого тела (бланка) ЭСФ, так как структура подписанного документа неизменна. Установка значения true принудительно заставляет веб-сервис возвращать полный объект InvoiceInfo вместе с телом счета-фактуры.

Способ 1. Загрузка через выгрузку XML-файлов (без доработки конфигурации)

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

  1. Авторизуемся в личном кабинете ИС ЭСФ и переходим в журнал «Отправленные».
  2. Отмечаем необходимые счета-фактуры за нужный период и нажимаем кнопку экспорта в XML.
  3. В конфигурации 1С открываем журнал электронных счетов-фактур и используем стандартную команду «Загрузить из XML» (или соответствующую обработку загрузки).
  4. При ручном импорте из XML типовая система создает недостающие документы «ЭСФ (выданный)», корректно заполняя все разделы, регистрационный номер и текущий статус.

Способ 2. Доработка логики программного обмена по API

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

  1. Сброс точки синхронизации: В регистрах сведений, хранящих состояние обмена с ИС ЭСФ, очищаем идентификатор последнего события и устанавливаем требуемую дату начала выборки (lastInvoiceId = 0, lastEventDate = ДатаНачала).
  2. Организация цикла пагинации: Реализуем циклический вызов метода queryUpdates до тех пор, пока сервер возвращает непустой список документов, передавая в каждую следующую итерацию идентификаторы из последней строки предыдущего пакета.
  3. Снятие фильтра на создание исходящих: В процедуре парсинга ответа веб-сервиса модифицируем условие проверки. Если в ответе содержится исходящий документ, отсутствующий в информационной базе, и передан полный XML-бланк (благодаря параметру fullInfoOnStatusChange = true), инициализируем создание нового документа ЭСФ (выданный) и заполняем его реквизиты.

Важное ограничение: Загрузка исходящего ЭСФ в базу (как через XML, так и через API) лишь регистрирует сам факт наличия электронного счета-фактуры. Она не формирует автоматически первичные учетные документы РеализацияТМЗиУслуг и СчетФактураВыданный. Для полноценного восстановления бухгалтерского учета потребуется сопоставить номенклатуру, контрагентов и договоры, после чего создать учетные документы-основания вручную или с помощью специализированных обработок сопоставления.

← На главную