Приемы работы с СКД: делаем за 5 минут то, на что у других уйдет час

Публикация № 864434 03.09.18

Приемы и методы разработки - СКД

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

Я поделюсь опытом, как сложное сделать простым: как сократить (и даже отказаться) от написания кода при выводе отчетов.

«Лучше день потерять, потом за 5 минут долететь…» – это на 100% про систему компоновки данных. Механизмы компоновки многим непонятны – не очевидно, что это, зачем это нужно и как работает. Но в компоновке надо разбираться, потому что она открывает очень интересные возможности.

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

 

Как избежать вывода отчета «кодом»

Начнем с первого вопроса – как избежать того, чтобы выводить отчет «кодом», как сделать его на компоновке, не прибегая к сложным запросам.

 

Вывод для проекта пройденных и предстоящих контрольных точек

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

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

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

Оказалось, что разработчик хотел в процедуре «ПриКомпоновкеРезультата» составить таблицу значений с этапами, обработать ее в цикле (для определения того, пройден этап или еще нет), а в одной из колонок будет в виде текста скомпонованы нужные мне этапы. Результат в свою очередь подать на вход компоновки с помощью набора данных вида «Набор-объект».

 

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

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

  • Готовим данные путем объединения запросов – выбираем все необходимые контрольные точки и технические проекты.

 

И с помощью функций «СоединитьСтроки» и «ТаблицаЗначений» выводим пройденные и предстоящие этапы в качестве отдельных полей-ресурсов.

В результате получается то, что надо – пройденные и предстоящие этапы в отдельных колонках строки.

Что делает функция «ТаблицаЗначений»? Эта функция по детальным записям собирает таблицу значений, которую можно подать на вход функции «СоединитьСтроки». Таким образом, получается нужная строка с переносами.

 

ABC-анализ разработчиков в разрезе ошибок

Другой пример. Я захотел посмотреть, кто больше всех в отделе «косячит» – решил провести ABC-анализ разработчиков в разрезе ошибок.

Что это значит? Берем разработчиков, упорядочиваем по количеству ошибок. Первые 20% этого списка – хорошие разработчики, «косячат» мало., следующие 30% – середнячки, и оставшиеся 50% – самые «косячники».

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

Первый вариант

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

Что делает функция «ГрупповаяОбработка»? Она возвращает все значения группировок в виде таблицы значений. Таким образом, при вызове функции общего модуля можно получить доступ к соседним строкам, чтобы определить класс ABC на основании количества ошибок.

Это первый путь, он длинный. Есть путь еще короче.

 

Второй вариант

В компоновке уже есть встроенная функция «КлассификацияABC», которая позволяет рассчитать класс на основе переданных параметров.

На слайде показан пример того, как отработала функция «КлассификацияABC». Она возвращает число, которое не так сложно привести к значению. Мы видим, что результаты совпадают.

 

Другие функции СКД

На примере функций «ТаблицаЗначений» и «ГрупповаяОбработка» уже можно решить много задач, которые на запросах решаются довольно сложно.

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

 

Как эффективно применить СКД в коде

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

Упрощение применения СКД в коде

На слайде показан пример, который я взял из «Яндекса», написав запрос: «Как вывести результат компоновки в таблицу значений». Где здесь оптимизация? Ведь нужно написать кучу кода. Как с помощью этого можно что-то оптимизировать?

Ответ очень простой – используйте свои библиотеки.

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

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

 

Особенности использования СКД в коде

Если вы будете применять систему компоновки данных в коде, то обязательно столкнетесь с одной ее маленькой особенностью.

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

На слайде приведен пример, где для каждой номенклатуры в цикле создается компоновщик настроек, для него устанавливается параметр «Номенклатура», и выгружается результат.

Если посмотреть замер производительности, мы увидим, что 90% времени уходит на формирование макета компоновки. Что это такое?

 

Макет компоновки – это всего лишь запрос, который будет выполняться, он представляет собой результат наложения настроек на схему компоновки данных. Мы еще не читали данные, не работали с базой данных, а времени уже потратили очень много – это неэффективно.

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

Таким образом, мы увидим привычную нам картину, когда основное время уходит на чтение данных и на работу с базой.

 

Советы по разработке собственных фреймворков

Если будете делать для себя какую-то библиотеку для работы с компоновкой, старайтесь делать так, чтобы:

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

 

Примеры упрощения популярных задач

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

 

Накопительный итог

Первая задача – это накопительный итог. Я думаю, каждый сталкивался с ситуацией, когда нужно посчитать значение параметра накопительным итогом. Например, когда в первом периоде у нас было затрачено 10 человеко-часов и во втором периоде – 10 человеко-часов. И при выводе значения трудозатрат для второго периода нам нужно показывать, сколько всего было потрачено времени.

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

ГДЕ ТехПроект = ТехПроект И Период >= Период

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

В компоновке эта задача решается элементарно – с помощью функции «ВычислитьВыражение»:

ВычислитьВыражение("Сумма(Трудозатраты)", , , "Первая", "Текущая", , , )

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

 

Предлагаю сравнить время выполнения запроса и компоновки. Параметры тестового стенда приведены на слайде – это два слабеньких сервера, на одном из них 1С-сервер, на втором SQL-сервер.

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

  • первый тест – это месячный объем;
  • второй тест – это двухмесячный объем и т.д.

Каждый тест проводился по 10 тыс. раз. Результирующее время было усреднено.

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

 

Курсы валют на конец месяца

Следующая задача – это получение курсов валют на конец периода, т.е. поиск ближайшего значения.

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

На компоновке эта задача решается очень просто. Мы делаем два набора.

  • В первом производим получение периодов;
  • Во втором – делаем запрос среза последних;
  • Для этих двух наборов делаем соединение с параметром «Период», используя его в качестве параметра виртуальной таблицы для второго запроса.

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

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

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

Это – очень интересная возможность. Если у вас в компоновке используется несколько соединений, с помощью списка значений можно ограничить выборку из подчиненного набора.

Применение СКД позволяет сэкономить множество строчек кода:

  • «ВычислитьВыражение» упрощает расчет накопительного итога;
  • Очень удобно использовать подзапросы;
  • Используя свои библиотеки, мы намного удобнее работаем с компоновкой, чем, если бы работали напрямую с этими объектами.

 

Как искать ошибки в СКД?

Итак, мы научились использовать функции в компоновке, но что-то пошло не так. Как искать в компоновке ошибки?

Часто бывает, что сообщение с информацией, которое выдает компоновка, не информативно, и непонятно, что система от разработчика хочет.

 

Рассмотрим простой пример. Допустим, есть запрос, который из справочника технических проектов выбирает проекты и их заказчиков. Запрос простой, всего три строчки.

 

 

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

Давайте посмотрим, что получается в макете компоновки.

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

А если мы посмотрим запрос, который идет на сервер, то увидим еще и дополнительное левое соединение. Оно появилось, потому что мы в отборе использовали дополнительное значение, которое настраивается в пользовательском режиме.

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

 

Заключение

Мы поговорили о том, как:

  • Вывести отчет СКД несмотря на сложные потребности
  • Вместо кода использовать функции СКД
  • Применять СКД не только для отчетов
  • Решать некоторые из популярных задач с помощью СКД
  • Искать ошибки в СКД

Я показал несколько примеров, как можно оптимизировать свою работу со схемой компоновки данных, и, надеюсь, пробудил у вас интерес к этой теме.

Изучайте СКД – это поможет вам сделать свой код совершеннее!

 

****************

Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2017 COMMUNITY. Больше статей можно прочитать здесь.

В 2020 году приглашаем всех принять участие в 7 региональных митапах, а также юбилейной INFOSTART EVENT 2020 в Москве.

Выбрать мероприятие.

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Dzenn 715 03.09.18 09:44 Сейчас в теме
Что один будет делать 20 минут, другой будет делать три дня, и это нормально.
Aligator69; ашот; IvanGorbunov; IvanovAV; jaroslav.h; milov.aleksey; user621724_Dimav1979; alex-l19041; kild; portwein; ivanov660; +11 Ответить
2. karpik666 3551 03.09.18 10:50 Сейчас в теме
Супер, обязательно схожу на выступление в этом году.
SergeyN; kild; +2 Ответить
3. bulpi 202 03.09.18 11:35 Сейчас в теме
Плохо, что нет толковых книг с примерами по этим вопросам. Или я их не знаю.
maxst22; Aligator69; IvanovAV; eeeio; kild; +5 Ответить
4. qwinter 645 03.09.18 11:43 Сейчас в теме
5. dreamcreal 04.09.18 01:04 Сейчас в теме
6. HAMMER_59 230 04.09.18 07:45 Сейчас в теме
"Вот, всего две строчки кода!"
На днях писал обработку заполнения для документа "Бухгалтерская операция", для различных конфигураций, в т.ч. для КА 1, и БП 2, в которых обработки заполнения не поддерживаются. Пришлось искать альтернативные варианты, сделал через внешнюю печатную форму.
С заполнением трудностей не возникло, а вот как обновить данные после заполнения на форме. Всего три строчки кода :), но именно на эти три строчки кода ушло больше всего времени.
7. SergeyN 993 04.09.18 09:26 Сейчас в теме
(6)
С заполнением трудностей не возникло, а вот как обновить данные после заполнения на форме. Всего три строчки кода :), но именно на эти три строчки кода ушло больше всего времени.


Напоминает старый анекдот про "1$ за удар, 999$ за то, что знаю куда ударить". Для этого мы здесь и делимся знаниями, что бы экономить время на "на три строчки кода" ))
Aligator69; OlegTor; milov.aleksey; +3 Ответить
20. Lapitskiy 994 03.10.18 23:08 Сейчас в теме
8. Pwnish3r 05.09.18 13:33 Сейчас в теме
В результате, на каждую строчку таблицы периодов будет выполнен запрос со срезом последних. Фактически, это получается запрос в цикле, причем, без кода. Мы не пишем цикл, не заполняем таблицу. Просто делаем два «Набора-запроса» и соединение между ними с передачей параметров – ничего сложного.

Эту же задачу можно решить в 1 корреляционный запрос.
9. SergeyN 993 05.09.18 13:57 Сейчас в теме
(8)
ожно решить в 1 корреляционный



Можно. Сравнительные замеры корреляционного запроса делали? По моему опыту для больших таблиц - намного медленнее, чем приведенные примеры.
12. s_vidyakin 05.09.18 18:38 Сейчас в теме
(9) Разве корреляционные запросы поддерживаются 1С ??
13. SergeyN 993 05.09.18 21:54 Сейчас в теме
(12) Да. Такой вариант вполне рабочий:


ВЫБРАТЬ
	РеализацияТоваровУслуг.Ссылка КАК Ссылка,
	РеализацияТоваровУслуг.СуммаДокумента / КурсыВалют.Курс КАК СуммаДокумента
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
		ПО (КурсыВалют.Валюта = &ВалютаОценки)
			И (КурсыВалют.Период В
				(ВЫБРАТЬ ПЕРВЫЕ 1
					Фильтр.Период
				ИЗ
					РегистрСведений.КурсыВалют КАК Фильтр
				ГДЕ
					Фильтр.Период <= РеализацияТоваровУслуг.Дата
				УПОРЯДОЧИТЬ ПО
					Фильтр.Период УБЫВ))
Показать



В условии отбор по таблице из вышстоящего запроса.
15. kalyaka 803 03.10.18 11:26 Сейчас в теме
(12) поддерживаются только для операции В, вот цитата из справки:
Заметим, что из запроса операции В возможно обращение к полям таблиц, которые встречались во внешнем запросе до появления операции
10. Бубузяка 62 05.09.18 14:46 Сейчас в теме
Очень позитивная статья. Спасибо.
11. Terve!R 05.09.18 16:54 Сейчас в теме
Спасибо, интересно!
Только фреймворков для скачивания не хватает.
Все свелось к "посмотрите как круто я могу". А кто сможет это повторить, кроме Вас?)
Goggy; CepeLLlka; ашот; Arxxximed; Дмитрий74Чел; echo77; jaroslav.h; +7 1 Ответить
14. SergeyN 993 05.09.18 21:57 Сейчас в теме
(11) см модули

ФинансоваяОтчетностьСервер

КомпоновкаДанныхСервер


в типовых УТ11, КА2, ЕРП2

Начать можно с адаптации под ваши задачи функций из этих модулей.
16. nytlenc 03.10.18 16:01 Сейчас в теме
17. echo77 1552 03.10.18 19:13 Сейчас в теме
(16) Добавьте в мемориз, читайте по частям. Я тоже не осилил с первого раза :-)
18. echo77 1552 03.10.18 19:17 Сейчас в теме
(0) Замеры Подзапросов в СКД и запросов в цикле показали почти одинаковые результаты - не мудрено, и тут и там по сути запрос в цикле.
Вот эта (https://infostart.ru/public/77568/) статья хорошая - объясняется как получить срез на каждую дату в запросе. Кстати, ее писал владелец ресурса http://1cskd.ru/. В итоге, я делаю срезы на каждую дату в запросе и научил всех своих коллег делать так же.
Знать возможности СКД - это очень хорошо, но не обязательно их все применять.
Посмотрите мои статьи по СКД тоже.
Arxxximed; +1 Ответить
19. Lapitskiy 994 03.10.18 23:07 Сейчас в теме
Отличная статья с примерами. Годится как пособие по СКД.
Есть одно "но" - автор грешит упрощениями типа "5 минут". Видимо работы с крупными компаниями или проектами/конфигурациями нет или мало.
Сейчас чтобы понять, "а что там в УТ 11" :) это надо полдня сидеть над кодом, а потом на всякий случай отдать на тестирование.
Еще момент - а процесс обсуждения и ознакомления разработчика с ТЗ - почему его не включаете? Есть такие "спецы" по объяснению ТЗ - чтобы их понять, потребуется также полдня.
bocharovki; Daynestro07; Atilla9999; +3 Ответить
21. fly_men 05.10.18 10:48 Сейчас в теме
Спасибо за опыт, одной граблей меньше.
22. unichkin 1442 07.10.18 22:51 Сейчас в теме
Обычная история.. Все это зависит от опыта программиста, и особенно - от его желания "сделать лучше". Далеко не каждый относится к задачам как к экзамену своих способностей, где нужно подумать \ решить наиболее оптимально.. Совсем недавно переделывал за одним товарищем - то, что он писал три дня (и не работало) - я налабал за ~5 часов, и взлетело. Все дело в опыте, и желании качественно решать задачи.
В такой статье неплохо бы упомянуть о консоли СКД из инструментов разработчика - где можно быстро и удобно разработать запрос и схемы отчета. Главное - возможность "на лету" видеть запрос, который генерирует СКД. У меня уже сложился некий тех. процесс - если нужен отчет на СКД, схему я разрабатываю именно там, уже потом добавляю ее в отчет, и при необходимости рисую формы и прочее.
23. ids79 7202 25.06.19 21:41 Сейчас в теме
Первую задачу можно еще решить использую функцию "ВычислитьВыражениеСГруппировкойТаблицаЗначений". Результат аналогичный получится.
user717534; +1 Ответить
24. strek_ivan 79 30.08.19 15:35 Сейчас в теме
И ведь всё актуально и по сей день!
25. vpaoli 24 02.09.19 18:00 Сейчас в теме
картинки мелкие и не читаются, жаль
26. seka09 4 15.10.19 14:09 Сейчас в теме
То что выполнялось у меня на скд 15 мин, запросом пару часов выполнялось. Я не согласен что разницы нет выполнения запроса или скд. Разница очень большая. Для больших объемов данных скд как раз и необходимо.
27. PerlAmutor 127 06.06.21 06:49 Сейчас в теме
(26) Дело в вашем умении оптимизировать запросы, а не в какой-то "магии" СКД. При должном опыте можно писать запросы эффективней, чем это делает СКД. Отдавать на откуп СКД все подряд я бы не стал. Слишком уж она багованная и не предсказуемая. Чего только стоят NULL в результатах, и функциональные опции отключающие поля выборки и отборов, невозможность выполнить запрос в привилегированном режиме, слишком раннее наложение отборов по одноименным полям, приводящим к искажению результатов и т.д.
28. PerlAmutor 127 06.06.21 07:03 Сейчас в теме
На самом деле большинство из "быстрых решений" потом приходится все-равно переписывать долгим методом, т.к. заказчик часто требует добавить еще "вот это и это", а "это" никаким образом не клеится с тем, что уже сделано. Кроме того применение удобных фреймворков негативно сказывается на знаниях по платформе, т.к. забывается то, как оно на самом деле реализуется на пустой конфигурации.
Оставьте свое сообщение

См. также

Как просто запомнить алгоритм программного вывода в СКД Промо

СКД v8 v8::СКД Бесплатно (free)

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

01.09.2017    55758    unichkin    19    

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

СКД Универсальные функции v8 v8::СКД 1cv8.cf Бесплатно (free)

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

28.05.2022    3287    milkers    11    

КУ! или Нарезка графика продолжается

СКД v8 v8::СКД Россия Бесплатно (free)

Продолжение публикации https://infostart.ru/public/1639182/. Как справиться с неудачным отображением концов графика. Проверено в версии 8.3.13.1644.

23.04.2022    476    AnatolPopov    0    

Нарезка графика ломтями

СКД v8::СКД Россия Бесплатно (free)

Как в СКД простыми средствами улучшить отображение графика, которому слишком тесно на шкале. Проверено в версии 8.3.13.1644.

09.04.2022    653    AnatolPopov    0    

Полезности применения СКД Промо

СКД v8::УФ v8::СКД УТ10 Россия Бесплатно (free)

Нюансы при работе из СКД на программном уровне.

11.04.2012    53252    logarifm    42    

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

Универсальные функции СКД v8 v8::СКД Бесплатно (free)

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

17.02.2022    3013    Yashazz    28    

Отладка СКД

СКД v8::СКД Бесплатно (free)

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

08.02.2022    5353    ProfessionStore    2    

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

СКД v8::СКД Бесплатно (free)

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

04.02.2022    2974    pbazeliuk    3    

СКД программно для обработки (не отчета) + программное восстановление значений полей из настроек для управляемых форм Промо

СКД v8::СКД 1cv8.cf Бесплатно (free)

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

29.01.2014    96763    anig99    26    

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

СКД v8 v8::СКД 1cv8.cf Бесплатно (free)

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

28.12.2021    5156    quazare    6    

Как указать время в периоде типового отчета (СтандартныйПериод, СКД) в системах класса WMS, MES, SCADA, АСУ ТП на 1С, построить отчет за период с временем?

СКД v8 1cv8.cf Бесплатно (free)

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

13.12.2021    1487    SizovE    0    

Отбор/фильтр в отчетах/СКД/обработках 1C: БП, УТ, ERP, Кронос: WMS по файлу Excel, текстовому файлу или списку текстовых строк (номер документа, артикул, ИНН, QR-код, штрих-код, наименование)

СКД v8 v8::УФ 1cv8.cf Бесплатно (free)

Как построить отчет Анализ продаж или Остатки товаров с отбором/фильтром по списку кодов товаров/артикулов или ИНН покупателей из Эксель файла? Покажем, какой код нужно добавить в конфигурацию 1С (в том числе нетиповую), чтобы в любом отчете/отборе СКД/обработке можно было заполнять отбор по excel файлу, текстовому файлу или просто по списку строк - удобно и быстро.

23.11.2021    1593    SizovE    3    

СКД. Вставка разрыва страницы Промо

СКД v8::СКД 1cv8.cf Россия Бесплатно (free)

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

29.10.2011    57942    stoptime    58    

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

СКД v8::СКД Бесплатно (free)

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

18.11.2021    2856    drmaxart    0    

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

СКД v8 v8::СКД Бесплатно (free)

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

08.11.2021    4766    echo77    7    

Грабли на СКД

СКД v8 v8::СКД Россия Бесплатно (free)

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

02.11.2021    6688    echo77    17    

Создаем отчет с заданной периодичностью на СКД Промо

СКД v8::СКД 1cv8.cf Россия Бесплатно (free)

Учимся создавать отчет с заданной периодичностью с использованием СКД.

16.04.2012    82408    Lyns_owner    38    

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

СКД v8 v8::СКД 8.3.14 Бесплатно (free)

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

27.10.2021    7481    Neti    19    

Программное создание отчета на СКД с расшифровкой (обычные формы)

СКД v8::СКД 1cv8.cf Бесплатно (free)

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

04.10.2021    1603    Neti    4    

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

СКД v8 v8::УФ v8::СКД Бесплатно (free)

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

07.08.2021    12525    Eugen-S    20    

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

СКД v8 v8::Запросы Россия Бесплатно (free)

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

18.07.2021    2855    mysm    14    

СКД: скрываем нужные группы (блоки) по требованию пользователя

СКД v8::СКД 1cv8.cf Бесплатно (free)

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

14.07.2021    4343    olja-ljaaa    7    

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

СКД v8 v8::СКД Бесплатно (free)

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

12.07.2021    2915    Yashazz    6    

Чтоб в СКД по таблице значений был порядок!

СКД v8::СКД Бесплатно (free)

Сортировка СКД и источник - таблица значений. Заметка.

28.06.2021    1914    Yashazz    0    

Учебный пример программного формирования схемы компоновки данных: Универсальный отчет по регистрам накопления

СКД v8 Бесплатно (free)

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

14.06.2021    4268    maraton1185    4    

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

СКД v8 v8::СКД 1cv8.cf Бесплатно (free)

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

27.04.2021    4958    John_d    14    

Нестандартное использование СКД

СКД v8::СКД Бесплатно (free)

Программист 1С в компании «БКС-технологии» Алексей Шиянов в ходе Infostart Meetup Novosibirsk продемонстрировал необычный способ использования СКД и сравнил результаты заполнения движений документа через СКД с классическим подходом к заполнению движений через запросы и циклы.

14.04.2021    4725    user1127305    11    

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

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

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

07.04.2021    4092    SergeyN    13    

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

СКД v8 v8::СКД Бесплатно (free)

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

06.04.2021    14083    Neti    8    

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

СКД v8 v8::СКД 1cv8.cf Бесплатно (free)

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

02.04.2021    1750    parshachello    2    

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

СКД v8::СКД Бесплатно (free)

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

30.03.2021    17915    Neti    21    

Отбор на форму (документа, справочника, обработки) с помощью СКД

СКД v8 v8::СКД 1cv8.cf Бесплатно (free)

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

09.02.2021    7646    John_d    15    

Перенос/копирование и установка отбора/фильтра/периода при интерактивном переключении или смене варианта отчета/СКД в БСП 3.1 (1C ERP, УТ, БП, ...)

СКД v8 1cv8.cf Бесплатно (free)

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

18.01.2021    2238    SizovE    4    

Установка нескольких фильтров/отбора СКД в табличной форме, хранение в табличной части для отправки push/email уведомлений (ОтборКомпоновкиДанных, КомпоновщикНастроек, ДинамическийСписок)

СКД v8 v8::УФ v8::СКД Бесплатно (free)

Рассмотрим, как организовать установку фильтров/отбора СКД (динамического списка) на push/email уведомления в подсистеме EDIbot (WebApp) для 1С в табличной части "События уведомлений".

02.11.2020    1868    SizovE    0    

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

СКД v8 Бесплатно (free)

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

05.08.2020    2587    Yashazz    0    

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

СКД v8::СКД 1cv8.cf Бесплатно (free)

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

24.05.2020    8886    kasper076    18    

Макет оформления в отчете с несколькими СКД

СКД v8::СКД Россия Бесплатно (free)

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

14.05.2020    5454    vendim    2    

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

СКД v8 v8::Запросы v8::СКД 1cv8.cf Бесплатно (free)

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

29.04.2020    14936    the1    48    

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

СКД v8 v8::СКД 1cv8.cf Бесплатно (free)

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

15.04.2020    20310    SeiOkami    41    

Работа с запросами в 1С СКД. Отладка СКД

СКД v8::Запросы v8::СКД Россия Бесплатно (free)

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

15.04.2020    5788    ProfessionStore    3    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 3

СКД v8::Запросы v8::СКД Россия Бесплатно (free)

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

13.04.2020    10128    ProfessionStore    4    

СКД: Прозрачная обработка результата

СКД v8::СКД 1cv8.cf Бесплатно (free)

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

13.04.2020    6626    starik-2005    16    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 2

СКД v8::Запросы v8::СКД Россия Бесплатно (free)

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

12.04.2020    8271    ProfessionStore    11    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 1

СКД v8::Запросы v8::СКД 1cv8.cf Россия Бесплатно (free)

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

11.04.2020    13920    ProfessionStore    9    

Работа с запросами в 1С СКД. Язык выражений СКД и подмена запросов

СКД v8::Запросы v8::СКД Россия Бесплатно (free)

Хотя эта статья называется «Работа с запросами в 1С СКД», нельзя не упомянуть про язык выражений СКД. Да – у системы компоновки данных есть свой язык! Это не язык платформы 1С, это не язык запросов. Это еще один язык, который используется 1С в СКД для обработки полученного набора (ов) данных.

11.04.2020    12999    ProfessionStore    25