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

Публикация № 1122710 18.09.19

Разработка - Практика программирования

СКД программное формирование универсальный подход произвольные условия

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

Отчеты это слишком просто!

Всем разработчикам, имеющим дело с платформой 1С:Предприятие 8.x, наверняка знаком хотя бы в общих чертах механизм системы компоновки данных (СКД). В большинстве ситуаций он используется для создания отчетов. Общую информацию о назначении и возможностях СКД Вы можете узнать здесь.

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

Однако, СКД может быть использована для решения иных задач, не только разработка отчетов. В настоящей статье это и будет продемонстрировано. Материал больше ориентирован на разработчиков, которые только начинают свой путь в мир СКД. Хотя, может и все разработчики найдут здесь что-то интересное.

Пример задачи

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

Самый простой путь решения подобной задачи - это создать подписку на событие "ПриЗаписи" справочника и выполнять запись для текущего элемента в описанный ранее регистр сведений. Так, например, выглядела бы добавленная подписка на события и программный код в обработчике подписки.

Процедура ПриЗаписиТовара(Источник, Отказ) Экспорт

	// Запрос на проверку вхождения номенклатуры в группу "Группа - 1"
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Товары.Ссылка
		|ИЗ
		|	Справочник.Товары КАК Товары
		|ГДЕ
		|	Товары.Ссылка В ИЕРАРХИИ (&Ссылка)
		|	И Товары.Ссылка = &ТекущийЭлемент";

	// Устанавливаем условие отбора в запросе по соответствующей группе
	Запрос.УстановитьПараметр("Ссылка",
	// TODO: НИКОГДА! НИКОГДА ТАК НЕ ДЕЛАЙТЕ!
	// Поиск по наименованию - последнее дело при разработке :)
	// Тут нужно либо брать значение из настроек (константы или другие таблицы),
	// либо на крайний случай использовать предопределенные элементы / поиск по GUID
		Справочники.Товары.НайтиПоНаименованию("Группа - 1", Истина));
	// Устанавливаем отбор по ссылке текущего элемента
	Запрос.УстановитьПараметр("ТекущийЭлемент", Источник.Ссылка);
	
	Результат = Запрос.Выполнить();

	// Если результат не пустой, тогда номенклатура входит в группу "Группа - 1"
	Если НЕ Результат.Пустой() Тогда

		ПериодЗаписи = ТекущаяДатаСеанса();
		Набор = РегистрыСведений.ИзмененныеТовары.СоздатьНаборЗаписей();
		Набор.Отбор.Период.Установить(ПериодЗаписи);
		Набор.Отбор.Товар.Установить(Источник.Ссылка);
		
		Запись = Набор.Добавить();
		Запись.Период = ПериодЗаписи;		
		Запись.Товар = Источник.Ссылка;
		Запись.Ответственный = Пользователи.ТекущийПользователь();

		Набор.Записать();

	КонецЕсли;

КонецПроцедуры

Однако у подобной реализации есть большие минусы:

  1. Мы жестко привязаны к имени группы "Группа - 1". Если пользователь изменит наименование группы, то алгоритм перестанет работать. В листинге есть раздел "TODO" по этому поводу.
  2. Если завтра пользователь захочет включить наблюдение не только для этой группы или наложить дополнительные условия на реквизиты товаров, то нужно будет снова подключать к работе программиста.

Вот тут то и вступает в бой СКД, предлагая более универсальное решение!

С нуля

В регистр сведений "ИзмененныеТовары" добавим макет с типом "СхемаКомпоновкиДанных". В нем нужно лишь написать запрос к справочнику "Товары" и настроить структуру схемы:

Схема готова! С ее помощью при каждой записи товара мы будем проверять удовлетворяет ли записываемый элемент условиям отбора, заданных пользователем. Настройки отбора задает сам пользователь в режиме 1С:Предприятия, которые сохраняются в константе "НастройкиОтборов" с типом "ХранилищеЗначения". 

Для начала рассмотрим как изменится программный код обработчика подписки на событие "ПриЗаписи" справочника "Товары":

Процедура ПриЗаписиТоваровСобытиеПриЗаписи(Источник, Отказ) Экспорт

	// Таблица результатов проверки
	РезультатПроверки = Новый ТаблицаЗначений;

	Настройки = Константы.НастройкиОтборов.Получить().Получить();
	Если Настройки = Неопределено Тогда
		Возврат;
	КонецЕсли;

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

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

	Если РезультатПроверки.Количеств() > 0 Тогда
	
		ПериодЗаписи = ТекущаяДатаСеанса();

		Набор = РегистрыСведений.ИзмененныеТовары.СоздатьНаборЗаписей();
		Набор.Отбор.Период.Установить(ПериодЗаписи);
		Набор.Отбор.Товар.Установить(Источник.Ссылка);
		
		Запись = Набор.Добавить();
		Запись.Период = ПериодЗаписи;		
		Запись.Товар = Источник.Ссылка;
		Запись.Ответственный = Пользователи.ТекущийПользователь();

		Набор.Записать();

	КонецЕсли;

КонецПроцедуры

Теперь проверку мы осуществляем не запросом, а получением данных через СКД. Условия выборки остались практически такими же, как и в первом предложенном варианте решения. Отбор устанавливается по ссылке на текущий элемент справочника "Товары", а также дополняется отборами, которые установил пользователь. Результат СКД выводится в таблицу значений. Если количество записей в ней больше 0, тогда текущий записываемый элемент справочника "Товары" удовлетворяет всем установленным отборам.

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

Пользовательские отборы хранятся в константе "НастройкиОтборов" в виде хранилища значения. Рассмотрим далее как эти настройки были настроены и установлены.

Особенности работы с компоновщиком настроек

Настройки хранятся в константе, поэтому и редактировать их будем в форме констант. Создадим основную форму констант и в качестве реквизита формы добавим компоновщик настроек компоновки данных.

Чтобы компоновщик работал правильно необходимо:

  1. Инициализировать его для соответствующей схемы компоновки данных.
  2. Загрузить предыдущие настройки, если они были сохранены ранее.
 
 История со времен версии 8.2

В результате, имеем почти готовое решение. Посмотрите на следующий листинг:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	СхемаКомпоновки = РегистрыСведений.ИзмененныеТовары.ПолучитьМакет("ПроверкаСхема");
	АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки, ЭтаФорма.УникальныйИдентификатор);

	Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
	Настройки = Константы.НастройкиОтборов.Получить().Получить();
	Если Настройки <> Неопределено Тогда
	
		Компоновщик.ЗагрузитьНастройки(Настройки);

	Иначе

		Компоновщик.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию);

	КонецЕсли;

КонецПроцедуры

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

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

При записи констант в событии формы "ПриЗаписиНаСервере" выполняем сохранение настроек компоновщика в константу:

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

	НастройкиХранилище = Новый ХранилищеЗначения(Компоновщик.ПолучитьНастройки());
	Константы.НастройкиОтборов.Установить(НастройкиХранилище);

КонецПроцедуры

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

Все проще чем кажется.

Вместо заключения

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

Подобный прием используется, например, в настройках обмена данными с сайтом на 1С:Битрикс в типовой конфигурации "Управление торговлей 11".

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

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

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

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

В этом случае вроде бы ничего страшного. Но есть пару НО:

  1. Что, если таких проверочных условий и получения данных с помощью СКД будет не одно, а 100! Время уже значительно вырастет.
  2. А если пользователь поставит сложный отбор с несколькими "ИЛИ", "Содержит", "В группе", "Не равно" и т.д. Запрос может очень сильно измениться, а его время катастрофически увеличиться.

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

Подходите к задачам рационально!

Другие ссылки

Особо отметить статьи по СКД от Дмитрия Иванова. Всем рекомендую:

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. leosoft 154 18.09.19 23:21 Сейчас в теме
Спасибо, очень полезная информация! Пишите еще :)
maxopik2; +1 Ответить
2. Жолтокнижниг 254 19.09.19 00:27 Сейчас в теме
(0) Идея описанная в статье правильная.

Но пример так себе
1. Использование СКД при часто выполняемых операция - просадка производительности
2. Предоставление пользователю очень гибкого инструмента - потеря контроля, неожиданное поведение и опять же вероятная просадка производительности.
Drivingblind; frkbvfnjh; ДимокШ; alexeyvs77; bulpi; zqzq; Irwin; YPermitin; +8 Ответить
6. VmvLer 19.09.19 09:26 Сейчас в теме
(2) согласен и с 1 и с 2.
YPermitin; +1 Ответить
8. YPermitin 11113 19.09.19 10:12 Сейчас в теме
(6) со всем согласен. Об этом даже в статье отметил. Подходить нужно разумно.
3. rpgshnik 2682 19.09.19 03:03 Сейчас в теме
Ещё можно концепты печатных форм мутить :) мне лично быстрее печатную форму накидать в СКД чем макет выравнивать, да она формироваться может подольше, но когда идёт внедрение удобно пока их оставить в таком состояние и позже сделать нормальную форму, которая к тому времени уже при терпит ряд множество. Именно для этих целей сделал макет - https://infostart.ru/public/1021869/ :)
molodoi1sneg; AllexSoft; FesenkoA; YPermitin; acanta; +5 Ответить
4. feva 453 19.09.19 07:43 Сейчас в теме
Идея не свежа, но материал представлен хорошо!
YPermitin; +1 Ответить
5. Darklight 27 19.09.19 09:06 Сейчас в теме
Конечно же СКД можно применять не только для отчетов и прочих интерфейсных выводов - вот только очень неудобно - в силу плохой проработки у СКД программного API и очень ограниченных возможностей "повторного использования кода". Ну, и тяжёлый движок плохо подходит там, где нужна высокая производительность - хотя тут есть разные способы выкрутиться - но все они через одно место.

Ранее для целей быстрой настройки запросов были такие объекты как "ПостроительОтчетов" и "ПостроительЗапросов". И сейчас они тоже никуда не делись. И интерактивные возможности у них есть - обычно их функционала вполне хватает для задач выборки данных, требующих гибкой настройки (в т.ч. интерактивной), когда не нужно настраивать хитрый макет вывода результатат, и временные таблицы они могут поддерживать, и источгики данных в них проще передавать, и на выходе можно получать обычный объект "Запрос", который потом ещё и кешировать можно. И с "повторным использованием кода" тут дела лучше обстоят (хотя тоже далеко не идеально). И программный API тут проще и удобнее.

Единственное - чего очень не хватает - это поддержки составных группировок (из нескольких полей) - вот это действительно большой недостаток. Ну и отборы тоже несколько менее гибкие (нет групп условий и условий "НЕ" и "ИЛИ"; нет вида сравнения "Заполнено"/Незаполнено очень удобного для полей составных типов).

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

А для программного использования - лично я считаю, что нужно вообще принципиально иную схему выборки данных развивать - я её называю "Реквест концепт", может как-нибудь изложу в статье. Основная суть - это 4 этапа подготовки и 6 этапов обработки:
1. Описание комплексных источников данных - первичных таблиц для выборки (когда они отличны от таблиц метаданных)
2. Сбор реквестов - требований выборки - что, от куда и в каком виде нужно получить
3. Сбор блокировок - описаний условий наложения блокировок
4. Регистрация получаителей (обработчиков) - алгоритмов, которые будут построчно обрабатывать связанные с ними выборки из комбинации реквестов - требоания обработчиков (тут же указывается и конечный формат получения данных)

4. Комбинирование источников и реквестов (таблиц, условий и полей) - с формированием оптимальных запросов выборки данных и выборка данных (при этом, по возможности, все данные стараются выбираться в СУБД и храниться там во временных таблицах).
6. Осуществление выборки данных (в т.ч., по возможности, параллельной)
5. Наложение блокировок (могут быть отложены и выполнены после частичной выборки - когда зависят от данных выборки)
7. Инициализация обработчиков получателей
8. Построчная передача результатов выборок зарегистрированным получателям (в соответствии с их требованиями)
9. Финализация получателей

На первых 3-ъх этапах ещё могут быть заданы взаимные зависимости - когда одни источники/реквесты/получатели будут зависить от отработки других - и не могут быть получены независимо - приоритезация последовательности выполнения
dvsidelnikov; YPermitin; +2 Ответить
7. karpik666 3374 19.09.19 09:30 Сейчас в теме
Как туториал по скд, может быть, однако реализация задачи ужасна, что мешает завести флажок в группе номенклатуры «вести историю изменения», и проверять родителя по нему и убрать вообще запрос «в иерархии»?
9. YPermitin 11113 19.09.19 10:14 Сейчас в теме
(7) за пример не бить, он примитивный. Все самое интересное в типовых. Объем публикации ограничен)
davdykin; +1 Ответить
10. Поручик 4534 19.09.19 13:34 Сейчас в теме
В нашей конфигурации программная генерация и выполнение СКД сплошь и рядом.
YPermitin; +1 Ответить
11. lmnlmn 65 19.09.19 14:21 Сейчас в теме
Освоив программную работу с СКД стал активно ее использовать вместо запросов для выборок данных. Вплоть до того что получаю через СКД данные в таблицу значений, обрабатываю и подсовываю в другую СКД для компоновки отчета. Надо бы обертки какие-то написать под типовые задачи типа установки параметров и отбров, но руки не доходят.
YPermitin; +1 Ответить
12. ids79 6733 19.09.19 19:00 Сейчас в теме
Спасибо, Юрий. Интересная тема. Можно также реализовать проверку реквизитов при записи документов используя СКД, да кучу всего.

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

Отдельное спасибо за ссылки на мои статьи )).
YPermitin; +1 Ответить
13. Prince_1 4 20.09.19 11:01 Сейчас в теме
Интересная статья!
YPermitin; +1 Ответить
14. Nefilimus 56 20.09.19 15:31 Сейчас в теме
Спасибо за интересную статью. Зачерпал некоторую новую информацию =) Спасибо
YPermitin; +1 Ответить
15. igo1 247 20.09.19 20:22 Сейчас в теме
Доброго
тоже хотел написать статью с таким же смыслом, применил СКД для работы с билингом, 1 отчет, а проверки по все БД.
-проверка сумм
-вывод в отче
-проверка количества
-проверка сроков
-проверка расходов .....
YPermitin; +1 Ответить
17. YPermitin 11113 20.09.19 20:56 Сейчас в теме
(15) я думаю, что в любом случае можно статью написать.
ИС от этого только выйграет.
16. triviumfan 27 20.09.19 20:34 Сейчас в теме
Очередной баян, жаль нету баянометра. А сколько благодарностей ...я в шоке.
Yashazz; Alexx48; YPermitin; +3 Ответить
18. YPermitin 11113 20.09.19 20:56 Сейчас в теме
19. bulpi 186 20.09.19 22:57 Сейчас в теме
Как и все, что связано с СКД, очень сложно. Гора родит мышь - без использования СКД все получается гораздо проще.
YPermitin; +1 Ответить
20. DedMoroz1983 1 23.09.19 09:18 Сейчас в теме
Это вариант, будем пробовать.
YPermitin; +1 Ответить
21. Alexx48 23.09.19 09:46 Сейчас в теме
Почему бы в константу просто не добавить группу "Группа - 1" и не городить с СКД?
YPermitin; +1 Ответить
23. YPermitin 11113 23.09.19 17:53 Сейчас в теме
(21) посыл был в том, что условия могут меняться. А в простых случаях конечно можно и константой.
22. Yashazz 4084 23.09.19 17:50 Сейчас в теме
Идея, конечно, чудовищный баян и давно очевидна, но статья хороша - проста и понятна, для новичков, наверное, самое то. Времена сейчас такие на ИС - множество неофитов радостно плюсует очевидности и баяны, т.к. для них это всё откровение свыше)

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

Инициализация СКД действительно провальный момент с точки зрения производительности, хоть как её делай. Приходится кэшировать.
YPermitin; +1 Ответить
24. YPermitin 11113 23.09.19 18:10 Сейчас в теме
(22) думаю, что нужно порадоваться за тех, кто узнал что-то новое в статье :) Все мы когда-то были новичками, главное об этом не забывать.

Можно, конечно, писать все время хардкорные статьи про производительность, индексы, кластеризацию, интеграцию с .NET, компоненты на C++, как прикрутить Assembler к 1С и т.д. Но иногда и это надоедает :)
dvsidelnikov; acanta; +2 Ответить
25. Yashazz 4084 23.09.19 18:12 Сейчас в теме
Когда я был новичком, не было ни ИС, ни подобных статей. И нам никто не помогал продираться через эти дебри. А теперь появляются "пионэры", которые пару таких статей прочитали, свет в глазах воссиял, и айда называть себя "программистами 1С" да требовать шестизначную зарплату... С одной стороны, это плохо, ибо роняет планку профессии ниже плинтуса, а с другой - хорошо, ибо за такими горе-спецами требуется починка и можно взять здорово дороже)
YPermitin; +1 Ответить
26. YPermitin 11113 23.09.19 18:36 Сейчас в теме
(25)
Когда я был новичком


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

Зато во времена без инструкций всегда был простор для экспериментов :) Хотя, если сейчас захотеть, то тоже можно.
narutouzumaki_13; AllexSoft; +2 Ответить
27. Yashazz 4084 23.09.19 18:39 Сейчас в теме
(26)
если сейчас захотеть, то тоже можно

Естественно, только вот вопрос времени. Когда всё разжёвано и в рот положено - время сэкономлено, а когда мы осваивали ХДТО безо всяких примеров и руководств - времени ушло масса, и мне его никто не вернёт...
acanta; AllexSoft; YPermitin; +3 Ответить
28. YPermitin 11113 23.09.19 18:45 Сейчас в теме
(27) согласен. Но и времени за статьи мне никто не вернет. Это просто хобби! Как и все программирование.
30. Fruit83 28 27.09.19 16:56 Сейчас в теме
(27) Да, этот факт оправдывает ваше старческое брюзжание :)
narutouzumaki_13; +1 Ответить
29. AllexSoft 24.09.19 13:47 Сейчас в теме
Из нестандартного делал такую задачу на СКД, нужно было написать механизм обмена с внешней базой (по COM), причем таким образом что бы пользователь сам делал сопоставление объектов с произвольными условиями. Если конкретнее то из БП некоторые данные (например по амортизации) загружаются в управленку где бюджетирование, и должна быть группировка по группам статей с условиями и статьи затрат в БП и УУ не совпадают, то есть нужны правила сопоставления. Вот условия сопоставления статей были написаны на СКД, на пользовательских полях (их можно вычислять с произвольным условием) - одно пользовательское поле = одна группа статей.
Nefilimus; YPermitin; +2 Ответить
31. YPermitin 11113 27.09.19 16:57 Сейчас в теме
32. duhin 26.03.20 04:59 Сейчас в теме
Вставлю свои 5 копеек по поводу возможности редактировать настройки СКД на стороне предприятия. Сначала это производит вау эффект, наблюдал его у многих, считая себя. А потом выясняется, что если пользователь изменил настройки, а мы изменили отчет, то мы получаем кучу ужасных и часто трудно диагностируемых багов. Отказались от сущестенного редактирования настроек на стороне предприятия. Отбор люди устанавливают конечно, но даже умолчательный отбор делается в конфигураторе. Программирование на стороне предприятия на неофита производит вауэффект, якобы бездны открываются. Но ценность околонулевая, конечно из мего опыта, не претендуя на абсолютную истину. Есть очень узкие ниши для кода на стороне предприятия, пожалуй только работа со сложными спецификациями изделий приходит в голову.
YPermitin; +1 Ответить
33. for_sale 853 26.03.20 06:43 Сейчас в теме
// Тут нужно на крайний случай использовать поиск по GUID
// TODO: НИКОГДА! НИКОГДА ТАК НЕ ДЕЛАЙТЕ!
	// Поиск по GUID - последнее дело при разработке :)
	
34. YPermitin 11113 26.03.20 06:55 Сейчас в теме
35. JustaUser 12.06.20 18:59 Сейчас в теме
(33)
// Поиск по GUID - последнее дело при разработке


Почему? Если это не ирония
36. for_sale 853 13.06.20 15:36 Сейчас в теме
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

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

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    3959    Eugen-S    21    

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

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

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

04.10.2021    842    Neti    4    

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

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

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

07.08.2021    4129    Eugen-S    19    

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

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

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

14.07.2021    2374    olja-ljaaa    7    

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

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

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

27.01.2016    85128    Serginio    115    

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

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

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

12.07.2021    2328    Yashazz    6    

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

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

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

28.06.2021    1277    Yashazz    0    

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

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

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

27.04.2021    4119    John_d    14    

Звуковое управление в 1С 8.3 Промо

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

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    6912    velemir    31    

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

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

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

14.04.2021    3908    user1127305    11    

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

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

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

06.04.2021    10099    Neti    8    

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

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

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

02.04.2021    1124    parshachello    2    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

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

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    8604    comol    31    

Неочевидные нюансы записи управляемой формы

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

Разберем несколько нюансов записи управляемой формы.

02.04.2021    11823    SeiOkami    54    

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

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

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

30.03.2021    12705    Neti    19    

Обзор полезных методов БСП 3.1.4

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

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

25.03.2021    37528    rayastar    51    

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

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

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

10.12.2016    40879    unichkin    74    

Сравнение данных с февралем високосного года (проблема 29 февраля)

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

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

02.03.2021    426    aleksei_adamov    4    

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

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

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

09.02.2021    5961    John_d    15    

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

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

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

02.11.2020    1442    SizovE    0    

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

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

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

15.10.2018    35829    tormozit    106    

Вычислить РАЗНОСТЬДАТ в рабочих днях

Практика программирования БСП (Библиотека стандартных подсистем) v8::Запросы v8::СКД ERP2 БП3.0 УТ11 ЗУП3.x Бесплатно (free)

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

20.10.2020    3707    antonivan    17    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

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

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

30.08.2020    19477    quazare    34    

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

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

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

20.09.2012    82618    tormozit    131    

Вывод дерева в табличный документ СКД

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

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    4209    Yashazz    7    

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

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

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

24.05.2020    6290    kasper076    17    

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

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

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

14.05.2020    4210    vendim    2    

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

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

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

11.07.2007    54046    tormozit    51    

Форма выбора (подбор) в управляемых формах

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

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

08.05.2020    73151    user5300    19    

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

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

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

29.04.2020    11695    the1    44    

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

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

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

15.04.2020    15489    SeiOkami    41    

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

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

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

10.09.2017    50815    tormozit    74    

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

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

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

15.04.2020    4684    ProfessionStore    3    

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

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

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

13.04.2020    8320    ProfessionStore    4    

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

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

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

13.04.2020    5531    starik-2005    16    

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

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

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

25.04.2019    17899    m-rv    3    

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

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

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

12.04.2020    6827    ProfessionStore    11    

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

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

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

11.04.2020    11097    ProfessionStore    9    

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

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

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

11.04.2020    9740    ProfessionStore    25    

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

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

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

16.04.2019    23159    m-rv    18    

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

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

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

10.04.2020    9519    ProfessionStore    4    

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

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

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

10.04.2020    12037    ProfessionStore    14    

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

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

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

26.03.2020    9327    Yashazz    19    

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

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

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

01.06.2018    36530    m-rv    23    

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

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

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

03.03.2020    7889    BelikovSA    10    

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

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

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

28.02.2020    2501    real_MaxA    1    

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

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

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

26.02.2020    9708    Neti    41    

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

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

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

05.12.2017    30684    itriot11    34    

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

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

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

27.01.2020    63231    ids79    26