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

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

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


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

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

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

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

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

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

Например:

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

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

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

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

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

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

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

См. также

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

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

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

10.12.2016    37180    unichkin    46    

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

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

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

1 стартмани

06.02.2020    2400    2    aximo    3    

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

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

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

27.01.2020    25263    ids79    26    

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

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

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

15.01.2020    22796    John_d    22    

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

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

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

15.10.2018    30027    tormozit    100    

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

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

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

13.01.2020    14106    aximo    14    

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

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

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

30.12.2019    17383    kuzyara    33    

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

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

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

02.12.2019    16827    YPermitin    72    

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

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

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

20.09.2012    77763    tormozit    131    

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

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

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

22.11.2019    8213    Sibars    19    

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

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

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

16.11.2019    19862    aximo    35    

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

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

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

25.10.2019    19949    aximo    37    

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

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

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

11.07.2007    48130    tormozit    41    

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

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

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

10 стартмани

21.10.2019    7425    1    aximo    0    

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

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

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

1 стартмани

17.10.2019    6139    aximo    4    

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

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

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

12.10.2019    11876    aximo    5    

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

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

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

10.09.2017    44579    tormozit    74    

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

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

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

01.10.2019    32234    Yashazz    50    

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

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

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

06.09.2019    48016    rpgshnik    63    

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

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

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

05.09.2019    48127    ids79    54    

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

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

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

25.04.2019    16003    m-rv    2    

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

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

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

05.09.2019    27760    YPermitin    24    

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

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

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

03.09.2019    25291    YPermitin    80    

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

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

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

17.08.2019    31047    ids79    16    

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

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

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

16.04.2019    20122    m-rv    17    

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

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

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

1 стартмани

10.08.2019    20522    aximo    37    

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

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

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

08.08.2019    78914    ids79    49    

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

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

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

02.08.2019    34149    avalakh    22    

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

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

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

01.06.2018    30435    m-rv    21    

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

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

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

31.07.2019    23110    json    13    

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

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

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

26.07.2019    57775    ids79    11    

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

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

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

17.07.2019    35271    ids79    27    

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

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

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

05.12.2017    28188    itriot11    34    

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

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

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

09.07.2019    25797    YPermitin    14    

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

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

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

04.07.2019    19534    SeiOkami    50    

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

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

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

02.07.2019    45107    ids79    17    

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

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

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

27.01.2016    76130    Serginio    108    

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

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

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

25.06.2019    51421    ids79    25    

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

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

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

11.06.2019    24783    dmurk    145    

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

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

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

16.05.2019    42254    YPermitin    30    

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

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

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

10.11.2018    34442    ids79    40    

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

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

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

11.05.2019    29193    Eret1k    23    

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

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

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

07.04.2019    35072    ellavs    126    

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

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

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

28.03.2019    27256    ellavs    88    

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

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

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

25.07.2018    29145    grumagargler    28    

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

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

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

14.03.2019    31054    YPermitin    53    

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

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

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

01.03.2019    38404    Смешной 1С    28    

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

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

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

26.02.2019    21722    Vladimir Litvinenko    27    

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

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

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

04.09.2017    52432    m-rv    61    

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

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

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

03.02.2019    38708    ids79    9