Методика независимой системы "Подписки на события"

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

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

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

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

 

Введение

Всем привет! Был у меня как-то практический опыт работы с огромной (запущенной) базой УПП 1.3. Крутилась она на большом производственном предприятии.

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

И все это действо соответственно варилось в одном "котле" под названием УПП.

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

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

 

Постановка задачи

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

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

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

А для разработки этого механизма будем использовать типовую УПП 1.3. Платформу предприятия возьмем последнюю на момент написания статьи 8.3.15.1700.

Итак, начнем:

 

Реализация задачи - часть 1 (создание объектов системы)

Первым этапом в конфигурации создаем такие объект перечисление "ВидыСобытийДокумента" и общий модуль "МодульПодписокДокументов" с установленными параметрами "Сервер, Внешнее соединение, Клиент", "Вызов сервера".

Содержимое перечисления "ВидыСобытийДокумента":

- ПередЗаписью

- ПриЗаписи

- ПередУдалением

- ОбработкаПроведения

- ОбработкаУдаленияПроведения

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

Теперь, создаем основной главный объект - регистр сведений "ПодпискиДокументов". Регистр непериодический и независимый. Вот такой (в скобках далее я буду указывать тип значения):

 

Измерения:

- ОбъектМетаданных (Строка, 255)

- Событие (Перечисление.ВидыСобытийДокумента)

- УсловияВыполнения (Строка, 255)

Ресурсы:

- УсловиеХранилище (ХранилищеЗначения)

- КодХранилище (ХранилищеЗначения)

Реквизиты:

- ПредставлениеОбъектаМетаданных (Строка, 0)

 

Создадим две формы для этого регистра форма "списка" и  форма "записи".

Если с формой "списка" все понятно, то для "формы записи" дам некоторые пояснения:

Добавим реквизит на "форму записи" ПостроительОтчета (ПостроительОтчета) и нарисуем такую форму и поставим его в отборы (рис.1)

 

Рис.1 Форма записи с отборами для регистра "ПодпискиДокументов".

 

Консоль исполняемого кода (ПолеТекстовогоДокумента) добавим на вторую закладку "Исполняемый код" на форме (рис.2):

Рис.2 Консоль исполняемого кода для регистра "ПодпискиДокументов".

 

Так, вроде основные вещи создали, теперь "наполним кодом" эти объекты.

 

Реализация задачи - часть 2 (пишем код)

В общем модуле конфигурации "МодульПодписокДокументов" пишем такой код

Создаем процедуры обработки подписок на события:

// для подписки ПередЗаписью
Процедура ПодпискиДокументовПередЗаписью(Источник,Отказ,РежимЗаписи, РежимПроведения) Экспорт
	
КонецПроцедуры	

// для подписки ПередЗаписью
Процедура ПодпискиДокументовПриЗаписи(Источник,Отказ) Экспорт
	
КонецПроцедуры	

// для подписки ПередУдалением
Процедура ПодпискиДокументовПередУдалением(Источник,Отказ) Экспорт
	
КонецПроцедуры	

// для подписки Проведения
Процедура ПодпискиДокументовПроведения(Источник,Отказ, РежимПроведения) Экспорт
	
КонецПроцедуры	

// для подписки УдалениеПроведения
Процедура ПодпискиДокументовУдалениеПроведения(Источник,Отказ) Экспорт
	
КонецПроцедуры	

// для подписки ПроверкиЗаполнения
Процедура ПодпискиДокументовПроверкиЗаполнения(Источник,Отказ, ПроверяемыеРеквизиты) Экспорт
	
КонецПроцедуры

 

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

Поскольку создание "подписки на событие" невозможно без определения обработчика - привязываем их к "одноименным" процедурам (пока еще пустым процедурам) из общего модуля "МодульПодписокДокументов".

См. выше в коде - что к чему привязывается.

Подписки такие:

ПодпискиДокументовПередЗаписью

ПодпискиДокументовПриЗаписи

ПодпискиДокументовПередУдалением

ПодпискиДокументовПроведения

ПодпискиДокументовУдалениеПроведения

ПодпискиДокументовПроверкиЗаполнения

 

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

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

//заполняем объект ПостроительОтчета настройками 
Функция ИнициализироватьПостроительДляПодписок(ИмяДокумента) Экспорт
		
	ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1
	               |	%ДОК%.Ссылка
	 	       |ИЗ
	               |	Документ.%ДОК% КАК %ДОК%
	               |ГДЕ
	               |	%ДОК%.Ссылка = &Ссылка";
	
	ТекстЗапроса            = СтрЗаменить(ТекстЗапроса, "%ДОК%", ИмяДокумента);
	
	Построитель       = Новый ПостроительОтчета;
	Построитель.Текст = ТекстЗапроса;
	Построитель.ЗаполнитьНастройки();
	
	Возврат Построитель;
	
КонецФункции

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


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

 

Теперь, в общем модуле "МодульПодписокДокументов" пишем основную функцию, которая будет "запускать" код.

Процедура ВыполнитьОбработкуПодписки(ВидСобытия, Источник, Отказ, РежимЗаписи = Неопределено, РежимПроведения = Неопределено) Экспорт
		
	ИмяДокумента = Источник.Метаданные().Имя;
	
	Запрос = Новый Запрос;
	
	Запрос.Текст = "ВЫБРАТЬ
	               |	ПодпискиДокументов.ОтборПредставление,
	               |	ПодпискиДокументов.ХранилищеИсполняемогоКода,
	               |	ПодпискиДокументов.ХранилищеОтбора
	               |ИЗ
	               |	РегистрСведений.ПодпискиДокументов КАК ПодпискиДокументов
	               |ГДЕ
	               |	ПодпискиДокументов.ВидСобытия = &ВидСобытия
	               |	И ПодпискиДокументов.ТипОбъектаМетаданных = &ТипОбъектаМетаданных";
	
        Запрос.УстановитьПараметр("ТипОбъектаМетаданных", ИмяДокумента);
	Запрос.УстановитьПараметр("ВидСобытия", ВидСобытия);	

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

 

Эту функцию, мы должны прописать в каждой процедуре вызова подписки на событие.

Примерно - это вот так:

Процедура ПодпискиДокументовПередЗаписью(Источник,Отказ,РежимЗаписи, РежимПроведения) Экспорт
	
	ВыполнитьОбработкуПодписки(Перечисления.ВидыСобытийДокументов.ПередЗаписью, Источник,Отказ,РежимЗаписи, РежимПроведения);
	
КонецПроцедуры	

 

В модуле "формы записи" регистра "ПодпискиДокумента" пишем такой код с привязкой на события формы

 

Процедура ТипОбъектаМетаданныхПриИзменении(Элемент)

      РегистрСведенийМенеджерЗаписи.ПредставлениеОбъектаМетаданных = Элемент.ВыделенныйТекст;
      ПостроительОтчета = МодульПодписокДокументов.ИнициализироватьПостроительДляПодписок(РегистрСведенийМенеджерЗаписи.ОбъектМетаданных);
    
КонецПроцедуры


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


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


ЭлементыФормы.ОбъектМетаданных.СписокВыбора = МодульДополнительныхУсловий.ПолучитьСписокИменДокументов();

Так, что у нас получилось:

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

Сообщить("Привет");

Проверено - работает. Напишем заключение.

 

Заключение

В статье, я пошагово разобрал методику создания функционала "Управление подписками на события".

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

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

 

Надеюсь, вам понравилась эта статья-методика. И, я уверен, что она будет для вас полезна.

Так же по этой статье можно получить понимание объекта конфигурации "Подписка на событие".

Спасибо, что дочитали до конца! Всем привет!

 

Эпилог. Ранее опубликованные материалы

Так же, прошу посмотреть мои предыдущие статьи:

Работа с механизмом отладки 1С. Базовые настройки

1С + IIS + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let's encrypt

Дополнительные расходы на основе перемещения запасов в УНФ (пошаговая разработка расширения конфигурации)

Подсистема "Подписки на события" (продолжение)

 

 

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. chg 18.10.19 08:09 Сейчас в теме
Плюсану, тема полезная, так же жду пока реализуют поддержку подписок на уровне расширений.
3. aximo 1656 18.10.19 08:41 Сейчас в теме
(1) я предполагаю, что это войдет в "тираж" не ранее весны.
2. MVK80 18.10.19 08:33 Сейчас в теме
(0), что-нибудь новое по сравнению с https://infostart.ru/public/236252/ в этой методике есть?
4. aximo 1656 18.10.19 08:44 Сейчас в теме
(2) сейчас посмотрел, разумеется, в ссылке сделано через "справочник", что я считаю избыточным. я предлагаю основной объект - регистр сведений "ПодпискиДокументов".
28. Rustig 1420 26.10.19 11:33 Сейчас в теме
(2) идейно похоже,
но могу засвидетельствовать , что похожие друг на друга разработки на ИС найти не получается перед тем, как выкладываешь.
А когда выложишь, то там, то тут появляются ассоциативные ссылки. И через месяц другой находишь похожие...
5. buganov 148 18.10.19 09:48 Сейчас в теме
А что если было бы лучше раздробить УПП на более мелкие конфигурации, например, на связку УТ-БП-ЗУП-Бюджетирование-МСФО-WMS? Тогда обновлять было бы не так больно, быстродействие было бы лучше, возможность фикса ошибок выше. Правда, издержки на сопровождение зоопарка выше, но это решается квалифицированными специалистами.
Ни в коем случае не лезу с советами, просто интересно мнение сообщества и подискутировать, что лучше, буза УПП, например на 1Тб + парой сотен душ и столько же роботов или все-же раздробить ее на более мелкие куски?
27. Rustig 1420 26.10.19 11:28 Сейчас в теме
(5) в моей практике рабочий вариант, когда ЗУП и БП для бухгалтеров как регламентированный учет, УПП и КА - как управленческий учет для менеджеров, кладовщиков, производства.
33. pro-rok 253 27.05.20 09:36 Сейчас в теме
(5) Я думаю, что руководствоваться принципом давайте создадим 5 конфигураций вместо одной, что бы проще администрировать в корне не верно. Можно конечно приводить доводы в части быстродействия и т.д., но если для решения задачи бизнеса требуется единое информационное пространство, значит так и должно быть.
34. buganov 148 27.05.20 13:10 Сейчас в теме
(33) и какая задача бизнеса решится единым пространством? Не могу так на вскидку придумать
35. pro-rok 253 27.05.20 17:12 Сейчас в теме
(34) да не в том дело какая задача решиться, я говорю про мышление когда во главенство вопроса ставиться удобство администрирования, а не удобство пользователя или потребности бизнеса.
Представьте что вы спешите и заказываете такси, но водитель едет по длинному маршруту потому что ему так удобнее.
6. ZergKRSK 127 18.10.19 11:30 Сейчас в теме
ЭлементыФормы.ОбъектМетаданных.СписокВыбора = МодульДополнительныхУсловий.ПолучитьСписокИменДокументов();

Однако в тексте нигде не упоминается модуль "МодульДополнительныхУсловий"...
7. aximo 1656 18.10.19 11:35 Сейчас в теме
(7) это "МодульПодписокДокументов"
8. ZergKRSK 127 18.10.19 11:51 Сейчас в теме
Переменная не определена (ПостроительОтчета)
Если НЕ УстановитьОтборыПостроителяНовый(<<?>>ПостроительОтчета, ИнициализироватьПостроительДляПодписок(ИмяДокумента), ДопУсловие.УсловиеХранилище.Получить()) Тогда (Проверка: Толстый клиент (обычное приложение))


Это Процедура ВыполнитьОбработкуПодписки
9. aximo 1656 18.10.19 12:01 Сейчас в теме
(8) код написан для обычных форм. Установлен ли у вас реквизит формы - ПостроительОтчетов???
10. ZergKRSK 127 18.10.19 12:03 Сейчас в теме
(9) у меня обычные формы. Процедура ВыполнитьОбработкуПодписки находится в ОБЩЕМ модуле, откуда там форма?
11. aximo 1656 18.10.19 12:18 Сейчас в теме
(10) отловите ошибку отладчиком. работы на 5 минут. метод описан в статье - его реализацию - на ваше усмотрение
12. ZergKRSK 127 18.10.19 12:25 Сейчас в теме
(11) эта ошибка отладчиком не отловится. У Вас процедура задействована в общем модуле и откуда-то там возник Построитель.

Еще в копилку: в начале статье говорится о перечислении "ВидыСобытийДокумента", далее в коде уже она уже идет под именем "ВидыСобытийДокументов".

При условии что не ясно откуда взялся злосчастный Построитель так вообще прихожу к выводу что это сырая публикация с кучей ошибок.
15. aximo 1656 18.10.19 15:25 Сейчас в теме
(12) ладно, так и быть чуть позже я выложу конфигурацию с этой рабочей «системой» - она у меня есть, раз у нас методики воспринимаются иногда на уровне «копи-паст».
16. Yashazz 3204 18.10.19 16:58 Сейчас в теме
(15) На ИС сейчас всё хотят не только чтоб разжевали, а ещё в рот положили и минимум трудозатрат. Увы.
22. ZergKRSK 127 21.10.19 04:14 Сейчас в теме
(15) если уж вы к методике прикладываете код то имхо он должен быть без ошибок.
13. dsdred 1412 18.10.19 14:54 Сейчас в теме
В дальнейшем, попробую реализовать этот функционал как расширение конфигурации, начиная с версии 8.3.17 вроде бы обещали вывести "подписки"

От куда информация?
14. aximo 1656 18.10.19 15:22 Сейчас в теме
(13) на партнерском говорили о развитии механизмов расширений в последующих версиях
19. pm74 167 18.10.19 18:57 Сейчас в теме
(14) в расширении , (почти) подписку можно организовать через "ДобавитьОбработчик"
PLAstic; aximo; +2 Ответить
20. dsdred 1412 19.10.19 13:24 Сейчас в теме
(14)хм... Буду ждать )) А то из-за подписки многие универсальные идеи у меня в стопе.
А про внешнии источники данных в расширение планы не озвучивали?
21. aximo 1656 19.10.19 13:36 Сейчас в теме
(20) нет, про внешние источники не говорили, была информация о поддержке.... смайлов.....
17. acanta 18.10.19 17:12 Сейчас в теме
Спасибо автору за подробное изложение материала.
Имхо, ЛПР, принимающие решение о переводе предприятия с типовой конфигурации на замке на конфигурацию с произвольно встраиваемым кодом в режиме предприятия недостаточно ознакомились с аксаптой и устройством слоев в ней.
Мы так же надеемся, что разработчики платформы не оставят попытки как нибудь прикрутить самый крутой оптимизатор в мире к файловой базе.
18. aximo 1656 18.10.19 17:55 Сейчас в теме
(17) Всем спасибо, кто написал одобрительные комментарии, есть у меня еще пара небольших "вынужденных" рабочих алгоритмов-идей, для работы с большими высоконагруженными производственными базами.

Продолжу изложение материала.
23. Pawlick 10 21.10.19 15:10 Сейчас в теме
Сами используем такую (подобную) подсистему в своей УПП.
Хотел написать сам статью, но не стал: случайно наткнулся на подобный функционал в конфигурациях от Раруса, (например), понял что все это уже было, ничего в этом нового нет, и не стал заморачиваться...

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

Например:

Если Источник.ПометкаУдаления Тогда 
  Возврат;
КонецЕсли;
...
//Код обработчика
24. aximo 1656 21.10.19 15:49 Сейчас в теме
(23) проблем с производительностью не наблюдалось. вы можете посмотреть полную версию вот здесь https://infostart.ru/public/1142017/

на самом деле - в статье описаны примитивные вещи так-то - просто нужен как раз скилл работы с построителем)
25. PLAstic 252 24.10.19 09:04 Сейчас в теме
Если конфигурация допиливалась, то почему новая функциональность не разрабатывалась в управляемом интерфейсе? И тогда на неё вешались бы расширения для оперативного изменения или фоновой модификации без необходимости завершения сеансов.
И не вижу вообще места для построителя. Он там не нужен.
26. Terve!R 24.10.19 17:13 Сейчас в теме
Конец 2019 года, а скриншоты из 1с 8.0.
Кому сейчас нужен код для обычных форм?
29. user925427 72 31.10.19 15:58 Сейчас в теме
Тема интересная как попытка создать более общий инструмент при решении частной задачи.
Идея понятна, а реализация вызывает вопросы.
Объясните мне, может, я что-то упустил, что выдаст Ваш запрос к регистру сведений
Запрос.Текст = "ВЫБРАТЬ
| ПодпискиДокументов.ОтборПредставление,
| ПодпискиДокументов.ХранилищеИсполняемогоКода,
| ПодпискиДокументов.ХранилищеОтбора
|ИЗ
| РегистрСведений.ПодпискиДокументов КАК ПодпискиДокументов
|ГДЕ
| ПодпискиДокументов.ВидСобытия = &ВидСобытия
| И ПодпискиДокументов.ТипОбъектаМетаданных = &ТипОбъектаМетаданных";
если его структура такова, как описано выше:
"Измерения:
- ОбъектМетаданных (Строка, 255)
- Событие (Перечисление.ВидыСобытийДокумента)
- УсловияВыполнения (Строка, 255)
Ресурсы:
- УсловиеХранилище (ХранилищеЗначения)
- КодХранилище (ХранилищеЗначения)
Реквизиты:
- ПредставлениеОбъектаМетаданных (Строка, 0)
"
Где тут "ВидСобытия" и "ТипОбъектаМетаданных", устанавливаемые в качестве отбора в
измерениях и откуда возьмутся выбираемые поля?

Если даже запрос неведомым мне образом сработает и выдаст результат из 3 полей,
в переменную ДопУсловие = РезультатЗапроса.Выбрать(); то как представляется выполнение
следующих строк кода:
ДопУсловие.УсловиеХранилище.Получить();
Выполнить(ДопУсловие.КодХранилище.Получить()); ?
Это же выборка из регистра сведений, а не из справочника, как Вы утверждаете в 4).

Не знаю, что Вы там выкладываете в продолжении статьи, но этот код вызвал вопросы.
30. serg-lom89 53 24.01.20 14:12 Сейчас в теме
Что то похожее делал но не совсем
https://infostart.ru/public/826051/

там через компоновщик делал.
В дальнейшем так же некоторые моменты "засунул" в подписки.
31. Yashazz 3204 27.05.20 08:23 Сейчас в теме
(30)
Тема интересная как попытка создать более общий инструмент при решении частной задачи

Я так частенько делаю, и получаются интересные полезные разработки. Иногда в разы интереснее, чем предложенная в статье. Но, поскольку принципиальной новизны (кстати, как и в статье) в них маловато, я не замусориваю ИС и их не выкладываю. А некоторые - увы, да.
32. Vortigaunt 76 27.05.20 09:23 Сейчас в теме
Идея классная, только не понял зачем измерение:
- УсловияВыполнения (Строка, 255)

Зачем увеличивать основной индекс регистра сведений без надобности. В запросе фильтрация идет по виду события и по типу объекта.
Если это только для того, чтобы визуально представить условие в форме списка, то лучше перенести в реквизит. А если для того, чтобы на один и тот же объект навесить по разным условиям разные подписки, то вместо строки на 255 лучше числовое поле и заполнять инкрементом.
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

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

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

22.04.2020    3374    23    infostart    2    

Создание ПКО на основе отчетов о розничных продажах

Обработка документов Кассовые операции Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

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

1 стартмани

06.02.2020    1496    0    aximo    3    

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

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

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

27.01.2020    15509    0    ids79    26    

Динамический список. Апгрейд справочника "Номенклатура" типовой конфигурации с помощью расширения

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

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

26.01.2020    6752    0    aximo    26    

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

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

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

10.12.2016    34333    0    unichkin    45    

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

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

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

15.01.2020    15953    0    John_d    22    

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

Работа с интерфейсом v8 v8::СКД 1cv8.cf Бесплатно (free)

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

13.01.2020    10002    0    aximo    13    

Последовательности событий. Шпаргалка

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

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

30.12.2019    11102    0    kuzyara    33    

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

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

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

15.10.2018    26364    0    tormozit    100    

Обсудим планы обмена. Способы регистрации объектов к обмену

Обмен данными 1С v8 1cv8.cf Бесплатно (free)

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

16.11.2019    13642    0    aximo    35    

Лайфхак работы с СКД. Собираем отчет.

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

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

25.10.2019    16534    0    aximo    37    

Подсистема "Подписки на события" (продолжение)

Адаптация типовых решений v8 1cv8.cf Абонемент ($m)

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

10 стартмани

21.10.2019    6550    1    aximo    0    

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

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

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

20.09.2012    73859    0    tormozit    129    

Дополнительные расходы на основе перемещения запасов в УНФ (пошаговая разработка расширения конфигурации)

Обработка документов Учет ТМЦ Расширения v8 УНФ Россия УУ Абонемент ($m)

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

1 стартмани

17.10.2019    5386    3    aximo    4    

Работа с механизмом отладки 1С. Базовые настройки

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

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

12.10.2019    9391    0    aximo    5    

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

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

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

01.10.2019    25703    0    Yashazz    45    

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

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

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

11.07.2007    44908    0    tormozit    38    

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

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

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

06.09.2019    35297    0    rpgshnik    62    

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

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

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

05.09.2019    37464    0    ids79    52    

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

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

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

05.09.2019    21976    0    YPermitin    24    

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

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

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

10.09.2017    40757    0    tormozit    72    

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

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

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

03.09.2019    21979    0    YPermitin    80    

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

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

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

17.08.2019    25930    0    ids79    16    

1С + IIS + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let's encrypt

Администрирование данных 1С v8 1С:CRM Абонемент ($m)

Всем Доброго времени! Предлагаю Вам небольшую базовую инструкцию, где я опишу, как быстро перевести опубликованную в веб базу 1С на защищенное https соединение, используя стандартный IIS сервер и бесплатный сертификат SSL от Let's encrypt.

1 стартмани

10.08.2019    16253    13    aximo    36    

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

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

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

25.04.2019    14277    0    m-rv    2    

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

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

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

08.08.2019    57062    0    ids79    37    

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

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

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

02.08.2019    26690    0    avalakh    21    

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

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

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

26.07.2019    43238    0    ids79    11    

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

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

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

16.04.2019    17855    0    m-rv    17    

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

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

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

17.07.2019    28858    0    ids79    27    

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

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

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

09.07.2019    21734    0    YPermitin    13    

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

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

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

04.07.2019    16588    0    SeiOkami    50    

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

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

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

01.06.2018    27550    0    m-rv    21    

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

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

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

25.06.2019    42675    0    ids79    20    

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

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

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

11.06.2019    21563    0    dmurk    144    

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

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

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

16.05.2019    35636    0    YPermitin    30    

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

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

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

05.12.2017    25829    0    itriot11    34    

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

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

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

11.05.2019    24441    0    Eret1k    23    

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

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

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

07.04.2019    29648    0    ellavs    126    

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

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

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

28.03.2019    23709    0    ellavs    88    

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

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

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

27.01.2016    71345    0    Serginio    108    

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

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

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

14.03.2019    26699    0    YPermitin    53    

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

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

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

26.02.2019    18555    0    Vladimir Litvinenko    27    

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

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

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

03.02.2019    31772    0    ids79    9    

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

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

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

10.11.2018    30803    0    ids79    40    

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

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

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

26.12.2018    22997    0    ids79    31    

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

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

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

14.12.2018    35355    0    ids79    72    

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

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

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

25.07.2018    26379    0    grumagargler    26    

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

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

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

16.11.2018    32001    0    ids79    32    

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

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

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

13.11.2018    37933    0    Unk92    21    

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

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

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

03.09.2018    24115    0    nikita0832    42    

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

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

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

23.08.2018    35038    0    Rain88    46