В статье описан пример создания регламентного задания и необходимых для этого объектов метаданных.

Приведен пример интеграции на базе конфигурации «1С:Управление торговлей ред. 10.3» и платформе 1С:Предприятие 8.3.

Конфигурация для интеграции

Конфигурация для платформы 1С:Предприятие 8.2

  1. Добавляем подсистему «ст_ИнтеграцияМобиком». В неё будут включены все вновь создаваемые объекты. 

    1. Синоним: «Интеграция с Мобиком (st-mobi.com)»

    2. Отключаем флаг «Включать в командный интерфейс»

       Настройка метаданных...

  2. Добавляем общий модуль «ст_ИнтеграцияМобиком». В нем будут реализованы все процедуры для работы регламентного задания.

    1. Синоним: «Интеграция с Мобиком (st-mobi.com)»

    2. Устанавливаем признаки «Сервер», «Внешнее соединение» и «Клиент (обычное приложение)». 

      Настройка контекста выполнена согласно стандарту «Правила создания общих модулей» для серверного (содержащего методы недоступные для использования из клиентского кода) модуля.

       Настройка метаданных...

    3. Пример текста модуля:

       ст_ИнтеграцияМобиком
      8.3
      ////////////////////////////////////////////////////////////////////////////////
      // Модуль интеграции с Мобиком (st-mobi.com)
      //    Общий модуль интеграции  
      ////////////////////////////////////////////////////////////////////////////////
      
      #Область ПрограммныйИнтерфейс
      
      // Обработчик регламентного задания обмена с Мобиком
      Процедура ОбменДанными() Экспорт
        
        Попытка
          
          ДвоичныеДанные = ПолучитьДвоичныеДанныеВнешнейОбработки();
          Если ЗначениеЗаполнено(ДвоичныеДанные) Тогда
            
            ОбъектОбработки = ПолучитьОбъектВнешнейОбработки(ДвоичныеДанные);
            ОбъектОбработки.ВыполнитьКоманду("ОбменДанными");
              
          Иначе
            
            ЗаписьЖурналаРегистрации("ИнтеграцияМобиком.Интеграция", УровеньЖурналаРегистрации.Предупреждение, 
              Метаданные.РегламентныеЗадания.ст_ОбменДаннымиМобиком,,
              НСтр("ru = 'Не заполнена обработка обмена!'", ПолучитьКодЯзыка())
              );
            
          КонецЕсли;
          
        Исключение
          
          ИнформацияОбОшибке = ИнформацияОбОшибке();
          ЗаписьЖурналаРегистрации("ИнтеграцияМобиком.Интеграция", УровеньЖурналаРегистрации.Ошибка, 
            Метаданные.РегламентныеЗадания.ст_ОбменДаннымиМобиком,,
            ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)
            );
          
        КонецПопытки;
        
      КонецПроцедуры
      
      // Добавляет имена определенных в модуле интеграции обработчиков событий
      // 
      // Параметры:
      //   Обработчики - Массив - массив строк, например, "ОбработчикПередЗагрузкой".
      //
      // Пример использования:
      //   Обработчики.Добавить(<ИмяОбработчика>);
      //
      Процедура УстановитьОбработчикиСобытий(Обработчики) Экспорт
        
      КонецПроцедуры
      
      #КонецОбласти
      
      #Область СлужебныеПроцедурыИФункции
      
      Функция ПолучитьДвоичныеДанныеВнешнейОбработки()
        
      #Если Сервер Тогда
        УстановитьПривилегированныйРежим(Истина);
      #Иначе
        
        Если Не ПравоДоступа("Чтение", Метаданные.Константы.ст_ВнешняяОбработкаМобиком) Тогда
          ВызватьИсключение НСтр("ru = 'Нет права чтения константы ""Обработка обмена с Мобиком""'", ПолучитьКодЯзыка());
        КонецЕсли;
        
        Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеОбработки) Тогда
          ВызватьИсключение НСтр("ru = 'Нет права чтения справочника ""Внешние отчеты""'", ПолучитьКодЯзыка());
        КонецЕсли;
        
      #КонецЕсли
      
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |  ВнешниеОбработки.ХранилищеВнешнейОбработки
        |ИЗ
        |  Константы КАК Константы
        |    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВнешниеОбработки КАК ВнешниеОбработки
        |    ПО Константы.ст_ВнешняяОбработкаМобиком = ВнешниеОбработки.Ссылка";
      
        РезультатЗапроса = Запрос.Выполнить();
        
        ХранилищеОбработки = Неопределено;
        Если НЕ РезультатЗапроса.Пустой() Тогда
          
          Выборка = РезультатЗапроса.Выбрать();
          Если Выборка.Следующий() Тогда
            ХранилищеОбработки = Выборка.ХранилищеВнешнейОбработки;  
          КонецЕсли;
          
        КонецЕсли;
        
        ДвоичныеДанные = Неопределено;
        Если ТипЗнч(ХранилищеОбработки) = Тип("ХранилищеЗначения") Тогда
          
          ДанныеХранилища = ХранилищеОбработки.Получить();
          Если ТипЗнч(ДанныеХранилища) = Тип("ДвоичныеДанные") И ДанныеХранилища.Размер() > 0 Тогда
            ДвоичныеДанные = ДанныеХранилища;
          КонецЕсли;
          
        КонецЕсли;
        
        Возврат ДвоичныеДанные;
        
      КонецФункции
      
      Функция ПолучитьОбъектВнешнейОбработки(ДвоичныеДанные)
        
        #Если ТолстыйКлиентОбычноеПриложение Тогда
          ИмяОбработки = ПолучитьИмяВременногоФайла();
          ДвоичныеДанные.Записать(ИмяОбработки);
        #Иначе  
          АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
          ИмяОбработки = ВнешниеОбработки.Подключить(АдресВоВременномХранилище, , Ложь);
        #КонецЕсли
        
        Возврат ВнешниеОбработки.Создать(ИмяОбработки);
        
      КонецФункции
      
      Функция ПолучитьКодЯзыка()
        Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
      КонецФункции
      
      #КонецОбласти

      Текст модуля для версии платформы 8.2

       ст_ИнтеграцияМобиком
      8.2
      ////////////////////////////////////////////////////////////////////////////////
      // Модуль интеграции с Мобиком (st-mobi.com)
      //    Общий модуль интеграции  
      ////////////////////////////////////////////////////////////////////////////////
      
      // Обработчик регламентного задания обмена с Мобиком
      Процедура ОбменДанными() Экспорт
        
        Попытка
          
          ДвоичныеДанные = ПолучитьДвоичныеДанныеВнешнейОбработки();
          Если ЗначениеЗаполнено(ДвоичныеДанные) Тогда
            
            ОбъектОбработки = ПолучитьОбъектВнешнейОбработки(ДвоичныеДанные);
            ОбъектОбработки.ВыполнитьКоманду("ОбменДанными");
              
          Иначе
            
            ЗаписьЖурналаРегистрации("ИнтеграцияМобиком.Интеграция", УровеньЖурналаРегистрации.Предупреждение, 
              Метаданные.РегламентныеЗадания.ст_ОбменДаннымиМобиком,,
              НСтр("ru = 'Не заполнена обработка обмена!'", ПолучитьКодЯзыка())
              );
            
          КонецЕсли;
          
        Исключение
          
          ИнформацияОбОшибке = ИнформацияОбОшибке();
          ЗаписьЖурналаРегистрации("ИнтеграцияМобиком.Интеграция", УровеньЖурналаРегистрации.Ошибка, 
            Метаданные.РегламентныеЗадания.ст_ОбменДаннымиМобиком,,
            ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)
            );
          
        КонецПопытки;
        
      КонецПроцедуры
      
      // Добавляет имена определенных в модуле интеграции обработчиков событий
      // 
      // Параметры:
      //   Обработчики - Массив - массив строк, например, "ОбработчикПередЗагрузкой".
      //
      // Пример использования:
      //   Обработчики.Добавить(<ИмяОбработчика>);
      //
      Процедура УстановитьОбработчикиСобытий(Обработчики) Экспорт
        
      КонецПроцедуры
      
      Функция ПолучитьДвоичныеДанныеВнешнейОбработки()
        
      #Если Сервер Тогда
        УстановитьПривилегированныйРежим(Истина);
      #Иначе
        
        Если Не ПравоДоступа("Чтение", Метаданные.Константы.ст_ВнешняяОбработкаМобиком) Тогда
          ВызватьИсключение НСтр("ru = 'Нет права чтения константы ""Обработка обмена с Мобиком""'", ПолучитьКодЯзыка());
        КонецЕсли;
        
        Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеОбработки) Тогда
          ВызватьИсключение НСтр("ru = 'Нет права чтения справочника ""Внешние отчеты""'", ПолучитьКодЯзыка());
        КонецЕсли;
        
      #КонецЕсли
      
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |  ВнешниеОбработки.ХранилищеВнешнейОбработки
        |ИЗ
        |  Константы КАК Константы
        |    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВнешниеОбработки КАК ВнешниеОбработки
        |    ПО Константы.ст_ВнешняяОбработкаМобиком = ВнешниеОбработки.Ссылка";
      
        РезультатЗапроса = Запрос.Выполнить();
        
        ХранилищеОбработки = Неопределено;
        Если НЕ РезультатЗапроса.Пустой() Тогда
          
          Выборка = РезультатЗапроса.Выбрать();
          Если Выборка.Следующий() Тогда
            ХранилищеОбработки = Выборка.ХранилищеВнешнейОбработки;  
          КонецЕсли;
          
        КонецЕсли;
        
        ДвоичныеДанные = Неопределено;
        Если ТипЗнч(ХранилищеОбработки) = Тип("ХранилищеЗначения") Тогда
          
          ДанныеХранилища = ХранилищеОбработки.Получить();
          Если ТипЗнч(ДанныеХранилища) = Тип("ДвоичныеДанные") И ДанныеХранилища.Размер() > 0 Тогда
            ДвоичныеДанные = ДанныеХранилища;
          КонецЕсли;
          
        КонецЕсли;
        
        Возврат ДвоичныеДанные;
        
      КонецФункции
      
      Функция ПолучитьОбъектВнешнейОбработки(ДвоичныеДанные)
        
        #Если ТолстыйКлиентОбычноеПриложение Тогда
          ИмяОбработки = ПолучитьИмяВременногоФайла();
          ДвоичныеДанные.Записать(ИмяОбработки);
        #Иначе  
          АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
          ИмяОбработки = ВнешниеОбработки.Подключить(АдресВоВременномХранилище, , Ложь);
        #КонецЕсли
        
        Возврат ВнешниеОбработки.Создать(ИмяОбработки);
        
      КонецФункции
      
      Функция ПолучитьКодЯзыка()
        Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
      КонецФункции
  3. Константу «ст_ВнешняяОбработкаМобиком».

    1. Синоним: «Обработка обмена с Мобиком (st-mobi)»

    2. Тип: СправочникСсылка.ВнешниеОбработки

       Настройка метаданных...

  4. Регламентное задание «ст_ОбменДаннымиМобиком».

    1. Синоним: «Обмен данными с Мобиком (st-mobi)»

    2. Установить флаг «Предопределенное»

    3. Имя метода: «ст_ИнтеграцияМобиком.ОбменДанными»

       Настройка метаданных...

Установка значения константы

 При использовании "управляемых" форм

При использовании "Обычных" форм

Запустить 1С в режиме "Тонкого клиента" (из конфигуратора)

  1. Выбрать: Главное меню - «Все функции»
  2. В открывшемся окне "раскрыть" пункт «Константы» и найти константу «Обработка обмена с Мобиком (st-mobi)»
  3. Выбрать значение для константы:
    1. Нажимаем символ "...", откроется справочник «Внешние обработки»
    2. Выбираем обработку обмена, которую необходимо добавить заранее
    3. Обработка выбрана, необходимо сохранить, для этого выбираем пункт «Записать и закрыть»
 При использовании "Обычных" форм в режиме совместимости с 8.1

Внимание!

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

  1. В дереве конфигурации переходим к общим формам «Общие»-«Общие формы»
  2. В «1С:Управление торговлей ред. 10.3» для отображения констант используется общая форма «НастройкаПараметровУчета»
  3. Выбираем ту страницу, на которой необходимо расположить константу, в нашем случае - страница «Новые»
  4. Необходимо добавить надпись и поле, отображающее значение константы
  5. Для поля необходимо задать «Данные»
    1. Нажимаем символ "...", откроется список «Данные», необходимо "раскрыть" группировку  «КонстантыНабор» и выбрать константу «ст_ВнешняяОбработкаМобиком»
    2. Значение заполнено 
    3. Для возможности редактирования, необходимо добавить константу в состав формы
  6. Обновляем конфигурацию
  7. Устанавливаем значение константы
    1. Запускам 1С:Предприятие в пользовательском режиме, 
       
    2. Переходим в пункт меню «Операции»-«Константы» и выбираем нужную страницу
    3. Устанавливаем значение константы нажатием на "..." и выбираем обработку из предоставленного списка
    4. Подтверждаем изменения нажатием кнопки "ОК"
  8. Настройка закончена

Примечание.

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

  1. Снять флаг «Защита от опасных действий» у пользователя под которым запускается регламентное задание

  2. Использовать параметр «DisableUnsafeActionProtection» в файле conf.cfg

  3. При подключении внешней обработки при вызове метода ВнешниеОбработки.Подключить() использовать параметр «ЗащитаОтОпасныхДействий».
    Пример кода приведен в п. 2.c.

  • Нет меток