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

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


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

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

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

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

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

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

Например:

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

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

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

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

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

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

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

См. также

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

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

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

10.12.2016    37862    unichkin    74    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

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

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

30.08.2020    8127    quazare    33    

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

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

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

1 стартмани

06.02.2020    3046    2    aximo    3    

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

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

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

27.01.2020    31287    ids79    26    

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

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

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

15.10.2018    31080    tormozit    104    

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

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

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

15.01.2020    26803    John_d    22    

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

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

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

13.01.2020    17300    aximo    14    

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

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

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

30.12.2019    20459    kuzyara    38    

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

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

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

20.09.2012    78560    tormozit    131    

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

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

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

02.12.2019    17740    YPermitin    58    

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

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

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

22.11.2019    8865    Sibars    19    

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

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

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

16.11.2019    24099    aximo    36    

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

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

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

11.07.2007    49143    tormozit    48    

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

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

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

25.10.2019    22460    aximo    38    

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

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

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

10 стартмани

21.10.2019    7826    1    aximo    0    

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

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

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

1 стартмани

17.10.2019    6332    aximo    4    

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

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

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

10.09.2017    45591    tormozit    74    

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

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

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

12.10.2019    13801    aximo    5    

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

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

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

07.10.2019    31096    HostHost    40    

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

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

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

01.10.2019    36064    Yashazz    50    

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

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

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

25.04.2019    16221    m-rv    2    

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

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

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

24.09.2019    12866    budidich    28    

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

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

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

06.09.2019    56565    rpgshnik    65    

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

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

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

05.09.2019    53115    ids79    54    

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

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

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

16.04.2019    20628    m-rv    17    

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

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

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

05.09.2019    30322    YPermitin    24    

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

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

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

03.09.2019    26157    YPermitin    80    

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

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

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

17.08.2019    33006    ids79    16    

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

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

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

01.06.2018    31389    m-rv    21    

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

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

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

1 стартмани

10.08.2019    23115    aximo    37    

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

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

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

08.08.2019    92811    ids79    56    

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

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

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

02.08.2019    39168    avalakh    25    

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

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

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

05.12.2017    28530    itriot11    34    

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

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

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

31.07.2019    26020    json    15    

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

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

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

26.07.2019    66436    ids79    12    

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

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

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

17.07.2019    37594    ids79    27    

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

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

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

27.01.2016    77264    Serginio    110    

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

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

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

09.07.2019    27069    YPermitin    14    

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

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

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

04.07.2019    19994    SeiOkami    50    

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

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

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

02.07.2019    51981    ids79    17    

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

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

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

10.11.2018    35838    ids79    40    

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

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

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

25.06.2019    55894    ids79    26    

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

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

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

11.06.2019    26055    dmurk    146    

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

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

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

16.05.2019    45719    YPermitin    30    

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

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

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

25.07.2018    29628    grumagargler    28    

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

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

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

07.04.2019    36370    ellavs    126    

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

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

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

28.03.2019    27914    ellavs    90    

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

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

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

14.03.2019    32552    YPermitin    53    

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

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

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

04.09.2017    53672    m-rv    61    

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

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

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

01.03.2019    42946    Смешной 1С    30    

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

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

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

26.02.2019    23000    Vladimir Litvinenko    27