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

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

Разработка - Инструментарий разработчика

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

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

«Лучше день потерять, потом за 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 390 03.09.18 09:44 Сейчас в теме
Что один будет делать 20 минут, другой будет делать три дня, и это нормально.
ашот; IvanGorbunov; IvanovAV; jaroslav.h; milov.aleksey; user621724_Dimav1979; alex-l19041; kadild; portwein; ivanov660; +10 Ответить
2. karpik666 2846 03.09.18 10:50 Сейчас в теме
Супер, обязательно схожу на выступление в этом году.
SergeyN; kadild; +2 Ответить
3. bulpi 173 03.09.18 11:35 Сейчас в теме
Плохо, что нет толковых книг с примерами по этим вопросам. Или я их не знаю.
IvanovAV; eeeio; kadild; +3 Ответить
4. qwinter 619 03.09.18 11:43 Сейчас в теме
5. dreamcreal 04.09.18 01:04 Сейчас в теме
6. HAMMER_59 203 04.09.18 07:45 Сейчас в теме
"Вот, всего две строчки кода!"
На днях писал обработку заполнения для документа "Бухгалтерская операция", для различных конфигураций, в т.ч. для КА 1, и БП 2, в которых обработки заполнения не поддерживаются. Пришлось искать альтернативные варианты, сделал через внешнюю печатную форму.
С заполнением трудностей не возникло, а вот как обновить данные после заполнения на форме. Всего три строчки кода :), но именно на эти три строчки кода ушло больше всего времени.
7. SergeyN 754 04.09.18 09:26 Сейчас в теме
(6)
С заполнением трудностей не возникло, а вот как обновить данные после заполнения на форме. Всего три строчки кода :), но именно на эти три строчки кода ушло больше всего времени.


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

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



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


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



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

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

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


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

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

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

Практика программирования v8 Бесплатно (free)

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

22.04.2020    3214    23    infostart    2    

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

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

24.05.2020    916    0    kasper076    12    

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

Практика программирования v8::СКД Россия Бесплатно (free)

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

14.05.2020    1233    0    vendim    1    

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

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

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

29.04.2020    3770    0    the1    27    

Подсистема "Инструменты разработчика" v5.35 Промо

Инструментарий разработчика v8 1cv8.cf Бесплатно (free)

Интегрированный набор инструментов разработчика: - консоль кода - консоль запросов - консоль построителя отчетов - консоль компоновки данных - консоль заданий - конструктор запроса - справочник алгоритмов - исследователь объектов - интерфейсная панель - настройка журнала регистрации - анализ журнала регистрации - настройка техножурнала - анализ техножурнала - подбор и обработка объектов - редактор объекта БД - редактор констант - редактор параметров сеанса - редактор изменений по плану обмена - редактор пользователей - редактор предопределенных - редактор хранилищ настроек - динамический список - поиск дублей и замена ссылок - контекстная подсказка - синтакс-помощник - поиск битых ссылок - поиск ссылок на объект - структура хранения БД - удаление объектов с контролем ссылок - и прочее

23.09.2007    476058    4340    tormozit    2665    

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

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

15.04.2020    4077    0    SeiOkami    38    

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

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

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

15.04.2020    2147    0    ProfessionStore    2    

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

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

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

13.04.2020    3669    0    ProfessionStore    4    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    34181    0    unichkin    45    

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

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

13.04.2020    2871    0    starik-2005    16    

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

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

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

12.04.2020    2762    0    ProfessionStore    11    

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

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

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

11.04.2020    3164    0    ProfessionStore    8    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    26175    0    tormozit    100    

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

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

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

11.04.2020    3691    0    ProfessionStore    23    

Работа с запросами в 1С СКД. Примеры использования расширения языка запросов СКД

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

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

10.04.2020    3548    0    ProfessionStore    4    

Запросы 1С СКД. Возможности и ограничения

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

В этом цикле статей мы рассмотрим особенности работы системы компоновки данных с запросами в 1С.

10.04.2020    4551    0    ProfessionStore    14    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    73693    0    tormozit    129    

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

Прочие инструменты разработчика Консоль запросов v8::УФ v8::Запросы v8::СКД Бесплатно (free)

Консоль запросов и СКД – один из наиболее часто используемых программистом инструментов. Как с его помощью можно упростить разработку, в своем докладе на конференции Infostart Event 2019 Inception рассказал Евгений Люлюк, ведущий программист компании GLT.

06.04.2020    4838    0    Evg-Lylyk    0    

Вложенные СКД

Практика программирования Конфигурирование 1С v8 v8::СКД Бесплатно (free)

Возможности, нюансы, заметки.

26.03.2020    4161    0    Yashazz    19    

СКД - одна из проблем связи Наборов данных

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

Официальная информация: 1. В схеме компоновки данных нет указания типа связи. Все связи считаются ЛЕВЫМИ внешними соединениями. 2. Если для вложенного набора данных указано условие фильтра, тогда связь вложенного набора данных с родительским набором данных считается ВНУТРЕННЕЙ. Или как получить все результаты основного набора при отборе в зависимом.

03.03.2020    3411    0    BelikovSA    9    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

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

11.07.2007    44772    0    tormozit    38    

Получение значений всех полей в иерархии структуры отчета

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

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

28.02.2020    1522    0    real_MaxA    1    

Для чего нужен флаг "Автозаполнение" в СКД и каких проблем без него можно избежать

Практика программирования v8 v8::СКД Бесплатно (free)

Речь пойдет о флаге «Автозаполнение» в наборе данных Запрос Системы компоновки данных (СКД). Сразу хочу отметить, что флаг «Автозаполнение» доступен только в наборе данных - Запрос.

26.02.2020    4645    0    Neti    41    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

27.01.2020    15090    0    ids79    26    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    40551    0    tormozit    72    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

15.01.2020    15663    0    John_d    22    

СКД. Лайфхак №2. Собираем отчет еще удобнее

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

20.11.2019    8779    0    aximo    15    

Некоторые редко используемые возможности СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

11.11.2019    9890    0    kser87    39    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

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

25.04.2019    14169    0    m-rv    2    

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

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

25.10.2019    16409    0    aximo    37    

Немного про СКД. Характеристики и проверка пустого отчета

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

Пример использования характеристик в СКД и программная работа с ними. А также описание проверки результата отчета на заполненность.

10.10.2019    8866    0    YPermitin    7    

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

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

Полезные процедуры и функции для работы с построителями и СКД. Просто исходник.

10.10.2019    8351    0    Yashazz    45    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    17784    0    m-rv    17    

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

Практика программирования v8::СКД Россия Бесплатно (free)

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

10.10.2019    6983    0    evgeni-red    8    

Три способа создания одного отчета на СКД

Практика программирования v8 v8::СКД ERP2 УТ11 КА2 Бесплатно (free)

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

08.10.2019    11586    0    ids79    26    

СКД. Отчеты с картинками

Практика программирования Работа с интерфейсом v8::СКД 1cv8.cf Бесплатно (free)

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    16020    0    YPermitin    33    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    27433    0    m-rv    21    

СКД не только для отчетов

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

18.09.2019    16580    0    YPermitin    34    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    37004    0    ids79    52    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    56146    0    ids79    37    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    25728    0    itriot11    34    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    17210    0    json    12    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

26.07.2019    42592    0    ids79    11    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    28571    0    ids79    27    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    71086    0    Serginio    108    

Пользовательские настройки системы компоновки данных

Практика программирования Работа с интерфейсом v8 v8::СКД 1cv8.cf Бесплатно (free)

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

09.07.2019    19940    0    ids79    2    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    16475    0    SeiOkami    50    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

02.07.2019    33998    0    ids79    10    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    30609    0    ids79    40    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

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

25.06.2019    42327    0    ids79    20    

Не провоцируйте СКД, или пример "как не надо"

Практика программирования Разработка v8::СКД 1cv8.cf Бесплатно (free)

Пример того, что не нужно использовать в запросах, чтобы не провоцировать СКД.

10.06.2019    12007    0    SeiOkami    95    

Ошибки (?) работы СКД

Практика программирования Разработка v8 v8::СКД Бесплатно (free)

СКД неверно ставит отборы?

31.05.2019    4610    0    skydivespb    6    

Нюансы преобразования запроса СКД

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

Описание некоторых нюансов преобразования запроса в СКД.

31.05.2019    12108    0    waol    14