По-настоящему свои макеты в отчетах СКД. Исследование процесса компоновки и генерация кода отчета

Публикация № 1624471 22.03.22

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

Отчет СКД Макет ПроцессорКомпоновки ПроцессорВывода ЭлементРезультата Расшифровка ДанныеРасшифровки ПриКомпоновкеРезультата

Как скрестить формирование отчетных данных с помощью СКД и вывод в табличный документ с помощью Макет.ПолучитьОбласть(...) и ТабДок.Вывести(Секция)? А также сделать этот процесс простым и удобным? Об этом в статье ниже.

 

Предыстория, которой не было, но которая вполне могла случиться

Очень Важный Заказчик (ОВЗ) поставил задачу: сделать отчет по начислениям и удержаниям сотрудников с группировками по организациям и подразделениям в разрезе кварталов.

Отчет должен быть реализован на основе вот такого регистра:

 

 

Что может быть проще? Создаем схему компоновки:

 

        

 

и с чувством выполненного долга показываем результат ОВЗ:

 

 

Но к нашему удивлению...

ОВЗ: Что это за $&^*%$% ?!. У меня раньше стояла 7.7, и там мои программисты за полчаса-час сделали такую форму:

 

 

ОВЗ: нужна такая же.

Мы: но у нас СКД - современный стандарт построения отчетов нового поколения...

ОВЗ: Да? почему же получилась такая $&^*%$% ? 

Мы: Ну как же, смотрите - вот отборы, вот структура, варианты и даже условное оформление!

ОВЗ: $#%!   *&$%!   &*$!

ОВЗ: На %#& мне все это надо?

ОВЗ: Мне надо завтра на стол Генеральному положить отчет, а ваш даже на страницу не помещается!

ОВЗ: Так, сроку вам до вечера. Напомнить, сколько мы вам платим? Все, свободны.

 

Итак, получив такой мотивирующий пинок импульс, команда приступила к работе.

Тимлид: какие у нас есть варианты?

Разработчик1: Может отказаться от СКД? Сделаем через запрос с итогами и выборкой с группировками.

Тимлид: Как крайний вариант подойдет, но не хотелось бы отказываться от СКД, надо же ОВЗ как-то приучать к новым технологиям...

Разработчик2: Можно результат компоновки выгрузить в ТЗ или в ДЗ, и потом вывести в документ.

Тимлид: Можно, но таблицу в структуре отчета так выгрузить нельзя. А без неё сложно - надо как-то решать вопрос с разреженностью данных в колонках. Что там говорит коллективный разум Инфостарта? 

Оставим эту команду, и посмотрим, какие у нас есть вообще способы кастомизировать отчеты?

 

Способы кастомизации отчетов:

  • Можно посмотреть в сторону макетов полей и группировок СКД. При их использовании может потребоваться ввести новые элементы в структуру отчета или добавить в набор данных дополнительные строки (изменив текст запроса) или дополнительные поля, например для итогов, а также сделать дополнительные настройки для каждого элемента структуры. Примеры.
  • Можно выполнить постобработку полученного табличного документа - в цикле перебрать строки/ячейки, при необходимости их добавить/удалить/объединить/оформить. 
  • Можно на лету менять макеты в объекте МакетКомпоновкиДанных или ЭлементРезультатаКомпоновкиДанных. Очень хорошо такой подход раскрыт в этой статье.
  • Можно применять комбинацию этих способов.

Но есть и другой путь

Как у нас обычно происходит программное формирование отчета?

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

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

	// 1 вариант
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	// 2 вариант
	ПроцессорВывода.НачатьВывод();	
	ЭлементРезультата = ПроцессорКомпоновки.Следующий();
	Пока ЭлементРезультата <> Неопределено  Цикл
		ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
		ЭлементРезультата = ПроцессорКомпоновки.Следующий();
	КонецЦикла; 
	ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры

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

	ЭлементРезультата = ПроцессорКомпоновки.Следующий();
	Пока ЭлементРезультата <> Неопределено  Цикл
		
		Секция = МакетОтчета.ПолучитьОбласть(ИмяСекции);
		Секция.Параметры.Заполнить(ЗначенияПараметров);	
		// 1
		ДокументРезультат.Вывести(Секция);
		// или 2
		ДокументРезультат.Присоединить(Секция);

		ЭлементРезультата = ПроцессорКомпоновки.Следующий();
	КонецЦикла; 

Дело за малым - определить, какие секции в какой момент выводить и какими значениями заполнять их параметры.

Чем нам здесь может помочь ЭлементРезультата?

 

 

Макет содержит внутреннее имя макета, выводимого в табличный документ, с его помощью мы можем определить ту часть отчета, которая в данный момент выводится. ПроцентВывода нас пока не интересует, а ТипЭлемента и РасположениеВложенныхЭлементов пригодятся - с их помощью определим, надо ли секцию выводить с новой строки, или же присоединить к текущей. ЗначенияПараметров, как несложно догадаться, содержит коллекцию параметров для вывода элемента отчета:

 

 

В нашем случае "П1" - сумма по конкретному сотруднику за определенный период, "П2" - ИдентификаторРасшифровкиКомпоновкиДанных.

Код при этом может выглядеть примерно так:

Если ЭлементРезультата.Макет = "Макет38" Тогда			
	Секция = МакетОтчета.ПолучитьОбласть("Сотрудник|Период");
	Секция.Параметры.Сумма = ЗначениеПараметра(ЭлементРезультата, "П1");	
	Секция.Параметры.Расшифровка = ЗначениеПараметра(ЭлементРезультата, "П2");	
	ДокументРезультат.Присоединить(Секция);
КонецЕсли; 

где функция ЗначениеПараметра:

Функция ЗначениеПараметра(ЭлементРезультата, ИмяПараметра)
	Результат = Неопределено;
	Параметр = ЭлементРезультата.ЗначенияПараметров.Найти(ИмяПараметра);
	Если ТипЗнч(Параметр) = Тип("ЗначениеПараметраМакетаКомпоновкиДанных")  Тогда
		Результат = Параметр.Значение;	
	КонецЕсли; 
	
	Возврат Результат;
КонецФункции 

Чтобы не делать каскад условий для проверки имен макета, можно заранее определить список соответствий имен макетов СКД ("Макет38") и имен секций макета отчета ("Сотрудник|Период"). Заодно там же можно указать и признак вывода с новой строки. А чтобы не прописывать установку отдельных параметров секции макета, можно эти параметры заполнять из заранее созданной структуры (конечно же в этом случае параметры секций макета должны называться "П1", "П2" и т.д.).

Макеты = Новый Соответствие;
Макеты.Вставить("Макет38", Новый Структура("ИмяСекции,НоваяСтрока", "Сотрудник|Период", Ложь)); 
// ... добавляем другие соответствия	
ЗначенияПараметров = Новый Структура;
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> Неопределено  Цикл
	ДанныеМакета = Макеты.Получить(ЭлементРезультата.Макет);
	Если ТипЗнч(ДанныеМакета) = Тип("Структура") Тогда   
		Секция = МакетОтчета.ПолучитьОбласть(ДанныеМакета.ИмяСекции);
		Для каждого Параметр Из ЭлементРезультата.ЗначенияПараметров Цикл   
			ЗначенияПараметров.Вставить(Параметр.Имя, Параметр.Значение);					
		КонецЦикла; 			
		Секция.Параметры.Заполнить(ЗначенияПараметров);				
		Если ДанныеМакета.НоваяСтрока Тогда   
			ДокументРезультат.Вывести(Секция);
		Иначе	
			ДокументРезультат.Присоединить(Секция);
		КонецЕсли; 
	КонецЕсли; 
	ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла; 

 

 

Вот тот минимальный объем кода, который сформирует нам табличный документ с отчетом, и который можно в дальнейшем дорабатывать и усложнять. 

Значения расшифровки

При работе со значениями параметров макета компоновки данных выясняется одна неожиданная, но вполне объяснимая особенность. Если со значениями примитивных типов все нормально, то данные ссылочных типов хранятся в виде представления:

 

 

 

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

Сотрудник = ЗначениеРасшифровки(ДанныеРасшифровки, ЭлементРезультата, "П2", "Сотрудник");

Функция ЗначениеРасшифровки(ДанныеРасшифровки, ЭлементРезультата, ИмяПараметра, ИмяПараметраРасшифровки)
	Результат = Неопределено;	
	Параметр = ЭлементРезультата.ЗначенияПараметров.Найти(ИмяПараметра);
	Если ТипЗнч(Параметр) = Тип("ЗначениеПараметраМакетаКомпоновкиДанных")  Тогда
		Идентификатор = Параметр.Значение;		
		Если ТипЗнч(Идентификатор) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных")  Тогда
			ЭлементРасшифровки = ДанныеРасшифровки.Элементы.Получить(Идентификатор);
			Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля")  Тогда
				Поля = ЭлементРасшифровки.ПолучитьПоля();
				Значение = Поля.Найти(ИмяПараметраРасшифровки);
				Если ТипЗнч(Значение) = Тип("ЗначениеПоляРасшифровкиКомпоновкиДанных")  Тогда
					Результат = Значение.Значение;
				КонецЕсли; 
			КонецЕсли; 
		КонецЕсли; 
	КонецЕсли; 	
	Возврат Результат;
КонецФункции 

Условное оформление

А как у нас обстоят дела с условным оформлением? Элементы условного оформления, например ЦветФона (при их наличии конечно же), тоже имеются в составе ЭлементРезультата.ЗначенияПараметров, откуда их можно извлечь и применить к оформлению ячейки.

 

 

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

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

 

Ячейка = ПолучитьЯчейкуОбласти(ДокументРезультатДляУО, 3, 2, 1, 1);
Секция.Область().ЦветФона = Ячейка.ЦветФона;

Функция ПолучитьЯчейкуОбласти(Таблица, ВысотаМакета, ШиринаМакета, СтрокаЯчейки, КолонкаЯчейки)
	Результат = Неопределено;
	Если Таблица.ВысотаТаблицы > 0 Тогда
		Область = Таблица.ПолучитьОбласть(Таблица.ВысотаТаблицы - ВысотаМакета + 1,, Таблица.ВысотаТаблицы);
		Результат = Область.Область(СтрокаЯчейки, Область.ШиринаТаблицы - ШиринаМакета + КолонкаЯчейки);					
	КонецЕсли; 
	Возврат Результат;
КонецФункции 

Обработка расшифровки в модуле формы

Что мы еще упустили? Очевидно, что наш отчет настроен под определенную структуру. А пользователь при работе с отчетом вполне может "расшифровать" ячейку и получить непредсказуемый результат. Надо бы лишить его этой возможности.

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

&НаСервере
Процедура ОтработатьРасшифровку(ОписаниеОбработкиРасшифровки)
  ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
  ОбработкаРасшифровки =  Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровкиОбъект, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));
  РезультирующиеНастройки = ОбработкаРасшифровки.ПрименитьНастройки(ОписаниеОбработкиРасшифровки.Идентификатор, ОписаниеОбработкиРасшифровки.ПрименяемыеНастройки);
  Если ТипЗнч(РезультирующиеНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(РезультирующиеНастройки);
  ИначеЕсли ТипЗнч(РезультирующиеНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
    Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(РезультирующиеНастройки);
  КонецЕсли;
  СкомпоноватьРезультат();
КонецПроцедуры

Инструмент анализа процесса компоновки

Вроде бы мы рассмотрели все аспекты, кроме одного: а как нам получить соответствие имен макетов СКД  и имен секций нашего макета отчета?

Для этого был создан специальный инструмент в виде внешней обработки.

Здесь надо упомянуть о том, что при первой итерации цикла получения элементов результата, в ЭлементРезультата.Макеты содержится список описаний макетов областей компоновки данных. Из них можно взять и список параметров, и свойства самого макета, а потом связать все это с именем.

 

 

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

 

 

Понятно, что результат - табличный документ - состоит из этих областей макетов. А как они располагаются в отчете относительно друг друга? Для просмотра этого тоже есть средство:

 

 

Таким образом с помощью данной обработки легко понять, как связать имена макетов компоновки данных с именами секций своего макета и заполнить вышеупомянутое соответствие Макеты.

Дополнительно данный инструмент генерирует шаблон кода построения отчета для модуля объекта. В полученном шаблоне необходимо заполнить имена секций и, при необходимости, дописать содержимое цикла обработки ЭлементРезультата. Это необходимо сделать если вид полученного отчета посложнее простой таблицы (как в примере в начале статьи).

 

 

Подведем итоги

Рассмотренный способ обладает целым рядом преимуществ:

  • Максимальное соответствие внешнего вида шаблона и полученной формы отчета, WYSIWYG - наше всё! И даже можно устанавливать ширину колонок и она будет такой же в отчете!)).
  • Относительно небольшой объем кода, его простота, концентрация кода в одном месте (в отличие от настроек СКД, разбросанных по разным разделам)
  • Возможность пошаговой отладки.
  • Четкое разделение "зон ответственности" - вот здесь мы получаем некоторый объем данных, а вот здесь - выводим данные в отчет. (Добавление в запрос генерации названий колонок - зло!).
  • Полный контроль за выводом отдельных ячеек отчета - легко реализовать вывод разных секций в зависимости от выводимых данных (например, для контрагентов - юр.лиц выводим одну секцию, для физ.лиц - другую). Некоторые строки можно вообще пропускать (вспомним про знаменитую проблему вывода иерархического справочника).
  • Объединение произвольной группы ячеек, как горизонтальное, так и вертикальное - так же, как в примере отчета в статье. 
  • Возможность проведения расчетов, которые нельзя провести с помощью языка запросов и выражений СКД.
  • Возможность реализации нестандартного условного оформления, например, которое зависит не только от данных строки.
  • Простой и логичный способ получения данных накопления - нарастающий итог, иерархическая нумерация, разница текущего значения с последним из непустых предыдущих.
  • Такой же простой способ вывести картинки строк или другие внедренные в табличный документ объекты, например, диаграммы.
  • Возможность использовать ПроверитьВывод() и ПроверитьПрисоединение(), например для расчета итогов по странице при переменной высоте строк отчета (привет, товарная накладная!).
  • Вывод отчета в несколько "колонок". Пример из жизни: прайс-лист компьютерной фирмы: материнские платы выводятся одной таблицей на всю ширину страницы, память - двумя (по половине ширины страницы), манипуляторы - тремя.
  • Возможность использовать свою расшифровку произвольного вида - хоть ссылки, хоть структуру, хоть текст с подсказкой. Также можно убрать расшифровку из тех ячеек, где она не нужна.
  • Возможность использовать свою систему групп строк и колонок, определять свой список свернутых групп при открытии отчета

Конечно же есть и недостатки (я насчитал аж 3: один весомый и два малозначимых):

  • Самый главный недостаток - "заточенность" под конкретную структуру отчета. Хотя недостатком это является весьма условно - есть много отчетов, для которых менять структуру пользователям просто не нужно.
  • Поскольку при построении отчета мы ориентируемся на внутренние имена макетов СКД, возможна ситуация, когда при смене версии платформы механизм именования изменится и наше соответствие имен макетов "испортится". Но мне кажется этот риск имеет достаточно малое значение, поскольку он, во-первых - маловероятен, а во-вторых - его последствия легко устраняются.
  • Чисто теоретически алгоритм вывода отчета на языке 1С может работать медленнее, чем платформенный механизм вывода. Но, как правило, основные временные затраты идут на выполнение запроса и на клиент-серверный обмен, а не на формирование табличного документа. 

Методика, описанная в статье, была протестирована на платформе 8.3.18.1363.

На этом все. Как обычно приветствуются замечания / дополнения / комментарии.

К публикации приложены файлы: внешняя обработка - АнализПроцессаКомпоновки.epf  и архив с этой обработкой и выгрузкой информационной базы с рассмотренным в статье примером.

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

Наименование Файл Версия Размер
АнализПроцессаКомпоновки

.epf 16,81Kb
8
.epf 16,81Kb 8 Скачать
Пример

.zip 517,01Kb
12
.zip 517,01Kb 12 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. TMV 14 22.03.22 17:57 Сейчас в теме
Но ведь многие отчеты ЗУП так и работают: Расчетный листок, 54 и т.д.
2. Alxby 1071 23.03.22 11:26 Сейчас в теме
(1)Признаться, я с ЗУПом работал еще до "эпохи СКД", так что вполне возможно. Хотя мне кажется, что там несколько другой подход.
3. RustIG 1693 31.03.22 12:31 Сейчас в теме
(0) отличная статья! Спасибо!
Что мы еще упустили? Очевидно, что наш отчет настроен под определенную структуру. А пользователь при работе с отчетом вполне может "расшифровать" ячейку и получить непредсказуемый результат. Надо бы лишить его этой возможности.

Для анализа и работы с отчетом - пользователю делаете стандартный СКД-шный отчет без выкрутасов.
Для печати красивого отчета на стол генерального используете жесткую структуру без расшифровок.
Вуаля!
5. Alxby 1071 31.03.22 15:59 Сейчас в теме
(3)Именно так!
Появление СКД отнюдь не делает другие методы устаревшими. Даже ПостроительЗапроса и ПостроительОтчета имеет свою область применения. А кто сейчас помнит про СводнаяТаблица и СводнаяДиаграмма?
tormozit; +1 Ответить
4. RustIG 1693 31.03.22 12:34 Сейчас в теме
(0)
Самый главный недостаток - "заточенность" под конкретную структуру отчета. Хотя недостатком это является весьма условно - есть много отчетов, для которых менять структуру пользователям просто не нужно.

Пора уже перестать чувствовать себя виноватым в том, что не все отчеты строятся на СКД, и всякий раз оправдываться, что есть недостаток ....
Сделали бы через вывод в ТабДок с заданным макетом - без всяких привязок ячеек и параметров для использования расшифровок...
1с-ники порой усложняют на пустом месте....
mevgenym; ixijixi; +2 Ответить
6. Alxby 1071 31.03.22 16:03 Сейчас в теме
(4)
Сделали бы через вывод в ТабДок с заданным макетом - без всяких привязок ячеек и параметров для использования расшифровок...
1с-ники порой усложняют на пустом месте....

Вот здесь не согласен. СКД-шная система расшифровок довольно удобна. Я специально в примере отчета в статье рассмотрел оба варианта - со стандартной расшифровкой СКД и произвольной расшифровкой. Лучше предоставить разработчику возможность выбора в зависимости от задачи.
7. tormozit 6870 01.03.23 08:56 Сейчас в теме
Для удобного исследования макета компоновки в ИР есть это https://www.hostedredmine.com/issues/957660
8. Alxby 1071 01.03.23 09:00 Сейчас в теме
Оставьте свое сообщение

См. также

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

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

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

07.02.2023    3298    quazare    7    

36

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

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

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

1 стартмани

16.01.2023    1760    schthaxe    3    

27

[После] Новогодние задачи 2023

Математика и алгоритмы О жизни Бесплатно (free)

Не желаете ли очередную порцию интересных задач?

03.01.2023    1366    Alxby    20    

7

Если хочется низко-низкоуровневого программирования с битами и байтами

Математика и алгоритмы Платформа 1С v8.3 Абонемент ($m)

Все знают, что подавляющее большинство современных компьютеров работает в двоичном коде, т.е. оперирует всего двумя значениями - битами - "0" и "1". Потом из них складываются байты, слова, кило-, мега- и гигабайты etc. Но что происходит внутри процессора, как именно обрабатываются двоичные числа, например выполняются арифметические операции? Об этом — в публикации. Статья, я думаю, будет особенно интересна тем читателям, у которых во время обучения не было соответствующих курсов.

1 стартмани

01.12.2022    1003    Alxby    20    

10

Разрабатываем отчет на СКД, содержащий данные из расширения

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

Ввиду развития механизма расширений в 1С часто приходится сталкиваться с задачей, когда требуется разработать отчет, который должен строиться как по данным конфигурации, так и по данным расширения. И здесь присутствует нюанс, о котором я и хотел бы поведать в этой статье. Расскажу также о способе решения, который я использую.

17.10.2022    3973    al_zzz    9    

44

Хитрости СКД. Часть 4

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

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Работа с 2 схемами в одном отчете, когда данные одной схемы являются исходными для другой. Копирование пользовательских отборов из одной схемы в другую. Корректная модификация формы отчета БСП.

12.10.2022    5115    milkers    17    

45

Перечень множественных значений в ячейке динамического списка. Как стало и как было

Механизмы платформы 1С Платформа 1С v8.3 План видов характеристик Абонемент ($m)

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

1 стартмани

20.09.2022    3278    Alxby    9    

47

Тестовая задача: таблица умножения на СКД

СКД Платформа 1С v8.3 Бесплатно (free)

Альтернативное решение предложенной задачи.

14.06.2022    4235    81    echo77    6    

38

Хитрости СКД. Часть 3

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

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.

28.05.2022    6676    milkers    11    

87

Отчет на СКД с использованием форм из БСП. Варианты передачи списка значений в параметр СКД

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

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

1 стартмани

20.04.2022    5345    eugene-p    8    

28

Редактирование данных в ячейках СКД (простая реализация)

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

На примере справочника "Номенклатура" рассмотрим, как в отчёте можно редактировать его реквизиты, и изменения мгновенно будут записываться в элемент справочника.

1 стартмани

11.03.2022    8556    7    Flashill    20    

52

Убираем параметры из отбора СКД

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

Заметка о некоторых технических нюансах параметров данных и отборов СКД.

17.02.2022    5419    Yashazz    29    

31

Шаблон отчета на СКД (обычные формы)

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

Улучшенный шаблон отчёта СКД, реализованный на обычных формах. Лаконичный и функциональный, весь необходимый минимум для управления отчётом вынесен на форму отчёта, что избавляет рядовых пользователей от необходимости лезть внутрь настроек отчёта. Форма сделана гибкой и позволяет легко себя адаптировать под Ваши потребности. Ряд элементов формы сделан сворачиваемыми и растягиваемыми.

2 стартмани

14.02.2022    6714    20    Eugen-S    4    

9

Отладка СКД

СКД Система компоновки данных Бесплатно (free)

На митапе «Практика применения СКД» выступил ведущий разработчик 1С аутсорсинговой компании Programming Store Павел Шемякин. Павел рассказал, как бороться с нежелательной «оптимизацией» запроса СКД, какие инструменты для отладки СКД можно использовать – в чем их отличия и преимущества, и показал, как работать с консолью компоновки данных – на какие элементы структуры XML-файла макета СКД обращать внимание при поиске причин неправильной работы отчета.

08.02.2022    10620    ProgrammingStore    5    

85

Программная работа и компоненты СКД

СКД Система компоновки данных Бесплатно (free)

На митапе «Практика применения СКД» выступил архитектор Digital Business Петр Базелюк. Он рассказал о том, как работать с СКД программно, и как, используя общедоступную библиотеку FoxyLink, создать свой процессор вывода результата СКД напрямую в формат JSON или в CSV.

04.02.2022    4560    pbazeliuk    4    

69

Доработка типового отчета на СКД с помощью расширения

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

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

1 стартмани

09.01.2022    9388    Spacer    9    

26

Реализация отборов на форме с помощью СКД

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

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

28.12.2021    14570    quazare    6    

131

Варианты применения СКД вне отчетов в отраслевых конфигурациях

СКД Система компоновки данных Бесплатно (free)

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

18.11.2021    3716    drmaxart    0    

42

Кейсы решения задач на СКД

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

Разработчик 1С в компании Neti Александр Крынецкий выступил на Infostart Meetup, посвященном практике работы с СКД. Александр поделился с коллегами кейсами по решению сложных задач при работе с СКД.

08.11.2021    6176    echo77    7    

99

Грабли на СКД

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

Наиболее частые проблемы, с которыми сталкиваются программисты 1С при разработке отчетов на СКД.

02.11.2021    15199    echo77    17    

136

СКД: 5 советов, как сделать лучше

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

Несколько примеров решения задач с использованием разных подходов

27.10.2021    12562    Neti    19    

192

Программное открытие отчета СКД с параметрами и отбором

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

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

07.08.2021    29230    Eugen-S    35    

103

Объект "Схема запроса" и расширения языка запросов СКД

СКД Платформа 1С v8.3 Запросы Россия Бесплатно (free)

Если использовать объект СхемаЗапроса для модификации текстов запросов, содержащих расширения СКД, то могут возникнуть ошибки времени исполнения. И полученных запрос не будет работать. В статье расскажу, как этого избежать.

18.07.2021    3401    mysm    14    

27

Изменение расшифровки макета СКД до компоновки

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

Это не про работу с данными расшифровки. Это про изменение расшифровок полей ДО того, как СКД выполнилась. Быстрый способ сделать нужные расшифровки.

12.07.2021    4366    Yashazz    7    

37

Формирование отчета СКД с расшифровкой из обработки

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

Формирование отчета СКД из обработки немного отличается от формирования из отчета.

27.04.2021    6837    John_d    14    

74

Эффективные приемы разработки

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

На Infostart Meetup Ekaterinburg.Online выступил Сергей Наумов – руководитель центра аналитики и консалтинга WiseAdvice. Сергей поделился с коллегами приемами разработки, которые помогут избежать потенциальных проблем при реализации сложных проектов.

07.04.2021    5334    SergeyN    13    

39

Полезные примеры СКД, ч.2

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

Еще несколько примеров решения задач в СКД.

06.04.2021    18271    Neti    9    

215

Полезные примеры СКД, ч.1

СКД Система компоновки данных Бесплатно (free)

Подборка видео по решению различных задач в отчетах на СКД.

30.03.2021    23043    Neti    21    

364

Динамическая расшифровка СКД (на примере отчета)

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

Предлагаю Вашему неподкупному вниманию вариант более-менее унифицированной реализации динамически формирующейся расшифровки СКД на примере простейшего отчета для конфигурации УТ 11.

1 стартмани

08.12.2020    3675    mr_sav    3    

23

СКД: все, что вы хотели знать о подмене схемы компоновки данных в отчетах и обработках

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

Довольно часто на различных тематических форумах задается вопрос, можно ли использовать в отчете/обработке несколько схем компоновки данных, подменяя одну другой по мере надобности? При этом желательно, чтобы и пользовательские настройки при смене схемы менялись соответственно.

1 стартмани

07.12.2020    12031    user1502278    23    

58

Программная корректировка при выводе отчета СКД

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

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

1 стартмани

08.10.2020    25404    dabu-dabu    18    

238

Пользовательское поле СКД одной процедурой

СКД Платформа 1С v8.3 Бесплатно (free)

Быстрое создание пользовательского поля "выражение" одной процедурой

05.08.2020    3170    Yashazz    0    

23

Быстрое формирование наборов данных Объект схемы СКД

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

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

1 стартмани

05.07.2020    12702    8    Алексей Воробьев    16    

56

Роль "Остатки" поля набора данных СКД в отчете и в расшифровке

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

В СКД создан набор данных "Запрос". Запрос выполняется к виртуальной таблице "Остатки и обороты", периодичность регистра "Авто", выбираются все измерения и ресурсы регистра, а так же выбирается Регистратор и ПериодСекунда. Для полей содержащих остатки устанавливается роль "Остатки". Для полей "Регистратор" и "ПериодСекунда" устанавливается роль "Период". Для поля "Регистратор" устанавливается выражение упорядочивания.

24.05.2020    13359    kasper076    19    

26

СКД. Использование Менеджера временных таблиц в системе компоновки

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

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

29.04.2020    20108    ixijixi    50    

112

Ограничения полей, или как обмануть СКД?

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

Каждое из ограничений полей можно обойти. Рассмотрим варианты обхода и способы обезопасить свой отчет.

15.04.2020    28944    SeiOkami    43    

125