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

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

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

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

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

Полагаю, нет нужды рассказывать, что такое СКД, компоновщик настроек и вообще весь набор объектов, предназначенных для работы с СКД. Основные направления использования, не считая хитрых действий в коде, это динамические списки и отчёты, причём в обоих случаях «за кадром» остаётся весьма существенный функционал. Мы зачастую даже не задумываемся, какова логика поведения и взаимосвязи всех участников процесса, т.к. обычно решаем достаточно простые задачи или полагаемся на умолчания платформы. Но, где есть умолчания, есть и внутренняя логика, эдакая «медвежья услуга» 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!
			эл.ПредставлениеПользовательскойНастройки="Проба";
		КонецЕсли;		
	КонецЦикла;
	
	комп=Новый КомпоновщикНастроекКомпоновкиДанных;
	комп.ЗагрузитьНастройки(рОбъект.СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(комп.ПользовательскиеНастройки);
	
	Для каждого эл Из Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
		эл.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; // вытащим на форму отчёта
	КонецЦикла;
	
	// и вот теперь это даст эффект:
	ЭтаФорма.СоздатьЭлементыФормыПользовательскихНастроек(,РежимОтображенияНастроекКомпоновкиДанных.БыстрыйДоступ);
КонецПроцедуры

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

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

132

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

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

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

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

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

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

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


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

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


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

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

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

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

См. также

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

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

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

05.09.2019    9611    ids79    42       

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

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

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

03.09.2019    7623    YPermitin    67       

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

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

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

17.08.2019    7973    ids79    14       

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

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

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

08.08.2019    9980    ids79    22       

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

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

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

02.08.2019    9635    avalakh    21       

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

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

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

26.07.2019    8983    ids79    6       

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

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

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

17.07.2019    8462    ids79    24       

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

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

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

04.07.2019    6130    SeiOkami    48       

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

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

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

25.06.2019    17094    ids79    16       

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

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

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

11.06.2019    11368    dmurk    134       

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

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

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

16.05.2019    17035    YPermitin    27       

Выполнение внешней обработки в фоновом задании 147

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

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    9646    Eret1k    22       

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

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

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

25.04.2019    4715    m-rv    2       

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

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

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

16.04.2019    7226    m-rv    16       

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

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

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

07.04.2019    16175    ellavs    122       

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

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

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

28.03.2019    12574    ellavs    83       

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

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

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

14.03.2019    12687    YPermitin    52       

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

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

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

03.02.2019    15236    ids79    9       

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

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

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

26.12.2018    12561    ids79    27       

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

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

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

14.12.2018    21157    ids79    72       

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

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

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

16.11.2018    18705    ids79    20       

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

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

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

14.11.2018    31344    GeterX    93       

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

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

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

13.11.2018    19325    Unk92    18       

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

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

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

10.11.2018    20673    ids79    40       

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

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

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

15.10.2018    20322    tormozit    100       

Произвольный код в фоновом режиме 164

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

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

03.09.2018    14451    nikita0832    41       

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C 144

Статья Программист Нет файла v8 Россия Бесплатно (free) Математика и алгоритмы Практика программирования

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

23.08.2018    21018    Rain88    42       

Повышаем эффективность разработки правил обмена 122

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

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

25.06.2018    19171    olegtymko    43       

Введение в механизм представлений в ЗУП ред. 3 152

Статья Программист Нет файла v8 v8::СПР ЗУП3.x Бесплатно (free) Практика программирования

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    24185    xrrg    82       

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

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

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

01.06.2018    21073    m-rv    21       

Строим графы средствами 1С (без GraphViz) 42

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

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    16836    slozhenikin_com    19       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    11244    Rustig    9       

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

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

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

24.04.2018    24108    avfed@rambler.ru    19       

Минимализмы 3 350

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

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    35366    ildarovich    44       

Этюды по программированию. Взаимодействие с Microsoft Word 108

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

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

11.12.2017    25728    milkers    23       

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

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

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

05.12.2017    21220    itriot11    34       

1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена) 718

Статья Программист Нет файла v8 КД Бесплатно (free) Перенос данных из 1C8 в 1C8 Практика программирования Обмен через XML

Что такое КД3? Как начать использовать? Полезные дополнения к документации. Что нужно исправить в типовых обработках и конфигурации. Как изменить правила обмена не снимая конфигурацию с поддержки. Как отлаживать правила обмена?

19.11.2017    136895    MaxS    251       

Заполнение данных по ИНН контрагента с помощью альтернативного сервиса огрн.онлайн 131

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

Код для заполнения данных по ИНН контрагента из ЕГРЮЛ с сайта огрн.онлайн.

01.11.2017    22554    slava_1c    49       

Программные перечисления, ч.2: приемы кэширования при разработке 66

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

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

30.10.2017    20948    unichkin    17       

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

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

Краткая шпаргалка по программной работе с настройками СКД

29.10.2017    23903    json    9       

Работа с Excel 287

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Собрал различные полезности для работы с Excel из 1С. Иногда приходится форматировать документ Excel программно из 1С. Так вот, чтобы не искать постоянно на просторах интернета как сделать левое выравнивание в ячейке Excel из 1С и т.п. решил опубликовать это...

23.10.2017    24425    arakelyan    39       

Добавление команд печати в конфигурациях на БСП 2.4.3 (в частности, в самописных документах в Бухгалтерии 3.0 после релиза 3.0.52.35) 143

Статья Программист Нет файла v8 v8::БУ БП3.0 Россия Бесплатно (free) Печатные формы документов Практика программирования БСП (Библиотека стандартных подсистем)

В статье https://infostart.ru/public/237013/ пользователя nick max рассматривался список действий для подключения команд печати в Бухгалтерии 3.0, работающей на БСП 2.3.6. В новом релизе Бухгалтерии 3.0.52.35 от 15.09.2017г. стала использоваться БСП 2.4.3, из-за чего произошли изменения в процедурах общих модулей, связанных с механизмом печати, и в процедурах их вызова в формах документов и в формах списков. Рассмотрим их.

18.09.2017    46488    bugtester    43       

Отказ от работы с временными файлами при работе с двоичными данными или Потоки как простая замена ADODB.Stream и временным файлам 126

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

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

12.09.2017    18110    vardeg    31