Внешний интерфейс обработки - API — различия между версиями

Материал из razgovorov.ru
Перейти к: навигация, поиск
(Обработка служебных документов)
(Обычное приложение)
 
(не показано 56 промежуточных версий 4 участников)
Строка 1: Строка 1:
 
Функционал внешней обработки можно использовать  извне, то есть, не запуская саму обработку, а просто вызывая из нее определенные методы. Таким образом можно осуществлять формирование и предварительный просмотр пакета электронных документов, отправку документов, сопоставление электронных документов с документами 1С, утверждение документов, обработку служебных документов и обновление статусов.
 
Функционал внешней обработки можно использовать  извне, то есть, не запуская саму обработку, а просто вызывая из нее определенные методы. Таким образом можно осуществлять формирование и предварительный просмотр пакета электронных документов, отправку документов, сопоставление электронных документов с документами 1С, утверждение документов, обработку служебных документов и обновление статусов.
=Отправка документов=
+
=Подготовительные действия=
Для отправки документов из 1С в электронном виде без запуска внешней обработки необходимо лишь определиться, какие документы будем отправлять, и выполнить описанные ниже действия. Первые два пункта отличаются для обычного и управляемого приложений, третий – одинаковый.  
+
В большинстве случаев перед вызовом функций внешнего интерфейса обработки необходимо выполнить следующие подготовительные действия.
  
1. Получаем внешнюю обработку
+
== Шаг 1. Получаем внешнюю обработку ==
  
Обычное приложение
+
=== Обычное приложение ===
 +
 
 +
Получение обработки напрямую из файла:
 +
<source lang="js">
 +
ВО = ВнешниеОбработки.Создать("d:\ВнешняяОбработка2\Sbis1C.epf"); 
 +
</source>
 +
Получение обработки из справочника 1С:
 +
<source lang="js">
 +
ОбработкаСБИС = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Электронный обмен документами в СБиС");
 +
ДвоичныеДанные = ОбработкаСБИС.ХранилищеВнешнейОбработки.Получить();
 +
ИмяОбработки = ПолучитьИмяВременногоФайла();
 +
ДвоичныеДанные.Записать(ИмяОбработки);
 +
 
 +
ВО = ВнешниеОбработки.Создать(ИмяОбработки);
 +
</source>
 +
 
 +
=== Управляемое приложение ===
 +
 
 +
Получение обработки напрямую из файла:
 
<source lang="1C">
 
<source lang="1C">
ВО = ВнешниеОбработки.Создать("d:\user\bronfeld\ВнешняяОбработка2\Sbis1C.epf");
+
ВО = ВнешниеОбработки.Создать( "d:\ВнешняяОбработка2\Sbis1C_UF.epf", Ложь );
 
</source>
 
</source>
Управляемое приложение
+
Получение обработки из справочника 1С:
 
<source lang="1C">
 
<source lang="1C">
ВО = ВнешниеОбработки.Создать( "d:\user\bronfeld\ВнешняяОбработка2\Sbis1C_UF.epf", Ложь );
+
ОбработкаСБИС = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Отправить документ через online.sbis.ru");
 +
ДвоичныеДанные = ОбработкаСБИС.ХранилищеОбработки.Получить();
 +
ИмяОбработки = ПолучитьИмяВременногоФайла();
 +
ДвоичныеДанные.Записать(ИмяОбработки);
 +
 
 +
ВО = ВнешниеОбработки.Создать(ИмяОбработки, Ложь);
 
</source>
 
</source>
2. Получаем форму "Внешний интерфейс"
+
В параметре БезопасныйРежим указываем Ложь.
 +
 
 +
== Шаг 2. Получаем форму "Внешний интерфейс" ==
 +
 
 +
 
 +
=== Обычное приложение ===
  
Обычное приложение
 
 
<source lang="1C">
 
<source lang="1C">
 
ВИ = ВО.ПолучитьФорму("ВнешнийИнтерфейс");
 
ВИ = ВО.ПолучитьФорму("ВнешнийИнтерфейс");
 
</source>
 
</source>
Управляемое приложение
+
 
 +
=== Управляемое приложение ===
 +
 
 
<source lang="1C">
 
<source lang="1C">
 
ВИ = ПолучитьФорму("ВнешняяОбработка.СБИС.Форма.ВнешнийИнтерфейс");
 
ВИ = ПолучитьФорму("ВнешняяОбработка.СБИС.Форма.ВнешнийИнтерфейс");
 
</source>
 
</source>
  
 +
== Шаг 3. Вызываем функцию инициализации ==
 +
 +
Включает в себя подготовку кэша и чтение настроек
 +
<source lang="1C">
 +
Кэш = ВИ.сбисИнициализировать();
 +
</source>
 +
 +
== Шаг 4. Авторизуемся (в случае, если обмен идет через SDK или API) ==
  
3. Вызываем функцию отправки документов
 
 
<source lang="1C">
 
<source lang="1C">
Результат = ВИ.сбисОтправка(СписокСтрок, ДополнительныеПараметры);
+
УспешнаяАвторизация = ВИ.сбисАвторизация(Кэш, ПараметрыАвторизации, ЗапускРоботом);
 
</source>
 
</source>
СписокСтрок – список значений. Каждое значение – структура с полем «СоставПакета».  
+
ПараметрыАвторизации - структура с полями:
 +
* ИдентификаторСессии (не обязательное) - рекомендуется указывать идентификатор сессии предыдущего сеанса для ускорения работы. Если сессия истекла, то новый идентификатор можно взять из поля Кэш.Парам.ИдентификаторСессии после авторизации.
 +
* ВходПоСертификату - Истина, если авторизуемся по сертификату, Ложь, если авторизуемся по логину/паролю.
 +
* Сертификат - отпечаток сертификата для авторизации. Заполняется, если ВходПоСертификату = Истина.
 +
* Логин - логин для автоиизации. Заполняется, если ВходПоСертификату = Ложь.
 +
* Пароль - пароль для авторизации. Заполняется, если ВходПоСертификату = Ложь.
 +
 
 +
ЗапускРоботом (не обязательный) - булевская переменная, по умолчанию имеет значение Истина.
 +
* Если будет передано значение Истина (или параметр будет проигнорирован) произойдет попытка авторизации по данным из структуры ПараметрыАвторизации. В случае неудачи вернет текст ошибки.
 +
* Если будет передано значение Ложь произойдет попытка авторизации по переданным данным из ПараметрыАвторизации. В случае неудачи будет открыто окно авторизации, где пользователь сможет авторизоваться вручную.
  
СоставПакета – список значений. Каждое значение может быть одним из двух типов:
+
= Отправка документов =
 +
С помощью данной функции внешнего интерфейса обработки, можно реализовать отправку документов в электронном виде программно без открытия основного интерфейса, в том числе автоматизировать отправку документов по расписанию и критериям отбора. Для этого необходимо выполнить подготовительные действия, сформировать массив отправляемых пакетов документов и вызвать функцию отправки.
 +
 
 +
 
 +
'''Порядок работы:'''
 +
 
 +
1. Выполните [[#Подготовительные действия|подготовительные действия]] (шаги 1-4) и сохраните если требуется для повторной отправки
 +
 
 +
2. Сформируйте массив отправляемых пакетов документов
 +
 
 +
3. Вызовите функцию отправки документов с передачей массива пакетов из п.2
 +
 
 +
 
 +
 
 +
'''Пример вызова функции отправки:'''
 +
<source lang="1C">
 +
Результат = ВИ.сбисОтправка(Кэш, СписокСтрок);
 +
</source>
 +
 
 +
'''Описание параметров:'''
 +
 
 +
Кэш – значение полученное при инициализации внешнего интерфейса внешней обработки из п.1
 +
 
 +
Список строк – массив данных со списком пакетов, в каждом пакете массив вложений (документов)
 +
 
 +
 
 +
'''Структура данных:'''
 +
 
 +
СписокСтрок – тип список значений. Каждое значение – структура с полем «СоставПакета».
 +
 
 +
СоставПакета – тип список значений. Каждое значение может быть одним из двух типов:
  
 
*Ссылка на документ 1С. В представление можно записать название файла настроек для данного документа. Если не указано, то будет использован файл настроек, соответствующий имени документа в конфигураторе. Можно указывать только документы, для которых есть файл настроек. Если хотя бы для одного документа из состава пакета не будет файла настроек, то весь пакет не будет сформирован и отправлен.
 
*Ссылка на документ 1С. В представление можно записать название файла настроек для данного документа. Если не указано, то будет использован файл настроек, соответствующий имени документа в конфигураторе. Можно указывать только документы, для которых есть файл настроек. Если хотя бы для одного документа из состава пакета не будет файла настроек, то весь пакет не будет сформирован и отправлен.
Строка 38: Строка 113:
 
Первое вложение пакета должно быть ссылкой на документ 1С, т.к. по нему будут определяться отправитель и получатель пакета.
 
Первое вложение пакета должно быть ссылкой на документ 1С, т.к. по нему будут определяться отправитель и получатель пакета.
  
// Пример формирования списка документов для отправки
+
'''Пример формирования списка документов для отправки'''
 +
 
 
<source lang="1C">
 
<source lang="1C">
 
СписокСтрок = Новый СписокЗначений;
 
СписокСтрок = Новый СписокЗначений;
Строка 59: Строка 135:
 
</source>
 
</source>
  
 +
'''Возвращаемое значение:'''
  
ДополнительныеПараметры - необязательный параметр. Структура с полями, аналогичными полям структуры Кэш.Парам в обработке. Если передается, то поля в Кэш.парам перезаписываются полями из переданной структуры. Например, можно передать параметры авторизации:
+
Функция возвращает структуру «РезультатОтправки»:
<source lang="1C">
+
*«ТипыОшибок» — список значений с типами ошибок;
ДополнительныеПараметры = Новый Структура("ВходПоСертификату,Сертификат", Истина, "65455636впав");
+
*«Отправлено» — количество отправленных пакетов документов;
 
+
*«НеОтправлено» — количество неотправленных пакетов документов;
</source>
+
*«НеСформировано» — количество несформированных пакетов документов;
 
+
*«Ошибок» — общее количество ошибок;
Если ДополнительныеПараметры не заполнены, то параметры авторизации должны быть сохранены путем предварительного запуска обработки в интерфейсе 1С предприятия под тем же пользователем, под которым будет происходить вызов функций внешнего интерфейса.
+
*«ДетализацияОшибок» — соответствие, которое содержит ссылки на документы и описание ошибок.
 
 
 
 
Функция возвращает структуру с результатами отправки либо текст ошибки.
 
 
 
=Открытие карточки электронного документа=
 
Данный механизм используется при отправке документов непосредственно из карточки документа 1С по кнопке «Печать».
 
==Обычное приложение==
 
Для формирования пакета электронных документов и открытия окна предварительного просмотра необходимо выполнить следующие действия:
 
 
 
1. Получаем внешнюю обработку
 
<source lang="1C">
 
ВО = ВнешниеОбработки.Создать("d:\user\bronfeld\ВнешняяОбработка2\Sbis1C.epf");
 
</source>
 
2. Вызываем функцию печати из обработки
 
<source lang="1C">
 
ВО.Печать(Документ1С);
 
</source>
 
Документ1С – ссылка на документ 1С. Можно передавать документы только определенных типов, для которых в каталоге настроек внешней обработки есть файлы настроек с параметром «ЗапросСпискаДокументов». В запросе определяется состав пакета документов, который будет сформирован и открыт для предварительного просмотра.
 
==Управляемое приложение==
 
Необходимо выполнить следующие действия:
 
 
 
1. Получаем внешнюю обработку
 
<source lang="1C">
 
ВО = ВнешниеОбработки.Создать("d:\user\bronfeld\ВнешняяОбработка2\Sbis1C_UF.epf", Ложь);
 
</source>
 
В параметре БезопасныйРежим указываем Ложь.
 
 
 
Данный код выполняется на сервере.
 
 
 
Следующие пункты выполняются на клиенте.
 
 
 
2. Получаем форму главного окна
 
<source lang="1C">
 
ГлавноеОкно = ПолучитьФорму("ВнешняяОбработка.СБИС.Форма.ФормаГлавноеОкно");
 
</source>
 
3. Вызываем функцию печати из главного окна
 
<source lang="1C">
 
ГлавноеОкно.Печать("", МассивДокументов);
 
</source>
 
МассивДокументов – массив с одним элементом – ссылкой на документ 1С.
 
  
 
=Сопоставление документов=
 
=Сопоставление документов=
 
Документы, полученные в электронном виде можно автоматически сопоставить с документами, которые уже заведены в 1С, не запуская внешнюю обработку. Для этого необходимо выполнить следующие действия:
 
Документы, полученные в электронном виде можно автоматически сопоставить с документами, которые уже заведены в 1С, не запуская внешнюю обработку. Для этого необходимо выполнить следующие действия:
  
'''Обычное приложение'''
+
1. [[#Подготовительные действия|Подготовительные действия]]
 
 
1. Получаем внешнюю обработку
 
<source lang="1C">
 
ВО = ВнешниеОбработки.Создать("d:\user\bronfeld\ВнешняяОбработка2\Sbis1C.epf");
 
</source>
 
2. Получаем форму "Внешний интерфейс"
 
<source lang="1C">
 
ВИ = ВО.ПолучитьФорму("ВнешнийИнтерфейс");
 
</source>
 
'''Управляемое приложение'''
 
  
1. Получаем внешнюю обработку (выполняется на сервере)
+
2. Заполняем параметры фильтра (не обязательно).
<source lang="1C">
+
ВО = ВнешниеОбработки.Создать( "d:\user\bronfeld\ВнешняяОбработка2\Sbis1C_UF.epf", Ложь );
 
</source>
 
2. Получаем форму "Внешний интерфейс" (выполняется на клиенте)
 
<source lang="1C">
 
ВИ = ПолучитьФорму("ВнешняяОбработка.СБИС.Форма.ВнешнийИнтерфейс");
 
</source>
 
'''Обычное и управляемое приложения'''
 
 
 
3. Заполняем параметры фильтра (не обязательно).  
 
 
Фильтр - структура. Может содержать поля, одноименные полям фильтра на главном окне: ФильтрДатаНач, ФильтрДатаКнц, ФильтрОрганизация, ФильтрКонтрагент. По указанным параметрам будут запрашиваться документы с online.sbis.ru для сопоставления с документами в 1С.
 
Фильтр - структура. Может содержать поля, одноименные полям фильтра на главном окне: ФильтрДатаНач, ФильтрДатаКнц, ФильтрОрганизация, ФильтрКонтрагент. По указанным параметрам будут запрашиваться документы с online.sbis.ru для сопоставления с документами в 1С.
  
4. Вызываем функцию сопоставления
+
3. Вызываем функцию сопоставления
 
<source lang="1C">
 
<source lang="1C">
Результат = ВИ.сбисСопоставление(Фильтр, ДополнительныеПараметры);
+
Результат = ВИ.сбисСопоставление(Кэш, Фильтр);
 
</source>
 
</source>
 
Если Фильтр не заполнен, то передаем пустую структуру. В этом случае для сопоставления будут запрашиваться все документы, начиная с последней даты сопоставления по текущую дату. Последняя дата сопоставления записывается в файл сбисПараметры.xml в каталоге настроек.
 
Если Фильтр не заполнен, то передаем пустую структуру. В этом случае для сопоставления будут запрашиваться все документы, начиная с последней даты сопоставления по текущую дату. Последняя дата сопоставления записывается в файл сбисПараметры.xml в каталоге настроек.
 
ДополнительныеПараметры - необязательный параметр (описан в разделе Отправка документов)
 
  
 
Функция возвращает структуру с полем "СопоставленныеДокументы" либо текст ошибки.
 
Функция возвращает структуру с полем "СопоставленныеДокументы" либо текст ошибки.
  
 
СопоставленныеДокументы - массив структур. Каждая структура содержит Документ 1С, идентификаторы пакета, вложения и статус документа в СБИС.
 
СопоставленныеДокументы - массив структур. Каждая структура содержит Документ 1С, идентификаторы пакета, вложения и статус документа в СБИС.
 
 
  
 
=Утверждение документов=
 
=Утверждение документов=
Строка 156: Строка 170:
 
Для утверждения документов выполняем следующие действия:
 
Для утверждения документов выполняем следующие действия:
  
1. Подготовительные действия: пункты 1,2 из раздела [[#Отправка документов|«Отправка документов»]]
+
1. [[#Подготовительные действия|Подготовительные действия]]
  
 
2. Вызываем функцию выполнения команды
 
2. Вызываем функцию выполнения команды
 
<source lang="1C">
 
<source lang="1C">
Результат = ВИ.сбисВыполнитьКоманду(МассивИд, ИмяКоманды, ДополнительныеПараметры);
+
Результат = ВИ.сбисВыполнитьКоманду(Кэш, МассивИд, ИмяКоманды);
 
</source>
 
</source>
 
МассивИд - массив, содержащий идентификаторы пакетов документов.
 
МассивИд - массив, содержащий идентификаторы пакетов документов.
  
 
ИмяКоманды - название действия, которое необходимо выполнить с указанными пакетами, например, "Утвердить".
 
ИмяКоманды - название действия, которое необходимо выполнить с указанными пакетами, например, "Утвердить".
 
ДополнительныеПараметры - необязательный параметр (описан в разделе Отправка документов)
 
 
  
 
Результат - структура с полем РезультатВыполнения либо текст ошибки.
 
Результат - структура с полем РезультатВыполнения либо текст ошибки.
Строка 174: Строка 185:
  
 
=Обработка служебных документов=
 
=Обработка служебных документов=
Для обработки служебных документов выполняем следующие действия:
+
Регламенты ЭДО предусматривают уведомление о доставке документа получателю. Для этого формируется, подписывается и отправляется извещение о получении. В СБИС это отдельный служебный этап документооборота. Извещение о получении может быть сформировано и подписано после обработки документа. Каждый участник ЭДО должен периодически обрабатывать служебные документы. Для облегчения интеграции клиентам использующим 1С, во внешней обработке СБИС реализована функция по обработке таких извещений через внешний интерфейс обработки.
 +
 
 +
 
 +
'''Порядок работы:'''
 +
 
 +
1. Выполните [[#Подготовительные действия|Подготовительные действия]] (шаг 1-4), если требуется, то сохраните для дальнейших вызовов
 +
 
 +
2. Вызовите функцию обработки служебных
 +
 
  
1. Подготовительные действия: пункты 1,2 из раздела [[#Отправка документов|«Отправка документов»]]
+
'''Пример вызова функции обработки служебных документов:'''
  
2. Вызываем функцию обработки служебных
 
 
<source lang="1C">
 
<source lang="1C">
Результат = ВИ.сбисОбработкаСлужебныхДокументов(ДополнительныеПараметры);
+
ВИ.сбисОбработкаСлужебныхДокументов(Кэш);
 
</source>
 
</source>
  
ДополнительныеПараметры - необязательный параметр (описан в разделе Отправка документов)
 
  
В случае возникновения ошибки ее текст будет возвращен в Результат.
+
'''Описание параметров:'''
 +
 
 +
Кэш –значение полученное при инициализации внешнего интерфейса внешней обработки из п.1
 +
 
 +
 
 +
'''Возвращаемое значение:'''
 +
 
 +
Функция работает в тихом режиме, ничего не возвращает.
 +
 
 +
= Обновление статусов документов =
 +
В процессе работы с документами, после их отправки, возникает необходимость контролировать состояние того или иного документа. Для обновления статусов документов требуется периодически вызывать функцию внешнего интерфейса обработки ВИ.сбисОбновлениеСтатусов(), которая считывает все события по документам в СБИС с момента последнего запуска и до текущего момента и записывает статусы по документам в 1С. Запись статусов происходит согласно текущим настройкам внешней обработки СБИС.
 +
 
 +
 
 +
'''Порядок работы:'''
 +
 
 +
1. Выполните [[#Подготовительные действия|подготовительные действия]] (шаг 1-4), если требуется, то сохраните для дальнейших вызовов
 +
 
 +
2. Вызовите функцию обновления статусов документов
  
=Обновление статусов документов=
 
Для обновления статусов документов выполняем следующие действия:
 
  
1. Подготовительные действия: пункты 1,2 из раздела [[#Сопоставление документов|«Сопоставление документов»]]
+
'''Пример вызова функции обновления статусов:'''
  
2. Вызываем функцию обновления статусов документов
 
 
<source lang="1C">
 
<source lang="1C">
Результат = ВИ.сбисОбновлениеСтатусов(ДополнительныеПараметры);
+
ВИ.сбисОбновлениеСтатусов(Кэш);
 
</source>
 
</source>
  
ДополнительныеПараметры - необязательный параметр (описан в разделе Отправка документов)
+
'''Описание параметров:'''
 +
 
 +
Кэш – значение полученное при инициализации внешнего интерфейса внешней обработки из п.1
  
В случае возникновения ошибки ее текст будет возвращен в Результат.
+
 
 +
'''Возвращаемое значение:'''
 +
 
 +
Функция работает в тихом режиме, ничего не возвращает.
  
 
=Перемещение документов между этапами=
 
=Перемещение документов между этапами=
Строка 205: Строка 241:
 
Для перемещения документа на следующий этап выполняем следующие действия:
 
Для перемещения документа на следующий этап выполняем следующие действия:
  
1. Подготовительные действия: пункты 1,2 из раздела [[#Сопоставление документов|«Сопоставление документов»]]
+
1. [[#Подготовительные действия|Подготовительные действия]]
  
2. Вызываем функцию для формирования всех данных, необходимых для работы обработки
+
2. Вызываем функцию получения документа (заранее знаем его идентификатор Ид)
<source lang="1C">
 
Кэш = ВИ.сбисПриОткрытииИзвнеОбщее(ДополнительныеПараметры);
 
</source>
 
3. Вызываем функцию получения документа (заранее знаем его идентификатор Ид)
 
 
<source lang="1C">
 
<source lang="1C">
 
Документ = Кэш.Интеграция.ПрочитатьДокумент(Кэш,Ид)
 
Документ = Кэш.Интеграция.ПрочитатьДокумент(Кэш,Ид)
 
</source>
 
</source>
  
4. Записываем действие которое собираемся выполнить для документа (какой переход будет сделан для документа)
+
3. Записываем действие которое собираемся выполнить для документа (какой переход будет сделан для документа)
 
<source lang="1C">
 
<source lang="1C">
 
Действие = Новый Структура;                   // Готовим Действие (переход с текущего этапа документооборота)
 
Действие = Новый Структура;                   // Готовим Действие (переход с текущего этапа документооборота)
Строка 236: Строка 268:
 
</source>
 
</source>
  
5.    Выполняем действие (передвигаем документ на следующий этап)
+
4.    Выполняем действие (передвигаем документ на следующий этап)
 
<source lang="1C">
 
<source lang="1C">
 
Этап = Документ.Этап[0];
 
Этап = Документ.Этап[0];
Строка 244: Строка 276:
 
Кэш.Интеграция.сбисВыполнитьДействие(Кэш, Документ, Этап, Действие,Комментарий,НазваниеПакета);
 
Кэш.Интеграция.сбисВыполнитьДействие(Кэш, Документ, Этап, Действие,Комментарий,НазваниеПакета);
 
</source>
 
</source>
 +
 +
=Открытие карточки электронного документа=
 +
Данный механизм используется для открытия формы просмотра электронных документов из карточки документа 1С. Авторизация для данных методов происходит внутри Внешнего интерфейса и нет необходимости осуществлять ее перед их вызовом.
 +
 +
== Подготовка пакета к отправке и открытие его формы предпросмотра ==
 +
В результате выполнения, будет сформирован пакет электронных документов и открыта форма его предпросмотра. Пакет сформируется на основе документа 1С (и по все связанным документам) из карточки которого происходил запуск механизма.
 +
===Обычное приложение===
 +
Для формирования пакета электронных документов и открытия окна предварительного просмотра необходимо выполнить следующие действия:
 +
 +
1. [[#Получаем внешнюю обработку|Получаем внешнюю обработку]]
 +
 +
2. Вызываем функцию печати из обработки
 +
<source lang="1C">
 +
ВО.Печать(Документ1С);
 +
</source>
 +
Документ1С – ссылка на документ 1С. Можно передавать документы только определенных типов, для которых в каталоге настроек внешней обработки есть файлы настроек с параметром «ЗапросСпискаДокументов». В запросе определяется состав пакета документов, который будет сформирован и открыт для предварительного просмотра.
 +
===Управляемое приложение===
 +
Необходимо выполнить следующие действия:
 +
 +
1. [[#Получаем внешнюю обработку|Получаем внешнюю обработку]]
 +
 +
Данный код выполняется на сервере.
 +
 +
Следующие пункты выполняются на клиенте.
 +
 +
2. Получаем форму главного окна
 +
<source lang="1C">
 +
ГлавноеОкно = ПолучитьФорму("ВнешняяОбработка.СБИС.Форма.ФормаГлавноеОкно");
 +
</source>
 +
3. Вызываем функцию печати из главного окна
 +
<source lang="1C">
 +
ГлавноеОкно.Печать("", МассивДокументов);
 +
</source>
 +
МассивДокументов – массив с одним элементом – ссылкой на документ 1С.
 +
 +
== Открыть форму просмотра электронного документа по идентификатору ==
 +
Позволяет открыть форму просмотра электронного документа по идентификатору из доп.реквизитов документа 1С. Можно использовать для открытия загруженных/сопоставленных через ВО документов, а так же ранее отправленных. Иными словами любых документов у которых в доп.реквизитах есть идентификатор
 +
 +
=== Обычное приложение ===
 +
1. [[#Получаем внешнюю обработку|Получаем внешнюю обработку]]
 +
 +
2. Получаем форму Внешнего интерфейса
 +
<source lang="1C">
 +
ВИ = ВО.ПолучитьФорму("ВнешнийИнтерфейс");
 +
</source>
 +
3. Вызываем функцию инициализации для подготовки кэша и чтения настроек
 +
<source lang="1C">
 +
Кэш = ВИ.сбисИнициализировать();
 +
</source>
 +
4. Вызываем функцию открытия документа по идентификатору.
 +
<source lang="1C">
 +
СсылкаНаОбъект = ЭтотОбъект.Ссылка;
 +
Параметры = Новый Структура("Документ,Раздел", СсылкаНаОбъект, "1");
 +
ВИ.сбисОткрытьДокументПоИдентификатору(Кэш, Параметры);
 +
</source>
 +
На вход подаем кэш и подготовленную структуру параметров, состоящую из ссылки на документ (получаем с текущей формы) и Раздела со значением «1» (необходимо для корректной отрисовки тулбара и видимости определенных элементов. По сути сообщаем, что открываем документ из раздела Полученные. Если механизм применяется для отправленных документов, то передаем «2»)
 +
 +
=== Управляемое приложение ===
 +
1. [[#Получаем внешнюю обработку|Получаем внешнюю обработку]]
 +
 +
2. Получаем форму Внешнего интерфейса
 +
<source lang="1C">
 +
ВИ = ВО.ПолучитьФорму("ВнешнийИнтерфейс");
 +
</source>
 +
3. Вызываем функцию инициализации для подготовки кэша и чтения настроек. В связи с особенностью управляемых формы мы должны хранить на форме пользователя (откуда происходит вызов) в сохраняемом реквизите формы идентификатор сессии. Поэтому при вызове функции инициализации передаем туда структуру с доп.параметром ИдентификаторСессии
 +
<source lang="1C">
 +
Кэш = ВИ.сбисИнициализировать(Новый Структура("ИдентификаторСессии", ИдентификаторСессии));
 +
</source>
 +
4. Вызываем функцию открытия документа по идентификатору.
 +
<source lang="1C">
 +
СсылкаНаОбъект = ЭтотОбъект.Ссылка;
 +
Параметры = Новый Структура("Документ,Раздел", СсылкаНаОбъект, "1");
 +
ВИ.сбисОткрытьДокументПоИдентификатору(Кэш, Параметры);
 +
</source>
 +
На вход подаем кэш и подготовленную структуру параметров, состоящую из ссылки на документ (получаем с текущей формы) и Раздела со значением «1» (необходимо для корректной отрисовки тулбара и видимости определенных элементов. По сути сообщаем, что открываем документ из раздела Полученные. Если механизм применяется для отправленных документов, то передаем «2»)
 +
 +
5. По завершению работы внешнего интерфейса необходимо обновить идентификатор сессии на форме, где он у вас хранится
 +
<source lang="1C">
 +
ИдентификаторСессии = Кэш.Парам.ИдентификаторСессии;
 +
</source>
 +
 +
=Настройка запуска периодических задач через планировщик Windows=
 +
Для некоторых процессов, требуется выполнение повторяющихся задач без участия пользователя, в частности например обновление статусов документов.
 +
Удобнее если этот процесс будет выполняться в "фоновом" режиме с автоматическим запуском.
 +
 +
Для решения подобной задачи, требуется создать новую внешнюю обработку (назовем ее ВО Робот), при запуске которой будет описан вызов необходимых методов внешнего интерфейса обработки СБИС. Назначенное задание запускается по триггеру и вызывает через командную строку 1С Предприятие с параметрами, в качестве параметров передается команда на запуск ВО Робот, которая в свою очередь вызывает необходимые методы внешнего интерфейса обработки СБИС. По завершению 1С Предприятие закрывается до следующего запуска. Таким образом не требуется отдельная лицензия для постоянно запущенного процесса.
 +
 +
 +
'''Пример содержимого bat файла:'''
 +
<source lang="dos">
 +
chcp 1251
 +
"C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /F"D:\user\ivanov\Базы 1С\УПП49_" /Execute "d:\user\ivanov\ВнешняяОбработка2\СБИСАвтоматическоеСопоставлениеИУтверждение.epf"
 +
</source>
 +
 +
 +
'''К сведению.''' К сожалению, выполнение методов внешнего интерфейса обработки СБИС не может быть выполнено целиком из под регламентного задания, поскольку в части случаев необходимо обращение к СКЗИ локального пользователя и в том числе 1С не умеет выполнять клиентский код с сервера, а регламентные задания работают только на сервере.
 +
 
 +
 +
 
[[Категория:1С]]
 
[[Категория:1С]]

Текущая версия на 13:29, 18 октября 2019

Функционал внешней обработки можно использовать извне, то есть, не запуская саму обработку, а просто вызывая из нее определенные методы. Таким образом можно осуществлять формирование и предварительный просмотр пакета электронных документов, отправку документов, сопоставление электронных документов с документами 1С, утверждение документов, обработку служебных документов и обновление статусов.

Содержание

Подготовительные действия

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

Шаг 1. Получаем внешнюю обработку

Обычное приложение

Получение обработки напрямую из файла:

ВО = ВнешниеОбработки.Создать("d:\ВнешняяОбработка2\Sbis1C.epf");

Получение обработки из справочника 1С:

ОбработкаСБИС = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Электронный обмен документами в СБиС");
ДвоичныеДанные = ОбработкаСБИС.ХранилищеВнешнейОбработки.Получить();
ИмяОбработки = ПолучитьИмяВременногоФайла();
ДвоичныеДанные.Записать(ИмяОбработки);

ВО = ВнешниеОбработки.Создать(ИмяОбработки);

Управляемое приложение

Получение обработки напрямую из файла:

ВО = ВнешниеОбработки.Создать( "d:\ВнешняяОбработка2\Sbis1C_UF.epf", Ложь );

Получение обработки из справочника 1С:

ОбработкаСБИС = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Отправить документ через online.sbis.ru");
ДвоичныеДанные = ОбработкаСБИС.ХранилищеОбработки.Получить();
ИмяОбработки = ПолучитьИмяВременногоФайла();
ДвоичныеДанные.Записать(ИмяОбработки);

ВО = ВнешниеОбработки.Создать(ИмяОбработки, Ложь);

В параметре БезопасныйРежим указываем Ложь.

Шаг 2. Получаем форму "Внешний интерфейс"

Обычное приложение

ВИ = ВО.ПолучитьФорму("ВнешнийИнтерфейс");

Управляемое приложение

ВИ = ПолучитьФорму("ВнешняяОбработка.СБИС.Форма.ВнешнийИнтерфейс");

Шаг 3. Вызываем функцию инициализации

Включает в себя подготовку кэша и чтение настроек

Кэш = ВИ.сбисИнициализировать();

Шаг 4. Авторизуемся (в случае, если обмен идет через SDK или API)

УспешнаяАвторизация = ВИ.сбисАвторизация(Кэш, ПараметрыАвторизации, ЗапускРоботом);

ПараметрыАвторизации - структура с полями:

  • ИдентификаторСессии (не обязательное) - рекомендуется указывать идентификатор сессии предыдущего сеанса для ускорения работы. Если сессия истекла, то новый идентификатор можно взять из поля Кэш.Парам.ИдентификаторСессии после авторизации.
  • ВходПоСертификату - Истина, если авторизуемся по сертификату, Ложь, если авторизуемся по логину/паролю.
  • Сертификат - отпечаток сертификата для авторизации. Заполняется, если ВходПоСертификату = Истина.
  • Логин - логин для автоиизации. Заполняется, если ВходПоСертификату = Ложь.
  • Пароль - пароль для авторизации. Заполняется, если ВходПоСертификату = Ложь.

ЗапускРоботом (не обязательный) - булевская переменная, по умолчанию имеет значение Истина.

  • Если будет передано значение Истина (или параметр будет проигнорирован) произойдет попытка авторизации по данным из структуры ПараметрыАвторизации. В случае неудачи вернет текст ошибки.
  • Если будет передано значение Ложь произойдет попытка авторизации по переданным данным из ПараметрыАвторизации. В случае неудачи будет открыто окно авторизации, где пользователь сможет авторизоваться вручную.

Отправка документов

С помощью данной функции внешнего интерфейса обработки, можно реализовать отправку документов в электронном виде программно без открытия основного интерфейса, в том числе автоматизировать отправку документов по расписанию и критериям отбора. Для этого необходимо выполнить подготовительные действия, сформировать массив отправляемых пакетов документов и вызвать функцию отправки.


Порядок работы:

1. Выполните подготовительные действия (шаги 1-4) и сохраните если требуется для повторной отправки

2. Сформируйте массив отправляемых пакетов документов

3. Вызовите функцию отправки документов с передачей массива пакетов из п.2


Пример вызова функции отправки:

Результат = ВИ.сбисОтправка(Кэш, СписокСтрок);

Описание параметров:

Кэш – значение полученное при инициализации внешнего интерфейса внешней обработки из п.1

Список строк – массив данных со списком пакетов, в каждом пакете массив вложений (документов)


Структура данных:

СписокСтрок – тип список значений. Каждое значение – структура с полем «СоставПакета».

СоставПакета – тип список значений. Каждое значение может быть одним из двух типов:

  • Ссылка на документ 1С. В представление можно записать название файла настроек для данного документа. Если не указано, то будет использован файл настроек, соответствующий имени документа в конфигураторе. Можно указывать только документы, для которых есть файл настроек. Если хотя бы для одного документа из состава пакета не будет файла настроек, то весь пакет не будет сформирован и отправлен.
  • Строка с абсолютным путем к файлу (используется, если нужно отправить неформализованные вложения).

Первое вложение пакета должно быть ссылкой на документ 1С, т.к. по нему будут определяться отправитель и получатель пакета.

Пример формирования списка документов для отправки

СписокСтрок = Новый СписокЗначений;

СоставПакета = Новый СписокЗначений;

СоставПакета.Добавить(Документы.РеализацияТоваровУслуг.НайтиПоНомеру("00000000031", ТекущаяДата()));

СоставПакета.Добавить(Документы.СчетФактураВыданный.НайтиПоНомеру("000000000019", ТекущаяДата()));

СоставПакета.Добавить("C:\Документы\Соглашение с ООО Солнышко.doc");

СписокСтрок.Добавить(Новый Структура("СоставПакета",СоставПакета));

СоставПакета = Новый СписокЗначений;

СоставПакета.Добавить(Документы.РеализацияТоваровУслуг.НайтиПоНомеру("00000000032", ТекущаяДата()));

СписокСтрок.Добавить(Новый Структура("СоставПакета",СоставПакета));

Возвращаемое значение:

Функция возвращает структуру «РезультатОтправки»:

  • «ТипыОшибок» — список значений с типами ошибок;
  • «Отправлено» — количество отправленных пакетов документов;
  • «НеОтправлено» — количество неотправленных пакетов документов;
  • «НеСформировано» — количество несформированных пакетов документов;
  • «Ошибок» — общее количество ошибок;
  • «ДетализацияОшибок» — соответствие, которое содержит ссылки на документы 1С и описание ошибок.

Сопоставление документов

Документы, полученные в электронном виде можно автоматически сопоставить с документами, которые уже заведены в 1С, не запуская внешнюю обработку. Для этого необходимо выполнить следующие действия:

1. Подготовительные действия

2. Заполняем параметры фильтра (не обязательно).

Фильтр - структура. Может содержать поля, одноименные полям фильтра на главном окне: ФильтрДатаНач, ФильтрДатаКнц, ФильтрОрганизация, ФильтрКонтрагент. По указанным параметрам будут запрашиваться документы с online.sbis.ru для сопоставления с документами в 1С.

3. Вызываем функцию сопоставления

Результат = ВИ.сбисСопоставление(Кэш, Фильтр);

Если Фильтр не заполнен, то передаем пустую структуру. В этом случае для сопоставления будут запрашиваться все документы, начиная с последней даты сопоставления по текущую дату. Последняя дата сопоставления записывается в файл сбисПараметры.xml в каталоге настроек.

Функция возвращает структуру с полем "СопоставленныеДокументы" либо текст ошибки.

СопоставленныеДокументы - массив структур. Каждая структура содержит Документ 1С, идентификаторы пакета, вложения и статус документа в СБИС.

Утверждение документов

Утверждение полученных документов также можно выполнить, не запуская обработку. Например, можно утвердить полученные документы, которые однозначно сопоставились с документами 1С. Документы можно не только утвердить, но и выполнить любое другое действие, не требующее ввода комментария.

Для утверждения документов выполняем следующие действия:

1. Подготовительные действия

2. Вызываем функцию выполнения команды

Результат = ВИ.сбисВыполнитьКоманду(Кэш, МассивИд, ИмяКоманды);

МассивИд - массив, содержащий идентификаторы пакетов документов.

ИмяКоманды - название действия, которое необходимо выполнить с указанными пакетами, например, "Утвердить".

Результат - структура с полем РезультатВыполнения либо текст ошибки.

РезультатВыполнения - массив структур, содержащих идентификатор пакета и результат выполнения команды (Истина/Ложь).

Обработка служебных документов

Регламенты ЭДО предусматривают уведомление о доставке документа получателю. Для этого формируется, подписывается и отправляется извещение о получении. В СБИС это отдельный служебный этап документооборота. Извещение о получении может быть сформировано и подписано после обработки документа. Каждый участник ЭДО должен периодически обрабатывать служебные документы. Для облегчения интеграции клиентам использующим 1С, во внешней обработке СБИС реализована функция по обработке таких извещений через внешний интерфейс обработки.


Порядок работы:

1. Выполните Подготовительные действия (шаг 1-4), если требуется, то сохраните для дальнейших вызовов

2. Вызовите функцию обработки служебных


Пример вызова функции обработки служебных документов:

ВИ.сбисОбработкаСлужебныхДокументов(Кэш);


Описание параметров:

Кэш –значение полученное при инициализации внешнего интерфейса внешней обработки из п.1


Возвращаемое значение:

Функция работает в тихом режиме, ничего не возвращает.

Обновление статусов документов

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


Порядок работы:

1. Выполните подготовительные действия (шаг 1-4), если требуется, то сохраните для дальнейших вызовов

2. Вызовите функцию обновления статусов документов


Пример вызова функции обновления статусов:

ВИ.сбисОбновлениеСтатусов(Кэш);

Описание параметров:

Кэш – значение полученное при инициализации внешнего интерфейса внешней обработки из п.1


Возвращаемое значение:

Функция работает в тихом режиме, ничего не возвращает.

Перемещение документов между этапами

Используется при необходимости указания исполнителя или комментария. Для перемещения документа на следующий этап выполняем следующие действия:

1. Подготовительные действия

2. Вызываем функцию получения документа (заранее знаем его идентификатор Ид)

Документ = Кэш.Интеграция.ПрочитатьДокумент(Кэш,Ид)

3. Записываем действие которое собираемся выполнить для документа (какой переход будет сделан для документа)

Действие = Новый Структура; 		                   	// Готовим Действие (переход с текущего этапа документооборота)
Для каждого Переход Из Документ.Этап[0].Действие Цикл 	        // Перебираем возможные переходы для документа
	Если Переход.Название = НазваниеНужногоДействия Тогда   // Ищем среди них такой переход который нам нужен
		Действие.Вставить("Состав",Переход);          	// Если находим добавляем в объект Действие
	КонецЕсли;
КонецЦикла

Если известно, что исполнитель следующего этапа назначается при выполнении, то мы можем указать его из учетной системы. Для этого нужно добавить объект Исполнитель в объект Действие

Исполнитель = Новый Структура;
Исполнитель.Вставить("Имя","Глеб");
Исполнитель.Вставить("Фамилия","Никифоров");
Исполнитель.Вставить("Отчество","Станиславович");
Действие.Состав.Вставить("Исполнитель",Исполнитель);

4. Выполняем действие (передвигаем документ на следующий этап)

Этап = Документ.Этап[0];
Действие = Действие.Состав;
Комментарий = "Если обязателен для выполнения перехода, то нужно заполнить";
НазваниеПакета = "";
Кэш.Интеграция.сбисВыполнитьДействие(Кэш, Документ, Этап, Действие,Комментарий,НазваниеПакета);

Открытие карточки электронного документа

Данный механизм используется для открытия формы просмотра электронных документов из карточки документа 1С. Авторизация для данных методов происходит внутри Внешнего интерфейса и нет необходимости осуществлять ее перед их вызовом.

Подготовка пакета к отправке и открытие его формы предпросмотра

В результате выполнения, будет сформирован пакет электронных документов и открыта форма его предпросмотра. Пакет сформируется на основе документа 1С (и по все связанным документам) из карточки которого происходил запуск механизма.

Обычное приложение

Для формирования пакета электронных документов и открытия окна предварительного просмотра необходимо выполнить следующие действия:

1. Получаем внешнюю обработку

2. Вызываем функцию печати из обработки

ВО.Печать(Документ1С);

Документ1С – ссылка на документ 1С. Можно передавать документы только определенных типов, для которых в каталоге настроек внешней обработки есть файлы настроек с параметром «ЗапросСпискаДокументов». В запросе определяется состав пакета документов, который будет сформирован и открыт для предварительного просмотра.

Управляемое приложение

Необходимо выполнить следующие действия:

1. Получаем внешнюю обработку

Данный код выполняется на сервере.

Следующие пункты выполняются на клиенте.

2. Получаем форму главного окна

ГлавноеОкно = ПолучитьФорму("ВнешняяОбработка.СБИС.Форма.ФормаГлавноеОкно");

3. Вызываем функцию печати из главного окна

ГлавноеОкно.Печать("", МассивДокументов);

МассивДокументов – массив с одним элементом – ссылкой на документ 1С.

Открыть форму просмотра электронного документа по идентификатору

Позволяет открыть форму просмотра электронного документа по идентификатору из доп.реквизитов документа 1С. Можно использовать для открытия загруженных/сопоставленных через ВО документов, а так же ранее отправленных. Иными словами любых документов у которых в доп.реквизитах есть идентификатор

Обычное приложение

1. Получаем внешнюю обработку

2. Получаем форму Внешнего интерфейса

ВИ = ВО.ПолучитьФорму("ВнешнийИнтерфейс");

3. Вызываем функцию инициализации для подготовки кэша и чтения настроек

Кэш = ВИ.сбисИнициализировать();

4. Вызываем функцию открытия документа по идентификатору.

СсылкаНаОбъект = ЭтотОбъект.Ссылка;
Параметры = Новый Структура("Документ,Раздел", СсылкаНаОбъект, "1");
ВИ.сбисОткрытьДокументПоИдентификатору(Кэш, Параметры);

На вход подаем кэш и подготовленную структуру параметров, состоящую из ссылки на документ (получаем с текущей формы) и Раздела со значением «1» (необходимо для корректной отрисовки тулбара и видимости определенных элементов. По сути сообщаем, что открываем документ из раздела Полученные. Если механизм применяется для отправленных документов, то передаем «2»)

Управляемое приложение

1. Получаем внешнюю обработку

2. Получаем форму Внешнего интерфейса

ВИ = ВО.ПолучитьФорму("ВнешнийИнтерфейс");

3. Вызываем функцию инициализации для подготовки кэша и чтения настроек. В связи с особенностью управляемых формы мы должны хранить на форме пользователя (откуда происходит вызов) в сохраняемом реквизите формы идентификатор сессии. Поэтому при вызове функции инициализации передаем туда структуру с доп.параметром ИдентификаторСессии

Кэш = ВИ.сбисИнициализировать(Новый Структура("ИдентификаторСессии", ИдентификаторСессии));

4. Вызываем функцию открытия документа по идентификатору.

СсылкаНаОбъект = ЭтотОбъект.Ссылка;
Параметры = Новый Структура("Документ,Раздел", СсылкаНаОбъект, "1");
ВИ.сбисОткрытьДокументПоИдентификатору(Кэш, Параметры);

На вход подаем кэш и подготовленную структуру параметров, состоящую из ссылки на документ (получаем с текущей формы) и Раздела со значением «1» (необходимо для корректной отрисовки тулбара и видимости определенных элементов. По сути сообщаем, что открываем документ из раздела Полученные. Если механизм применяется для отправленных документов, то передаем «2»)

5. По завершению работы внешнего интерфейса необходимо обновить идентификатор сессии на форме, где он у вас хранится

ИдентификаторСессии = Кэш.Парам.ИдентификаторСессии;

Настройка запуска периодических задач через планировщик Windows

Для некоторых процессов, требуется выполнение повторяющихся задач без участия пользователя, в частности например обновление статусов документов. Удобнее если этот процесс будет выполняться в "фоновом" режиме с автоматическим запуском.

Для решения подобной задачи, требуется создать новую внешнюю обработку (назовем ее ВО Робот), при запуске которой будет описан вызов необходимых методов внешнего интерфейса обработки СБИС. Назначенное задание запускается по триггеру и вызывает через командную строку 1С Предприятие с параметрами, в качестве параметров передается команда на запуск ВО Робот, которая в свою очередь вызывает необходимые методы внешнего интерфейса обработки СБИС. По завершению 1С Предприятие закрывается до следующего запуска. Таким образом не требуется отдельная лицензия для постоянно запущенного процесса.


Пример содержимого bat файла:

chcp 1251 
"C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /F"D:\user\ivanov\Базы 1С\УПП49_" /Execute "d:\user\ivanov\ВнешняяОбработка2\СБИСАвтоматическоеСопоставлениеИУтверждение.epf"


К сведению. К сожалению, выполнение методов внешнего интерфейса обработки СБИС не может быть выполнено целиком из под регламентного задания, поскольку в части случаев необходимо обращение к СКЗИ локального пользователя и в том числе 1С не умеет выполнять клиентский код с сервера, а регламентные задания работают только на сервере.