Автоматическое принятие приглашений к обмену документами в ЭДО Диадок по API / Хабр

Предпосылки

ФНС в 2020 году утвердила концепцию перехода документооборота с контрагентами в электронный вид. В июле 2021 года обмен первичными документами и счетами-фактурами по закупке и продаже некоторых товаров уже стал безальтернативно электронным.

В компаниях с большим количеством операций, исполнителей, клиентов, поставщиков, филиалов, возникнет потребность в администрировании и настройке ЭДО: разделение доступа и управление им, справочниками сотрудников, контрагентами. В дальнейшем придется контролировать форматы документов (они меняются) и сам поток документов, их подписание.

А также, использовать преимущества ЭДО: возможность разобрать документ и сверить с оплатами, заявками, договорами; заполнить реквизиты бухгалтерских проводок; автоматизировать отклонение документов при несоответствии, автоматически подписать при полном соответствии и так далее.

Операторы ЭДО предоставляют модули для интеграции с 1С, SAP и прочими популярными ERP. Коробочные инструменты не позволят добиться максимума автоматизации без затрат на их доработку. Операторы предлагают хорошую альтернативу – возможность интеграции по API, за сравнительно небольшие деньги.

Пример использования api

Для возможности отправить и принять документы контрагенты должны обменяться приглашениями. Приглашение можно отправить любому юр.лицу по ключу ИНН-КПП, поэтому они могут поступать ежедневно от любых юридических лиц. Приглашение, которое не содержит доп.соглашения или договора об ЭДО между лицами, не порождает никаких правовых обязательств у сторон, поэтому его можно смело принимать.

Описание ниже не претендует на оценку качества кода, соблюдения правил. Код просто работает. Назначение – демонстрация возможностей лицам, принимающим решения (бизнесу, руководству), тестирование. То есть для стадии “минимально жизнеспособный продукт” (MVP).

Инструменты: Python, PyCharm Community Edition, SQL Server Express Edition, SSMS, ключ разработчика API (купить/получить у оператора ЭДО), описание методов и структур данных API оператора ЭДО. Все бесплатное, кроме ключа API.

Похожее:  Личный кабинет РИЦ Ульяновск и Димитровград: передать показания счетчиков

Общий алгоритм:

  1. Python: заходит в кабинет вашей организации (или нескольких в цикле), забирает все приглашения, помещает в таблицу на сервере

  2. SQL server: связывает таблицу приглашений с таблицей оборотов (можно добавить доп.фильтры – договоры, список ненадежных) по ключу ИНН, строит список ИНН с ненулевыми оборотами за последний период

  3. Python: забирает таблицу ИНН, заходит в кабинет ЭДО, принимает приглашения, заносит в таблицу на сервере записи о принятых приглашениях. Опционально (не описано в этой статье) – отправляет списки принятых приглашений ответственным сотрудникам.

  4. Планировщик задач Windows: запускает программу, выполняющую три пункта выше, регулярно

Создаем базу данных на сервере с таблицами:

CREATE TABLE [dbo].[tbl_organizations](
	[OrgGUID] [char](36) NULL,
	[OrgID] [char](36) NULL,
	[Inn] [char](12) NULL,
	[Kpp] [char](9) NULL,
	[Full_name] [nvarchar](max) NULL,
	[Short_name] [nvarchar](max) NULL,
	[BoxID] [varchar](100) NULL,
	[BoxGUID] [char](36) NULL,
	[Box_title] [nvarchar](max) NULL,
	[Invoice_format_ver] [char](20) NULL,
	[Ogrn] [char](15) NULL,
	[FNS_participant] [char](50) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[tbl_departments](
	[DepartmentID] [char](36) NULL,
	[Parent_dept_ID] [char](36) NULL,
	[Dept_name] [nvarchar](max) NULL,
	[Dept_abbr] [nvarchar](50) NULL,
	[OrgID] [char](36) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[tbl_invitations](
	[Short_name] [nvarchar](255) NULL,
	[OrgID_our] [char](36) NULL,
	[Inn] [char](12) NULL,
	[OrgID] [char](36) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[tbl_invitations_accepted](
	[OrgId] [char](36) NULL,
	[Record_date] [date] NULL,
	[Inn] [char](12) NULL,
	[OrgId_our] [char](36) NULL
) ON [PRIMARY]
GO

Таблица tbl_departments в этой задаче не используется, но будет использоваться для работы с документами в следующих статьях, если это кому-то будет интересно.

Предполагается, что на сервере уже есть таблица или представление (view) с оборотами поставщиков по ключу ИНН или ИНН-КПП, или активными договорами. Если нет, её можно периодически заливать на сервер полуавтоматом из любой системы – вывод в эксель из 1С или SAP и загрузка утилитой bcp, импортом в SSMS или программой.

Код программы представлен в виде линейной последовательности операций, без выделения повторяющихся инструкций в функции. Методы запросов описаны в документации на сайте оператора ЭДО.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *