Отбор компоновки данных в колонке таблицы формы

30.11.17

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

Использование отбора компоновки данных в шапке управляемой формы довольно распространено: создается реквизит с типом "Компоновщик настроек" и на форму выводится отбор в виде таблицы или поля. Но что делать, когда отбор компоновки требуется указывать в колонке таблицы (для каждой строки свой)? Компоновщик настроек недоступен в качестве типа колонки. В данной статье описывается опыт настройки отбора компоновки данных в колонке таблицы формы.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Конфигурация с сохранением отборов компоновки данных в табличной части справочника
.cf 15,66Kb
40 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

На самом деле все не так сложно. Колонку можно сделать с типом "ОтборКомпоновкиДанных". Основной вопрос здесь - как инициализировать доступные поля. Т.к. при попытке открыть колонку с типом "ОтборКомпоновкиДанных" и с не инициализированными доступными полями, происходит падение платформы.

Из данной ситуации вышел следующим образом:

  1. Создается реквизит формы с типом "КомпоновщикНастроекКомпоновкиДанных"
  2. Данный реквизит инициализируется, как и при создании формы на сервере
	// помещаем СКД во временное хранилище по идентификатору формы, чтобы
	// СКД жила, пока открыта форма
	АдресСКД = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор); 
	
	ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСКД);
	КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);

При начале редактирования инициализируются доступные поля отбора

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

ОтборКомпоновкиДанных КомпоновщикНастроекКомпоновкиДанных колонка таблицы формы

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    63607    333    162    

297

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    251290    1393    421    

1146

Инструментарий разработчика Нейросети Платные (руб)

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

15250 руб.

25.08.2025    47902    99    27    

111

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

22570 руб.

06.10.2023    36538    96    40    

116

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    24297    92    42    

101

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    51154    180    63    

209

SALE! %

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

5000 4000 руб.

25.02.2026    2529    12    1    

13

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

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

36600 руб.

28.08.2025    7332    2    2    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Arxxximed 39 15.01.18 15:28 Сейчас в теме
Интересная мысль, блин как раз бьюсь тоже над такой задачей. Странно что в поиске больше на УФ ответов на подобный вопрос не нашел
2. Vyacheslav_Kochnev 145 11.03.21 00:11 Сейчас в теме
Спасибо большое! Помогло решить проблему отсутствия доступных полей отбора.
3. sdemon72 30 21.06.21 17:22 Сейчас в теме
А кто подскажет, как потом эти сохраненные отборы использовать? Каким способом эти отборы загрузить в компоновщик настроек?
4. balanton 317 22.06.21 10:58 Сейчас в теме
5. twiny 15 29.11.21 12:14 Сейчас в теме
При Перечитать в форме список доступных полей также пропадает. Наверно, можно еще добавить при начале выбора....
SlavaKron; +1 Ответить
6. SlavaKron 18.02.23 22:19 Сейчас в теме
(5) ПриНачалеРедактирования следует вовсе заменить на НачалоВыбора.
Для себя нашёл оптимальной такую схему, которая не требует серверных вызовов.
При начале выбора в поле отбора, мы должны подменить его значение на отбор компоновщика, чтобы иметь доступные поля.
Но тогда значение отбора в текущей строке окажется связанным с компоновщиком (не важно выбрали мы новый отбор или отказались). Поэтому перед очередным началом выбора и подменой отбора, находим строку, связанную с компоновщиком и "отвязываем" ее от компоновщика через рекурсивное копирование элементов отбора:
&НаКлиенте
Процедура ТаблицаОтборНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ОтвязатьОтборыОтКомпоновщика();
	
	ТекущаяСтрока = Элементы.Таблица.ТекущиеДанные;
	КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();
	СкопироватьОтборРекурсивно(КомпоновщикНастроек.Настройки.Отбор, ТекущаяСтрока.Отбор);
	ТекущаяСтрока.Отбор = КомпоновщикНастроек.Настройки.Отбор;
	
КонецПроцедуры

&НаКлиенте
Процедура ОтвязатьОтборыОтКомпоновщика()
	
	Для Каждого Стр Из Таблица Цикл
		Если Стр.Отбор = КомпоновщикНастроек.Настройки.Отбор Тогда
			НовыйОтбор = Новый ОтборКомпоновкиДанных;
			СкопироватьОтборРекурсивно(НовыйОтбор, Стр.Отбор);
			Стр.Отбор = НовыйОтбор;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура СкопироватьОтборРекурсивно(Приемник, Источник)
	
	Для Каждого Элемент Из Источник.Элементы Цикл
		ТипЭлемента = ТипЗнч(Элемент);
		НовыйЭлемент = Приемник.Элементы.Добавить(ТипЭлемента);
		ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент);
		Если ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
			СкопироватьОтборРекурсивно(НовыйЭлемент, Элемент);
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
ВнешняяОбработка3.epf
Shayslam; andrey_462; +2 Ответить
Для отправки сообщения требуется регистрация/авторизация