Работа с данными выбора

Публикация № 841960 17.07.18

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

Форма выбора динамический список управляемая форма список выбора

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

ОГЛАВЛЕНИЕ

Введение

Связи параметров выбора

Параметры выбора

Обход ограничений параметров выбора

Практика

Решение

Подсистема "Работа с данными выбора"

Обработка параметров, функция ПолучитьТекстЗапроса

Динамический список формы выбора

Список данных выбора

Проверка на соответствие условиям параметров выбора. Заполнение по-умолчанию

Поставка

Развертывание

Демонстрация

Рабочая версия


ВВЕДЕНИЕ

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

СВЯЗИ ПАРАМЕТРОВ ВЫБОРА

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

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

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

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

Для второго примера представим себе форму, в которой в шапке есть реквизит типа Договор, а в табличной части - реквизит Статья. При этом выбор статей ограничен списком из регистра соответствия статей договору. Такое условие связей могло бы выглядеть так: Отбор.Ссылка = РС.Статья И РС.Договор = ДоговорКонтрагента. Однако в этом случае в условии задействована дополнительная таблица и такое условие также задать стандартно нельзя.

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

  • ввод через форму выбора;
  • ввод из списка выбора;
  • определение однозначного значения выбора (предсказание выбора);
  • проверка соответствия значения ограничениям по связям параметров выбора.

ПАРАМЕТРЫ ВЫБОРА

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

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

ОБХОД ОГРАНИЧЕНИЙ ПАРАМЕТРОВ ВЫБОРА

Практика

На практике мне попадались следующие решения:

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

Недостатками этих решений являются:

  • Не универсальность (необходимо разрабатывать специализированные формы выбора)
  • Невозможность переиспользования данного подхода для формирования списка выбора
  • Невозможность переиспользования для проверки введенного значения

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

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

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

ПОДСИСТЕМА РАБОТА С ДАННЫМИ ВЫБОРА

Рисунок 1. Диаграмма последовательности

Предлагаемая подсистема реализует интерфейс для работы следующих сценариев:

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

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

Обработка параметров, функция ПолучитьТекстЗапроса

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

Основное назначение функции - в получении текста запроса по переданным параметрам. В отличии от стандартного поведения платформы, когда в форму выбора передаются параметры, эта функция не имеет ограничений: в ней можно реализовать любые условия выбора. Однако и здесь есть ограничение платформы: результирующий запрос не должен содержать объединений ни в одном из пакетов запроса. Это ограничение накладывается реализацией динамического списка, в котором на текущий момент объединения не поддерживаются (однако объединение можно использовать во вложенном запросе!).

В следующем листинге демонстрируется пример-заготовка реализации такой функции. Данная реализация основана на использовании объектной модели запроса. Работа с объектной моделью осуществляется с использованием подсистемы "Работа со схемой запроса". С шаблонами построения текста запроса при использовании подсистемы можно подробнее ознакомиться в одноименной статье.

Листинг 1. Общая структура функции ПолучитьТекстЗапроса на примере справочника _ДемоНоменклатура

//  Подсистема РаботаСДаннымиВыбора НАЧАЛО
Функция ПолучитьТекстЗапроса(ПараметрыЗапроса = Неопределено, Параметры, Поля = "", ТекстЗапроса = Неопределено) Экспорт
	Если ПараметрыЗапроса = Неопределено Тогда
		ПараметрыЗапроса = Новый Структура;
	КонецЕсли;
	СхемаЗапроса 		= РаботаСДаннымиВыбора.ПолучитьСхемуЗапросаПоИсточнику("Справочник._ДемоНоменклатура",, Поля, ТекстЗапроса);
	ЗапросИсточника		= СхемаЗапроса.ПакетЗапросов[СхемаЗапроса.ПакетЗапросов.Количество()-1];
	ОператорИсточника	= ЗапросИсточника.Операторы[0];
	Источник			= ОператорИсточника.Источники.НайтиПоПсевдониму("Источник");
	//  Обработка отбора
	Если Параметры.Свойство("Отбор") Тогда
	// Ваш код по построению текста запроса по параметрам отбора
	// (рекомендую использовать шаблон "Построение текста запроса по параметрам отбора")
	КонецЕсли;
	//  Обработка отбора по характеристикам (дополнительные реквизиты и свойства)
	// (шаблон "Работа с характеристиками")
	Если Параметры.Свойство("Характеристики") Тогда
	// Ваш код по построению текста запроса по параметрам характеристик
	КонецЕсли;
	Возврат СхемаЗапроса.ПолучитьТекстЗапроса();
КонецФункции
//  Подсистема РаботаСДаннымиВыбора КОНЕЦ

Динамический список формы выбора

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

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

Для работа подсистемы необходимо настроить динамический список формы выбора: установить произвольный запрос и изменить псевдоним основной таблицы на имя "Источник".

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

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

Листинг 2. Демонстрация разделения параметров в функции ПолучитьТекстЗапроса

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

Листинг 3. Подключение формы выбора к подсистеме

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	//  Подсистема РаботаСДаннымиВыбора НАЧАЛО
	РаботаСДаннымиВыбора.ЗаполнитьТекстЗапросаДинамическогоСписка(Список, Параметры);
	//  Подсистема РаботаСДаннымиВыбора КОНЕЦ
КонецПроцедуры

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

Список данных выбора

Рисунок 2. Список выбора

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

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

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

Листинг 4. Подключение процедуры к подсистеме

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
	//  Подсистема РаботаСДаннымиВыбора НАЧАЛО
	СтандартнаяОбработка = Ложь;
	РаботаСДаннымиВыбора.ЗаполнитьДанныеВыбора("Справочник._ДемоНоменклатура", ДанныеВыбора, Параметры);
	//  Подсистема РаботаСДаннымиВыбора КОНЕЦ
КонецПроцедуры

Проверка на соответствие условиям параметров выбора. Заполнение по-умолчанию.

Теперь, когда мы умеем формировать текст запроса по условиям связей, мы можем также проверить текущее значение реквизита на соответствие условиям связей. Это может быть полезным, когда меняются связи (топология), либо меняются значения связей, либо производится выбор значения из истории списка.

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

Листинг 5. Проверка соответствия переменной СсылкаНаЗначение переданным параметрам выбора из структуры Параметры

Запрос 			= Новый Запрос;
ТекстЗапроса 	= РаботаСДаннымиВыбора.НастроитьЗапросОбработкиПолученияДанныхВыбора(Запрос, ОбщегоНазначения.ИмяТаблицыПоСсылке(СсылкаНаЗначение),, Параметры, 2);
СхемаЗапроса 	= Новый СхемаЗапроса;
//  Проверка соответствия значения структуре параметров
Если ЗначениеЗаполнено(СсылкаНаЗначение) Тогда
	СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
	Запрос.УстановитьПараметр("ЗначениеПоСсылке", СсылкаНаЗначение);
	//  Схема запроса на соответствие ссылке условиям запроса
	Оператор		 = СхемаЗапроса.ПакетЗапросов[СхемаЗапроса.ПакетЗапросов.Количество()-1].Операторы[0];
	Оператор.Отбор.Добавить(Новый ВыражениеСхемыЗапроса("Источник.Ссылка = &ЗначениеПоСсылке"));
	Запрос.Текст	 = СхемаЗапроса.ПолучитьТекстЗапроса();
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		СсылкаНаЗначение = ОбщийКлиентСервер.ПустаяСсылкаПоТипу(ТипЗнч(СсылкаНаЗначение));
	КонецЕсли;
КонецЕсли;

СТЕНД "РАБОТА С ДАННЫМИ ВЫБОРА"

Рисунок 3. Форма обработки стенда

Для демонстрации работы подсистемы выбран справочник _ДемоНоменклатура из демо-конфигурации БСП. С помощью расширения конфигурации в справочнике доработан менеджер объекта и форма выбора. В модуль менеджера добавлена функция ПолучитьТекстЗапроса и предопределенная процедура ОбработкаДанныхВыбора. В форме выбора добавлен вызов процедуры ЗаполнитьТекстЗапросаДинамическогоСписка.

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

  1. Организация и Контрагент - формируется список номенклатуры, которая использовалась в документах реализации
  2. Договор контрагента - формируется список номенклатуры, определенный в регистре сведений НоменклатураДоговора
  3. Дополнительные реквизиты - отбор по реквизитам из табличной части номенклатуры
  4. Дополнительные свойства - отбор по свойствам, определенным в регистре сведений СвойстваОбъектов

 

В процедуре используются приемы по формированию текста запроса в объектной модели с использованием подсистемы РаботаСоСхемойЗапроса. Более подробно читайте здесь.

 

 
 Листинг 5. Функция ПолучитьТекстЗапроса

ПОСТАВКА

Метаданные Наименование Назначение Требования
ОбщийМодуль РаботаСДаннымиВыбора Основной модуль Использует общие функции БСП, а также подсистему РаботаСоСхемойЗапроса (в поставку не входит, скачать здесь)
  ОбщийКлиентСервер Вспомогательный модуль  
Расширение РаботаСДаннымиВыбора Подготавливает метаданные демо-базы БСП для работы с подсистемой.  
Обработка СтендРаботаСДаннымиВыбора Демонстрация работы выбора Требуется подключить расширение РаботаСДаннымиВыбора


РАЗВЕРТЫВАНИЕ

Демонстрация

  1. Развернуть демо-базу БСП
  2. Объединить с конфигурацией поставки по подсистеме «РаботаСДаннымиВыбора». При объединении сбросить флаг Свойства
  3. Установить расширение
  4. Открыть обработку Стенд

Рабочая версия

  1. Объединить с конфигурацией поставки по подсистеме «РаботаСДаннымиВыбора». При объединении сбросить флаг Свойства.

Скачать файлы

Наименование Файл Версия Размер
Конфигурация+ДемоРасширение+ДемоОбработкаСтенд

.zip 35,05Kb
33
.zip 1.01 35,05Kb 33 Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 209 17.07.18 15:47 Сейчас в теме
Толково написано. Стиль строгий. Наукой автор занимался ?
3. kalyaka 879 17.07.18 19:55 Сейчас в теме
(1) Ну так это ж профессиональный ресурс и статьи я пишу для профессионалов.

Наукой не занимался, но по мне так написание таких статей вполне себе научный труд :)
Evg-Lylyk; RustIG; +2 Ответить
2. SlavaKron 17.07.18 19:36 Сейчас в теме
Знаете, вы где-то говорили про увеличение уровня абстракции кода, но это уже перебор. Я тоже стремлюсь к красоте, но ведь это 1с, какая к черту красота!
EMelihoff; +1 Ответить
4. kalyaka 879 17.07.18 20:47 Сейчас в теме
(2) В чем же перебор? Или Вам понравилось и это было восхищение? :)

Под абстракцией я имел в виду обобщенное решение, для которого применение не ограничено только одним, рассматриваемым в статье случаем. Нужно проделать большую работу, прежде чем на основе массива конкретных решений будет получено одно общее. И это решение уже будет иметь ценность благодаря тому, что множество велосипедов больше не потребует своего изобретения.
Chernik; Evg-Lylyk; Jeka44; Brawler; MSK_Step; +5 Ответить
15. SlavaKron 21.07.18 09:51 Сейчас в теме
(4) Мне понравился ваш подход, но рассматриваемая задача, думаю, не требует таких усилий. Есть 2 крайности - хардкодинг и гипертрофированная универсализация. Оптимальное решение где-то посередине.
Bassgood; +1 Ответить
16. kalyaka 879 21.07.18 20:18 Сейчас в теме
(15)
рассматриваемая задача, думаю, не требует таких усилий

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

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

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

На данный момент у меня уже есть полноценное решение этой задачи. Представить его широкой публике я планирую где-то в сентябре-октябре этого года. А пока я готовлю серию публикаций (Шаблон MVC, Управление состоянием формы, Работа с данными выбора, Работа с данными заполнения), в которых представлены отдельные решения из этой подсистемы.
5. Leon75 18.07.18 11:12 Сейчас в теме
Четкая статья. Но когда сталкиваешься с пушистотью логики пользователей, то и ограничение их выбора четкой логикой и не ограничение с надеждой на профессионализм пользователя не ставит точку в решении. "Мне нужно выбрать именно такую статью расхода, а программа не дает". И почти одновременно: "А почему мне программа дала выбрать это значение? Она же должна проверять." И дифференцированный подход не помогает, потому что мнения меняются как положение флюгера. В итоге рождаются монструозные решения, изобилуюшие ошибками. Тормозящие, перегруженные и неудобные.
Я понимаю, жизнь должна продолжаться, но безуспешные попытки закрыть один вопрос на 100% и перейти к следующему напоминают сизифов труд.
Bassgood; OrcaMax; t.v.s.; RustIG; Brawler; +5 Ответить
6. kalyaka 879 18.07.18 20:10 Сейчас в теме
(5) Возможно пользователи в чем то все-таки правы :)

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

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

Проблему связей я исследовал в своей работе ранее Шаблон MVC. У меня есть уже обновленное решение, версию которого я представлю в последующих публикациях (планирую обновить старые публикации и представить новое общее решение).

Если Вы поделитесь своими примерами из жизни, когда противоречивые требования не позволяют настроить правильные отборы для выбора данных, то я бы их разобрал в рамках представленного мной решения.
7. triviumfan 79 18.07.18 20:42 Сейчас в теме
Я, пожалуй, воспользуюсь православной "обработкой выбора" :)
Статья понравилась только манерой изложения.
8. kalyaka 879 18.07.18 21:15 Сейчас в теме
9. пользователь 19.07.18 15:22
Сообщение было скрыто модератором.
...
10. triviumfan 79 19.07.18 15:26 Сейчас в теме
(9) За такое можно и"банан поймать". Субординацию держите.
11. ixijixi 1472 19.07.18 19:58 Сейчас в теме
(10) Извините, не хотел обидеть, шутка не удалась 😐
12. dabu-dabu 247 20.07.18 10:54 Сейчас в теме
Это конечно здорово и интересно, но без реализации аналогичных функций для подбора при вводе текста бессмысленно
13. kalyaka 879 20.07.18 12:02 Сейчас в теме
(12) Ну это можно :)
Реализацию смотрите в параграфе Список данных выбора
14. dabu-dabu 247 20.07.18 15:41 Сейчас в теме
(13) Да, пропустил. Извиняюсь.
17. DmitrySinichnikov 271 19.01.20 16:37 Сейчас в теме
Божечки, какой у вас красивый код!
Впервые такое вижу на инфостарте, обычно всякие м = 1, для з=0 по к =5 и прочее.
Да еще и схемы запросов используете и стиль написания кода прослеживается, форматирование...
Только за одно это можно плюсовать)

П.С. Ну и статья сама хороша))))
18. Yashazz 4509 23.07.21 20:21 Сейчас в теме
(17) Красивый? Да за одно присвоение своим переменным системных имён убивать надо. Мало люди на граблях танцевали, явно.
Оставьте свое сообщение

См. также

Собственные кнопки в отчетах на СКД, конфигурациях на БСП

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

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

1 стартмани

02.04.2023    4966    7    KVIKS    14    

56

Говорящий кот

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

Расширение заменяет стандартную анимацию при построении отчета на анимированного кота, который "говорит" рандомные фразы.

1 стартмани

22.11.2022    7291    65    mrSallivan    38    

66

Модель состояния для MVC

Работа с интерфейсом Идеи и тренды в разработке Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    1498    kalyaka    2    

16

[Расширение] Смена стиля оформления интерфейса

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

Ещё с времен платформы 8.3.13 можно изменять цвет стилей интерфейса главного окна. Данное расширение позволит вам выбрать из подготовленных десятка стилей на свой вкус.

1 стартмани

01.07.2022    14256    217    rpgshnik    60    

72

Рисуем процессы в СППР в нотации EPC

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

СППР имеет функциональность для описания процессов проекта, но не имеет какой-либо визуализации. Предлагаемое расширение позволяет отображать описываемые процессы в нотации EPC. Результатом отрисованных процессов TO BE, помимо самих процессов, может являться матрица ролей и полномочий, с возможностью детализации до шага процесса (функции). Адаптирована до версии СППР 2.0.6.10 / 8.3.21.1644. Есть ограничения. См. описание.

5 стартмани

03.01.2022    9877    39    check2    12    

42

Выделение текущей строки в отчете (сделать сразу во всех отчетах и ничего не сломать)

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

Как за 10 минут упростить работу с отчётами программистам и пользователям. Добавить ВО ВСЕ ОТЧЁТЫ механизм автоматического выделения текущей строки отчёта (той, на которой установлен курсор). И ПРИ ЭТОМ НИЧЕГО НЕ СЛОМАТЬ.

1 стартмани

17.10.2021    12399    9    Патриот    52    

64

Работа с картами в 1С на примере бесплатной библиотеки Leaflet

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

Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.

1 стартмани

31.03.2021    25943    71    Parsec1C    20    

83

Универсальные функции для работы с цветом в 1С

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

Все на что мы смотрим состоит из цветов в том числе и то, что есть в конфигурациях на 1С :) За время своей работы скопилось достаточно 1С-функций, которые что-то делают с цветом. Это публикация - попытка их систематизировать. Что есть: работа с HEX, HSV, HSL, CMYK представлениями цвета, конвертации из одной системы хранения в другую, работа с каталогами RAL, работа со случайными цветами, контрастные и инверсные цвета, трансформация цветов (осветление, затемнение, градации серого, смешивание цветов), работа с именованными CSS-цветами и т.п. В общем концептуально.

1 стартмани

07.08.2020    12501    22    Diversus    9    

43

Управление состоянием для шаблона MVC и работы с данными объекта

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

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

1 стартмани

18.03.2020    5091    kalyaka    35    

34

Делаем из СКД Excel (ну, почти)

Работа с интерфейсом Платформа 1С v8.3 Абонемент ($m)

Несложный в использовании способ внедрить в обычный отчет СКД возможность редактировать значения ресурсов отчета (а-ля Excel) и получать отредактированные значения для дальнейшей обработки.

1 стартмани

26.01.2020    25843    36    herfis    16    

78

Индикация прогресса выполнения фонового задания на управляемой форме внешней обработки

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

Внешняя обработка с фоновым выполнением и индикацией процесса для любой конфигурации на основе БСП >= 2.3 без изменения конфигурации и встраивания обработки в "Дополнительные отчеты и обработки".

1 стартмани

27.12.2019    33145    73    1sig    29    

68

Декомпиляция условного оформления

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

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

2 стартмани

23.12.2019    19183    87    XilDen    7    

72

Многоуровневые списки выбора с оформлением элементов

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

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

1 стартмани

17.12.2019    19332    2    azhilichev    5    

55

"Живые" картинки со Snap.SVG

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

В статье рассмотрен пример использования http-сервисов для визуализации данных

1 стартмани

24.10.2019    16580    blackhole321    7    

94

Альтернативный способ добавления элементов и реквизитов на формы

Работа с интерфейсом Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

09.09.2019    26008    46    bmk74    9    

83

[Механизм интерфейса] Свой флажок (чекбокс)

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

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

1 стартмани

09.08.2019    32016    29    rpgshnik    44    

171

Отбор на управляемой форме из списка значений

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

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

1 стартмани

09.08.2019    55167    54    nagaitseff    6    

56

Изменяющееся контекстное меню в 1С 8.3

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

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

1 стартмани

06.08.2019    30412    signum2009    16    

67

Обработка-редактор HTML

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

Редактор HTML для управляемого интерфейса 8.3.

1 стартмани

10.06.2019    20348    116    ValeriVP    11    

44

HTML в новой версии 8.3.14 на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX

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

Тестируем возможности HTML в новой версии 8.3.14 платформы на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX.

1 стартмани

29.01.2019    34645    Synoecium    46    

215

Шпаргалка разработчика для работы с формами

Работа с интерфейсом Платформа 1С v8.3 Россия Абонемент ($m)

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

3 стартмани

31.10.2018    21991    95    ELAM    3    

30

Открывашка ячеек таблиц

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

Глобальное сочетание клавиш для открытия объекта по ссылке из текущей ячейки любой таблицы в большинстве управляемых форм

1 стартмани

27.10.2018    29082    16    tormozit    39    

107

Рисуем и распознаем нарисованное при помощи нейросети

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

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

1 стартмани

03.10.2018    24231    53    DO_WHILE_LOOP    28    

72

Визуализация событий на временной шкале средствами "Поле HTML документа"

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

Интересный способ наглядно отобразить события на временной шкале. Например, может быть применен для красивого вывода документов по клиенту. Тестировалось на платформе 8.3.12.1469

1 стартмани

31.07.2018    36140    159    Plotks2017    27    

236

Продвинутое рисование в табличном документе (стрелок и не только)

Работа с интерфейсом Платформа 1С v8.3 Абонемент ($m)

Вспоминаем геометрию и основы компьютерной графики. Матрицы и аффинные преобразования на плоскости.

1 стартмани

24.07.2018    28041    28    WalterMort    31    

86

Управление состоянием формы через конечный автомат

Работа с интерфейсом Платформа 1С v8.3 Россия Абонемент ($m)

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

1 стартмани

19.06.2018    17752    kalyaka    41    

89

Иерархическая диаграмма

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

Концепция диаграммы по иерархической структуре данных, например по номенклатуре (продажи или остатки на складах).

2 стартмани

17.06.2018    25051    21    DrAku1a    7    

54

Markdown и 1С:Предприятие. Визуализация разметки MD в поле HTML документа

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

Пример работы с документами Markdown (MD) на платформе 1С:Предприятие 8. Используется поле HTML документа, подключение JavaScript библиотеки преобразования разметки Markdown в HTML.

1 стартмани

12.06.2018    18624    24    infosoft-v    12    

66

Мухи отдельно, котлеты отдельно. Еще раз про HTML и JavaScript

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

Это еще одна статья про документ HTML и JavaScript. Уклон сделан на организацию хранения HTML документа и скриптов а так же на подключение скриптов к документу.

1 стартмани

08.06.2018    15764    infosoft-v    21    

42

Гиперссылка в табличной части управляемых форм

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

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

1 стартмани

23.05.2018    28246    pyrkin_vanya    3    

51

Варианты отображений свертываемых групп

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

Как пользователю только одним внешним видом сказать "Тут есть нужные данные. Только нажми". Используем разные варианты свертываемых групп.

1 стартмани

19.12.2017    27025    Kim1C    14    

56

Размеры управляемой формы

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

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

1 стартмани

08.10.2017    33852    json    10    

112

Вставка снимка экрана (screenshot) в форматированный документ

Работа с интерфейсом Платформа 1С v8.3 Россия Абонемент ($m)

Пример работы с буфером обмена и программной вставки скриншота в форматированный документ.

1 стартмани

30.08.2017    37153    55    Boneman    14    

80

Программное создание элементов графической схемы (через XSLT)

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

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

1 стартмани

20.07.2017    33822    83    lazarenko    20    

61

Расширенная настройка динамического списка УФ

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

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

1 стартмани

31.05.2017    47346    178    tormozit    28    

135

Рисуем в 1С

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

Вдруг захотелось порисовать в paint, а его использование заблокировано корпоративными политиками. Бывало такое? Тогда прошу под кат...

1 стартмани

11.05.2017    31506    87    pallid    35    

87

Графическая схема. Управление при помощи XDTO.

Работа с интерфейсом Платформа 1С v8.3 Абонемент ($m)

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

2 стартмани

16.01.2017    41207    166    Alxby    32    

146

Простой редактор плана помещения JavaScript

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

На ресурсе сейчас очень много решений, которые позволяют редактировать карты, используя географические схемы. Так же много решений, которые позволяют редактировать объекты онлайн веб-карт. Мне же нужно было простое решение, для того чтобы расставить квадратные объекты на плане, показать их пользователю. Ну и распечатать, опять же. Я решил написать простенький редактор на JavaScript с использованием библиотеки Raphael.

1 стартмани

23.11.2016    34969    116    igel9780    23    

109