Универсальная функция — Сформировать результат СКД



Предлагаемая функция СформироватьРезультатСКД позволяет программисту комфортно применять систему компоновки данных для обработки информации текущей или внешней базы. Функцию целесообразно размещать в общем модуле или в расширении конфигурации на управляемых формах.

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

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

Предлагаемая функция, назовём её СформироватьРезультатСКД, одинаково работает как в обычном, так и в управляемом приложениях.

Предлагаемая универсальная функция «СформироватьРезультатСКД», преследует только одну цель – повысить удобство применения СКД при программной обработке данных, в том числе, полученных из внешней базы. 

 

Описание универсальной функции.

СформироватьРезультатСКД(), версия 2.8.05

Синтаксис:

СформироватьРезультатСКД(<СтруктураПараметрыЗапускаСКД>)

Параметры:

<СтруктураПараметрыЗапускаСКД> (обязательный)

Тип: Структура.

Задает настройки и параметры запуска системы компоновки данных: ключ структуры определяет имя параметраЗапускаСКД, а значение структуры — значение параметраЗапускаСКД. Порядок объявления ключей в структуре несущественен. 

Ключи и значения структуры (СтруктураПараметрыЗапускаСКД).

ключ1 = "АдресРезультатаСКД", тип:строка. (Необязательный).

Значение1, тип:Строка.

Адрес временного хранилища, в которое будет помещен результат работы системы компоновки данных.

Наличие или отсутствие ключа1 определяет тип возвращаемого значения. Если ключ1 отсутствует, то будет возвращён сам РезультатСКД.

 

ключ2 = "АдресМакетаСКД", тип:строка. (обязательный) 

Значение2, тип: Строка.

Адрес временного хранилища, в которое помещен макет схемы компоновки данных (Тип:СхемаКомпоновкиДанных). 

 

ключ3 = "НастройкиСКД", тип:Строка. (необязательный).

Значение3= тип:Строка, НастройкиКомпоновкиДанных.

а) Если значение3 равно Имени вариантаСКД (строка), указанному на странице настроек схемыСКД, тогда РезультатСКД будет получен с настройками по умолчанию указанного вариантаСКД.

б) Если значение3 равно текущим настройкам (КомпоновщикНастроек.Настройки), то с этими настройками будет получен РезультатСКД.   

с) Если значение3 не указано, то РезультатСКД будет получен с настройками по умолчанию основного вариантаСКД.     

 

ключ4 = "ПараметрыСКД", тип:Строка

Значение4, тип:Структура. Структура4 содержит параметры схемы компоновки данных, указанные на странице параметров.

Структура4.Ключ = Имя параметра, как оно задано в схеме компоновки данных.

Структура4.Значение = Значение параметра.

 

ключ5 = "СтрокаСоединения", тип:Строка. (необязательный).

Значение5, тип:Строка. Строка соединения с внешней базой.   Если СтрокаСоединения не указана, то источником данных считается текущая база.

 

Ключ6 = "РезультатСКДТип", тип:Строка. (необязательный).

Значение6 = Тип:Строка,ТабличныйДокумент, ТаблицаЗначений,  ДеревоЗначений, ДанныеФормыКоллекция, ДанныеФормыДерево. 

Задает тип результатаСКД. 

Обрабатываются следующие значения строки: «ТабличныйДокумент», «ТабДок», «ТаблицаЗначений», «ТЗ» и «ДеревоЗначений», «ДЗ». Другие значения строки будут интерпретироваться как «ТабличныйДокумент».

Если ключ6 не указан, то будет возвращён результатСКД типа ТабличныйДокумент.

 

Ключ7 = «ВнешниеНаборыДанныхСКД».  Тип:Строка. (необязательный)

Значение7 = Тип:строка, структура.

а) Строка соединения с Внешней информационной базой 1С:Предприятие обеспечивает Com соединение с внешней базой.

б) Структура обеспечивает Web соединение с внешней базой.

Значение7структура.Ключ1=URLОписанияWebСервиса Значение7структура.Значение1=URLОписанияWebСервиса 

 

Ключ8 = «ПроверитьНаличие».  Тип:Строка (необязательный)

Значени8, тип Булево.

Используется для определения варианта местоположения ОбщегоМодуляСКД.

Допустимы два варианта:

А) Конфигурация.ОбщиеМодули.ОбщегоНазначенияСКД. (рекомендуется)

Б) ВнешнийОтчет.ОбщийМодуль.ОбщегоНазначенияСКД

 

Ключ9 = «ПроверятьДоступностьПолей».  Тип:Строка (необязательный)

Значение9, тип Булево. 

Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
Значение по умолчанию:
Истина
.

 

Ключ10 = «ПараметрыФункциональныхОпций».  Тип:Строка (необязательный)

Значение10, тип Структура.

Содержит параметры функциональных опций, используемые при исполнении отчета.

 

Ключ11= «ВозможностьПрерыванияПользователем». Тип:Строка (необязательный).

Значени11, тип Булево.

Указывает, может ли пользователь прервать вывод при помощи комбинации клавиш Ctrl + Break.
Значение по умолчанию:
Истина
.

 

Ключ12= «ОбщиеФормулы». Тип:Строка (необязательный).

Значени12, тип Булево.

Указывает, может ли пользователь вызывать функции из общего модуля.
Значение по умолчанию:
Истина
.

 

 

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

Тип: Строка, Структура, ТабличныйДокумент, ТаблицаЗначений, ДеревоЗначений.

А) Если тип — строка, то возвращен адрес временного хранилища, в котором размещен результат СКД.

Возвращаемое значение помещается во временное хранилище по адресу "АдресРезультатаСКД".

Б) Если тип – структура, то используются два ключа:

 Ключ1= «РезультатСКД»,

Ключ2= «ДанныеРасшифровки»

Вариант 1 возвращаемого значения типа Структура.

значение1 =  Тип:ТабличныйДокумент

значение2 = Тип:ДанныеРасшифровкиКомпоновкиДанных

 

Вариант 2 для тонкого клиента возвращаемого значения типа Структура,

Значение1 = Тип:ТабличныйДокумент

Значение2 = Неопределено

 

Вариант 3 возвращаемого значения – тип:Структура.

Значение1 = Тип:ТаблицаЗначений

Значение2 = Неопределено

 

Вариант 4 возвращаемого значения – тип:Структура.

Значение1 = Тип:ДеревоЗначений

Значение2 = Неопределено

 

Вариант 5 возвращаемого значения — тип:ТабличныйДокумент

 

Вариант 6 возвращаемого значения -тип:ТаблицаЗначений

 

Вариант 7 возвращаемого значения -тип:ДеревоЗначений

 

 

Описание:

Возвращает структуру, содержащую результат работы Системы компоновки данных (РезультатСКД) и ДанныеРасшифровки. Тип РезультатаСКД может быть ТабличныйДокумент,  ТаблицаЗначений или ДеревоЗначений.

Примечание. Возвращаемое значение может быть помещено во временное хранилище по адресу "АдресРезультатаСКД".

Доступность:

Сервер, Толстый клиент, тонкий клиент

Примечание:

  1.        Функция может быть размещена либо в общем модуле конфигурации (рекомендуется), либо в расширении конфигурации, либо в модуле внешнего отчета.
  2.       Для упрощения изучения функции, к данной разработке приложена блок-схема действий программиста, принявшего решение использовать функцию. Блок-схема вызывается кнопкой.
  3.         Функция состоит из трех модулей «ОбщегоНазначенияСКД» ,  «ФункцииДляОтчетовСерверСКД» и «ФункцииДляОтчетовСКД».
  4.        Для обеспечения чтения внешней базы, во внешней базе следует разместить процедуры «ФункцииДляОтчетовСерверСКД» и «ФункцииДляОтчетовСКД».

Использованный здесь алгоритм чтения внешней базы через Com соединение опубликован в книге «Разработка сложных отчетов в 1С:Предприятии 8»  автора Е.Ю.Хрусталева.  

  1.         В управляемом приложение данную функцию следует использовать в паре с другой универсальной функцией «СоздатьКолонкиНаУправляемойФорме» //infostart.ru/public/547849/

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

 

 

Озвучка демонстрационного примера.

(При разночтении озвученного текста и написанного, правильным следует считать текст написанный).

Начинается демонстрация использования универсальной функции СформироватьРезультатСКД.

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

  1.        обычного приложения,
  2.       тонкого клиента управляемого приложения
  3.        для Com соединения с внешней базой

Чтобы доставить себе удовольствие от работы с этой функцией, рекомендую разместить её в трёх общих модулях конфигурации. Например, «ОбщегоНазначенияСКД» ,  «ФункцииДляОтчетовСерверСКД» и «ФункцииДляОтчетовСКД».

Также, эти модули можно разместить в расширении конфигурации.

Оба варианты представлены в программном коде.

Для обеспечения чтения внешней базы, во внешней базе следует разместить процедуры «ФункцииДляОтчетовСерверСКД» и «ФункцииДляОтчетовСКД».

 

40 сек.

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

 

 Запускаем 1С:Предприятие в двух режимах.

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

Б) Тонкий клиент управляемого приложения

 

И демонстрируем использование функции в каждом режиме.

 

А) Демонстрируем Обычный режим.

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

В этой разработке предложены удобные шаблоны вызова функции как в обычном приложении, так и в управляемом.

Видим, что в тексте шаблонов присутствуют все параметры настроек.

Наличие закомментированных настроек снизит трудозатраты программиста на их активацию.

В этом примере ввод настроек немного автоматизирован на мышку.    

 

1мин.40сек

Подключим внешнюю базу данных и продолжим демонстрацию.

Формирование строки Com соединения выполним на странице «Настройка внешней базы».

Напоминаю, что во внешней базе следует разместить процедуры «ФункцииДляОтчетовСерверСКД» и «ФункцииДляОтчетовСКД».

Использованный здесь алгоритм чтения внешней базы через Com соединение опубликован в книге «Разработка сложных отчетов в 1С:Предприятии 8»  автора Е.Ю.Хрусталевой.  

 

2мин.40сек

Б) В тонком клиенте повторим все варианты вызова универсальной функции.

Примечание. В управляемом приложение данную функцию следует использовать в паре с другой универсальной функцией «СоздатьКолонкиНаУправляемойФорме» //infostart.ru/public/547849/

На управляемой форме повторим те же варианты настроек, но без конфигуратора.

Поочередно получим табличный документ, дерево значений и таблицу значений.

3 мин. 30 сек.

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

 

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

Желаю удачи всем и каждому.

Функция СформироватьРезультатСКД( цСтруктураЗапускаСКД)  Экспорт

         Перем цАдресРезультатаСКД,цАдресМакетаСКД, цАдресДанныхРасшифровкиСКД;

         Перем цПараметрыСКД, цВариантСКД, цРезультатСКДТип, цНастройки, цОбщиеФормулы;

         Перем цСтрокаСоединения , цВнешниеНаборыДанныхСКД, цВариантБазыВнешнегоСоединения;//, ФлагЭтоТонкийКлиент;

         Перем цПроверитьНаличиеЭтойФункции, цДанныеРасшифровки;

         Перем цПроверятьДоступностьПолей, цПараметрыФункциональныхОпций, цВозможностьПрерыванияПользователем;

        

        

         ФлагПроверитьНаличиеЭтойФункции = цСтруктураЗапускаСКД.Свойство("ПроверитьНаличие",цПроверитьНаличиеЭтойФункции);

         Если ФлагПроверитьНаличиеЭтойФункции Тогда

                 Возврат  Истина;//Есть эта универсальная функция в глобальном модуле

         КонецЕсли;      

        

         цУпрОбыч =ТекущийРежимЗапуска();

        

         ФлагЕстьАдресРезультатаСКД = цСтруктураЗапускаСКД.Свойство("АдресРезультатаСКД",цАдресРезультатаСКД);

         Если ФлагЕстьАдресРезультатаСКД Тогда

                 Если не ЗначениеЗаполнено(цАдресРезультатаСКД) Тогда

                          ФлагЕстьАдресРезультатаСКД = Ложь;

                 ИначеЕсли ЭтоАдресВременногоХранилища(цАдресРезультатаСКД) Тогда

                          УдалитьИзВременногоХранилища(цАдресРезультатаСКД);

                 Иначе

                          цАдресРезультатаСКД = Новый УникальныйИдентификатор  ;

                 КонецЕсли;

         КонецЕсли;

        

         ФлагЕстьАдресДанныхРасшифровкиСКД = цСтруктураЗапускаСКД.Свойство("АдресДанныхРасшифровкиСКД",цАдресДанныхРасшифровкиСКД);

         Если ФлагЕстьАдресДанныхРасшифровкиСКД Тогда

                 Если ЭтоАдресВременногоХранилища(цАдресДанныхРасшифровкиСКД) Тогда

                          УдалитьИзВременногоХранилища(цАдресДанныхРасшифровкиСКД);  

                 Иначе

                          цАдресДанныхРасшифровкиСКД = Новый УникальныйИдентификатор  ;

                 КонецЕсли;

         КонецЕсли;

        

         ФлагЕстьАдресМакетаСКД = цСтруктураЗапускаСКД.Свойство("АдресМакетаСКД",цАдресМакетаСКД);

         Если ФлагЕстьАдресМакетаСКД

                 И ЭтоАдресВременногоХранилища(цАдресМакетаСКД) Тогда

                 цСхемаКомпоновкиДанных = ПолучитьИзВременногоХранилищаСКД(цАдресМакетаСКД);

         Иначе   

                 Сообщение = Новый СообщениеПользователю;

                 Сообщение.Текст = "не указан макет СКД";

                 //Сообщение.Поле = "";

                 Сообщение.Сообщить();

         КонецЕсли;

        

         ФлагНастройкиСКД = цСтруктураЗапускаСКД.Свойство("НастройкиСКД",цНастройки);

         Если ФлагНастройкиСКД Тогда

                 Если ТипЗнч(цНастройки) = тип("Строка") Тогда //ИмяВариантаНастройки

                          цВариантСКД = цНастройки;

                          цНастройки = цСхемаКомпоновкиДанных.ВариантыНастроек[цВариантСКД].Настройки;

                 ИначеЕсли ТипЗнч(цНастройки) = тип("НастройкиКомпоновкиДанных") Тогда   //ТекущаяНастройка

                          //Ok

                 ИначеЕсли цНастройки = Неопределено Тогда

                          цНастройки = цСхемаКомпоновкиДанных.НастройкиПоУмолчанию;

                 Иначе

                          Сообщение = Новый СообщениеПользователю;

                          Сообщение.Текст = "нет настройки СКД";

                          //Сообщение.Поле = "";

                          Сообщение.Сообщить(); 

                 КонецЕсли;

         Иначе

                 цНастройки = цСхемаКомпоновкиДанных.НастройкиПоУмолчанию;

         КонецЕсли;               

 

         ФлагПроверятьДоступностьПолейСКД = цСтруктураЗапускаСКД.Свойство("ПроверятьДоступностьПолей",цПроверятьДоступностьПолей);     

         Если не ФлагПроверятьДоступностьПолейСКД Тогда

                 цПроверятьДоступностьПолей=Истина;

         КонецЕсли;

        

         ФлагПараметрыФункциональныхОпцийСКД = цСтруктураЗапускаСКД.Свойство("ПараметрыФункциональныхОпций",цПараметрыФункциональныхОпций);              

         Если не ФлагПроверятьДоступностьПолейСКД Тогда

                 цПараметрыФункциональныхОпций=Неопределено;

         КонецЕсли;

        

  ФлагВозможностьПрерыванияПользователемСКД = цСтруктураЗапускаСКД.Свойство("ВозможностьПрерыванияПользователем",цВозможностьПрерыванияПользователем);       

         Если не ФлагВозможностьПрерыванияПользователемСКД Тогда

                 цВозможностьПрерыванияПользователем=Истина;

         КонецЕсли;

        

         ///// определим тип РезультатаСКД

         флагТабДок = Ложь ;

         ФлагТЗ = Ложь;

         ФлагДЗ = Ложь;

        

         ФлагЕстьРезультатСКДТип = цСтруктураЗапускаСКД.Свойство("РезультатСКДТип",цРезультатСКДТип);

         Если ФлагЕстьРезультатСКДТип Тогда  //определимТипВозвращаемыхДанных

                 Если ТипЗнч(цРезультатСКДТип) = тип("Строка") Тогда

                          флагТабДок = (ВРег(цРезультатСКДТип) = ВРег("ТабличныйДокумент")

                          ИЛИ ВРег(цРезультатСКДТип) = ВРег("ТабДок" ));

                          ФлагТЗ     = (ВРег(цРезультатСКДТип) = ВРег("ТаблицаЗначений")

                          ИЛИ ВРег(цРезультатСКДТип) = ВРег("ТЗ")) ;

                          ФлагДЗ     = (ВРег(цРезультатСКДТип) = ВРег("ДеревоЗначений")

                          ИЛИ ВРег(цРезультатСКДТип) = ВРег("ДЗ")) ;

                 Иначе

                          флагТабДок = (ТипЗнч(цРезультатСКДТип) = тип("ТабличныйДокумент"));

                          ФлагТЗ     = (ТипЗнч(цРезультатСКДТип) = тип("ТаблицаЗначений"))

                          ИЛИ (ТипЗнч(цРезультатСКДТип) = тип("ДанныеФормыКоллекция")) ;

                          ФлагДЗ     = (ТипЗнч(цРезультатСКДТип) = тип("ДеревоЗначений"))

                          ИЛИ (ТипЗнч(цРезультатСКДТип) = тип("ДанныеФормыДерево")) ;

                         

                 КонецЕсли;

         КонецЕсли;               

        

         Если (флагТабДок или ФлагТЗ или ФлагДЗ )=Ложь Тогда

                 флагТабДок = Истина;

         КонецЕсли;

        

         ФлагЕстьВнешниеНаборыДанныхСКД = цСтруктураЗапускаСКД.Свойство("ВнешниеНаборыДанныхСКД",цВнешниеНаборыДанныхСКД);   

         Если ФлагЕстьВнешниеНаборыДанныхСКД Тогда

                 Если Не ТипЗнч(цВнешниеНаборыДанныхСКД)=Тип("Структура") Тогда

                          ФлагЕстьВнешниеНаборыДанныхСКД = Ложь;

                          Сообщение = Новый СообщениеПользователю;

                          Сообщение.Текст = "предложены не правильные внешние данные: "+цВнешниеНаборыДанныхСКД;

                          //Сообщение.Поле = "";

                          //Сообщение.УстановитьДанные();

                          Сообщение.Сообщить();

                 КонецЕсли;

         КонецЕсли;

        

         ФлагЕстьобщиеФормулы = цСтруктураЗапускаСКД.Свойство("ОбщиеФормулы",цОбщиеФормулы );

         Если НЕ ФлагЕстьобщиеФормулы Тогда

                 цОбщиеФормулы = Истина;

         КонецЕсли;

        

         ФлагПараметрыСКД = цСтруктураЗапускаСКД.Свойство("ПараметрыСКД",цПараметрыСКД);

         Если ФлагПараметрыСКД Тогда

                 Для каждого цЭлем  Из цПараметрыСКД Цикл

                          Попытка

                                   цНастройки.ПараметрыДанных.УстановитьЗначениеПараметра(цЭлем.Ключ, цЭлем.Значение);  //

                          Исключение                                                

                                   цОш = ОписаниеОшибки();                               

                                   сооб= Новый СообщениеПользователю;

                                   сооб.Текст = цОш+ ": "+цЭлем.Ключ+ " = "+цЭлем.Значение;

                                   сооб.Сообщить();

                          КонецПопытки;

                 КонецЦикла;

         КонецЕсли;

        

         ФлагСтрокаСоединенияСКД = цСтруктураЗапускаСКД.Свойство("СтрокаСоединения",цСтрокаСоединения);

         ФлагСоединенияWEB = Ложь;

         Если ФлагСтрокаСоединенияСКД Тогда

                 Если НЕ ЗначениеЗаполнено(цСтрокаСоединения) Тогда

                          цСтрокаСоединения="";

                          ФлагСтрокаСоединенияСКД =Ложь;

                 ИначеЕсли ТипЗнч(цСтрокаСоединения)=Тип("Строка")  Тогда // COMсоединение

                          ФлагСтрокаСоединенияСКД = Не ПустаяСтрока(цСтрокаСоединения);

                         

                 ИначеЕсли ТипЗнч(цСтрокаСоединения)=Тип("Структура")  Тогда // WEBсоединение

                          ФлагСтрокаСоединенияСКД =Ложь;

                          ФлагСоединенияWEB = Истина;               

                 КонецЕсли;

         иначе   

                 цСтрокаСоединения="";

                 ФлагСтрокаСоединенияСКД =Ложь;

         КонецЕсли;

        

         Если ФлагТабДок   Тогда 

                 РезультатСКД = Новый ТабличныйДокумент;

         ИначеЕсли  ФлагТЗ Тогда

                 #Если не ТонкийКлиент Тогда

                          РезультатСКД = Новый ТаблицаЗначений;

                 #КонецЕсли

         ИначеЕсли ФлагДЗ Тогда

                 #Если не ТонкийКлиент Тогда

                          РезультатСКД = Новый ДеревоЗначений;       

                 #КонецЕсли

         КонецЕсли;

        

#Если Сервер Или ТолстыйКлиент Или ВнешнееСоединение Или ЭтоМобильноеПриложениеСервер Или Клиент Тогда

                 цКомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

                 цПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

                 Если ФлагТабДок  Тогда ////получим РезультатСКД       

                          цДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

                          цМакетКомпоновки = цКомпоновщикМакета.Выполнить(цСхемаКомпоновкиДанных,  цНастройки, цДанныеРасшифровки, , , цПроверятьДоступностьПолей, цПараметрыФункциональныхОпций);//СвойМакетОформления);

                         

цПроцессорКомпоновкиДанных.Инициализировать(цМакетКомпоновки, цВнешниеНаборыДанныхСКД, цДанныеРасшифровки, цОбщиеФормулы);

                          цПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

                          цПроцессорВывода.УстановитьДокумент(РезультатСКД);

                         

                          Если ФлагСоединенияWEB Тогда

                                   #Если не ТонкийКлиент Тогда

                                            ПроцессорВывода_ВывестиWEB(цПроцессорВывода ,цПроцессорКомпоновкиДанных, цМакетКомпоновки,  цДанныеРасшифровки, цСтрокаСоединения);

                                   #КонецЕсли

                          ИначеЕсли ФлагСтрокаСоединенияСКД Тогда

                                   ПроцессорВывода_ВывестиCOM(цПроцессорВывода ,цПроцессорКомпоновкиДанных, цМакетКомпоновки,  цДанныеРасшифровки, цСтруктураЗапускаСКД);

                                  

                          Иначе

                                   цПроцессорВывода.Вывести(цПроцессорКомпоновкиДанных, цВозможностьПрерыванияПользователем);

                                  

                          КонецЕсли;

                         

                          Если РезультатСКД.ВысотаТаблицы>500 Тогда

                                   РезультатСКД.ПоказатьУровеньГруппировокСтрок(0);//не обязательно

                                  

                          Иначе

                                   РезультатСКД.ПоказатьУровеньГруппировокСтрок(1);//не обязательно

                                  

                          КонецЕсли;

                         

                 ИначеЕсли ФлагТЗ ИЛИ ФлагДЗ Тогда

                         

цМакетКомпоновки = цКомпоновщикМакета.Выполнить(цСхемаКомпоновкиДанных, цНастройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"), цПроверятьДоступностьПолей, цПараметрыФункциональныхОпций);//СвойМакетОформления);

                          цПроцессорКомпоновкиДанных.Инициализировать(цМакетКомпоновки, цВнешниеНаборыДанныхСКД, , Истина);

                         

                          цПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

                          цПроцессорВывода.УстановитьОбъект(РезультатСКД);

                         

                          Если ФлагСоединенияWEB Тогда

                                   #Если не ТонкийКлиент Тогда

                                            ПроцессорВывода_ВывестиWEB(цПроцессорВывода ,цПроцессорКомпоновкиДанных, цМакетКомпоновки, , цСтрокаСоединения);

                                   #КонецЕсли

                          ИначеЕсли ФлагСтрокаСоединенияСКД Тогда

                                   ПроцессорВывода_ВывестиCOM(цПроцессорВывода ,цПроцессорКомпоновкиДанных, цМакетКомпоновки, , цСтруктураЗапускаСКД );

                                  

                          Иначе

                                   цПроцессорВывода.Вывести(цПроцессорКомпоновкиДанных);

                          КонецЕсли;

                          ////    

                 Иначе

                          Сообщение = Новый СообщениеПользователю;

                          Сообщение.Текст = "ай  СКД";

                          //Сообщение.Поле = "";

                          //Сообщение.УстановитьДанные();

                          Сообщение.Сообщить();

                         

                 КонецЕсли;

                

         #КонецЕсли

        

         Если ФлагЕстьАдресРезультатаСКД=Ложь Тогда

                 ВозвратРезультата = РезультатСКД; 

         Иначе

                 СтрукРезультатСКД=Новый Структура;

                 СтрукРезультатСКД.Вставить("РезультатСКД", РезультатСКД);

                 #Если не ТонкийКлиент Тогда

                          Если ФлагЕстьАдресДанныхРасшифровкиСКД Тогда

                 цАдресДанныхРасшифровкиСКД = ПоместитьВоВременноеХранилище(цДанныеРасшифровки,цАдресДанныхРасшифровкиСКД);

                                   СтрукРезультатСКД.Вставить("ДанныеРасшифровки",  цАдресДанныхРасшифровкиСКД);

                                  

                          Иначе

                                   СтрукРезультатСКД.Вставить("ДанныеРасшифровки",  цДанныеРасшифровки);

                                  

                          КонецЕсли;

                         

                 #КонецЕсли

                 ВозвратРезультата = СтрукРезультатСКД;

                

         КонецЕсли;

        

         Если ФлагЕстьАдресРезультатаСКД Тогда

                  цАдресРезультатаСКД_=ПоместитьВоВременноеХранилище(ВозвратРезультата,цАдресРезультатаСКД);

                 Возврат цАдресРезультатаСКД_;

         Иначе

                 возврат ВозвратРезультата;

         КонецЕсли;

        

КонецФункции

 

 

Примечание.

Файл УФрезультатСКД_2.zip  содержит 1Cv83.dt, 1Cv83.cf и УниверсальнаяФункцияСКД.epf

Для варианта размещения универсальной функции в глобальном модуле следует использовать 1Cv83.dt демонстрационной базы и 1Cv83.cf.

Если функцию нельзя разместить в глобальном модуле, то предложен внешний отчет  УниверсальнаяФункцияСКД.epf

Leave a Comment

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