Сложные отчеты для управляемых форм с использованием СКД: просто. На примере отчета ABC анализ номенклатуры, клиентов для УТ11

30.10.13

Разработка - СКД

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

Скачать файлы

Наименование Файл Версия Размер
ABCАнализНоменклатурыИлиКлиентов.erf
.erf 20,68Kb
191
.erf 1.007 20,68Kb 191 Скачать

Когда запрос в СКД перестает "помещаться в голове" становится слишком громоздким (ЗиУП конечно не в счетSmile) и ситуацию не получается исправить различными фичами самой СКД, то можно использовать данный метод.

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

Общая идея:

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

2. Обрабатываем полученную на первом этапе выборку используя язык программирования 1С (это обычно нагляднее чем сделать тоже самое, например, в запросе, к тому же в этом случае можно снабдить текст комментариями, не боясь того что их "проглотит" конструктор запросов).

3. Полученные на втором этапе данные - выводим при помощи другой схемы компоновки данных, используя всю (почти всю) мощь СКД в части вывода в табличный документ.

Проиллюстрируем на примере содания отчета ABC анализ номенклатуры, клиентов, уже построенного по этой методике:

1. Данные получаем при помощи СКД запросом к регистру Выручка и себестоимость продаж, будем использовать два варианта настройки (группировка по Номенклатуре и группировка по Клиентам)

2. Производим ABC анализ по методу, реализованонму в ТиС 7.7, и классическому методу ABC анализа

3. Выводим результаты используя другую СКД. 

Начнем пример:

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

Здесь намеренно используется простой (неоптимизированный) запрос:

ВЫБРАТЬ РАЗРЕШЕННЫЕ

ВИСПОбороты.КоличествоОборот КАК Количество,
ВИСПОбороты.СуммаВыручкиОборот КАК Выручка,  
ВИСПОбороты.СебестоимостьОборот + ВИСПОбороты.СуммаДополнительныхРасходовОборот КАК СебестоимостьСДР,
ВИСПОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,  
ВИСПОбороты.АналитикаУчетаНоменклатуры.Склад КАК Склад,  ВИСПОбороты.СуммаВыручкиОборот - ВИСПОбороты.СебестоимостьОборот -    ВИСПОбороты.СуммаДополнительныхРасходовОборот КАК Прибыль,  
ВЫБОР       
    КОГДА ВИСПОбороты.СебестоимостьОборот + ВИСПОбороты.СуммаДополнительныхРасходовОборот = 0 
    ТОГДА 0
    ИНАЧЕ 100 * (ВИСПОбороты.СуммаВыручкиОборот - ВИСПОбороты.СебестоимостьОборот - ВИСПОбороты.СуммаДополнительныхРасходовОборот)
    / (ВИСПОбороты.СебестоимостьОборот + 
ВИСПОбороты.СуммаДополнительныхРасходовОборот) 
    КОНЕЦ КАК Прибыльность,   ВИСПОбороты.АналитикаУчетаПоПартнерам.Партнер КАК Партнер,  
ВИСПОбороты.АналитикаУчетаПоПартнерам.Организация КАК Организация,  
ВИСПОбороты.АналитикаУчетаПоПартнерам.Контрагент КАК Контрагент

ИЗ  РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, Авто,
  
    НЕ АналитикаУчетаПоПартнерам.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)) КАК ВИСПОбороты

Ресурсы:

Параметры:

Настройки:

Т.е. построена обычная СКД для выборки данных.

2. Добавляем основную форму отчета (удаляем с нее все элементы (это важно!)), и заново добавляем на нее Пользователские настройки компоновщика настроек отчета:

(если не отображаются названия колонок этой таблицы - включаем их отображение).

Наполняем содержимым форму (блок ABC):

Добавляем команду Сформировать и формируем соотвествующую кнопку.

3. Создаем СКД для вывода информации в табличный документ (добавляем соответствующий макет), описание полей:

 

Вычисляемые поля:

Ресурсы:

Вариант настроек БезГрупп:

Вариант настроек Классы:

 

Т.е. это тоже вполне обычная СКД, которая "заточена" под конкретные колонки таблицы значений, которую мы будем в нее передавать.

3. Наполняем содержимым команду Сформировать:

&НаКлиенте
Процедура Сформировать(Команда)  
    СформироватьНаСервере();
КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере()
   ОтчетОбъект = ДанныеФормыВЗначение(Отчет, Тип("ОтчетОбъект"));

   //Первый этап: получаем данные при помощи СКД

   СКД = ОтчетОбъект.СхемаКомпоновкиДанных;                      
   ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; //Используем пользовательские настройки с формы отчета;
   Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СКД.ВариантыНастроек[ОбъектАнализа].Настройки); //Используем нужный вариант
   Настройки = Отчет.КомпоновщикНастроек.Настройки;// Тут уже готовый вариант настроек
   //При необходимости корректируем поле группировки в соответствии с настройками
   //Это нужно когда выбрано значение СвойстоОбъектаАнализа
   //и анализ производится на основании значения реквизита соответствующего справочника
   Если ЗначениеЗаполнено(СвойствоОбъектаАнализа) Тогда
       ЭлементыПолейГруппировки = Настройки.Структура[0].ПоляГруппировки.Элементы;
       ЭлементыПолейГруппировки.Очистить();
       НовыйЭлементГруппировки = ЭлементыПолейГруппировки.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
       НовыйЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных(?(ОбъектАнализа = "Клиенты", "Партнер", ОбъектАнализа) + "." + СвойствоОбъектаАнализа);
       НовыйЭлементГруппировки.Использование = Истина;
  КонецЕсли;    
  //Копируем пользовательские настройки в основные настройки отчета
  Для Каждого ЭлементПользовательскихНастроек Из ПользовательскиеНастройки.Элементы Цикл
      Если ТипЗнч(ЭлементПользовательскихНастроек) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
         ЭлементНастройки = Настройки.ПараметрыДанных.Элементы.Найти(ЭлементПользовательскихНастроек.Параметр);
         ЗаполнитьЗначенияСвойств(ЭлементНастройки, ЭлементПользовательскихНастроек);
      ИначеЕсли ТипЗнч(ЭлементПользовательскихНастроек) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
         ЗаполнитьЭлементОтбораПоИД(Настройки.Отбор.Элементы, ЭлементПользовательскихНастроек); //Процедура определена в модуле формы
      КонецЕсли;
  КонецЦикла;
  //^^^^^^ все готово, чтобы получить исходную выборку
  //Следующие 8 строк - получение выборки в ТаблицуЗначений ТЗ:
  КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
  МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
  ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
  ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , );
  ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;  
  ТЗ = Новый ТаблицаЗначений;  
  ПроцессорВывода.УстановитьОбъект(ТЗ);  
  ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Ложь);
  //Конец Первого этапа: Выборка уже есть в ТЗ

  //Второй этап: Необходимые преобразования, для последующего вывода на экран
  //Тут реализуется алгоритм расчета для ABC анализа, взятый из ТиС 7.7, и классический ABC анализ
  //Здесь: Последняя сторка ТЗ - строка итогов, запомним числовые значения итогов в Структуре  
  Итоги = Новый Структура();  
  Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл
     ЗначениеЭлементаТЗ = ТЗ[ТЗ.Количество() - 1][КолонкаТЗ.Имя];
     Если Не ТипЗнч(ЗначениеЭлементаТЗ) = Тип("Число") Тогда Продолжить; КонецЕсли;
     Итоги.Вставить(КолонкаТЗ.Имя, ЗначениеЭлементаТЗ);
  КонецЦикла;
  ТЗ.Удалить(ТЗ.Количество() - 1); //Удалим строку итогов из ТЗ
  ТЗ.Колонки.Добавить("ПроцентОтОбщего"); //Добавим новые колонки в ТЗ
 
ТЗ.Колонки.Добавить("Объект");    
  ПоказательСтрокой = ?(Показатель = "Выручка по отгрузке", "Выручка", ?(Показатель = "Прибыль по отгрузке", "Прибыль", "Прибыльность"));
  ОбъектАнализаСтрокой = ?(ОбъектАнализа = "Клиенты", "Партнер", ОбъектАнализа) + СокрЛП(СвойствоОбъектаАнализа);
  Для Каждого СтрокаТЗ Из ТЗ Цикл
     СтрокаТЗ.ПроцентОтОбщего = 100 * СтрокаТЗ[ПоказательСтрокой] / Итоги[ПоказательСтрокой];
     СтрокаТЗ.Объект = СтрокаТЗ[ОбъектАнализаСтрокой];  
  КонецЦикла;    
  //Обработка  
  Если СпособАнализа = 0 Тогда
     ПорядокСтрокой = ?(Порядок = "убывания", "Убыв", "Возр");
     ТЗ.Сортировать(ПоказательСтрокой + " " + ПорядокСтрокой);
     КоличествоНужных = Окр(ТЗ.Количество() * Мин(ПроцентОбъектов, 100) / 100);
     Для Индекс = КоличествоНужных + 1 По ТЗ.Количество() - 1 Цикл
        ТЗ[Индекс].Объект = "";
     КонецЦикла;  
  ИначеЕсли СпособАнализа = 1 Тогда
     ПорядокСтрокой = "Убыв";
     ТЗ.Сортировать(ПоказательСтрокой + " " + ПорядокСтрокой);
     ОставитьСумму = Итоги[ПоказательСтрокой] * Мин(ПроцентСумм, 100) / 100;
     НакопленоСумма = 0;
     Для Каждого СтрокаТЗ Из ТЗ Цикл
       Если НакопленоСумма > ОставитьСумму Тогда
         СтрокаТЗ.Объект = "";
       КонецЕсли;
       НакопленоСумма = НакопленоСумма + СтрокаТЗ[ПоказательСтрокой];
     КонецЦикла;
  Иначе
     ПорядокСтрокой = "Убыв";
     ТЗ.Сортировать(ПоказательСтрокой + " " + ПорядокСтрокой);
     ТЗ.Колонки.Добавить("Класс");
     НакопленоСумма = 0;
     СуммаA = Итоги[ПоказательСтрокой] * ПроцентA / 100;
     СуммаAB = СуммаA + Итоги[ПоказательСтрокой] * ПроцентB / 100;
     СуммаABC = СуммаAB + Итоги[ПоказательСтрокой] * ПроцентC / 100;   //Все остальное D
     ТекущийКласс = "A";
     Для Каждого СтрокаТЗ Из ТЗ Цикл
       СтрокаТЗ.Класс = ТекущийКласс;
       НакопленоСумма = НакопленоСумма + СтрокаТЗ[ПоказательСтрокой];
       Если ТекущийКласс = "A" И НакопленоСумма > СуммаA Тогда ТекущийКласс = "B";
       ИначеЕсли ТекущийКласс = "B" И НакопленоСумма > СуммаAB Тогда ТекущийКласс = "C";
       ИначеЕсли ТекущийКласс = "C" И НакопленоСумма > СуммаABC Тогда ТекущийКласс = "D";
       КонецЕсли;
     КонецЦикла;
  КонецЕсли;
  //Конец Второго этапа: ТЗ преобразована и готова к выводу на экран.

  //Третий этап: Вывод через СКД в табличный документ, расположенный на форме 
  Результат.Очистить(); //Чистим Табличный документ от старых данных   
  ВнешниеНаборыДанных = Новый Структура("ТЗ", ТЗ); //Готовим внешний набор который передадим СКД
  СКДВ = ОтчетОбъект.ПолучитьМакет("СКДДляВывода"); //Получаем СКД Для Вывода из макетов Отчета;
  //Выбор нужного варианта настроек:
  НастройкиВ = СКДВ.ВариантыНастроек[?(СпособАнализа = 2, "Классы", "БезГрупп")].Настройки; 
  //Настройка варианта графического отображения:
  НастройкиВ.Структура[1].Использование = (Диаграмма = "Гистограмма");
  НастройкиВ.Структура[1].Выбор.Элементы[0].Поле = Новый ПолеКомпоновкиДанных(ПоказательСтрокой);
  НастройкиВ.Структура[2].Использование = (Диаграмма = "Круговая");
  НастройкиВ.Структура[2].Выбор.Элементы[0].Поле = Новый ПолеКомпоновкиДанных(ПоказательСтрокой);    
  //Настройка сортировки:  
  ЭлементыСортировки = НастройкиВ.Порядок.Элементы;
  ЭлементыСортировки.Очистить();
  ЭлементСортировки = ЭлементыСортировки.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
  ЭлементСортировки.Поле = Новый ПолеКомпоновкиДанных(ПоказательСтрокой);
  ЭлементСортировки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных[ПорядокСтрокой];
  ЭлементСортировки.Использование = Истина;
  //Чтобы в итоговом отчете была Расшифровка, придется предпринять ряд шагов:

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

КонецПроцедуры

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

См. также

SALE! %

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    93719    478    380    

532

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    2605    KVIKS    14    

76

Гибкие отборы через СКД на управляемых формах. Демо-обработка

СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

07.06.2023    4218    24    quazare    7    

45

Вывод элементов иерархии верхнего уровня на СКД

СКД Платформа 1С v8.3 Абонемент ($m)

Как получить родителя первого уровня иерархического справочника с помощью СКД.

1 стартмани

06.06.2023    3380    echo77    6    

71

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

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

07.02.2023    4797    quazare    7    

38

Выборочная свертка группировок для СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Россия Абонемент ($m)

Методика разработки отчета на СКД с возможностью свёртки части группировок по заданному программно условию. - свертка по значению поля (неотрицательные - сворачиваются); - свертка подчиненных в иерархии с произвольным количеством уровней.

1 стартмани

16.01.2023    2852    schthaxe    3    

30
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ivanov660 3958 12.08.13 10:18 Сейчас в теме
В некоторых случаях правильнее и проще будет использовать данные (ТЗ) не компоновки, а результата запроса. В этом случае также нет необходимости описывать поля как отметил автор, а достаточно использовать выгруженную таблицу как внешний набор данных для дальнейшей обработки. Хотя такой подход и применяется 1С-никами, к примеру, в УТ работа с источниками планирования.
2. mxm2 1248 12.08.13 10:35 Сейчас в теме
(1) ivanov660, Вы имеете ввиду первоначальную выборку данных? Если да, то в случае использования запроса, придется прописывать условия отборов (на форме располагать элементы), итоги и т.д. Что проще - спорный вопрос.
3. Yashazz 4583 13.08.13 14:24 Сейчас в теме
Я очень всяко делаю. Иногда СКД служит лишь для объявления компоновщика (отбор/сортировка на интерфейсе), иногда готовит полуфабрикат, выгоняя его в коллекцию нужного типа; иногда одна СКД вложена в другую.
Но в последнее время, с расширением возможностей языка выражений СКД, работы с коллекциями в вычисляемых полях и прочего, склоняюсь к мысли, что программная "прокладка" нужна всё реже. И вам советую.
Например, http://langslab.com/ebooks/skd/dcs-ch2/dcs-ex17 - покурите "ВычислитьВыражение" и его варианты.
Puk2; ViteG; ZanZiBar; Katik; zqzq; mxm2; +6 Ответить
4. mxm2 1248 13.08.13 14:51 Сейчас в теме
(3) Yashazz,
Например, http://langslab.com/ebooks/skd/dcs-ch2/dcs-ex17 - покурите "ВычислитьВыражение" и его варианты.

Спасибо за ссылку, весьма полезная инфа, раньше и не натыкался на такую, хотя и предполагал, что что-то подобное должно быть.
5. HEKPOH 75 13.08.13 19:47 Сейчас в теме
Тоже использую описанную автором методику :)
6. spaminfostart 15 09.09.13 13:24 Сейчас в теме
Понравилось оформление списка внизу формы. Реализовал у себя )
Прикрепленные файлы:
7. spaminfostart 15 11.09.13 10:45 Сейчас в теме
У меня ошибка:
{Отчет.ABCАнализНомИлиКлиентов.Форма.ФормаОтчета.Форма(136)}: Поле объекта не обнаружено (Поле)
НастройкиВ.Структура[1].Выбор.Элементы[0].Поле = Новый ПолеКомпоновкиДанных(ПоказательСтрокой);

Какие поля у Вас установлены в Диаграммах?
8. mxm2 1248 11.09.13 11:09 Сейчас в теме
(7) spaminfostart, Поле задается динамически, в зависимости от выбранного показателя, в настройках графического представления предварительно указан один из возможных показателей, кажется это Выручка.
9. spaminfostart 15 11.09.13 11:10 Сейчас в теме
Я так понял там нужно установить ЛЮБОЕ одно поле. А в коде мы всё равно его меняем.
10. mxm2 1248 11.09.13 12:25 Сейчас в теме
(9) spaminfostart, просто это гораздо проще чем его добавить в нулевую коллекцию...
11. spaminfostart 15 11.09.13 12:46 Сейчас в теме
(105) Gazza, предлагаю упомянуть об этом в описании ;)
12. spaminfostart 15 12.09.13 08:13 Сейчас в теме
(105) Gazza, если не затруднит, выложите пож модуль процедуры ЗаполнитьЭлементОтбораПоИД и другие, если есть связанные. А то я пока не могу скачать обработку.
13. spaminfostart 15 12.09.13 10:23 Сейчас в теме
(105) Gazza, или ещё лучше - вышлите пож обработку по почте:
14. spaminfostart 15 17.09.13 14:50 Сейчас в теме
понятно... зажал
15. пользователь 18.10.13 13:37
Сообщение было скрыто модератором.
...
16. sidka89 24.10.13 13:26 Сейчас в теме
спасибо за проделанную работу
17. AnKonAlm 28 16.02.14 14:21 Сейчас в теме
Спасибо!!!
18. ZanZiBar 10.04.14 08:35 Сейчас в теме
Спасибо огромное. Очень помогли))
19. пользователь 30.06.14 22:12
Сообщение было скрыто модератором.
...
20. KVD77 17.09.14 17:13 Сейчас в теме
Тоже использую описанную автором методику, только в первом СКД поля описываю немного иначе, пример:

ВЫБРАТЬ
Значение(Справочник.<ИмяСправочника>.ПустаяСсылка) КАК Спр,
"" КАК СпрПолноеИмя,
Ложь КАК Выбран,
Значение(Документ.<ИмяСправочника>.ПустаяСсылка) КАК Док,
....
и т.д. по аналогии
21. c_andrey 01.04.16 13:15 Сейчас в теме
Скажите в обычном приложение этот отчет работать будет?
22. mxm2 1248 01.04.16 15:04 Сейчас в теме
(21) c_andrey, нет
Оставьте свое сообщение