Лайфхак работы с СКД. Собираем отчет.

25.10.19

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

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

Введение

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

Раньше данный метод я применял достаточно часто, особенно в периоды острой нехватки времени на выполнение задачи. 

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

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

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

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

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

Итак, начнем:

 

Подготовка

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

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

Создаем новый внешний отчет. Нарисуем форму отчета и "пробежимся" по всем настройкам, которые нужно "нащелкать".

Здесь у нас основные реквизиты - Подразделение, Дата начала, Дата окончания. Так же есть "Результат" - с типом "Табличный документ".

Рис.1.Основная форма отчета.

 

Реквизиты и компоновка объекта "отчет" будут такими:

Рис.2. Настройка формы отчета. Определение реквизитов. Компоновка на форме.

 

На что обратим внимание в свойствах формы:

Рис.3. Результат отчета, данные расшифровки и настройки.

 

Пожалуй, это основные моменты самого объекта "отчет". Теперь, переходим к программной части отчета.

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

 

В общем виде содержимое данной процедуры (ее можно скопировать) должно выглядеть вот так:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка 	   = Ложь;
	ОсновнаяТаблицаЗапроса     = ПолучимТаблицуДанных();

	СхемаКомпоновкиДанных 	   = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Настройки 		   = КомпоновщикНастроек.ПолучитьНастройки(); 

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

 

Обратим внимание, на передачу ВнешнегоНабораДанных в ПроцессорКомпоновкиДанных. Мы передаем таблицу "ОсновнаяТаблицаЗапроса", данные которой получены функцией ПолучимТаблицуДанных().

 

Опишем в модуле отчета основную функцию  ПолучимТаблицуДанных(), которая определит в дальнейшем нашу таблицу внешнего источника, выглядит она вот так:

&НаСервере
Функция ПолучимТаблицуДанных()
	
	ТаблицаРезультат = Новый ТаблицаЗначений;
	
	ТаблицаРезультат.Колонки.Добавить("Дата");
	ТаблицаРезультат.Колонки.Добавить("Номер");
	ТаблицаРезультат.Колонки.Добавить("Реализация");
	ТаблицаРезультат.Колонки.Добавить("Организация");
	ТаблицаРезультат.Колонки.Добавить("Подразделение");
	ТаблицаРезультат.Колонки.Добавить("Контрагент");

	ТаблицаРезультат.Колонки.Добавить("Номенклатура");
	ТаблицаРезультат.Колонки.Добавить("ЕдиницаИзмерения");
	ТаблицаРезультат.Колонки.Добавить("Количество");
	ТаблицаРезультат.Колонки.Добавить("Сумма");
	ТаблицаРезультат.Колонки.Добавить("СтавкаНДС");

	ТаблицаРезультат.Колонки.Добавить("СуммаБезНДС"); 
	ТаблицаРезультат.Колонки.Добавить("СебестоимостьБезНДС");
	ТаблицаРезультат.Колонки.Добавить("ТипНоменклатуры");
	ТаблицаРезультат.Колонки.Добавить("Цена");
	ТаблицаРезультат.Колонки.Добавить("ГруппаНоменклатуры");
	
	ТаблицаРезультат.Колонки.Добавить("РаспределенияЗатрат");
	ТаблицаРезультат.Колонки.Добавить("Процент");
	ТаблицаРезультат.Колонки.Добавить("Склад");
	
	ТаблицаРезультат.Колонки.Добавить("НадбавкаПоГруппе");
	ТаблицаРезультат.Колонки.Добавить("СебестоимостьСНадбавкой");
	ТаблицаРезультат.Колонки.Добавить("ВаловаяПрибыль");
	ТаблицаРезультат.Колонки.Добавить("Премия");

// ==== далее наполним эту таблицу данными из запроса(ов) ====
// ==== Пишем запрос, который соберет (по "документам") все необходимые "реализации", "номенклатуры" и прочих реквизитов

	ПоискДанных = Новый Запрос("ВЫБРАТЬ
	                           |	РасходнаяНакладная.Ссылка КАК Реализация,
	                           |	РасходнаяНакладная.Дата КАК Дата,
	                           |	РасходнаяНакладная.Организация КАК Организация,
	                           |	РасходнаяНакладная.Подразделение КАК Подразделение,
	                           |	РасходнаяНакладная.Контрагент КАК Контрагент,
	                           |	РасходнаяНакладнаяЗапасы.Номенклатура КАК Номенклатура,
	                           |	РасходнаяНакладнаяЗапасы.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                           |	РасходнаяНакладнаяЗапасы.Количество КАК Количество,
	                           |	РасходнаяНакладнаяЗапасы.Сумма КАК Сумма,
	                           |	РасходнаяНакладнаяЗапасы.СтавкаНДС КАК СтавкаНДС,
	                           |	0 КАК СуммаБезНДС,
	                           |	0 КАК СебестоимостьБезНДС,
	                           |	РасходнаяНакладнаяЗапасы.Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                           |	РасходнаяНакладнаяЗапасы.Цена КАК Цена,
	                           |	РасходнаяНакладная.Номер КАК Номер,
	                           |	РасходнаяНакладнаяЗапасы.Номенклатура.Родитель КАК ГруппаНоменклатуры,
	                           |	РасходнаяНакладнаяЗапасы.Номенклатура.Родитель.КатегорияНоменклатурыДляРаспределенияЗатрат КАК РаспределенияЗатрат,
	                           |	ВЫБОР
	                           |		КОГДА РасходнаяНакладнаяЗапасы.Номенклатура.Родитель.КатегорияНоменклатурыДляРаспределенияЗатрат = ЗНАЧЕНИЕ(Справочник.КатегорииНоменклатурыДляРаспределенияЗатрат.ПустаяСсылка)
	                           |			ТОГДА 0
	                           |		ИНАЧЕ РасходнаяНакладнаяЗапасы.Номенклатура.Родитель.КатегорияНоменклатурыДляРаспределенияЗатрат.Процент
	                           |	КОНЕЦ КАК Процент,
	                           |	РасходнаяНакладная.СтруктурнаяЕдиница КАК Склад
	                           |ИЗ
	                           |	Документ.РасходнаяНакладная КАК РасходнаяНакладная
	                           |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Запасы КАК РасходнаяНакладнаяЗапасы
	                           |		ПО РасходнаяНакладная.Ссылка = РасходнаяНакладнаяЗапасы.Ссылка
	                           |ГДЕ
	                           |	РасходнаяНакладная.Дата МЕЖДУ &Дата1 И &Дата2
	                           |	И РасходнаяНакладная.Проведен = ИСТИНА
	                           |	И РасходнаяНакладная.Подразделение = &Подразделение
	                           |	И РасходнаяНакладнаяЗапасы.Номенклатура.ТипНоменклатуры = &ТипНоменклатуры
	                           |	И НЕ РасходнаяНакладная.Комментарий ПОДОБНО &Комментарий
	                           |
	                           |УПОРЯДОЧИТЬ ПО
	                           |	Контрагент,
	                           |	Дата");



// ==== Определение процентов и категорий распределения затрат

        ОпределениеПроцентовИКатегорий();

// ==== Расчет ресурсов "Надбавки по группе", "Себестоимости...", "Валовой прибыли", "Премии"


        //ОпределениеНадбавокИВаловойПрибыли1(); // метод 1

        //ОпределениеНадбавокИВаловойПрибыли2(); // метод 2

        ОпределениеНадбавокИВаловойПрибыли3(); // метод 3


// ==== Таблица "собрана", возвращаем результат:

        Возврат ТаблицаРезультат;

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

 

Первоначальная "идея" создания этой функции - собрать данные (любым правильным или неправильным способом) в описанную выше ТаблицаРезультат.

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

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

 

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

 

Так, будем, считать, что я собрал все необходимые данные в эту таблицу. Переходим к реализации в СКД.

 

Реализация в СКД

Теперь, "нащелкаем" компоновку СКД.

Создаем новый "НаборДанных1" и в имени объекта указываем "ДанныеОтчета" (см.рис.4). Затем, определяем все необходимые поля из таблицы "ДанныеОтчета". Прописываем типы, форматы, доступные значения и параметры редактирования.

Рис.4. Выбор объекта для набора данных. Определение полей отчета.

 

Затем, идем в закладку "Ресурсы", где определяем "числовые значения" отчета. Так же, "накликаем мышкой" (рис.1).

Рис.5. Ресурсы отчета.

 

Переходим на закладку "Настройки" и проводим уже окончательную настройку отчета - то, как он будет скомпонован (см. Рис 6). В "Выбранные поля" перемещаем реквизиты и ресурсы отчета. Сам отчет компонуем по реквизитам.

Рис.6. Итоговая компоновка отчета.

 

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

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

Рис.7. Готовый отчет СКД, созданный на основе собранного набора данных.

 

Заключение

Так, наконец, мы собрали отчет в СКД. Рабочий, с понятными настройками. Давайте отметим, какие основные плюсы и минусы данного метода:

 

Начнем с плюсов:

1.Небольшое время "сборки" отчета средней сложности.

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

3.Простая "расширяемость" отчета (легко добавить новые колонки).

4.Легко поменять алгоритмы расчета колонок (см выше).

 

Минусы, пожалуй, такие:

1.Невозможно расшифровать как собирается "число" в данном отчете. Никак.

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

 

Я описал лишь "базовый" подход к работе с наборами данных в системе компоновки данных.

Отмечу, что я не ставил задачу расписывать как работать с закладками "связи наборов данных", "вычисляемые поля" и т.д. Это, кончено, все возможно. Если захотите, самостоятельно вы сможете, например, соединить результаты запроса и таблицу набора данных - это тоже будет работать. Все очень удобно и главное - понятно.

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

Всем спасибо, что дочитали данную статью до конца, надеюсь, что она оказалась вам полезна. Всем привет!

Все операции я делал на платформе 8.3.13.1865 и УНФ 1.6.

 

Предыдущие материалы

Так же, прошу посмотреть мои предыдущие статьи:

Работа с механизмом отладки 1С. Базовые настройки

1С + IIS + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let's encrypt

Дополнительные расходы на основе перемещения запасов в УНФ (пошаговая разработка расширения конфигурации)

Методика независимой системы "Подписки на события"

Подсистема "Подписки на события" (продолжение)

скд набор данных компановка

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    122076    670    389    

713

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    4035    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

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

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    8155    20    John_d    25    

123

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

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

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

05.12.2023    4652    PROSTO-1C    13    

61

Модель СКД

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

DSL для работы с СКД.

1 стартмани

15.11.2023    5805    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    6698    accounting_cons    5    

29

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

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

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

01.09.2023    4518    KVIKS    15    

80
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. VmvLer 25.10.19 11:57 Сейчас в теме
Пишу мнение на ходу, т.е. читаю абзац и тут же мнение

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

2. Подготовка: Никакая это не подготовка, а набор хаотичных действий. Мысли вашего изложения не текут как
ручеек в горы в долину, а прыгают аки горные бараны завидев снежного барса.
Функция ПолучимТаблицуДанных() - что это за треш и угар, зачем учить плохому?
3. Реализация в СКД: Очевидные скрины конструктора СКД. Спасибо, что очень мало текста, ведь было бы больно читать о том, что итак очевидно.
4. Заключение: Просто субъективные выводы ...ни о чем.

Такие дела. Взялись писать лайфак, то хотя бы почитайте что это такое и как их пишут.
Neuroproton; Bob_Dobr; MrAsain; VVi3ard; chilyagin; ice-net; cefew; Yashazz; Lyns_owner; HAMMER_59; AlexandrSmith; rar_xxx; mironoff87; lunjio; rpgshnik; PLAstic; artms; aexeel; EasyWay; depi; jaroslav.h; mmch; Spacer; deaddy64; Pawlick; BurlakovIvan; DmitrySinichnikov; dhurricane; KotBegemot77; XSlava; +30 4 Ответить
5. wowik 885 25.10.19 13:30 Сейчас в теме
(1) не вижу чтобы вы написали на инфостарте хотя бы одну статью, интересно было бы посмотреть. Автору статьи +1.
Cthulhu; user1353054; botokash; TerveRus; chembulatov76; aximo; +6 6 Ответить
6. VmvLer 25.10.19 14:02 Сейчас в теме
(5) у меня тут другое амплуа.
dr.zl0; AlexandrSmith; Pawlick; +3 Ответить
39. AnryMc 849 05.11.20 09:49 Сейчас в теме
(6)
у меня тут другое амплуа.


04.06.20 18:07
так что ваш список аргументов по типизизации как раз под стать ботам.

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


04.06.20 17:33
Я чуял, что в этой теме надо постить рецеп каре ягненка.


04.06.20 17:28
вообщем бида бидулька


04.06.20 17:22
если ваши текущие поделки рискуют оказаться на помойке, то это просто естественный ход событий, а не повод для насаждения догм.
смиритесь и работайте с прицелом на новую реальность.


04.06.20 16:52
04.06.20 16:44

04.06.20
поздравляю - не нойте.


P.S. Типа: «Оди́н день ...» VmvLer'а
P.P.S. Дальше не смотрел т.к. АМПЛУА не понравилось...
ixijixi; Bob_Dobr; Cthulhu; OzzY; tuprikov; uncle_Vasya; +6 Ответить
2. Yashazz 4709 25.10.19 12:44 Сейчас в теме
Жесть. Я это ещё 12 лет назад делал, см. мои, хотя и обруганные многими, "полезняшки" https://infostart.ru/public/1133780/
vadver; AlexandrSmith; Andreeei; RibD; Spacer; Поручик; DmitrySinichnikov; +7 Ответить
3. acanta 25.10.19 13:09 Сейчас в теме
Очень полезная информация. Спасибо большое.
chembulatov76; wowik; aximo; +3 7 Ответить
4. user1166203 25.10.19 13:11 Сейчас в теме
Прям почувствовал боль SQL сервера от этого отчета...
Andreeei; lunjio; Дейл; qwinter; aexeel; ice-net; Pawlick; BurlakovIvan; DmitrySinichnikov; XSlava; sagatel; +11 1 Ответить
7. zqzq 23 25.10.19 15:08 Сейчас в теме
Так и не понял, зачем ЭТО, когда можно в 10 раз быстрее схему СКД с запросом накидать и форму по умолчанию. В качестве быстрой сборки отчета точно не подойдёт, только для специфичных условий, например в отчет передать результат другого отчета СКД.
Если выкинуть всю лирику, вывод: внешние наборы данных иногда полезны, но чаще вредны.
Stref75; Somebody1; vadver; ice-net; rar_xxx; Andreeei; igormiro; artms; herfis; Spacer; Pawlick; Sergik_D; sashocq; u2b; yukoz; DmitrySinichnikov; Bassgood; serega9507585993; XSlava; achernobrovin; +20 1 Ответить
8. BackinSoda 25.10.19 15:54 Сейчас в теме
Лайфхак, собственно, в использовании внешнего набора данных ?
Плюсы спорные, то же время и написание запроса, что тут, что в скд самом. А вот невозможность расшифровки печалит.
Somebody1; VVi3ard; Andreeei; Pawlick; DmitrySinichnikov; Bassgood; +6 Ответить
9. marat3581525 25.10.19 15:58 Сейчас в теме
Автор молодец, хорошая статья. Не понимаю почему так коллеги по ремеслу набросились, автор старался.

Очень действенный метод для тех, кто только недавно работает с СКД. Иногда бывает сложно написать запрос, в котором будут нужные нам данные. Проще самому создать таблицу и подать ее на вход в СКД и там уже экспериментировать с внешним видом.
Tutr; jollyk; zadoy; chembulatov76; ids79; wowik; aximo; +7 9 Ответить
10. Bassgood 1425 25.10.19 16:45 Сейчас в теме
(9) Только называть "лайфхаком" работу с внешними наборами данных СКД, о которых и так уже имеется масса информации, как то не айс, это просто очередное описание использования возможностей СКД.
Yashazz; IgorS; ids79; DmitrySinichnikov; +4 Ответить
11. DmitrySinichnikov 285 25.10.19 21:55 Сейчас в теме
"Создаем свою форму" - зачем?!??!
Andreeei; XSlava; sashocq; +3 Ответить
12. Synoecium 778 25.10.19 23:16 Сейчас в теме
это скорее не лайфхак, а троллейбус из буханки :))
При этом метод действительно полезен, но автор не раскрыл на примере наглядные плюсы внешних наборов данных(типа обход ограничений скд), не раскрыл тему расшифровки при таком способе и т.д. Поэтому статья вызывает противоречивые чувства, больше недоумение
chilyagin; утюгчеловек; philya; XSlava; +4 Ответить
13. SeiOkami 3423 27.10.19 17:35 Сейчас в теме
Всё хорошо. Но в чём состоит "лайфхак" ?
14. Mellow 58 28.10.19 01:40 Сейчас в теме
Не вижу смисла в данной статье, в даном примере делается простой запрос на скд зачем городить огород. Если хочеш помочь людям то лучше б назвал лайфхак свой работа с внешними наборами данних в скд
15. DedMoroz1983 2 28.10.19 07:56 Сейчас в теме
Думал вах, оказалось ох.
Andreeei; IgorS; +2 Ответить
16. sokir 2 28.10.19 10:37 Сейчас в теме
Открыл Америку!
Мы 10 лет программили незная про внешние источники.
17. ice-net 19 28.10.19 11:48 Сейчас в теме
Существенный минус это скорость работы. Пользовательские отборы обрабатываются уже после получения всех данных. Бывают случаи, когда в запросе все получить невозможно, или непрактично, тогда Да, но стоит подумать как передавать пользовательские отборы в запрос получения данных для отчета, а то на больших базах будет долго формироваться, когда причин этому нет
ixijixi; vadver; Andreeei; Bassgood; +4 Ответить
18. timeforlive 15 29.10.19 05:04 Сейчас в теме
Лайфхак заявлен на быстроту создания отчета, но мне что-то подсказывает, что быстрее будет сделать внешний отчет.
Andreeei; +1 Ответить
19. Praetori2017 31.10.19 10:31 Сейчас в теме
Зашел по ссылке из письма рассылки инфостарта. Зашел из-за этого "быстро оформить отчет." Думал тут вообще про макеты.
20. AlexHelmer 1706 31.10.19 14:42 Сейчас в теме
Нормальная статья. Я сам иногда пользуюсь таким методом когда собираю данные из несобираемого. например из базы 1с и DBF файлов. В СКД легко оформить читаемый отчет это его большой плюс и возможность и экспериментировать выходными формами как самому, так и отдать более-менее продвинутому клиенту.
user1353054; AlexandrN; molly17; aximo; +4 Ответить
21. darkdan77 339 04.11.19 08:48 Сейчас в теме
Ребята, давай жить дружно. Статья не тянет на лайфхак? Может и не тянет. Хотя, я думаю, многим будет полезно узнать о наборе данных "Объект" и, самое главное, ПРОИЗВОЛЬНЫМ заполнением полей набора данных Объект, где данные могут быть не только из базы 1с, а также из других источников (например файлов или других баз, в общем, куда запросом не залезешь). Вообще то, тема очень интересная. Предлагаю дополнить эту статью своими соображениями (статьями). Это будет продуктивнее, чем ругать автора.
И еще, если статья кому-то полезна, то она имеет право на жизнь.
AlexandrN; mikl79; user925427; user1194102; +4 Ответить
22. herfis 498 04.11.19 15:21 Сейчас в теме
В копилку продвинутых приемов ректального программирования.
Ну или называть и подавать статью следовало несколько по-другому.
23. philya 77 28.11.19 01:20 Сейчас в теме
1.Невозможно расшифровать как собирается "число" в данном отчете. Никак.


Автор. Ты вводишь в заблуждение.

Прописываешь в форме отчета процедуру расшифровки, которая из данных расшифровки определяет, какую ячейку жмакнул пользователь и стоишь еще один отчет, если стандартное "расшифровать..." не подходит (в таблицу данных можно сложить еще немного данных, которые сгруппируются при выводе).
25. user1194102 28.02.20 20:54 Сейчас в теме
(23) А пример где? Вот в чем разница, одни могут не только написать , но и пример дать. А другие могут только говорить, сразу видно теоретик писал комментарий.
28. philya 77 29.02.20 16:59 Сейчас в теме
(25) Пример? На обработку расшифровки табличного поля вешается обработчик типа такого.

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	Перем ВыполненноеДействие;
	
	Если Не (ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле = "РасходОтгрузкаКоличествоОстаток"
		Или ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле = "РасходОтгрузкаКоличествоМетрыКвадратные"
		Или ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле = "РасходПеремещениеСОХКоличествоОстаток"
		Или ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле = "РасходПеремещениеСОХКоличествоМетрыКвадратные") Тогда
		
		Возврат;
	КонецЕсли;
			
	СтандартнаяОбработка=Ложь;
    ОбработкаРасшифровки=Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
	
	
    ДополнительныеДействия=Новый СписокЗначений;
    ДополнительныеДействия.Добавить("РасшифроватьОтгрузку", "Отгрузка по покупателям"); 
    Настройки=ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,,ДополнительныеДействия);
    Если Настройки<>Неопределено Тогда
        КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
        ЭлементыФормы.Результат.Очистить();
        СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
    Иначе
		Если ВыполненноеДействие="РасшифроватьОтгрузку" Тогда
			СтруктураОтбора = Новый Структура("Номенклатура, НомерСуперИнтервала, НижняяГраницаИнтервала", Неопределено, Неопределено, Неопределено);
			
			Родители = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьРодителей();
			
			Для сч = 0 По Родители.ВГраница() Цикл
				Для каждого ПолеРасшифровки Из Родители[сч].ПолучитьПоля() Цикл
					ЗначениеПоля = Неопределено;
					Если СтруктураОтбора.Свойство(СтрЗаменить(ПолеРасшифровки.Поле, ".", ""), ЗначениеПоля) Тогда
						Если ЗначениеПоля = Неопределено Тогда
							СтруктураОтбора.Вставить(СтрЗаменить(ПолеРасшифровки.Поле, ".", ""), ПолеРасшифровки.Значение);
						КонецЕсли;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			
			СформироватьРасшифровкуОтгрузки(СтруктураОтбора);
			
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Показать
user1194102; +1 Ответить
29. user1194102 29.02.20 17:29 Сейчас в теме
24. user1194102 28.02.20 20:52 Сейчас в теме
Отличная статья, спасибо огромное автору Дмитрий Никс, да статей таких много, но все либо отрывочно передергивают курсы, либо мысли не могут связать. Да и по курсам вроде у разработчиков, все описано как работает, а начнешь делать везде частный случай, а для практики материала недостаточно. А тут и объяснение подробное и примеры есть конкретные. И любой самописный отчет можно быстро пристроить в СКД. 5+ за материал!
26. user1194102 28.02.20 21:26 Сейчас в теме
А вот и доказательство, произвольный запрос и отчет готов. Давно искал такое решение.
Функция ПолучимТаблицуДанных()
	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПРЕДСТАВЛЕНИЕ(ЗаказНаПроизводство.Ссылка) КАК Документ,
		|	ПРЕДСТАВЛЕНИЕ(ЗаказНаПроизводствоПродукция.Номенклатура) КАК Номенклатура,
		|	ЗаказНаПроизводствоПродукция.Количество
		|ИЗ
		|	Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство КАК ЗаказНаПроизводство
		|		ПО ЗаказНаПроизводствоПродукция.Ссылка = ЗаказНаПроизводство.Ссылка
		|ГДЕ
		|	ЗаказНаПроизводство.Дата МЕЖДУ &ДатаНачала И &ДатаКонца";
	
	Запрос.УстановитьПараметр("ДатаКонца", ДатаКонца);
	Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ТаблицаРезультат = РезультатЗапроса.Выгрузить();
	
	
	Возврат ТаблицаРезультат;

КонецФункции
Показать
Прикрепленные файлы:
27. user1194102 28.02.20 22:08 Сейчас в теме
Даже расшифровка работает для документов
Молодец автор, фантастика, любой сложности отчет можно поместить в таблицу и вывести в нормальный отчет с расшифровками и группировками
Прикрепленные файлы:
30. Lyns_owner 355 19.05.20 16:18 Сейчас в теме
Что-то я не понял, в чем лайфхак? Что можно делать очевидные вещи, но в 5 раз дольше и неудобнее?
Статья из цикла статей "Как открыть папку, а потом ее закрыть" с 20-ю скриншотами.
webester; Yashazz; +2 Ответить
31. Yashazz 4709 19.05.20 18:16 Сейчас в теме
(30) а скоро любые очевидные азы будут подавать как "лайфхаки", и пипл радостно будет хавать, особенно пионэры, каковым лень книжки читать и курсы смотреть. А тут раз-два, круто, и плевать, что это банальный и чреватый многими побочками способ. Гляньте, сколько за такую хрень автору плюсов-то накидали)
webester; +1 Ответить
32. webester 26 20.05.20 03:40 Сейчас в теме
(30)(31)Вы как будто первый день на инфостарте. Тут и статья была с "лайфхаком" по винрару, которая рассказывала в нескольких абзацах про одну галочку. И серия статей про "хитрый ход" для передачи файла с клиента на сервер через хранилище. И обработки которые дублируют функционал типовых конфигураций для которых они написаны. И статьи которые рассказывают, про то, что уже как триста лет лежит на итс. И что-то еще, не помню уже. Ничего не меняется с годами. Не стало не лучше, не хуже. Человек знакомится с программированием и пишет полезные с его точки зрения статьи. Все через это проходят. Я аж бложек пилил для этих целей. Вот к примеру целую статью написал про параметры в СКД. Самому теперь смешно.
33. пользователь 20.05.20 10:26
Сообщение было скрыто модератором.
...
34. webester 26 20.05.20 14:20 Сейчас в теме
(33)Написал развернутый ответ, что все таки надо быть снисходительнее. Потом посмотрел публикации автор не новичок совсем.... тогда все думаю справедливо
35. unichkin 1559 20.05.20 19:24 Сейчас в теме
Структуру таблицы для отчета лучше получать так:
	Схема = ЭтотОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	ТаблицаНабора = Новый ТаблицаЗначений;
	Для каждого ПолеНабора Из Схема.НаборыДанных[0].Поля Цикл
		Если ТипЗнч(ПолеНабора) = Тип("ПолеНабораДанныхСхемыКомпоновкиДанных") Тогда
			ТаблицаНабора.Колонки.Добавить(ПолеНабора.Поле, ПолеНабора.ТипЗначения);			
		КонецЕсли; 	
	КонецЦикла; 
Показать
vadver; BackinSoda; +2 Ответить
36. Yashazz 4709 21.05.20 15:52 Сейчас в теме
(35) Верно. Вот вам очевидно, мне очевидно, а некоторым нет... Некоторые, вдобавок, ещё и тип набора не проверят, ещё и прохлопают, что он в схеме может быть не один... Некоторые даже не знают, что есть вложенные наборы... Зато, пнимаиш, лайфхак)))
37. Yashazz 4709 22.05.20 15:11 Сейчас в теме
Подумал ещё и понял, что, в общем, такие косорукие пионэры - это хорошо. Чем больше они накосячат, тем больше нам потом работы. Вот только престиж профессии жалко...

Ну, хотя, если руководство ИС считает, что подобные ламерские позорные заходы в "Выборе редакции" не роняют престиж ресурса, то - флаг в руки)
38. 7OH 69 26.05.20 21:06 Сейчас в теме
"считают, язык запросов 1с и СКД - это одно и тоже..."
Серьёзно ?
У СКД есть свой язык запросов ?
Похоже на мнение о том, что HTML - это язык программирования.
СКД всего лишь меняет запрос, но вполне прогнозируемо (при наличии опыта).
А вот та пост обработка построения табличного документа, в которую доступа нет - это и языком назвать сложно.
Оставьте свое сообщение