Отборы в отчётах. Нюансы работы компоновщика настроек.

Публикация № 542677 15.08.16

Разработка - Работа с интерфейсом

Построение отчетов настройкка отчетов СКД компоновщик настроек отбор отбор СКД фиксированные настройки пользовательские настройки

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

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

Желающие могут пропустить части 1-4 и сразу перейти к примерам.

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

Используются СП 8.3.6 и выше, разделы ИТС (пункт 10.3.7.5 и др.), книга «Профессиональная разработка в системе 1С-Предприятие 8» (Казань, 2012 г., второй том). В книге Е.Хрусталёвой вообще ничего внятного на эту тему не нашлось.

Часть 1

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

* Настройки – настройки, созданные в режиме Конфигуратора и изменяемые в режиме правки варианта отчёта;

* ПользовательскиеНастройки – настройки, которые изменяет пользователь в режиме «1С:Предприятие» сугубо интерфейсно;

* ФиксированныеНастройки – те настройки, которые задаются из встроенного языка, в т.ч. неявно задаются системой. В это свойство попадают значения отбора, которые передаются в форму с помощью ее параметров (структура «Отбор»).

Настройки и ФН схожи по устройству и имеют коллекцию «Отбор» типа «Отбор компоновки данных», доступную для изменения состава в любое время существования отчёта. При этом Настройки доступны для интерфейсного изменения через правку варианта, а ФН вообще никак не доступны. ПН, в свою очередь, это «каша», где равноправными элементами могут быть как сам «Отбор», так и отдельные объекты типа «Элемент отбора компоновки данных» (т.н. вложенный объект). Несмотря на наличие соответствующих методов, изменять состав коллекции элементов ПН программно нельзя, если это ПН самого отчёта, а не сделанные «с нуля» конструктором – 1С сообщит, что «Коллекция пользовательских настроек не может изменять свой состав, так как она связана с настройками компоновки данных.» На ИТС сказано: «Свойство недоступно для записи с помощью встроенного языка.», но, как мы увидим позже, повлиять на ПН можно. «Каша» объектов имеет внутренние связи – она проверяется на непротиворечивость условий при формировании отчёта, и при изменении состава. На ИТС читаем: «Не будут добавляться элементы, которые сами отмечены как пользовательские. Например, в пользовательский отбор не будет помещен элемент отбора, который отмечен как пользовательский. Не будут добавлены элементы, содержащие пользовательские элементы. Например, не будет добавлена группа условий, если в этой группе присутствуют элементы, отмеченные как пользовательские. Для вложенных элементов свойство РежимОтображения не анализируется. Они добавляются или не добавляются вместе с родительскими элементами.» Таким образом, негласно действует «старшинство» объектов. При этом можно получить эффект, когда интерфейс позволит указать противоречивые отборы для варианта и его ПН, а также внутри ПН.

Казалось бы, «старшим» является вариант. Но нажатие на "Ещё"/"Изменить вариант" и подтверждение изменений в открывшейся форме вызывает обработчик события формы ПриОбновленииСоставаПользовательскихНастроекНаСервере, при этом отбор появляется в панели "Основные" на форме, вызываемой из "Настройки...", и появляется на форме отчёта, но НЕ показывается на закладке "Отбор"; причём либо он появляется сразу и на основной форме отчёта, и на форме по "Настройки..." (если есть флаг "Включать в пользовательские настройки"), либо ни там, ни там. Но в любом случае на закладке "Отбор" формы "Настройки..." его НЕ будет. Разница между закладкой "Основные" формой "Настройки..." и основной формой отчёта определяется полем "Режим редактирования" (обычный - только в "Настройках", быстрый - ещё и на самой форме отчёта), но это, думаю, все знают. Кстати, значения «Отбора» и «Быстрых» никак не синхронизированы и могут противоречить друг другу, а вот «Быстрый» на форме отчёта и на форме настроек жёстко синхронны. Так вот, при правке варианта он сам становится изменённым (но его ID и имя не меняются), а вот ПН остаются НЕ модифицированными (т.е. даже если речь о них, т.е. о флаге включения того или иного элемента в ПН).

Нажатие на "Выбрать вариант..." и подтверждение изменений в открывшейся форме вызывает в следующем порядке события:

ПередЗагрузкойВариантаНаСервере

ПриЗагрузкеВариантаНаСервере

ПередЗагрузкойПользовательскихНастроекНаСервере

ПриЗагрузкеПользовательскихНастроекНаСервере

ПриОбновленииСоставаПользовательскихНастроекНаСервере

При этом ни вариант, ни ПН ничем и никак не изменяются. Отсюда ясно, что вариант и настройки если и связаны, то отнюдь не напрямую.

Нажатие на "Настройки..." и подтверждение изменений в открывшейся форме вызывает только событие ПриОбновленииСоставаПользовательскихНастроекНаСервере (при этом ПН становятся изменены, но представления и ключа (если их не было) не получают; если включён «Быстрый» для элементов объекта «Отбор» ПН, то кроме "Отбор", появляются и собственно его элементы как поля, т.е. ведёт себя аналогично вложенным элементам. Эти сделанные настройки сохраняются при закрытии и восстанавливаются при следующем входе в форму. Вариант оно никак трогает и не меняет.

Нажатие на "Ещё"/"Установить стандартные настройки" в форме настроек (а также и пункт «Стандартные настройки» в правке варианта) вызывает только событие ПриОбновленииСоставаПользовательскихНастроекНаСервере. При этом вариант становится изменённым, а вот ПН меняются. Если перед этим вариант был изменён, он остаётся изменённым (ни сброса флага изменённости, ни сброса реально сделанных настроек не происходит).

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

Отсюда рекомендация: если надо в режиме «Конфигуратор» задать некие отборы, чтобы не возиться с кодом и чтобы при этом их не было в варианте, но были бы в интерфейсе отчёта – следует манипулировать не элементами отбора варианта, меняя их свойства, а самим отбором, кнопками «Свойства элемента…» и «Пользовательские настройки».

Добавление чего-либо, появившегося в Настройках, в состав ПН, требует действий в коде или интерфейсе, а вот удаление и очистка Настроек сказываются на ПН сразу и безо всяких обновлений, например:

Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();

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

Примечания:

При ряде ошибок именно применения настроек сначала выводится сообщение о проблеме, а потом всё равно происходит компоновка, вызов события ОбработкаПроверкиЗаполненияНаСервере и построение отчёта. При этом ФН, если они и были, всё равно игнорируются, и роль играют только Настройки.

При добавлении отбора на форме "Изменить вариант" он делается сразу с установленным флагом "Включать в ПН", но, повторюсь, с точки зрения встроенного языка ПН остаются неизменными.

Установка изменённости варианта и установка изменённости ПН не связаны напрямую, это два разных направления изменений.

У ПН, помимо прочего, есть «Дополнительные настройки». Мне никак не удалось понять, чем и в какой момент они заполняются. Хотя в отчёте и есть настройки, "отмеченные в отборе и условном оформлении" как пользовательские (согласно СП), но дополнительные настройки во всех случаях оказывались пусты. На ИТС об этом ничего.

Несмотря на утверждение в СП, ПН прекрасно сериализуются в xml.

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

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

Часть 2

Работа с Настройками и ФН через их коллекцию почти всегда допустима, но важно помнить, что меняется сущность «третьего уровня». На первом уровне всегда находятся настройки самой СКД по умолчанию, они же фигурируют неявно в источнике доступных настроек; на втором уровне – настройки используемого варианта. Но тут логика позволяет либо «затереть» нижележащие указания, либо их проигнорировать. А вот работа с ПН вольностей уже не предусматривает, и тонкие манипуляции надо делать с помощью специальных методов, а иногда и временных вспомогательных объектов-посредников, например:

комп=Новый КомпоновщикНастроекКомпоновкиДанных;
// можно ещё для начала
// комп.Инициализировать(НекийКомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек());
комп.ЗагрузитьНастройки(НекийКомпоновщикНастроек.Настройки);
НекийКомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(комп.ПользовательскиеНастройки);

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

Применение пользовательских настроек к основным настройкам выполняется в методе ПолучитьНастройки() компоновщика настроек. При этом выполняются следующие действия:

* Для типов ЭлементОтбораКомпоновкиДанных содержимое элементов копируется в соответствующие пользовательские элементы настроек.

* Для типов ОтборКомпоновкиДанных элементы, находящиеся в основных настройках и отмеченные как Недоступный, остаются без изменения. Элементы из ПН переносятся в основные. Они добавляются в конец коллекции для Отбора.

* Для типов ГруппаЭлементовОтбораКомпоновкиДанных устанавливается свойство Использование в соответствующем элементе основных настроек (на основании признака использования элемента ПН).

Часть 3

При формировании окончательной настройки, если цитировать ИТС, различные варианты настроек комбинируются следующим образом:

* Если какой-либо вид настроек целиком отмечен как пользовательский, то в результирующие настройки попадают ПН. При этом, если какие-либо элементы настроек отмечены как недоступные, то эти настройки будут помещены в результирующие настройки из свойства КомпоновщикНастроек.Настройки.

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

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

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

Часть 4.

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

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

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

Общий порядок выполнения событий при открытии формы с флагом формирования отчёта при открытии (несколько больше, чем описано в «Проф.разработке»):

ПриСозданииНаСервере

ПередЗагрузкойВариантаНаСервере

ПриЗагрузкеВариантаНаСервере

ПередЗагрузкойПользовательскихНастроекНаСервере

ПриЗагрузкеПользовательскихНастроекНаСервере

ПриОбновленииСоставаПользовательскихНастроекНаСервере

ОбработкаПроверкиЗаполненияНаСервере

ПриОткрытии

При этом ни вариант, ни ПН не являются изменёнными, если не предпринимались специальные усилия.

Часть 5.

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

В «Проф.разработке» приведён пример изменения (т.е. перехвата и перенастройки) ПН «на лету» в событии ПередЗагрузкойПользовательскихНастроекНаСервере, куда передаётся аргумент, содержащий текущие ПН. На самом деле это не всегда так – например, возможны случаи, когда ошибка сохранения ПН в предыдущем сеансе, или противоречия между Настройками, ФН и ПН приведут к тому, что аргумент «Настройки» будет пуст. И что самое интересное, полноценно перенастроить его в этом событии не удастся, это можно сделать только «в конце» последовательности событий, а именно, в событии ОбработкаПроверкиЗаполненияНаСервере.

Посмотрим, что мы имеем перед загрузкой ПН на сервере.

Для простого случая, когда в СКД ничего не предзадано и никакие элементы не включены в ПН, ситуация такова: Настройки – пусты; ФН – содержат правильный отбор; ПН содержат пустой Отбор. Формирование работает правильно, но с точки зрения пользователя интерфейс противоречит внутренностям и обескураживает – отбор работает, но не виден. Аналогично, если в настройках структуры варианта включить Отбор в ПН, отчёт также строится с учётом отбора, но пользователь также не видит никакие отборы.

Зададим в настройках СКД в Конфигураторе предотборы (равные пустым значениям) и включим их в ПН. По идее, ФН должны заполнить Настройки, а те – ПН, но на самом деле имеем: в Настройках – Отбор с нужным элементом, но пустым правым значением, ФН – содержат правильный отбор, а ПН – всё равно не содержат ничего. Вдобавок, в этом случае и отчёт не построится, т.к. правое значение отбора пусто, несмотря на переданное в параметре Отбор значение.

Попытка поработать с элементами ПН также не даёт результата. Для элемента ПН можно изменить разве что флаг «Использование» и участие в «Быстрых». Значение отбора на интерфейсе будет пустым, никаких ошибок система не выдаст. Аналогично, попытка поработать с Отбором ПН также отработает, в отладчике правое значение будет видно как верно заполненное, но на интерфейсе вы не увидите ничего. А менять состав ПН, напомню, нельзя. Таким образом, требуются дополнительные ухищрения. Например:

&НаСервере
Процедура УстановитьПредзаданныеОтборы(ПользНастройки)
	Если не Параметры.Свойство("Отбор") Тогда Возврат КонецЕсли;
	Если Параметры.Отбор.Количество()=0 Тогда Возврат КонецЕсли;
	
	рТипЭО=Тип("ЭлементОтбораКомпоновкиДанных");
	
	Для каждого киз Из Параметры.Отбор Цикл
		рПоле=Новый ПолеКомпоновкиДанных(киз.Ключ);
		//
		Если (ТипЗнч(киз.Значение)=Тип("Массив") или ТипЗнч(киз.Значение)=Тип("СписокЗначений")) и киз.Значение.Количество()>1 Тогда
			рВидСравнения=ВидСравненияКомпоновкиДанных.ВСписке;
		Иначе
			рВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
		КонецЕсли;
		//
		рНужныйОтбор=Неопределено; // смотрим, есть ли Отбор в польз.настройках
		рНужныйЭО=Неопределено; // смотрим, есть ли отдельный ЭлементОтбораКомпоновкиДанных в польз.настройках
		Для каждого элнастр Из ПользНастройки.Элементы Цикл
			Если ТипЗнч(элнастр)=Тип("ОтборКомпоновкиДанных") и рНужныйОтбор=Неопределено Тогда // он может быть только один
				рНужныйОтбор=элнастр; // это можно было бы делать и вне цикла, но перебирать польз.настройки надо и ради элементов...
			ИначеЕсли ТипЗнч(элнастр)=рТипЭО Тогда 
				// это элемент отбора, их может быть много, но нас интересуют не инициализированные или с нужным полем
				Если элнастр.ЛевоеЗначение=рПоле или элнастр.ЛевоеЗначение=Неопределено и рНужныйЭО=Неопределено Тогда
					рНужныйЭО=элнастр;
				КонецЕсли;				
			КонецЕсли;
		КонецЦикла;
		//
		Если рНужныйОтбор<>Неопределено Тогда // он идёт как приоритетный
			рНужныйЭОизОтбора=Неопределено;
			Для каждого элотб Из рНужныйОтбор.Элементы Цикл
				Если элотб.ЛевоеЗначение=рПоле Тогда рНужныйЭОизОтбора=элотб; Прервать КонецЕсли;
			КонецЦикла;
			Если рНужныйЭОизОтбора=Неопределено Тогда
				рНужныйЭОизОтбора=рНужныйОтбор.Элементы.Добавить(рТипЭО);
				рНужныйЭОизОтбора.ЛевоеЗначение=рПоле;
			КонецЕсли;
			рНужныйЭОизОтбора.ВидСравнения=рВидСравнения;
			рНужныйЭОизОтбора.ПравоеЗначение=киз.Значение;
			рНужныйЭОизОтбора.Использование=Истина;
			//
			рНужныйЭО.Использование=Ложь;
		ИначеЕсли рНужныйОтбор=Неопределено и рНужныйЭО<>Неопределено Тогда // ставим на элемент
			рНужныйЭО.ЛевоеЗначение=рПоле;
			рНужныйЭО.ВидСравнения=рВидСравнения;
			рНужныйЭО.ПравоеЗначение=киз.Значение;
			рНужныйЭО.Использование=Истина;
		КонецЕсли;
		
		рНужный=Неопределено;
		Для каждого элотб Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл // по-хорошему, тут должен быть рекурсивный поиск!
			Если ТипЗнч(элотб)=рТипЭО и элотб.ЛевоеЗначение=рПоле Тогда рНужный=элотб; Прервать КонецЕсли;
		КонецЦикла;
		Если рНужный=Неопределено Тогда
			рНужный=Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(рТипЭО);
			рНужный.ЛевоеЗначение=рПоле;
		КонецЕсли;
		рНужный.ВидСравнения=рВидСравнения;
		рНужный.ПравоеЗначение=киз.Значение;
		рНужный.Использование=Истина;
		//
	КонецЦикла;
	
	Отчет.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Очистить(); // иначе скажет, что элементы пересекаются/противоречат
	
КонецПроцедуры

Вызывать это наиболее правильно так:

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	УстановитьПредзаданныеОтборы(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
КонецПроцедуры

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

&НаКлиенте
Процедура ОткрытьОтчет(Команда)
	Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
		отб=Новый Структура("СсылкаНаСправочник",Объект.Ссылка); // так поле названо в СКД отчёта
		ПараметрыФормы=Новый Структура("Отбор,СформироватьПриОткрытии",отб,Истина);
		ОткрытьФорму("Отчет.Отчет1.Форма.ФормаОтчета",ПараметрыФормы,ЭтаФорма);
	КонецЕсли;	
КонецПроцедуры

Часть 6.

При необходимости менять настройки отчёта в процессе работы с ним, в т.ч. и при запуске, и после открытия, наиболее правильным способом представляется изменение «от начала», т.е. от настроек СКД. Изменение схемы СКД выполняется только с объектом Отчёт (или ВнешнийОтчёт), а не с данными формы, и само по себе ничего не меняет - в Настройках и в ПН остаётся то же, что и было, а ФН вообще могут оставаться пусты. Поэтому, в зависимости от наших задач:

После выполнения

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

изменяется только вариант, и ничего более;

После выполнения приёма, приведённого в п.2 (с использованием «посредника» и метода ЗагрузитьПользовательскиеНастройки()

срабатывает, только если сбросить текущие ПН средствами интерфейса. Сами  по себе они, при изменении варианта, не изменятся. При этом меняется Отбор, но не добавляется новый ЭлементОтбора.

После выполнения

ЭтаФорма.СоздатьЭлементыФормыПользовательскихНастроек(,РежимОтображенияНастроекКомпоновкиДанных.Все)

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

А поскольку нам всё-таки нужно полноценно изменить не только внутренние отборы, но и отображение на форме отчёта и в связанных формах, то либо приходится менять только Отбор, либо действовать следующим образом:

&НаСервере
Процедура ИзменитьСКД()
	рОбъект=РеквизитФормыВЗначение("Отчет");
	отб=рОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.Получить(0).Настройки.Отбор;
	эо=отб.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	эо.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("СсылкаНаСправочник.Поле1");
	эо.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
	эо.ПравоеЗначение=Истина;
	эо.Использование=Истина;
	ЗначениеВРеквизитФормы(рОбъект,"Отчет");
	
	Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(рОбъект.СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	Отчет.КомпоновщикНастроек.Восстановить(); // желательно, хотя ФН это всё равно не затрагивает.
	
        // собственно, именно это можно назвать изменением состава ПН
	Для каждого эл Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
		эл.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
		Если ПустаяСтрока(эл.ИдентификаторПользовательскойНастройки) Тогда
			// можно для элемента ПН использовать метод эл.УстановитьИдентификатор, см.его справку в СП, там всё достаточно внятно
			эл.ИдентификаторПользовательскойНастройки="ID123"; // важно - идентификатор может быть ЛЮБЫМ, не UUID и не GUID!
			эл.ПредставлениеПользовательскойНастройки="Проба";
		КонецЕсли;		
	КонецЦикла;
	
	комп=Новый КомпоновщикНастроекКомпоновкиДанных;
	комп.ЗагрузитьНастройки(рОбъект.СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(комп.ПользовательскиеНастройки);
	
	Для каждого эл Из Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
		эл.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; // вытащим на форму отчёта
	КонецЦикла;
	
	// и вот теперь это даст эффект:
	ЭтаФорма.СоздатьЭлементыФормыПользовательскихНастроек(,РежимОтображенияНастроекКомпоновкиДанных.БыстрыйДоступ);
КонецПроцедуры

Собственно, изучать эту механику можно ещё долго. Эта публикация выросла из изучения способов решения одной конкретной проблемы, и поэтому весьма однобокая; но подоздреваю, что о внутренней логике настроек, особенно пользовательских, вообще можно написать отдельную книгу не тоньше, чем хрусталёвская. У меня на это, к сожалению, сил и времени нет. Кому пригодятся конкретные наработки - уже хорошо.

Кое-что выяснено экспериментально и потому спорно. Знающие больше - приглашаются критиковать и комментировать.

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

Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. director04 3640 16.08.16 07:28 Сейчас в теме
До сей статьи каша в голове (по поводу отборов компоновки данных) была, но не очень густая.
После прочтений половины (до конца не дошел - голова закружилась и мысль убежала на переферию) каша в голове загустела, и появилось раздражение ....
На мой взгляд, статье не хватает систематичности и пунктуальности.

Автор и другие читари, могут со мною не согласится. У каждого свое мнение.
SagittariusA; androidT1C; Aleksandr55555; kalyaka; paxan; nikitan; An-Aleksey; egorious; al_zzz; klmop; Suslik_Johns; HiGHT; kuzyara; igormiro; LeXXeR; HystriX; dj_serega; корум; Lisena_Xitrena; kasper076; jaroslav.h; Makushimo; Solovyeff; dabu-dabu; alest; sigmov; SuhoffGV; rozer; Сурикат; ixijixi; mszsuz; Yashazz; Alien_job; A56; +34 Ответить
18. StudentM 42 09.02.18 20:09 Сейчас в теме
(1) Валерий, в первом комментарии, я бы поблагодарил бы автора за поднятие такой важной и интересной темы! А разбираться с настройками СКД следует "с карандашом и калькулятором", т.е. постепенно и тщательно. В том числе с привлечением отладчика, СП, ИТС (Руководство разработчика), книг Проф Разработка и книг Елены Юрьевны Хрусталёвой (например, Разработка сложных отчётов Глава 3 Справочник разработчика - Настройки отчета).
2. Yashazz 4489 16.08.16 10:28 Сейчас в теме
Так я и сам соглашусь. Только - в чём беда - любое увеличение систематичности приводит к необходимости раскатать это на вдвое-втрое больший объём, или оставить некоторые вещи неосвещёнными совсем. Ну и пришлось бы гораздо больше копипастить общедоступные ресурсы, а я этого не люблю и потому пропустил.

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

А вот про пунктуальность не понял, поясните.
polyusgold; +1 Ответить
3. maxx 972 16.08.16 20:24 Сейчас в теме
Может блок - схемы или mind-карты добавить
4. Yashazz 4489 16.08.16 21:26 Сейчас в теме
(3) maxx, как вариант, можно) Я хотел, кстати, графическую схемку набросать об этом всём, но - честно - просто не успел. Выходные кончились(( Авось осилю чуть позже...
5. SuhoffGV 17.08.16 15:26 Сейчас в теме
(3) maxx, Или популярные кейсы описать. Читать очень тяжело.
6. i.kovtun 175 19.08.16 20:58 Сейчас в теме
Мне кажется, нужно всегда с mind-карты начинать. Во вступлении нужно определить цели статьи, сформулировать задачи. Затем расписать пути решения, входящие в них этапы. Подвести итоги и сделать выводы. Все как всегда: завязка, развязка, кульминация:) Кстати, если таким образом подойти к предмету, тогда у разделов появятся "говорящие" заголовки, а не номера.
И еще, мне также кажется, что лучше не злоупотреблять сложноподчиненными предложениями, это сбивает темп чтения. Не стоит заворачивать неоформленную мысль в одно длинное предложение. Лучше пару минут подумать и написать несколько простых фраз.
7. Yashazz 4489 21.08.16 10:38 Сейчас в теме
(6) i.kovtun, насчёт неоформленной мысли не совсем понял. Если я нечто пишу, следовательно, имею целиком и полностью оформленную мысль. К длине и сложности выстраиваемых предложений это не имеет ни малейшего отношения.

Что до остального, то:
1. Это не статья как таковая. Это заметки.
2. Чем, на ваш взгляд, цели отличаются от задач?
3. Пути решения и их этапы - это практика. Вы предлагаете выкинуть теорию и демонстрировать "голые" примеры?
8. Aphanas 90 01.10.16 17:30 Сейчас в теме
Автор, нужен ВЫВОД. Вывода нет, непонятно о чем разговор. Я ньюансы знаю, интересно только к чему ты пришел.
9. Yashazz 4489 01.10.16 21:57 Сейчас в теме
(8) Aphanas, не может быть никакого единого вывода. Это всё равно, что спросить "какой вывод из 1С?" Ну вот, я для себя сделал вывод, что эта часть системы весьма разветвлённая, местами избыточная и переусложнённая, и недостаточно документирована и снабжена примерами. Так пойдёт?))
user774630; +1 Ответить
10. zqzq 23 03.10.16 08:37 Сейчас в теме
Как-то сумбурно. Хотелось бы разбить на подразделы: 1.1. Конкретная задача - 1.2. Код решения - 1.3. Теоретическое объяснение решения.

Например, если нужно из текущего отчета открыть другой отчет и передать туда параметр(ы) с возможностью изменения я поступаю просто:
	Парам = Новый Структура;
	Парам.Вставить("КлючВарианта", "Основной"); 
	Парам.Вставить("КлючНазначенияИспользования", "РасшифровкаИз");
   
	НоваяФорма = ПолучитьФорму("Отчет.НекийОтчет.Форма", Парам, ЭтаФорма);
		
	//Передаём в новую форму период отчета (так, чтобы отображался пользователю)
	НоваяФорма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
		НоваяФорма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(
		Новый ПараметрКомпоновкиДанных("ПериодОтчета")).ИдентификаторПользовательскойНастройки).Значение 
		= ЭтаФорма.Отчет.КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных
		.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПериодОтчета")).Значение;	
		
	НоваяФорма.Открыть();	
	НоваяФорма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто);	
Показать
Может, не по фен-шую, зато работает и есть не просит.


Lisena_Xitrena; +1 Ответить
25. maxis33 44 12.01.23 15:36 Сейчас в теме
(10)
Парам = Новый Структура;
Парам.Вставить("КлючВарианта", "Основной");
Парам.Вставить("КлючНазначенияИспользования", "РасшифровкаИз");

НоваяФорма = ПолучитьФорму("Отчет.НекийОтчет.Форма", Парам, ЭтаФорма);

//Передаём в новую форму период отчета (так, чтобы отображался пользователю)
НоваяФорма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
НоваяФорма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(
Новый ПараметрКомпоновкиДанных("ПериодОтчета")).ИдентификаторПользовательскойНастройки).Значение
= ЭтаФорма.Отчет.КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных
.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПериодОтчета")).Значение;

НоваяФорма.Открыть();
НоваяФорма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто);
Показать

Спасибо вам, добрый человек! Как раз искал это решение.
11. Makushimo 160 03.10.16 14:14 Сейчас в теме
очень тяжело читать.
Заметки или теория, но текст мертвый, как латынь.
HiGHT; JohnConnor; xforestyg; +3 Ответить
12. sml 36 19.05.17 09:44 Сейчас в теме
ДД, Процедура ИзменитьСКД() в каком месте вызывается?
13. HEKPOH 74 19.05.17 11:51 Сейчас в теме
14. dctvghbdtn 07.06.17 11:20 Сейчас в теме
Посоветуйте пожалуйста как поступить.

Есть отчет в ЗУП, Табель учета рабочего времени. Подписывает его Руководитель. Программа ставит руководителя предприятия. Нас это не устраивает.

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

Просто на форму отчета вынести реквизит нельзя. Т.к. это общая форма для всех отчетов, а сам отчет формируется в модуле объекта отчета.

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

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

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

Добавил в общую форму ФормаОтчета в процедуру ПередЗагрузкойПользовательскихНастроекНаСервере код:

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

Показать


На форме появляется параметр, в СКД он как бы тоже есть, но при формировании отчета параметр пропадает и при нажатии кнопки Настройка тоже из интерфейса исчезает. :(
15. IrinaKostroma 12.09.17 19:41 Сейчас в теме
Молодец, что написал! Критиковать легко, а хоть какие то свои мысли и заметки написать не каждый может
Designer1C; StudentM; +2 Ответить
16. o.nikolaev 208 01.11.17 20:58 Сейчас в теме
Шикарная статья! Спасибо!
Designer1C; VKislitsin; +2 Ответить
17. leshiy26 146 12.01.18 23:07 Сейчас в теме
Для себя выделил:
- Пользовательские настройки - программно не трогаем. На то они и пользовательские.
- Если нужно заполнить какие-то настройки / отборы программно - используем событие формы ПриОбновленииСоставаПользовательскихНастроекНаСервере(), заполняем напрямую Отчет.КомпоновщикНастроек.Настройки.
- Если нужно открыть форму с заполненными настройками- передаем значения в параметрах
20. PerlAmutor 129 12.04.18 11:42 Сейчас в теме
(17)
ПриОбновленииСоставаПользовательскихНастроекНаСервере

Это событие вызывается при каждом чихе. Пытался заполнять пользовательские настройки по этому события через ПередЗаполнениемПанелиБыстрыхНастроек / ПослеЗаполненияПанелиБыстрыхНастроек в модуле отчета. В итоге это событие вызывается при нажатии на кнопку "Настройки" формы отчета, при смене вкладок этой формы, при закрытии этой формы настроек. И при этом фактически пользователь не меняет ни одну из настроек. Если в обработчике этого события идет тяжелый запрос к БД, то понятно к чему это все приводит.
Пробовал ставить настройки в событии ПриЗагрузкеВариантаНаСервере, настройки пользователя ставятся ровно 1 раз до выхода из формы. Затем они всегда перезаполняются поверх этих настроек повторно из пользовательских сохраненных в прошлый раз. С одной стороны логично, что пользователю могут не нравится предустановленные изначально параметры и т.д. А с другой - хочется контролировать то, что он там навыбирал и поправить в случае необходимости.
19. Yashazz 4489 10.02.18 18:45 Сейчас в теме
На самом деле если нужно открыть форму с такими настройками, чтобы было видно пользователю, например, форму динамического списка, то это именно пользовательские настройки надо делать, добавлять туда элементы отбора или сам отбор. В этом смысле Настройки или Отбор ничего не покажут юзеру, их не видно. И вообще они очень непрозрачно накладываются друг на друга.
В своё время общался с Белоусовым на эту тему, он так прямо и сказал, что доделывали платформу в несколько заходов, поэтому получилась дикая неоднозначность и путаница, но теперь уж как есть (((
21. gubanoff 62 17.08.18 17:32 Сейчас в теме
(19) Хочу добавить отбор динамического списка, чтобы был виден на форме, как вы и пишете.
Делаю так:
	ПользовательскийОтбор = Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Список.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки);
	ПользовательскийОтбор.Элементы.Очистить();
	ЭлементОтбора = ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ответственный");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.Использование = Истина;
	ЭлементОтбора.ПравоеЗначение = "";
Показать


Эффекта 0. Отбор появляется в меню Все действия - настроить список, на на самом списке не виден, пока интерактивно не поставишь ему "Включать в пользовательские настройки". Что я делаю не так?
22. e.kogan 1884 24.08.18 15:46 Сейчас в теме +50 $m
А ещё очень "красиво" бывает в динамических списках, типа всеми любимых журналов документов в типовых. Добавил пользователь отбор: Контрагент Равно ... - и у него над списком сразу поле, удобно, быстро. Добавил, например, Склад Равно ... - тоже збс.

А потом объединил через настройку списка в "Или".
И забыл.

А поля остались как были, над списком.

"У меня эта ваша 1С не работает!"
23. TanyTany 17.10.18 01:20 Сейчас в теме
Спасибо за подробнейшие детали! Особенно за
Отчет.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Очистить(); // иначе скажет, что элементы пересекаются/противоречат
24. mopok 28.05.21 09:33 Сейчас в теме
(21)

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


        ЭтаФорма.СоздатьЭлементыФормыПользовательскихНастроек(,РежимОтображенияНастроекКомпоновкиДанных.БыстрыйДоступ);	

Показать
Оставьте свое сообщение

См. также

Чистка пользовательских настроек динамического списка после удаления полей

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

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

20.02.2023    596    dovolos    0    

15

Использование языковой модели GPT3 для создания интерфейса 1С на естественном языке

Работа с интерфейсом Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

Я взял типовую конфигурацию УТ редакции 11.5 Немного доработал запрос к языковой модели GPT-3 и получил возможность обращаться к учетной системе на естественном языке

15.01.2023    9431    mkalimulin    121    

74

Визуализация таблицы значений на управляемой форме

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

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

02.11.2022    1372    bvb    2    

9

Разбор ошибок заполнения реквизитов формы объекта (мой топ-3)

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

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

30.08.2022    1878    zeltyr    5    

18

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

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

{UI/UX} Свой всплывающий информер у элемента формы

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.08.2022    4568    rpgshnik    36    

81

Динамическая кнопка VS Комбинация клавиш

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

08.08.2022    5431    sapervodichka    33    

76

Программный вывод таблицы значений в таблицу на управляемой форме

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

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

15.04.2022    5069    ns_bulatov    5    

11

Восстановление пропавшего меню в интерфейсе с обычными формами без полной чистки кеша

Работа с интерфейсом Платформа 1С v8.3 Украина Бесплатно (free)

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

21.12.2021    1594    bulpi    4    

13

Программный интерфейс для доработки форм

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    6373    AtamanovYS    19    

119

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Программно свернуть/развернуть узел динамического списка (с основной таблицей). Жирная точка над всеми "i".

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

Какой пользователь не мечтал поменьше тыркать кнопкой? Особенно в малюсенькие +/- в "древесных" динамических списках. Если вас тоже озадачили, чтобы, при выборе узла дерева сами развернулись все его вложенные элементы , а при выборе другого узла - так же автоматом свернулась ранее развернутая ветка (причем эти узлы могут находится в разных "отношениях" друг с другом)... То вам - сюда.

08.10.2021    3563    e-9    13    

21

Как читать чужой код? Часть 4. Программный интерфейс. Исправление чужих доработок

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Во всех вакансиях есть требование - умение читать чужой код. Но ни на одних курсах специально этому не учат. Чтобы устранить это противоречие, пишу данную статью. Рассмотрю случаи, в которых нам необходимо разбирать чужой код, поймём, чей код мы пытаемся разобрать, зачем и, главное, как. В статье описан личный опыт длиною в 18 лет начиная с версии платформы 7.7. Статья будет большой, набираемся терпения). Статья содержит в себе описание сценариев разбора кода, т.е. набор шагов. В статье не получится показать это на практике. Для этого планирую сделать онлайн или оффлайн курс, где на примерах будет показан разбор незнакомого кода. Статья разбита на 4 публикации для удобства изучения.

20.09.2021    4522    biimmap    9    

51

Перенос расшифровки в пользовательские настройки

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

Как перенести данные расшифровки в пользовательские настройки.

11.08.2021    1056    scientes    1    

9

Изменение размера картинок "на лету" с помощью NGINX

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

Пример использования nginx и image_filter для сжатия картинок.

26.05.2021    2874    malikov_pro    21    

29

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

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

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

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

Страх и ненависть в поиске по динамическому списку, или "Кое-что о неоптимальном отборе".

17.03.2021    10458    Yashazz    37    

50

Пример работы с диаграммой Ганта в 1С

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

Пример работы с очень нужным и важным, по моему мнению, объектом в 1С «Диаграммой Ганта».

24.02.2021    13351    JIEX@    4    

32

Программное условное оформление динамического списка, раскраска строк списка по цветам справочника или любым другим условиям (условное оформление)

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

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

30.11.2020    15296    SizovE    6    

45

[mobile] Переносим HTML интерфейс на 1С

Работа с интерфейсом Мобильная разработка Платформа 1С v8.3 Мобильная платформа Конфигурации 1cv8 Бесплатно (free)

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

02.11.2020    13063    leobrn    82    

105

Быстрая кодогенерация программной доработки форм

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

Данная статья является описанием идеи по быстрому получению кода для программной доработки форм. А также приглашением к участию в реализации данной идеи (даже звездочке на гите буду рад).

12.10.2020    3046    huxuxuya    29    

21

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Цветовая схема конфигуратора в стиле OneScript

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Цветовая схема конфигуратора 1С максимально приближенная к стандартной цветовой схеме OneScript в VS Code.

01.10.2020    2138    DmitrySinichnikov    4    

11

Рендеринг элементов управляемого интерфейса

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Россия Бесплатно (free)

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

22.09.2020    4930    kalyaka    5    

39

[Общий модуль] Динамическое формирование интерфейса

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2020    28663    rpgshnik    87    

275

Медленно формируются отчеты в БП 3, способ исправления

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

При формировании любых отчетов, но в особенности оборотно-сальдовой ведомости в бухгалтерии 3, очень долго формировался отчет, ПОЯВЛЯЛСЯ ЖЕЛТЫЙ КОТ, разумеется у бухгалтера невроз, да и у меня тоже. Что только ни делал: тестирование и исправление с пересчетом итогов, настройка SQL, отключение фоновых заданий, обновление платформы и конфигурации, а толку нет, регламентные операции по скулю тоже сделал. И что же сделал, а вот что:

21.07.2020    4905    VID1234    10    

10

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Программное открытие отчета

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

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

28.06.2020    9577    da_1c    4    

9

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

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

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

08.05.2020    166560    user5300    37    

277

Форма выбора для реквизита с составным типом данных

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

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

11.03.2020    10707    rule_2    6    

20

Работа с 1С:Аналитика Промо

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

4500 рублей

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

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

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

18.02.2020    8307    randomus    20    

75

[Шпаргалка] Предустановка типа для составного реквизита

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

18.02.2020    12831    rpgshnik    6    

26

СКД. Шаг 3. Используем макеты для оформления отчета

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

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

13.01.2020    67585    aximo    23    

195

Добавление собственного поля и состояния в настройки доступности по состоянию в 1С:Документооборот

Работа с интерфейсом Платформа 1С v8.3 1С:Документооборот Бесплатно (free)

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

30.12.2019    8905    pavelpribytkin96    2    

23

Добавление собственного виджета в 1С:Документооборот

Работа с интерфейсом Платформа 1С v8.3 1С:Документооборот Бесплатно (free)

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

14.12.2019    7428    pavelpribytkin96    2    

34

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

[СКД] Вывод картинки в результат любого отчета на СКД

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

Если у вас в справочнике Номенклатура (или другом справочнике) заполнена картинка, то ее можно легко вывести для наглядности отчета.

09.12.2019    15664    John_d    17    

119

Лайфхаки 1С. Настройка списков (Часть 3)

Работа с интерфейсом Платформа 1С v8.3 Бесплатно (free)

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

03.12.2019    28884    VachKirp    14    

22

В новой платформе пропала кнопка "Печать". Имитируем БСП

Работа с интерфейсом Платформа 1С v8.3 Россия Бесплатно (free)

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

03.12.2019    12094    Vlan    44    

24

Управляемые формы. Изменение формы списка или формы объекта без внесения изменений в типовые формы (без использования расширений)

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Вносим изменения в типовые формы объектов (документы, справочники, журналы, обработки, общие формы). Не снимая с поддержки эти формы. Создаем программно элементы из общего модуля. Для примера рассмотрю добавление колонки "Скрепка" в форму списка документа. Если к документу привязан файл, то в списке в новой колонке должна отображаться "скрепка".

12.11.2019    20734    John_d    29    

122

Локализация интерфейсов конфигураций. Практика и инструментарий 1Ci

Работа с интерфейсом Локализация решений Платформа 1С v8.3 Бесплатно (free)

В последнее время компания 1С International все увереннее заявляет о себе на международном рынке. Но для успешного продвижения в этом направлении необходима локализация интерфейсов конфигураций 1С. О том, как выглядит процесс перевода, какие инструменты для этого есть, где брать переводчиков и как проверять их работу, на конференции Infostart Event 2018 Education рассказал руководитель группы локализации компании 1Ci Сергей Поликарпов.

05.11.2019    7311    user1069006    2    

15