Внешний интерфейс обработки - API v2

Материал из razgovorov.ru
Версия от 13:01, 19 января 2018; Разговоров Михаил (обсуждение | вклад) (Вызываем функцию инициализации)
Перейти к: навигация, поиск

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

Содержание

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

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

  1. Получаем внешнюю обработку
  2. Получаем форму с API
  3. Инициализируем API
  4. Выполняем методы API
    1. Если в результате ошибка авторизации
      1. Выполняем метода авторизации
      2. Повторяем вызов метода.

Любой метод API ВО возвращает результат в виде структуры содержащей одно из двух свойств - "Результат" или "Ошибка". Тип данных "Результата" зависит от метода. Формат структуры "Ошибка":

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

Обычное приложение из файла

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

Обычное приложение из справочника 1С

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

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

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

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

Управляемое приложение из справочника 1С

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

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

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

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

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

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

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

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

Вызываем функцию инициализации

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

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

ВИ2.сбисАвторизоваться

Параметры:

  • Кэш (Структура)- служебная структура с параметрами ВО
  • ПараметрыАвторизации (Структура) - параметры авторизации
  • ТихийРежим (Булево) - Если ложь, то в случае неудачной авторизации или отсутствия параметров для авторизации будет выведено окно авторизации.

Результат:

  • Идентификатор сессии - строка

Структура ПараметрыАвторизации:

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В случае возникновения ошибки ее текст будет возвращен в Результат.

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

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

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

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

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

В случае возникновения ошибки ее текст будет возвращен в Результат.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Получить внешнюю обработку
  2. Получить форму программного интерфейса обработки
  3. Выполнить метод
  4. Если метод вернул ошибку авторизации
    1. Вызвать метод авторизации
    2. Повторить вызов метода

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. По завершению работы внешнего интерфейса необходимо обновить идентификатор сессии на форме, где он у вас хранится

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