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

17.02.22

Разработка - Универсальные функции

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

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

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

Про параметры, и "жёсткие", и "мягкие", сказано предостаточно, например, тут. А вот об их инициализации известно мало. Понятно, что никакие настройки СКД к их определению не относятся, и это сугубо механизм самой схемы, будь то первичная декларация набора кодом либо конструктором, или переопределение кодом уже на этапе макета компоновки. Действия платформы по интерпретации параметров не поддаются наладке - все действия с ними возможны лишь уже после создания набора. Объект, отвечающий за чтение входного запроса, т.е. ИсточникДоступныхНастроекКомпоновкиДанных, не предоставляет инструментов, позволяющих повлиять на параметры, в т.ч. даже на уровне AvailableSettingsSource с принудительным behaviour, отличным от 0. Это проявляется, например, в том, чему и посвящена данная заметка.

Будь то конструктор или программное создание, берущее за основу запрос с "жёсткими" параметрами, наблюдается эффект появления в отборе, доступном пользователю как интерфейсная проекция компоновщика настроек, ветки "Параметры", где все эти параметры фигурируют как поля отбора. Темой заметки является принудительное отключение этого эффекта.

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

Разберём на примере запроса к справочнику "Контрагенты".

 
 Инициализируем СКД

Будем исходить из выключенного автозаполнения.

Обратимся к коллекциям СКД и увидим, что:

рСКД.Параметры // пуста
рСКД.НастройкиПоУмолчанию.Отбор.ДоступныеПоляОтбора.Элементы // пуста
рСКД.НастройкиПоУмолчанию.ПараметрыДанных.Элементы // пуста

Аналогично, ничего нет в сериализованной СКД и её настройках по умолчанию.

Но - в табличном поле отборов 1С предложит пользователю доступное "поле отбора" из папки "Параметры", с именем "Усл ИНН". И это надо убрать.

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

 
 Рассматриваем настройки

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

Вывод прост: чтобы убрать что-то ненужное, надо явным образом добавить это ненужное.

 
 Решение

 

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

СКД параметры данные отбор

См. также

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

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

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

10000 руб.

02.09.2020    134328    735    391    

774

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

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

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

21.05.2024    9425    dimanich70    78    

116

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    9068    21    John_d    25    

124

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    10692    YA_418728146    7    

149

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2607    40    progmaster    8    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Jimbo 10 18.02.22 08:12 Сейчас в теме
А в чем собственно вопрос ? Как писать СКД с нуля самому без конструкторов программно ?
Советую разобраться с Настройки, Фиксированные Настройки, Пользовательские настройки - мутная темка, а так же как в БСП выполняются стандартные отчеты без формы с ВариантамиОтчетов, там много процедурок то перед инициализацией того или этого, то после. Сначала будет полная каша. Но отладчик в зубы - точки останова и истина где-то рядом.
4. Yashazz 4748 18.02.22 09:51 Сейчас в теме
(1) Спасибо, товарищ) Вопрос в том, как убрать из отбора параметры, автоматически добавленные туда при инициализации компоновщика. Жаль, если мне не удалось это внятно изложить...
kser87; sapervodichka; +2 Ответить
8. RustIG 1644 18.02.22 10:04 Сейчас в теме
(1)
...наблюдается эффект появления в отборе, доступном пользователю как интерфейсная проекция компоновщика настроек, ветки "Параметры", где все эти параметры фигурируют как поля отбора. Темой заметки является принудительное отключение этого эффекта.

приходится читать внимательно и последовательно, как и любые статьи Якова, чтобы добраться до сердцевины мысли...во как загнул...
sapervodichka; Jimbo; +2 Ответить
2. Поручик 4680 18.02.22 09:14 Сейчас в теме
Как-то не задумывался над параметрами. Всё само делалось.
5. Yashazz 4748 18.02.22 09:52 Сейчас в теме
(2) Знаешь, меня много лет напрягало, что, когда быренько делаешь СКД и кидаешь на форму отбор её компоновщика, то там параметры отсвечивают. Ну вот дошли руки)
7. RustIG 1644 18.02.22 10:01 Сейчас в теме
(5) привет! похоже на рабочую задачу - когда для разных магазинов надо формировать отчеты по магазину, но не показывать параметры...
10. Yashazz 4748 18.02.22 10:12 Сейчас в теме
(7) Привет. Она и есть рабочая, дальше некуда. Когда параметры доступны в отборе, пользователь радостно ставит одно, потом, например в проверке заполнения, УстановитьЗначениеПараметра ставит другое, и получается полный атас.
11. RustIG 1644 18.02.22 10:25 Сейчас в теме
3. axelerleo 343 18.02.22 09:44 Сейчас в теме
чтобы убрать что-то ненужное, надо явным образом добавить это ненужное
Читать голосом кота Матроскина.
Да, неочевидный момент, но с учетом трудного детства СКД, не удивительный.

P.S.: Кстати, почему-то ник Yashazz читаю часто как "Я щазз" (типа "ага, сейчас!") :)
6. Yashazz 4748 18.02.22 09:53 Сейчас в теме
(3)
P.S.: Кстати, почему-то ник Yashazz читаю часто как "Я щазз" (типа "ага, сейчас!") :)

Ник родился отчасти как притяжательное yasha's, отчасти как обеспечение уникальности, т.к. просто Yasha уже бывало занято)
axelerleo; +1 Ответить
9. RustIG 1644 18.02.22 10:07 Сейчас в теме
(6) еще бы бесплатно выложить файл для тестов - https://infostart.ru/about/help/28158/1293827/ - хочется потестить мысль
12. RustIG 1644 18.02.22 12:05 Сейчас в теме
(0) Яков, а можно увидеть полный код отчета?
Я так понимаю, что изначально речь идет о программном создании отчета и программном управлении видимостью параметров?
Поскольку , если не проограммно, то через "параметры параметров" можно исключить параметры из видимых разделов пользователей (прикладываю скрин).
Прикрепленные файлы:
user602678_maxipunchik; +1 Ответить
13. RustIG 1644 18.02.22 12:08 Сейчас в теме
(0) Яков, вместо кода:
 
Для каждого элПараметр Из комп.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы Цикл // именно ЭТА коллекция
	рПараметр=рСКД.Параметры.Добавить();
	ЗаполнитьЗначенияСвойств(рПараметр, элПараметр);
	рПараметр.Имя=СокрЛП(Строка(элПараметр.Параметр)); // тут может быть подводный камень локализации и имён

	рПараметр.ВключатьВДоступныеПоля = Ложь; // ради чего, собственно, всё и делалось    

	// Заметим, что рПараметр.ОграничениеИспользования = Истина; в нашем случае не играет никакой роли;
	// в этом и разница между ним и включением в доступные - в закладках параметров пользователю может быть
    // как разрешено, так и запрещено, и это не связано с общей доступностью для механизма.
КонецЦикла;
Показать


может подойти такой код ? :

ПараметрыДанных = СхемаКомпоновкиДанных.Параметры;  //коллекция
	Для Каждого Параметр Из ПараметрыДанных Цикл
		Если Параметр.Имя = "ИНН" Тогда
			Параметр.ВключатьВДоступныеПоля = Ложь;	
	        КонецЕсли;   		
	КонецЦикла;


Показать
18. Yashazz 4748 18.02.22 17:08 Сейчас в теме
(13) Неа, потому что у тебя коллекция Параметры пустая будет, пока из хмл не десериализуешь, или диалог конструктор явно не дёрнешь.
В том и фигня, что при программном заполнении она пустая!
19. RustIG 1644 18.02.22 18:54 Сейчас в теме
(18) почему пустая? я пробую - тестирую - у меня в отладке коллекция с параметром "ИНН"...
поэтому я хотел увидеть полностью код и сам отчет (тестовый я так полагаю)
20. Yashazz 4748 19.02.22 19:41 Сейчас в теме
(19) Интересное кино. Ты как создавал СКД? Можешь код выложить?
14. bulpi 215 18.02.22 13:00 Сейчас в теме
Вот за эту мутную фигню я и не люблю СКД. Плюс поставил.
15. lvictor58 135 18.02.22 14:08 Сейчас в теме
А мне кажется, что для виртуальных таблиц регистров параметры даже очень нужная вещь.
И поддерживаю Поручика: было бы над чем париться!
17. Yashazz 4748 18.02.22 17:07 Сейчас в теме
(15) А кто говорил, что ненужная? Вы вчитайтесь, о чём я. Параметры в отборе - вещь НЕнужная и опасная, если есть ещё хотя бы программная их установка, или если параметры доступны юзеру и на закладке "Параметры" консоли настройки.
16. kser87 2448 18.02.22 15:52 Сейчас в теме
Не сразу понятно, что хотел убрать автор. Кажется, со скриншотами конструктора настроек СКД было бы понятнее.
22. Yashazz 4748 19.02.22 20:00 Сейчас в теме
(16) Конструктор совершенно ни при чём, речь о программном создании. И о манерах 1С в работе с разными коллекциями, явно или неявно их объявляя по своему усмотрению. Скриншот с эффектом, от которого надо избавиться, добавил.
21. Yashazz 4748 19.02.22 19:59 Сейчас в теме
(19) Прикрепил. Смотри, у меня СКД.Параметры.Количество() = 0. Может, я реально тупой и что-то важное забываю?

Платформа 8.3.20.1674
Прикрепленные файлы:
ПримерПараметровВОтборе.epf
24. RustIG 1644 21.02.22 14:27 Сейчас в теме
(21) спасибо за обработку.
Яков, тут сложилась ситуация, что не мне учить тебя - поскольку с СКД я почти не работаю.
Но разобраться мне хотелось, поэтому опишу в целом все то, что я нашел для понимания проблемы.
Скажем так, что ты прав, что "Параметры" схемы компоновки данных не инициализируются в явном виде при полностью программном создании СКД.

1) К примеру в книге Хрусталевой Е.Ю. (издание 2008г.) на стр. 276 описывается программная работа с СКД - программно описываются параметры - создается для этих целей процедура УстановитьНастройки(), далее на стр. 280 - описывается программное создание новой схемы компоновки через процедуру УстановитьСхему(); и отдельно программная работа с настройками (в том числе с параметрами) - через процедуру УстановитьНастройки().

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


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

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

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

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

В поисках смысла нашел полезным (но не достаточным для понимания) для себя следующие публикации:
Программная работа с настройками СКД
Создание отчетов с помощью СКД
Процедура ПриКомпоновкеРезультата
Прикрепленные файлы:
25. Yashazz 4748 21.02.22 14:40 Сейчас в теме
(24) Да. Всё так. Собственно, этот своеобразный фрагмент работы СКД действительно нигде внятно не освещён, а эффект имеет место быть. Мы же можем применить СКД вообще где угодно, на любой произвольной форме, чтобы дать пользователю удобный отбор. А вот давать ему в отборе параметры - дело явно лишнее)
Спасибо за ссылки.
23. SlavaKron 20.02.22 10:59 Сейчас в теме
чтобы убрать что-то ненужное, надо явным образом добавить это ненужное.
По-моему, всё логично: если мы хотим переопределить свойства автоматически создаваемых элементов, мы должны создать их "вручную" (явно в коде) дабы получить доступ к этим свойствам.
26. logarifm 1120 21.02.22 19:36 Сейчас в теме
(0) А что мешает на вкладке Параметры снять флаг "Включать в доступные поля"? (если речь не идет о полностью программной конструкции). Тогда требуется именно изменить тему САБЖа, не корректно озвучено.
27. Yashazz 4748 21.02.22 20:01 Сейчас в теме
(26) Речь именно о полностью программном создании, и это указано в тексте заметки.
28. logarifm 1120 21.02.22 20:30 Сейчас в теме
(27) Тема: Убираем параметры из отбора СКД. Требует доработки поскольку она актуальна только для случаев програмного создания СКД. Интерактивный проблем нет с этим.
29. taasha25 13 12.03.23 17:13 Сейчас в теме
Вместо "Вывести список" программно делаю компоновку данных с настройками, вывожу список документов в таблицу.
И мне параметры нужны, только их нужно убрать из Табличного документа при выводе.
как это сделать?
Оставьте свое сообщение