Как программно сформировать отчет СКД указав параметры и на выходе получить таблице значений? В одном документе для расчета потребовалось получать данные из отчета на СКД, реализовал следующим образом:
Код 1C v 8.х
СхемаОст = Отчеты. ТоннажПоЭкспедиторам. ПолучитьМакет( "ОсновнаяСхемаКомпоновкиДанных" ) ;
КомпоновщикНастроекНастройки = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроекНастройки. Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных( СхемаОст) ) ;
КомпоновщикНастроекНастройки. ЗагрузитьНастройки( СхемаОст. НастройкиПоУмолчанию) ;
КомпоновщикНастроекНастройки. Настройки. ПараметрыДанных. УстановитьЗначениеПараметра( "НачалоПериода" , НачалоМесяца( МесяцРасчета) ) ;
КомпоновщикНастроекНастройки. Настройки. ПараметрыДанных. УстановитьЗначениеПараметра( "КонецПериода" , КонецМесяца( МесяцРасчета) ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета. Выполнить( СхемаОст, КомпоновщикНастроекНастройки. Настройки, , , Тип( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ) ) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновкиДанных) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеТЗ = Новый ТаблицаЗначений;
ПроцессорВывода. УстановитьОбъект( ДанныеТЗ) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
ТоннажПоЭкспедиторам. Очистить( ) ;
Для каждого СтрокаТЗ Из ДанныеТЗ Цикл
Если ЗначениеЗаполнено( СтрокаТЗ. Экспедитор) и СтрокаТЗ. Доставка= Неопределено Тогда
нСтр = ТоннажПоЭкспедиторам. Добавить( ) ;
ЗаполнитьЗначенияСвойств( нСтр, СтрокаТЗ) ;
нСтр. Сотрудник= СтрокаТЗ. Экспедитор;
Иначе
Продолжить;
КонецЕсли ;
КонецЦикла ;
Категория:
Схема Компоновки Данных Как программно установить отбор в СКД Код 1C v 8.х Процедура ВашРеквизитПриИзменении(Элемент)
СоответствиеПоискаОтбора = Новый Соответствие;
СоответствиеПоискаОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("%Нужное поле компоновки%"));
СоответствиеПоискаОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.ВСписке); //сюда впихнуть нужный вид сравнения
СоответствиеПоискаОтбора.Вставить("Использование",Истина);
СоответствиеНовогоОтбора = Новый Соответствие;
СоответствиеНовогоОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("%Нужное поле компоновки%"));
СоответствиеНовогоОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.ВСписке); // вид сравнения
Если ЗначениеЗаполнено(Кампейны) тогда
СоответствиеНовогоОтбора.Вставить("Использование",Истина);
Иначе
СоответствиеНовогоОтбора.Вставить("Использование",Ложь);
КонецЕсли;
СоответствиеНовогоОтбора.Вставить("Значение",Кампейны);
ИзменитьОтбор(КомпоновщикНастроек,СоответствиеПоискаОтбора,СоответствиеНовогоОтбора);
КонецПроцедуры
Процедура ИзменитьОтбор(ЭлементСтруктуры, СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт
Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
Отбор = ЭлементСтруктуры.Настройки.Отбор;
Иначе
Отбор = ЭлементСтруктуры;
КонецЕсли;
Если ТипЗнч(СоответствиеНовогоОтбора["ЛевоеЗначение"]) = Тип("Строка") Тогда
нПоле = Новый ПолеКомпоновкиДанных(СоответствиеНовогоОтбора.ЛевоеЗначение);
Иначе
нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение"];
КонецЕсли;
Если СоответствиеНовогоОтбора.Получить("ВидСравнения") = Неопределено Тогда
нВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Иначе
нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения"];
КонецЕсли;
Если СоответствиеНовогоОтбора.Получить("Использование") = Неопределено Тогда
нИспользование = Истина;
Иначе
нИспользование = СоответствиеНовогоОтбора["Использование"];
КонецЕсли;
нЗначение = СоответствиеНовогоОтбора["Значение"];
ТолькоПоЛевомуЗначению = Ложь;
Если СоответствиеПоискаОтбора = Неопределено Тогда
ТолькоПоЛевомуЗначению = Истина;
КонецЕсли;
сЛевоеЗначение = СоответствиеПоискаОтбора.Получить("ЛевоеЗначение");
Если сЛевоеЗначение = Неопределено Тогда
сЛевоеЗначение = нПоле;
КонецЕсли;
сВидСравнения = СоответствиеПоискаОтбора.Получить("ВидСравнения");
Если ВидСравнения = Неопределено Тогда
сВидСравнения = ВидСравнения;
КонецЕсли;
сИспользование = СоответствиеПоискаОтбора.Получить("Использование");
Если сИспользование = Неопределено Тогда
сИспользование = нИспользование;
КонецЕсли;
Для каждого ЭлементОтбора Из Отбор.Элементы Цикл
Если ТолькоПоЛевомуЗначению Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать;
Иначе
Если (ЭлементОтбора.ЛевоеЗначение = сЛевоеЗначение)
И (ЭлементОтбора.ВидСравнения = сВидСравнения)
Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НайденныйОтбор <> Неопределено Тогда
НайденныйОтбор.ЛевоеЗначение = нПоле;
НайденныйОтбор.Использование = нИспользование;
НайденныйОтбор.ВидСравнения = нВидСравнения;
НайденныйОтбор.ПравоеЗначение = нЗначение;
Иначе
НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ПолеОтбора = Новый ПолеКомпоновкиДанных(нПоле);
НовыйЭлементОтбора.ЛевоеЗначение = нПоле;
НовыйЭлементОтбора.Использование = нИспользование;
НовыйЭлементОтбора.ВидСравнения = нВидСравнения;
НовыйЭлементОтбора.ПравоеЗначение = нЗначение;
КонецЕсли;
КонецПроцедуры
Категория:
Схема Компоновки Данных Печатная форма с использованием СКД Создаем макет СКД, там произвольно или с какими-нибудь условиями выбираем в наборе данных поля табличной части, ставим условие на документ владелец, и задаем оформление. В форме документа добавляем кнопку печать, прописываем в параметрах наш документ и оп-ля - печатная форма готова
Код 1C v 8.х Процедура ОсновныеДействияФормыПечать(Кнопка)
Если Ссылка = Документы. РасчетЗаказа. ПустаяСсылка( ) тогда
Предупреждение( "Документ не записан" ) ;
Возврат ;
Иначе
Схема = ПолучитьМакет( "Макет1" ) ;
Настройки = Схема. НастройкиПоУмолчанию;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных( ) ;
КомпоновщикНастроек. ЗагрузитьНастройки( Настройки) ;
ПараметрДок = Новый ПараметрКомпоновкиДанных( "документ" ) ;
ЗначениеПараметраДок = КомпоновщикНастроек. Настройки. ПараметрыДанных. НайтиЗначениеПараметра( ПараметрДок) ;
ЗначениеПараметраДок. Значение = Ссылка;
ЗначениеПараметраДок. Использование = Истина ;
Настройки = КомпоновщикНастроек. Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета. Выполнить( Схема, Настройки) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновки) ;
ДокументРезультат = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ДокументРезультат) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
ДокументРезультат. ОтображатьЗаголовки = Ложь ;
ДокументРезультат. ОтображатьСетку = Ложь ;
ДокументРезультат. АвтоМасштаб = Истина ;
ДокументРезультат. Показать( ) ;
КонецЕсли ;
КонецПроцедуры
Автор:
sanja Категория:
Схема Компоновки Данных Пример программного вызова СКД отчета Пример использования СКД отчета для заполнения табличного документа.
Вызываем отчет “Маркетинговый план” сделаного на основе СКД.
Установка параметр “Вероятность”. И отбора по ключу “Основание.МВЗ.СПО”
Код 1C v 8.х Отчет = Отчеты. МаркетинговыйПлан. Создать( ) ;
Схема = Отчет. ПолучитьМакет( "ОсновнаяСхемаКомпоновкиДанных" ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ТабДок = Новый ТабличныйДокумент;
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных( Схема) ;
КомпоновщикНастроек. Инициализировать( ИсточникДоступныхНастроек) ;
Настройки = Схема. НастройкиПоУмолчанию;
насВероятнось = Настройки. ПараметрыДанных. Элементы. Найти( "Вероятность" ) ;
насВероятнось. Использование = Истина ;
насВероятнось. Значение = Веротяность;
Если ЗначениеЗаполнено( СПО) тогда
ПолеОтбораСПО = Новый ПолеКомпоновкиДанных( "Основание.МВЗ.СПО" ) ;
ОтборПоСПО = Настройки. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ОтборПоСПО. ЛевоеЗначение = ПолеОтбораСПО;
ОтборПоСПО. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
ОтборПоСПО. ПравоеЗначение = СПО;
ОтборПоСПО. Использование = Истина ;
КонецЕсли ;
Макет = КомпоновщикМакета. Выполнить( Схема, Настройки) ;
ПроцессорКомпоновки. Инициализировать( Макет, , , Истина ) ;
ПроцессорВывода. УстановитьДокумент( ТабДок) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновки) ;
Категория:
Схема Компоновки Данных Использование двух Схем Компоновки Данных - загрузка, получение параметров и настроек Есть две схемы, основная и не основная:
Код 1C v 8.х
НоваяСхема = ПолучитьМакет( НеОсновнаяСхемаКомпоновкиДанных) ;
Отчет. СхемаКомпоновкиДанных = НоваяСхема;
Отчет. КомпоновщикНастроек. ЗагрузитьНастройки( НоваяСхема. НастройкиПоУмолчанию) ;
Код 1C v 8.х
Схема = ПолучитьМакет( "НеОсновнаяСхемаКомпоновкиДанных" ) ;
ПараметрыСхемы = Схема. Параметры;
Код 1C v 8.х
Макет = ПолучитьМакет( "Настройка" ) ;
Макет. Записать( ИмяФайла) ;
Чтение = Новый ЧтениеXML;
НовыйСXDTO = Новый СериализаторXDTO( ФабрикаXDTO) ;
Чтение. ОткрытьФайл( ИмяФайла) ;
Настройки = НовыйСXDTO. ПрочитатьXML( Чтение) ;
КомпоновщикНастроек1 = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек1 . ЗагрузитьНастройки( Настройки) ;
Категория:
Схема Компоновки Данных Как программно Изменить Отбор в отчете СКД Эта тема тоже достаточна распространена. Нюанс программного изменения отбора заключается в том, что коллекция:
Код 1C v 8.х КомпоновщикНастроек. Настройки. Отбор. Элементы
в отличие от аналогичной коллекции параметров, не имеет метода Найти(). Можно конечно изменять отбор «в лоб», т.е. по индексу, но это не есть хорошо. Самый оптимальный вариант, обходить все поля отбора в цикле.
Приведу пример универсальной функции для изменения отбор компоновки данных:
Код 1C v 8.х
Процедура ИзменитьОтбор(ЭлементСтруктуры,
СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт
Если ТипЗнч( ЭлементСтруктуры) = Тип( "КомпоновщикНастроекКомпоновкиДанных" ) Тогда
Отбор = ЭлементСтруктуры. Настройки. Отбор;
Иначе
Отбор = ЭлементСтруктуры;
КонецЕсли ;
Если ТипЗнч( СоответствиеНовогоОтбора["ЛевоеЗначение" ]) = Тип( "Строка" ) Тогда
нПоле = Новый ПолеКомпоновкиДанных( СоответствиеНовогоОтбора. ЛевоеЗначение) ;
Иначе
нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение" ];
КонецЕсли ;
Если СоответствиеНовогоОтбора. Получить( "ВидСравнения" ) = Неопределено Тогда
нВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
Иначе
нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения" ];
КонецЕсли ;
Если СоответствиеНовогоОтбора. Получить( "Использование" ) = Неопределено Тогда
нИспользование = Истина ;
Иначе
нИспользование = СоответствиеНовогоОтбора["Использование" ];
КонецЕсли ;
нЗначение = СоответствиеНовогоОтбора["Значение" ];
ТолькоПоЛевомуЗначению = Ложь ;
Если СоответствиеПоискаОтбора = Неопределено Тогда
ТолькоПоЛевомуЗначению = Истина ;
КонецЕсли ;
сЛевоеЗначение = СоответствиеПоискаОтбора. Получить( "ЛевоеЗначение" ) ;
Если сЛевоеЗначение = Неопределено Тогда
сЛевоеЗначение = нПоле;
КонецЕсли ;
сВидСравнения = СоответствиеПоискаОтбора. Получить( "ВидСравнения" ) ;
Если ВидСравнения = Неопределено Тогда
сВидСравнения = ВидСравнения;
КонецЕсли ;
сИспользование = СоответствиеПоискаОтбора. Получить( "Использование" ) ;
Если сИспользование = Неопределено Тогда
сИспользование = нИспользование;
КонецЕсли ;
Для каждого ЭлементОтбора Из Отбор. Элементы Цикл
Если ТолькоПоЛевомуЗначению Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать ;
Иначе
Если ( ЭлементОтбора. ЛевоеЗначение = сЛевоеЗначение)
И ( ЭлементОтбора. ВидСравнения = сВидСравнения)
И ( ЭлементОтбора. Использование = сИспользование) Тогда
НайденныйОтбор = ЭлементОтбора;
Прервать ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
Если НайденныйОтбор < > Неопределено Тогда
НайденныйОтбор. ЛевоеЗначение = нПоле;
НайденныйОтбор. Использование = нИспользование;
НайденныйОтбор. ВидСравнения = нВидСравнения;
НайденныйОтбор. ПравоеЗначение = нЗначение;
КонецЕсли ;
КонецПроцедуры
Пример вызова процедуры:
Код 1C v 8.х СоответствиеПоискаОтбора = Новый Соответствие;
СоответствиеПоискаОтбора. Вставить( "ЛевоеЗначение" , Новый ПолеКомпоновкиДанных( "Наименование" ) ) ;
СоответствиеПоискаОтбора. Вставить( "ВидСравнения" , ВидСравненияКомпоновкиДанных. Содержит) ;
СоответствиеПоискаОтбора. Вставить( "Использование" , Истина ) ;
СоответствиеНовогоОтбора = Новый Соответствие;
СоответствиеНовогоОтбора. Вставить( "ЛевоеЗначение" , Новый ПолеКомпоновкиДанных( "Наименование" ) ) ;
СоответствиеНовогоОтбора. Вставить( "ВидСравнения" , ВидСравненияКомпоновкиДанных. Содержит) ;
СоответствиеНовогоОтбора. Вставить( "Использование" , Истина ) ;
СоответствиеНовогоОтбора. Вставить( "Значение" , "бла-бла-бла" ) ;
ИзменитьОтбор( КомпоновщикНастроек, СоответствиеПоискаОтбора, СоответствиеНовогоОтбора) ;
Автор:
also Категория:
Схема Компоновки Данных