четверг, 8 июня 2017 г.

Практическое применение механизма WEB-сервисов в системе «1С:Предприятие»

В предыдущей статье мы рассмотрели общие понятия использования механизма «Web-сервисов». Данная статья будет посвящена только практическим вопросам: мы рассмотрим несколько конкретных примеров.   
Итак, что предлагается Вам в данной публикации:
I. Раздел 1 – Пример реализации web-сервиса в системе «1С:Предприятие».
II. Раздел 2 – Пример обращения к web-сервису системы «1С:Предприятие» из стороннего приложения (разработка приложения в Delphi)
III. Раздел 3 – Пример обращения к web-сервису в системе «1С:Предприятие»
IV. Раздел 4 – Отладка web-сервисов в системе «1С:Предприятие»
  В предыдущей статье мы рассмотрели общие понятия использования механизма «Web-сервисов».  Освежим некоторые знания.
Web-сервисы применяются для обмена данными между сервером и клиентом; формат XML используется для «упаковывания» данных в целях взаимопонимания между обоими участниками общения.
РАЗДЕЛ I
ПРИМЕР РЕАЛИЗАЦИИ WEB-СЕРВИСА В СИСТЕМЕ «1С:ПРЕДПРИЯТИЕ»
ЗАДАЧА: Необходимо создать web-сервис, обращаясь к которому клиенты могут определить всю необходимую информацию по своим заявкам.
Задача является демонстрационной и служит только примером для понимания и обучения механизму web-сервисов.
РЕШЕНИЕ:
  Шаг 1.  Создадим новую информационную базу без конфигурации для разработки новой конфигурации.
  Шаг 2.   Добавим в конфигурацию несколько новых объектов
  -  справочник «Клиенты»;
  -  документ «Заявка»;
  -  перечисление «СтатусыЗаявок».
 
  Шаг 3.   Создадим новый XDTO-пакет.
  Почему и для чего мы создаем XDTO-пакет? Подробнее об использовании механизма XDTO можно прочитать в «Глава 16. Руководство разработчика» и здесь.
  Коротко отметим лишь только то, что механизм XDTO является универсальным способом представления данных для взаимодействия с различными внешними источниками данных и программными системами.
  В нашем случае пакет XDTO создается для описания возвращаемого значения web-сервиса.
  Раскроем ветку «Общие» → «XDTO-пакеты» → Добавить…
  Укажем имя XDTO-пакета  «DocumentsData» и  его пространство имен http://localhost/request или  http://192.168.1.76/request (для облегчения понимания и процесса обучения, мы указываем локальный IP-адрес компьютера, где установлен web-сервер (поддерживаемые web-сервера: IIS или Apache)). Каждый Web-сервис может быть однозначно идентифицирован по своему имени и URI пространству имен, которому он принадлежит.
 

  Наш пакет содержит два типа объектов XDTO:
1) Сustomer – для передачи данных элемента справочника «Клиенты».
Этот тип объекта XDTO будет содержать следующие свойства:
  -  Name – тип string из пространства имен http://www.w3.org/2001/XMLSchema;
2)  Document – для передачи данных документа «Заявки»
Этот тип объекта XDTO будет содержать следующие свойства:
-  Сustomer – тип Сustomer из пространства имен http://192.168.1.76/request; представляет собой ссылку на объект XDTO, который мы определили выше;
-  Status - тип string из пространства имен http://www.w3.org/2001/XMLSchema;
-  Numder - тип string из пространства имен http://www.w3.org/2001/XMLSchema.
 
  Шаг 4.  Добавим в конфигурацию новый Web-сервис
  Раскроем ветку «Общие» → «Web-сервисы» → Добавить…
  Для Web-сервиса укажем следующими значения свойств:
  - Имя - DocumentsData
  - URI Пространства имен – http://192.168.1.76/request
  - Пакеты XDTO – DocumentsData или http://192.168.1.76/request
  - Имя файла публикации – request.1cws
 
  Шаг 5.  У созданного Web-сервиса определим операцию «GetData»
 
  Значения свойств операции:
  - Тип возвращаемого значения – Document (http://192.168.1.76/request)
  - Возможно пустое значение – Истина
  - Имя процедуры – GetData.

  Шаг 6.  У операции GetData определим параметр Сustomer со следующими значениями свойств:
  Тип значения – тип string из пространства имен http://www.w3.org/2001/XMLSchema;
  Направление передачи – входной.
 
  Шаг 7.  Откроем модуль созданного Web-сервиса и поместить в него функцию Получить(), которая будет выполняться при вызове данного Web-сервиса.

Функция GetData(Сustomer)      
    
    // Получить типы объектов XDTO
    КлиентТип = ФабрикаXDTO.Тип("http://192.168.1.76/request", "Сustomer");
    ЗаявкаТип = ФабрикаXDTO.Тип("http://192.168.1.76/request", "Document"); 
            
    // Получаем клиента
    КлиентСсылка = Справочники.Клиенты.НайтиПоНаименованию(Сustomer);       
    Если Не ЗначениеЗаполнено(КлиентСсылка) Тогда
         Возврат Неопределено;
    КонецЕсли;
  
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |           Заявка.Ссылка,
        |           ПРЕДСТАВЛЕНИЕ(Заявка.Статус) КАК Статус,
        |           Заявка.Номер
        |ИЗ
        |           Документ.Заявка КАК Заявка
        |ГДЕ
        |           Заявка.Клиент = &Клиент";
           
     Запрос.УстановитьПараметр("Клиент", КлиентСсылка);         
     РезультатЗапроса = Запрос.Выполнить();
     Если РезультатЗапроса.Пустой() Тогда
         Возврат Неопределено;
     КонецЕсли;  
            
     Выборка = РезультатЗапроса.Выбрать();
     Выборка.Следующий();     
     Документ = Выборка.Ссылка.ПолучитьОбъект();         
            
     // Создать объект XDTO заявки
     Заявка = ФабрикаXDTO.Создать(ЗаявкаТип);
     Заявка.Numder = Выборка.Номер;
     Клиент = ФабрикаXDTO.Создать(КлиентТип);
     Клиент.Name = КлиентСсылка.Наименование;
     Заявка.Сustomer = Клиент;
     Заявка.Status = Выборка.Статус;
     
     // Вернуть заявку
     Возврат Заявка;
КонецФункции

  Шаг 8.  Опубликуем созданный Web-сервис на веб-сервере.
  Пункт меню Конфигуратор: «Администрирование» → «Публикация на Web-сервере».
  На вкладке «Web-сервисы» устанавливаем признак «Публиковать Web-сервисы» и напротив нашего нового Web-сервиса также ставим «галочку».
 

РАЗДЕЛ II
ПРИМЕР ОБРАЩЕНИЯ К WEB-СЕРВИСУ СИСТЕМЫ «1С:ПРЕДПРИЯТИЕ» ИЗ СТОРОННЕГО ПРИЛОЖЕНИЯ
  Основное назначение механизма Web-сервисов в системе «1С:Предприятие» - это передача необходимых данных сторонним приложениям.
Рассмотрим пример разработки приложения на Delphi обращения к нашему web-сервису из первого раздела данной статьи.
  Шаг 1.   Создадим новый проект и на форме разместим несколько элементов управления
  -  текстовое поле – используется для вывода полученной от web-сервиса информации;
  -  две кнопки – очистка текстового поля и обращение к web-сервису;
  -  поле ввода – передаваемый в web-сервис параметр.
 
  Шаг 2.  Выполняем импорт WSDL-файла
 


В результате мы получаем новый модуль request (такое наименование мы определили непосредственно в 1С). В данном модуле имеется все необходимая информация по web-сервису.
 
  Шаг 3.   Напишем обработчик вызова web-сервиса
Переменная DocumentDataPortType уже определена в модуле request
 
  Шаг 4.   Запустить приложение и выполнить проверку.

 РАЗДЕЛ III 
ПРИМЕР ОБРАЩЕНИЯ К WEB-СЕРВИСУ В СИСТЕМЕ «1С:ПРЕДПРИЯТИЕ»
  Шаг 1.  Создадим новую внешнюю обработку с именем «WEB_Service»
  Шаг 2.   Для обработки определим новую форму
  Шаг 3.   У формы укажем несколько реквизитов
  Клиент – тип «Строка»
  КлиентВозврат - тип «Строка»
  НомерВозврат - тип «Строка»
  СтатусВозврат - тип «Строка».
  Выведем реквизиты на форму.
 
  Шаг 4.  Добавим команду формы «ПолучитьДанные»
  Укажем обработчик команды
&НаКлиенте
Процедура ПолучитьДанные(Команда)
    ПолучитьДанныеНаСервере(Клиент);
КонецПроцедуры
 
Процедура ПолучитьДанныеНаСервере(Клиент)
    // Создать WS-прокси на основании ссылки и выполнить операцию Получить()
    Определение = Новый WSОпределения("http://192.168.1.76/WEB_Service/ws/request.1cws?wsdl");
    
    Прокси = Новый WSПрокси(Определение, "http://192.168.1.76/request", "DocumentsData", "DocumentsDataSoap");       
            
    ДанныеЗаявки = Прокси.GetData(Клиент);
    Если ДанныеЗаявки = Неопределено Тогда
         КлиентВозврат = "Неопределено";
         СтатусВозврат = "Неопределено";
         НомерВозврат  = "Неопределено";
         Возврат;
    КонецЕсли;
            
    КлиентВозврат = ДанныеЗаявки.Сustomer.Name;
    СтатусВозврат = ДанныеЗаявки.Status;
    НомерВозврат  = ДанныеЗаявки.Numder;

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

РАЗДЕЛ IV
ОТЛАДКА WEB-СЕРВИСОВ В СИСТЕМЕ «1С:ПРЕДПРИЯТИЕ»
Для локального web-сервиса необходимо:
  Шаг 1.  Положить на клиент, где запускается система 1С файлик webservicecfg.xml со следующим содержимом
<config xmlns="http://v8.1c.ru/v8/webservicecfg">
     <debugconfig debug="true">
</config> 
  Шаг 2.   В файл default.vrd публикации конфигурации добавить строку
<debug enable= «true» url=»tcp://localhost» />
  Шаг 3.   В конфигураторе выбрать пункт меню
«Отладка» → «Подключение» → «Автоматическое подключение» → «Web-сервисы на сервере»
  Шаг 4.    Нажать на кнопку «OK»
Для серверного варианта надо еще сервер 1с запускать в режим отладки с ключом /debug

Оригинал: http://catalog.mista.ru

понедельник, 13 марта 2017 г.

Загрузка файлов: выбор на клиенте, обработка на сервере

Загрузка файлов: выбор на клиенте, обработка на сервере

Приведенный ниже код иллюстрирует работу с файлом типа "xlsx". Работа ведется из управляемой формы:
  • пользователь выбирает файл;
  • файл помещается в временное хранилище, и становится доступен на сервере в виде двоичных данных;
  • производится запись двоичных данных в временный файл на сервере, с проверкой: если запись временного файла занимает более 30 секунд, пользователь получит уведомление о прерывании загрузки.
// Выбор загружаемого файла, заполнение служебного реквизита формы "АдресФайлаВВременномХранилище"
//
//Возвращаемое значение:
// Булево - Истина при успешном выборе файла
//
&НаКлиенте
Функция ПроизведенУспешныйВыборФайла()
    
    ЭтаФорма.АдресФайлаВВременномХранилище = "";
    
    #Если ВебКлиент Тогда
        
        Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда
            УстановитьРасширениеРаботыСФайлами();
            ПодключитьРасширениеРаботыСФайлами();
        КонецЕсли;
        
        ПоместитьФайл(ЭтаФорма.АдресФайлаВВременномХранилище);
        
    #Иначе
        
        ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        
        ДиалогФыбораФайла.Фильтр = "Таблица(*.xlsx)|*.xlsx";
        ДиалогФыбораФайла.Заголовок = "Выберите файл";
        ДиалогФыбораФайла.ПредварительныйПросмотр = Ложь;
        ДиалогФыбораФайла.Расширение = "xlsx";
        ДиалогФыбораФайла.МножественныйВыбор = Ложь;
        
        Если ДиалогФыбораФайла.Выбрать() Тогда
            ФайлЗагрузки = ДиалогФыбораФайла.ПолноеИмяФайла;
        Иначе
            Возврат Ложь;
        КонецЕсли;
        
        ЭтаФорма.АдресФайлаВВременномХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ДиалогФыбораФайла.ПолноеИмяФайла));
        
    #КонецЕсли
    
    Возврат НЕ ПустаяСтрока(ЭтаФорма.АдресФайлаВВременномХранилище); 
    
КонецФункции
        
Пример использования:
//...        
&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
    
    Если ПроизведенУспешныйВыборФайла() Тогда
        ВыполнитьЗагрузкуФайлаНаСервере(); 
    КонецЕсли; 
    
КонецПроцедуры

//...
&НаСервере
Процедура ВыполнитьЗагрузкуФайлаНаСервере()
    
    АдресВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
    
    // Запись двоичных данных из вр. хранилища:
    ДвДанные = ПолучитьИзВременногоХранилища(ЭтаФорма.АдресФайлаВВременномХранилище);

    Если ЗаписьФайлаПроизошлаУспешно(ДвДанные, АдресВременногоФайла) Тогда // см. ниже "Проверка записи файла
        // обработка данных файла...    
    Иначе
        ЛОГ("загрузка прервана на сервере - файл """+ АдресВременногоФайла +""" не обнаружен...");
    КонецЕсли;     
    
КонецПроцедуры
//...

Оригинал: infostart

среда, 15 февраля 2017 г.

HTTP-сервисы для тех, кто ничего не понимает в WEB

Если вы ничего не понимаете в WEB технологиях и такие слова, как json, get, post и прочее для вас ничего не значат и вы просто заядлый 1С-ник до мозга костей, но вам кровь из носу надо подружить 1С со сторонними приложениями или сайтом, то эта статья для вас
Начну с того, что когда-то я был вынужден самостоятельно разбираться с Web-сервисами. Тогда как-то потихоньку мне удалось освоить это дело и понять, что и куда надо нажать, чтобы все заработало. Благо конфигурация, с которой пришлось работать, уже была напичкана Web-сервисами и можно было подглядеть и сделать по аналогии, а также в интернете мне удалось найти достаточно статей по этому делу. И так, на примерах (для меня это лучший способ изучения), я освоил это дело, и теперь меня они уже не пугают.
После обновления платформы до версии 8.3 мне стало интересно попробовать новые технологии - те самые HTTP-сервисы. Тут уже воспользоваться моим любимым методом - подглядеть, как было сделано раньше, - мне не удалось - объект новый. Полистав интернет, я нашел пару статей самой фирмы 1С и чуток сторонних статей, в которых какая-то информация есть, но написана сложновато (для простого тупого 1С-ника). В итоге на своем опыте, методом проб и ошибок, я чуток приблизился к осознанию, что это за зверь, и хочу поделиться информацией с вами (может, кому-то поможет быстренько что-нибудь сделать, когда горит).
ИТАК. Основной задачей любой интеграции, будь то КД, Web-сервисы или HTTP-сервисы, является что-нибудь откуда-нибудь передать, что-нибудь с этим сделать и вернуть ответ. Вот в таком формате мы и рассмотрим новую технологию.
В дереве метаданных HTTP-сервисы располагаются в ветке Общие: 
Добавляется новый HTTP-сервис точно так же, как и любой другой объект метаданных. Имя и синоним как хотите. Тут важен только "Корневой URL" - это, собственно, и есть идентификатор HTTP-сервиса в данной базе, т.е. именно то, что вы напишете в этом свойстве, вы передадите стороннему разработчику (ну или себе) в качестве ссылки на сервис.
Уж не знаю, можно ли тут писать кириллицей, но чтобы вас в прогрессивном мире не засмеяли, пишите латиницей). 
Дальше переходим на закладку Шаблоны URL и добавляем новый шаблон.
Тут важно само свойство Шаблон:
С помощью шаблона вы впоследствии сможете обратить к тем данным, которые вам передали. ИТАК: все данные, которые вы хотите получить извне, можно разделить на 2 блока - обязательные и не обязательные.
Обязательные данные/параметры запихиваем в шаблон, тем самым если тот, кто обращается к сервису, их не заполнил, то сервис априори выдаст ошибку, а вы при разработке текста модуля обработчика будете уверены, что эти данные есть. Как это делается: в строке Шаблон в фигурных скобках "{}", чередуя с со знаком "/", пишем имена переменных. Например, нам обязательно нужен артикул - тогда пишем /{artikul}. Если нам надо получить артикул, имя и имя пользователя, строка шаблона будет выглядеть так: /{artikul}/{name}/{user} и т.д. Каждый из таких параметров в тексте модуля обработчика можно будет получить так: Запрос.ПараметрыURL["<имя параметра>"]. Если обязательных нет, то шаблон выглядит так: /*.
Не обязательные данные, которые мы хотим получать через сервис, в шаблоне НЕ описываются. При построении ссылки, для обращения к сервису они описываются в конце ссылки после знака "?", разделяются символом амперсанда "&" и имеют структуру <имя параметра>=<значение параметра>. В тексте модуля обработчика к ним можно обратиться конструкцией: Запрос.ПараметрыЗапроса.Получить("<имя параметра>"). НО: важно помнить, раз они не обязательны, то их может и не быть, соответственно значение проверяем на Неопределено.
Далее добавляем новый метод для нашего шаблона. Тут важно свойство HTTP-метод. Их тут огромное количество, НО мы не будем вдаваться во все тонкости. Для реализации любой вашей задачи вам нужны только 2: GET и POST.
Как выбрать: Если того, что мы с вами описали в двух предыдущих абзацах, для работы вам достаточно, т.е. все нужные вам данные вы сможете получить с помощью обязательных и не обязательных параметров самого запроса, то берем GET. В этом случае в любом браузере, если вы правильно введете адресную строку, вы увидите результат действия своего HTTP-сервиса - ПРОФИТ! Если вдруг для работы вашего сервиса нужны данные в более сложном виде (xml например, или еще чего), то, что нельзя запихнуть в простую адресную строку, то берем POST. Из минусов такая легкая проверка через адресную строку браузера, как с GET, не прокатит, но на просторах интернета легко можно найти какие-нибудь сайты, на которых можно проверить сервисы методом POST (например, сайт https://www.hurl.it). В случае, если выбран метод POST, то у запроса помимо URL (адреса) появляется тело, в которое можно запихнуть все, что угодно, а в обработчике метода обратиться к нему через конструкцию Запрос.ПолучитьТелоКакСтроку(). У любого шаблона может быть как GET метод, так и POST. У них будут соответственно разные обработчики, а 1С-ка в зависимости от того, как был отправлен запрос, будет выбирать тот или иной метод.
Обработчик HTTP-сервиса - это функция, которая всегда возвращает значение типа HTTPСервисОтвет, который строится конструктором Новый HTTPСервисОтвет(<КодСостояния>). <КодСостояния> - это число, чтобы не мучаться с выбором что писать, пишем: 200 - если все хорошо и вы возвращаете какое то логичное значение, 400 - если ошибка и вы возврщаете описание ошибки. У данного типа есть различные методы (можно почитать в синтакс помошнике, там все понятно написано). Опять же, всегда можно вернуть все что нужно в виде строки - метод УстановитьТелоИзСтроки(). (одна небольшая хитрость: если вы возвращаете html и хотите чтобы браузер при вводе в адресную строку адреса вашего сервиса на экране красиво отобразил его, в свойстве ответ Заголовки напишите: Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8") - тем самым вы укажите, что это не просто набор символов, а HTML и его надо показать соответствующе)
После того как вы все сделаете, HTTP-сервис надо опубликовать. Делается это на компьютере с установленным веб-сервером (про настройки писать не буду, есть полно статей) через меню:
Администрирование - Публикация на веб сервере.
Там закладка HTTP-сервисы. Ставим галки и нажимаем "Опубликовать"
Ну и, наконец, еще раз в картинках))):

Оригинал: infostart.ru

Недокументированное использование стандартных обработок из меню "Все функции"

Рассмотрены возможности произвольного использования стандартных функций, вызываемых из меню платформы "Все функции" - "Стандартные" (Активные пользователи, Журнал регистрации, Поиск ссылок на объект, Проведение документов ...).
В платформе 1С предприятие есть очень удобные стандартные функции:
1. Активные пользователи;
2. Журнал регистрации;
3. Поиск ссылок на объект;
4. Проведение документов;
5. Удаление помеченных объектов;
6. Управление внешними источниками данных;
7. Управление итогами;
8. Управление полнотекстовым поиском;
9. Управление расширениями конфигурации;
Однако нигде не описаны варианты их использования кроме вызова из пункта "Все функции" главного меню. Поэтому иногда встречается мнение, что эти функции являются чем-то специфичным и сложным, что они вообще написаны не на 1С, а на С++ как и сама платформа. 
На самом деле технически эти функции являются самыми обычными 1С обработками, включенными в состав платформы, и ими можно пользоваться полностью аналогично любым другим привычным обработкам.
Рассмотрим несколько способов их использования на примере стандартной обработки "Поиск ссылок на объекты".
1. Вызов стандартной обработки из любого пункта меню. Обработка "Поиск ссылок на объекты" достаточно удобна и может пригодиться обычным пользователям. Однако не всегда возможно давать им доступ к меню "Все функции" из-за ограниченного уровня доступа пользователя. В этом случае можно добавить вызов обработки из стандартного меню.
Добавляем в конфигурацию новую команду и в модуле команды прописываем текст:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ПодключитьВнешнююОбработкуНаСервере();
    ОткрытьФорму("ВнешняяОбработка.StandardFindByRef.Форма");
КонецПроцедуры

&НаСервере
Процедура ПодключитьВнешнююОбработкуНаСервере()
    ВнешниеОбработки.Подключить("v8res://mngbase/StandardFindByRef.epf", "StandardFindByRef", false);
КонецПроцедуры
При выборе этой команды у пользователя запустится обработка "Поиск ссылок на объекты" из обычного меню. 
2. Подмена стандартной обработки. Допустим, по какой-то причине нас не устраивает стандартная обработка. В этом случае мы можем ее подменить любой другой. Выполняем на сервере следующий код (например в "ПриЗапуске()" конфигурации) и после этого из стандартного меню "Все функции" - "Поиск ссылок на объект" будет вызываться наша собственная внешняя либо встроенная в конфигурацию обработка. 
    ДвоичныеДанные = Новый ДвоичныеДанные("C:\ВнешняяОбработка.epf");
    АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные); 
    ВнешниеОбработки.Подключить(АдресХранилища, "StandardFindByRef", false);

3. Изменение стандартной обработки. Стандартные обработки очень удобны, однако иногда в них не хватает какой-то мелочи. Например, нам может понадобиться добавить в обработку "Поиск ссылок на объект" фильтр для поиска только по документам. Можно, конечно, написать такую же обработку самостоятельно, а можно просто взять встроенную и немного изменить. Чтобы получить встроенную в виде отдельно файла, выполняем код:
КопироватьФайл("v8res://mngbase/StandardFindByRef.epf","C:\ВнешняяОбработка.epf");
Теперь у нас есть стандартный 1С-ный файл "C:\ВнешняяОбработка.epf" с встроенной обработкой. Его можно открыть в конфигураторе и внести любые нужные изменения. В дальнейшем модифицированную обработку можно использовать просто как внешнюю либо подключить обратно вместо встроеной.
Ну и напоследок соответствие стандартных обработок внутренним адресам платформы.
1. Активные пользователи - "v8res://mngbase/StandardActiveUsers.epf";
2. Журнал регистрации - "v8res://mngbase/StandardEventLog.epf";
3. Поиск ссылок на объект - "v8res://mngbase/StandardFindByRef.epf";
4. Проведение документов - "v8res://mngbase/StandardDocumentsPosting.epf";
5. Удаление помеченных объектов - "v8res://mngbase/StandardDeleteMarkedObjects.epf";
6. Управление внешними источниками данных - "v8res://mngbase/StandardExternalDataSourcesManagement.epf";
7. Управление итогами - "v8res://mngbase/StandardTotalsManagement.epf";
8. Управление полнотекстовым поиском - "v8res://mngbase/StandardFullTextSearchManagement.epf";
9. Управление расширениями конфигурации - "v8res://mngbase/StandardExtensionsManagement.epf";
И еще одна обработочка. Не входит в стандартные, но тоже полезна для ознакомления.
10. Конструктор запросов на управляемых формах - "v8res://mngbase/QueryWizard.epf";
Не стоит забывать, что такое использование стандартных функций является недокументированным. Т.е. на текущий момент на платформах 8.2 - 8.3.6 такие варианты вызовов работают вполне корректно. Но могут перестать работать в любой момент, поэтому злоупотреблять ими не стоит. 
Также стоит учитывать, что в официальных материалах по 1С не документирована возможность простого изменения этих обработок не случайно. Встроенные обработки разрабатываются с учетом функционала текущей платформы. Т.е. они учитывают особенности работы и ограничения той платформы, в состав которой включены. В каких-то случаях, при использовании обработки от другой платформы, могут быть ошибки. Особенно в сложных режимах, например, при удалении документов, управлении итогами или восстановлении последовательностей. Так что использовать эти обработки следует аккуратно, оценивая возможные риски.

Оригинал: infostart.ru

вторник, 14 февраля 2017 г.

Сериализация XDTO (пример)

Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\XDTOSample.xml");
ВалютаОбъект = Валюта.ПолучитьОбъект();
Сериализатор.ЗаписатьXML(Запись, ВалютаОбъект);
Запись.Закрыть();


//Запись
СсылкаНаЭлементСправочника = Справочники.Номенклатура.НайтиПоКоду("0000001");
// Создать сериализатор XDTO для глобальной фабрики XDTO
НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
// Создать объект записи XML и открыть файл
НоваяЗаписьXML = Новый ЗаписьXML;
НоваяЗаписьXML.ОткрытьФайл("D:/Exchange.xml");
// Сериализовать ссылку в XML
НовыйСериализаторXDTO.ЗаписатьXML(НоваяЗаписьXML,СсылкаНаЭлементСправочника, НазначениеТипаXML.Явное);


//Чтение
// Создаь сериализатор XDTO для глобальной фабрики XDTO
НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
// Прочитать данные объекта XDTO из файла XML
НовоеЧтениеXML = Новый ЧтениеXML;
НовоеЧтениеXML.ОткрытьФайл("D:/Exchange.xml");
// Сериализовать ссылку из XML
НоваяСсылкаСправочник = НовыйСериализаторXDTO.ПрочитатьXML(НовоеЧтениеXML)