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

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

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

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

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

Полагаю, нет нужды рассказывать, что такое СКД, компоновщик настроек и вообще весь набор объектов, предназначенных для работы с СКД. Основные направления использования, не считая хитрых действий в коде, это динамические списки и отчёты, причём в обоих случаях «за кадром» остаётся весьма существенный функционал. Мы зачастую даже не задумываемся, какова логика поведения и взаимосвязи всех участников процесса, т.к. обычно решаем достаточно простые задачи или полагаемся на умолчания платформы. Но, где есть умолчания, есть и внутренняя логика, эдакая «медвежья услуга» 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 3614 16.08.16 07:28 Сейчас в теме
До сей статьи каша в голове (по поводу отборов компоновки данных) была, но не очень густая.
После прочтений половины (до конца не дошел - голова закружилась и мысль убежала на переферию) каша в голове загустела, и появилось раздражение ....
На мой взгляд, статье не хватает систематичности и пунктуальности.

Автор и другие читари, могут со мною не согласится. У каждого свое мнение.
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; Сурикат; the1; mszsuz; Yashazz; Alien_job; A56; +28 Ответить
18. StudentM 29 09.02.18 20:09 Сейчас в теме
(1) Валерий, в первом комментарии, я бы поблагодарил бы автора за поднятие такой важной и интересной темы! А разбираться с настройками СКД следует "с карандашом и калькулятором", т.е. постепенно и тщательно. В том числе с привлечением отладчика, СП, ИТС (Руководство разработчика), книг Проф Разработка и книг Елены Юрьевны Хрусталёвой (например, Разработка сложных отчётов Глава 3 Справочник разработчика - Настройки отчета).
2. Yashazz 3518 16.08.16 10:28 Сейчас в теме
Так я и сам соглашусь. Только - в чём беда - любое увеличение систематичности приводит к необходимости раскатать это на вдвое-втрое больший объём, или оставить некоторые вещи неосвещёнными совсем. Ну и пришлось бы гораздо больше копипастить общедоступные ресурсы, а я этого не люблю и потому пропустил.

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

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

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

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


Lisena_Xitrena; +1 Ответить
11. Makushimo 157 03.10.16 14:14 Сейчас в теме
очень тяжело читать.
Заметки или теория, но текст мертвый, как латынь.
HiGHT; JohnConnor; xforestyg; +3 Ответить
12. sml 36 19.05.17 09:44 Сейчас в теме
ДД, Процедура ИзменитьСКД() в каком месте вызывается?
13. HEKPOH 72 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 202 01.11.17 20:58 Сейчас в теме
Шикарная статья! Спасибо!
Designer1C; VKislitsin; +2 Ответить
17. leshiy26 145 12.01.18 23:07 Сейчас в теме
Для себя выделил:
- Пользовательские настройки - программно не трогаем. На то они и пользовательские.
- Если нужно заполнить какие-то настройки / отборы программно - используем событие формы ПриОбновленииСоставаПользовательскихНастроекНаСервере(), заполняем напрямую Отчет.КомпоновщикНастроек.Настройки.
- Если нужно открыть форму с заполненными настройками- передаем значения в параметрах
20. PerlAmutor 119 12.04.18 11:42 Сейчас в теме
(17)
ПриОбновленииСоставаПользовательскихНастроекНаСервере

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


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

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

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

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

См. также

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

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

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

10.12.2016    37610    unichkin    74    

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

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

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

27.01.2020    28536    ids79    26    

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

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

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

15.01.2020    25104    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

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

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    19279    kuzyara    33    

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

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

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

15.10.2018    30686    tormozit    100    

Сходство Джаро - Винклера. Нечеткое сравнение строк

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

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

25.12.2019    7095    brooho    17    

30 задач. Странных и не очень

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

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    17387    YPermitin    72    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

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

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    8625    Sibars    19    

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

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

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

20.09.2012    78287    tormozit    131    

Таблица значений. Нюансы

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

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    34481    Yashazz    50    

О программе Postman для тестирования API и для чего она нужна 1С-нику

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

Для чего нужна программа Postman для тестирования API и какая от него польза для 1С-программиста.

24.09.2019    12331    budidich    28    

[Шпаргалка] Программное создание элементов формы

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

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

06.09.2019    52675    rpgshnik    63    

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

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

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

11.07.2007    48767    tormozit    41    

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

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

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

05.09.2019    50997    ids79    54    

Регистры бухгалтерии. Общая информация

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

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    29369    YPermitin    24    

Три костыля. Сказ про фокусы в коде

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

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

03.09.2019    25803    YPermitin    80    

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

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

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

10.09.2017    45151    tormozit    74    

Отслеживание выполнения фонового задания

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

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    32128    ids79    16    

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

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

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

08.08.2019    86688    ids79    49    

Фоновое выполнение кода в 1С - это просто

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

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

02.08.2019    36986    avalakh    22    

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

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

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

25.04.2019    16144    m-rv    2    

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

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

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

31.07.2019    24836    json    14    

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

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

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

26.07.2019    62525    ids79    12    

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

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

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

17.07.2019    36606    ids79    27    

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

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

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

16.04.2019    20437    m-rv    17    

Регистры сведений. За кулисами

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

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    26518    YPermitin    14    

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

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

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

04.07.2019    19827    SeiOkami    50    

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

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

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

02.07.2019    48694    ids79    17    

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

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

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

01.06.2018    30975    m-rv    21    

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

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

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

25.06.2019    54062    ids79    25    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    25521    dmurk    145    

Регистры накопления. Структура хранения в базе данных

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

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    44283    YPermitin    30    

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

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

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

05.12.2017    28379    itriot11    34    

О расширениях замолвите слово...

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

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    35844    ellavs    126    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

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

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

28.03.2019    27662    ellavs    90    

Трюки с внешними источниками данных

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

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    31826    YPermitin    53    

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

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

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

27.01.2016    76801    Serginio    108    

Ошибки при работе с хранилищем конфигурации и способы их решения

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

В статье собраны наиболее распространенные ошибки при работе с хранилищем конфигурации и способы их обхода и решения.

01.03.2019    40725    Смешной 1С    29    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

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

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

26.02.2019    22505    Vladimir Litvinenko    27    

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

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

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

10.11.2018    35308    ids79    40    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

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

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    40854    ids79    9    

Тестер: частые вопросы Промо

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

Ошибкам бой - тесты норма жизни!

25.07.2018    29431    grumagargler    28    

EnterpriseData – часть 2. Процесс выгрузки данных

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

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    27275    ids79    31    

Новый подход к обмену данными EnterpriseData

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

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    42224    ids79    72    

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации

Практика программирования Обмен через XML v8 v8::УФ БП3.0 УТ11 Россия Бесплатно (free)

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    37765    ids79    42    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

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

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

04.09.2017    53177    m-rv    61    

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке

Универсальные функции Зарплата Управление персоналом (HRM) Зарплата v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Бесплатно (free)

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

14.11.2018    91662    GeterX    121    

Программное заполнение пользовательских параметров и отборов СКД

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

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

13.11.2018    49269    Unk92    25