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

Публикация № 842660 03.09.18

Разработка - Механизмы платформы 1С

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

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

Итак, прежде чем прикручивать педали, посмотрим что уже есть в БСП: ВыполнитьПроцедуруМодуляОбъектаОбработки(Параметры, АдресХранилища). Заполняем параметры:

ПараметрыЗадания = Новый Структура;
ПараметрыЗадания.Вставить("ИмяОбработки", АдресФайлаНаСервере);
ПараметрыЗадания.Вставить("ИмяМетода", "ДлительнаяОперация");
ПараметрыЗадания.Вставить("ПараметрыВыполнения", СтруктураПараметров);
ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", Истина);
ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка",Неопределено);

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

&НаКлиенте
ДвоичныеДанные = новый ДвоичныеДанные(АдресФайлаОбработки());
ФайлОбработкиВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
&НаСервере
ДвоичныеДанныеНаСервере = ПолучитьИзВременногоХранилища(ФайлОбработкиВоВременномХранилище);
АдресФайлаНаСервере = КаталогВременныхФайлов()+ИмяФайла;
ДвоичныеДанныеНаСервере.Записать(АдресФайлаНаСервере);


&НаСервере
Функция АдресФайлаОбработки()
	Возврат РеквизитФормыВЗначение("Объект").ИспользуемоеИмяФайла;
КонецФункции

Итак, файл записали на сервере, запускаем фоновое задание, которому говорим запустить функцию из БСП, которая запустит наш метод из этого файла внешней обработки:

ДвоичныеДанныеНаСервере = ПолучитьИзВременногоХранилища(ФайлОбработкиВоВременномХранилище);
            АдресФайлаНаСервере = КаталогВременныхФайлов()+ИмяФайла;
            ДвоичныеДанныеНаСервере.Записать(АдресФайлаНаСервере);
            
            СтруктураПараметров = Новый Структура("РезультатЗапроса,Код,Параметры",Результат[Результат.ВГраница()],Код,ПараметрыЗапроса);    

            НаименованиеЗадания = НСтр("ru = 'Длительная операция внешней обработки'");
            
            ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки";
            
            ПараметрыЗадания = Новый Структура;
            ПараметрыЗадания.Вставить("ИмяОбработки", АдресФайлаНаСервере);
            ПараметрыЗадания.Вставить("ИмяМетода", "ДлительнаяОперация");
            ПараметрыЗадания.Вставить("ПараметрыВыполнения", СтруктураПараметров);
            ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", Истина);
            ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка",Неопределено);
            //ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Длительная операция"));
            
            ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
            ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
            
            РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне(УникальныйИдентификатор,ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);
           
            ИдентификаторЗадания = РезультатФоновогоЗадания.ИдентификаторЗадания;

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

ПодключитьОбработчикОжидания("ПроверкаФоновогоЗадания",1,Ложь);

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

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

	Возврат Результат;
КонецФункции

&НаКлиенте
Процедура УбитьПроцесс(Команда)
	
	УбитьПроцессНаСервере();
	ОтключитьОбработчикОжидания("ПроверкаФоновогоЗадания");
	Сообщить(""+ТекущаяДата()+" задание выполнено");
	
КонецПроцедуры

&НаСервере
Процедура УбитьПроцессНаСервере()
	Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
	Задание.Отменить();
	Элементы.ГруппаФоновоеЗадание.Видимость=Ложь;
КонецПроцедуры

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

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

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Infactum 309 03.09.18 17:26 Сейчас в теме
Чем типовые механизмы БСП не угодили? Там еще и контроль доступа для фонового задания задействовать можно будет.
DrAku1a; kiruha; +2 Ответить
2. zarankony 294 03.09.18 22:36 Сейчас в теме
(1) читал я про эти методы, к сожалению нет идентификатора задания, а хотелось бы получать прогресс и выводить сообщения из фонового задания. а то от обычного кружка или котика радости мало))
BigB; DrAku1a; Vlad33k; +3 Ответить
3. RocKeR_13 1215 04.09.18 15:37 Сейчас в теме
4. zarankony 294 04.09.18 16:31 Сейчас в теме
(3) о да, она даже у меня в закладках есть) там есть привязка к "ИмяМодуля.ИмяЭкспортнойПроцедуры", ещё и замена общей формы, а задача - реализовать без изменения конфигурации.
5. Malfarion 228 04.09.18 18:52 Сейчас в теме
(4) Привет, не пробовал такой хак пройдет аудит на Fresh ? С учетом того что обработка во внешних, из файла понятно что не возьмет.
6. zarankony 294 04.09.18 21:46 Сейчас в теме
(5) Нет, не пробовал, попробуй - нам расскажешь.
7. Malfarion 228 05.09.18 01:05 Сейчас в теме
19. vadim1011985 95 03.11.18 01:04 Сейчас в теме
(2) Вот сегодня реализовал подобную хотелку
&НаКлиенте
//Процедура запускает загрузку и анализ файлов выгрузки 
// 
Процедура ЗагрузитьИЗаписать(Команда)
	
	Состояние("Начало загрузки",1,"Начало загрузки данных");
		
	ПараметрыКоманды = 
  ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВФоне(Параметры.ДополнительнаяОбработкаСсылка);
	
	ПараметрыКоманды.СопровождающийТекст = НСтр("ru = 'Подождите идет загрузка данных'");
	
	ПараметрыКоманды.ФормаВладелец = ЭтаФорма;
	
	ПараметрыКоманды.Вставить("Каталог", Объект.Каталог);
	//ПараметрыКоманды.Вставить("Объект",Объект);
	ПараметрыКоманды.Вставить("ТипЗагрузкиДокументов",Объект.ТипЗагрузкиДокументов);
	ПараметрыКоманды.Вставить("НачПериода",Объект.НачПериода);
	ПараметрыКоманды.вставить("КонПериода",Объект.КонПериода);
	
	Обработчик = Новый ОписаниеОповещения("ПослеЗавершенияДлительнойОперации", ЭтотОбъект, ПараметрыКоманды.СопровождающийТекст); 
	
	ОбработчикПрогресса =  Новый ОписаниеОповещения("ПрогрессВыполнения", ЭтотОбъект);
				
	ВыполнитьКомандуВФоне(Параметры.ИдентификаторКоманды, ПараметрыКоманды, Обработчик,ОбработчикПрогресса);

	
КонецПроцедуры

/// Процедура повторяет код общего модуля ДлительныеОперации.ВыпонитьвФоне . добавлен параметр оповещение о прогрессе выполнения. плюс изменены параметры структуры настройки ожидания

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


&НаКлиенте
Процедура ПрогрессВыполнения(Результат, ДополнительныеПараметры) Экспорт

		
	Если Результат.Статус = "Выполняется" Тогда
		Прогресс = Результат.Прогресс;
		Если Прогресс <> Неопределено Тогда
			
			Состояние (Прогресс.Текст, Прогресс.Процент,,);	
	     КонецЕсли;
	
	КонецЕсли;

КонецПроцедуры
Показать


Ну и соотвественно для сообщения прогресса использую ДлительныеОперации.СообщитьПроцесс
31. km_if 21.08.19 21:18 Сейчас в теме
(19) На БСП 3 также пытался сделать, не передаются некоторые параметры, пишет "Параметры не могут быть сериализованы".
Строки и числа передаются в ПараметрыКоманды, а что посложнее можно запихать в эти параметры, но выскакивает ошибка.
Кроме того, без БСП процедуры и функции в модуле объекта видят реквизиты объекта, а если запускать через длительную операцию, то ничего не видят - все значения пустые.
Непонятно как этим пользоватся, как сложные типы данных передавать для выполнения в длительную операцию на БСП 3?
8. asved.ru 36 05.09.18 09:25 Сейчас в теме
Необходимо понимать, что объект внешней обработки, вызов метода которого выполняется в фоне - не тот же самый объект, форма которого открыта на клиенте.
9. zarankony 294 05.09.18 12:01 Сейчас в теме
(8) Да, контекст в этом случае конечно отвалится. Я вообще вызываю процедуру из модуля объекта этой внешней обработки и туда передаю все что нужно. Рабочий пример если интересно здесь - https://infostart.ru/public/585055/ это по сути мой рабочий инструмент.
10. paybaseme 14 04.10.18 09:53 Сейчас в теме
11. Xershi 1384 07.10.18 15:08 Сейчас в теме
Разрозненные куски кода, почти не понятно что и откуда.
Я так понимаю тут речь идет о том как внешнюю не подключенную обработку, запущенную через файл выполнить в фоне.
В целом получилось.
Добавил на форму реквизит "ПрогрессОбработки", число. После того как убрал комент в
Состояние("Выполняется алгоритм...",ПрогрессОбработки);

Также добавил на форму реквизит "ИдентификаторЗадания", УникальныйИдентификатор.
Как сделать прогресс бар без состояния не понятно.
Если база файловая и запущена через конфигуратор в отладке, фоновое задание не стартует, но это уже вопрос к БСП.
Если подключить обработку во внешние вываливается ошибка при сохранении, я так понимаю для подключения не задумывалось.

Сделал вот такую команду:
&НаСервере
Процедура Команда1НаСервере(ФайлОбработкиВоВременномХранилище)
	
	ИмяФайла = "Загрузка курсов валют НБРБ 2.0.epf";
	
	ДвоичныеДанныеНаСервере = ПолучитьИзВременногоХранилища(ФайлОбработкиВоВременномХранилище);
	АдресФайлаНаСервере = КаталогВременныхФайлов() + ИмяФайла;
	ДвоичныеДанныеНаСервере.Записать(АдресФайлаНаСервере);
	
	//СтруктураПараметров = Новый Структура("РезультатЗапроса,Код,Параметры", Результат[Результат.ВГраница()],Код,ПараметрыЗапроса);    
	
	ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
	ТекущийСписокВалют = ОбъектВЗначении.СписокВалют.Выгрузить();
	
	СтруктураПараметров = Новый Структура();
	СтруктураПараметров.Вставить("ДополнительнаяОбработкаСсылка",	Объект.ОбъектСсылка);
	//ПараметрыКоманды.Вставить("АдресРезультата",				ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор()));
	СтруктураПараметров.Вставить("СопровождающийТекст",				НСтр("ru = 'Выполняется загрузка курсов валют...'"));
	//СтруктураПараметров.Вставить("СписокВалют",						ПолучитьАдресТаблицыВалют());
	СтруктураПараметров.Вставить("СписокВалют",						ТекущийСписокВалют);
	СтруктураПараметров.Вставить("НачалоПериода",					Объект.НачалоПериода);
	СтруктураПараметров.Вставить("ОкончаниеПериода",				Объект.ОкончаниеПериода);
	
	
	НаименованиеЗадания = НСтр("ru = 'Длительная операция внешней обработки'");
	
	ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки";
	
	ПараметрыЗадания = Новый Структура;
	ПараметрыЗадания.Вставить("ИмяОбработки", АдресФайлаНаСервере);
	ПараметрыЗадания.Вставить("ИмяМетода", "ВыполнитьКоманду");
	ПараметрыЗадания.Вставить("ПараметрыВыполнения", СтруктураПараметров);
	ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", Истина);
	ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка",Неопределено);
	//ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Длительная операция"));
	
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
	
	РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне(УникальныйИдентификатор, ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);
	
	ИдентификаторЗадания = РезультатФоновогоЗадания.ИдентификаторЗадания;
	
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
	
	ДвоичныеДанные = Новый ДвоичныеДанные(АдресФайлаОбработки());
	ФайлОбработкиВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
	
	Команда1НаСервере(ФайлОбработкиВоВременномХранилище);
	
	ПодключитьОбработчикОжидания("ПроверкаФоновогоЗадания", 1, Ложь);

КонецПроцедуры
Показать

Нужно еще назначить "имя файла" или на форме указывать, решил просто переменной записать.
ПараметрыЗадания.Вставить("ИмяМетода", 

Тут я так понял автор не сделал ремарку и не уточнил что это ваша процедура которая будет длительно выполняться. У меня в модуле обработки экспортная процедура в стиле БСП "ВыполнитьКоманду".
Также в "СтруктураПараметров" нужно указать ваши параметры, а не то что у автора. И вам нужно будет полностью под себя это сделать.
Плюс переписал
&НаСервере
Функция ПроверкаФоновогоЗаданияНаСервере()
	
	Результат = Новый Структура("Прогресс, Состояние");
		
	Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
	Если Задание = Неопределено Тогда
		Возврат Неопределено;
	Иначе
		
		ЗаполнитьЗначенияСвойств(Результат, Задание);
		Результат.Состояние = Строка(Результат.Состояние);
		Сообщения=Задание.ПолучитьСообщенияПользователю(Ложь);
		Для Каждого Сообщение ИЗ Сообщения Цикл
			Если Лев(Сообщение.Текст,1) <> "{" Тогда
				Сообщить(Сообщение.Текст);
			КонецЕсли;
		КонецЦикла;
		Прогресс = ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗадания);
		Если Прогресс <> Неопределено Тогда
			ПрогрессОбработки = Прогресс.Процент;//?(Прогресс.Процент<>0,Прогресс.Процент,ПрогрессОбработки);
		КонецЕсли;
		Результат.Вставить("Прогресс",Прогресс);
	КонецЕсли;

	Возврат Результат;
КонецФункции
Показать


В итоге что-то и вышло, но толку ноль.
По https://infostart.ru/public/525648/ уже писал обработку. Результат есть, но прогресса нет.
compaud; Franchiser; +2 Ответить
12. zarankony 294 08.10.18 09:35 Сейчас в теме
(11)Да, ПрогрессОбработки и ИдентификаторЗадания надо добавлять на форму, это стоило указать хотя мне и казалось чем-то само собой разумеющимся. Имя файла проще всего получить через функцию
РеквизитФормыВЗначение("Объект").ИспользуемоеИмяФайла;

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

и на самой форме
СтруктураПараметров = Новый Структура("Код",Код); //Код из реквизита формы

но это совсем упрощенно
13. Xershi 1384 21.10.18 00:24 Сейчас в теме
(12) выход вывод прогресса это не типовой функционал БСП, а нарисованная форма / элемент в обработке. Плюс как я понял нужно делать в логике длительной операции вызов процедуры:
ДлительныеОперации.СообщитьПрогресс(Окр(ПроцентВыполнения, 0), Описание);

В которую и передавать процент выполнения, а далее обработчик ожидания, его прочитает и вставит в наш реквизит.
16. Franchiser 47 31.10.18 12:31 Сейчас в теме
(11) для чего проверяется сообщение на фигурную скобку?
17. Xershi 1384 31.10.18 13:44 Сейчас в теме
(16) когда длительная операция возвращает результат, то он в хмл, вот автор это и проверяет!
14. Franchiser 47 31.10.18 12:13 Сейчас в теме
Если на форме обработки идёт прогресс, у тебя остаются кликабельными кнопки и остаётся возможность менять реквизиты у пользователя в процессе выполнения длительной операции, или ты это запрещаешь?
18. zarankony 294 03.11.18 00:41 Сейчас в теме
(14) менять реквизиты на ходу не получится, только перезапускать сеанс или мутить хранилище со значениями реквизитов и получать их в цикле. Тут надо понимать, что выполнение кода - это уже отдельный сеанс, основной сеанс о нем знает по идентификатору, а второй сеанс о первом не знает впринципе. Как я уже говорил пример где это работает здесь: https://infostart.ru/public/585055/ кода много в итоге, не уверен что Вам все нужно.
20. Franchiser 47 03.11.18 01:32 Сейчас в теме
(18) речь не об этом, я не понимаю почему выбраеа такая технология : размещать прогресс на той же форме, а не открывать отдельную как в бсп.
В этом случае же есть недостатки:
1. Нужно постоянно во все свои доработки вносить намыорму прогресс и код для фонового задания
2. Когда пользователь запустил длительный процесс, он может в форме продолжать что-то творить , т.к. она осталась не заблокированной.

Мне кажется удобнее когда форма прогресса открывактся отдельно с блокированием прогоесса.
P.s. Обработку посмотреть не могу, нет см.
21. zarankony 294 03.11.18 22:50 Сейчас в теме
(20) нет особых проблем с тем чтобы заблокировать форму, это уже по желанию Доступность = ложь; для всех элементов кроме кнопок управления внешним процессом. Вообще идея в том чтобы код можно было вписывать в текстовое поле или например хранить в файлах, то есть обработка одна, а вариантов запускаемого кода много.
15. Franchiser 47 31.10.18 12:15 Сейчас в теме
До конца не понятно какие процедуры используются, т.к. указаны части кода из процедур, можешь привести код всех процедур полностью?
22. compaud 08.11.18 16:44 Сейчас в теме
Что то я не понял что и как нужно сделать.

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

В одной обработке в модуле объекта я пишу

Процедура ДлительнаяОперация() ЭКСПОРТ
	
	Дата = ТекущаяДата();
	
	Пока Дата <= Дата+60000 Цикл
		Сообщить(ТекущаяДата());
	КонецЦикла;
	
	
КонецПроцедуры
Показать


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

Потом я делаю еще 1 обработку:

&НаКлиенте
Процедура Сформировать(Команда)
	СформироватьнаСервере();	
	
	ПодключитьОбработчикОжидания("ПроверкаФоновогоЗадания",1,Ложь);
	
	
	
КонецПроцедуры


Процедура СформироватьнаСервере()
	
	ПараметрыЗадания = Новый Структура;
	ПараметрыЗадания.Вставить("ИмяОбработки", Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("ПроверкаСтатусБар"));
	
	
	
	СтруктураПараметров = Новый Структура();//("РезультатЗапроса,Код,Параметры",Результат[Результат.ВГраница()],Код,ПараметрыЗапроса);    
	
	НаименованиеЗадания = НСтр("ru = 'Длительная операция внешней обработки'");
	
	ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки";
	
	ПараметрыЗадания = Новый Структура;
	ПараметрыЗадания.Вставить("ИмяОбработки", Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("ПроверкаСтатусБар"));
	ПараметрыЗадания.Вставить("ИмяМетода", "ДлительнаяОперация");
	ПараметрыЗадания.Вставить("ПараметрыВыполнения", СтруктураПараметров);
	ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", Истина);
	ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка",Неопределено);
	//ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Длительная операция"));
	
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
	
	РезультатФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод,ПараметрыЗадания,ПараметрыВыполнения);
	//ЗапуститьВыполнениеВФоне(УникальныйИдентификатор,ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);
	
	ИдентификаторЗадания = РезультатФоновогоЗадания.ИдентификаторЗадания;
	
	
	
	
КонецПроцедуры


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

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

	Возврат Рез;
КонецФункции

&НаСервере
Процедура УбитьПроцессНаСервере()
	Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
	Задание.Отменить();
//	Элементы.ГруппаФоновоеЗадание.Видимость=Ложь;
КонецПроцедуры
Показать


На форме 2 обработки создал реквизит ИдентификаторЗадания типа УникальныйИдентификатор

Ну и ничего не работает.

Какой нибудь пример бы чистый.
И я не понимаю еще вот что, этот код опрашивает 1 раз фоновое задание. О каком статус баре идет речь не пойму. Сложно в общем что то
23. vadim1011985 95 08.11.18 17:03 Сейчас в теме
(22) У Вас дополнительная внешняя обработка ?
24. compaud 09.11.18 09:10 Сейчас в теме
(23) да, в этом и смысл. В одну все поместить так понимаю нельзя. Ну хоть в 2
25. vadim1011985 95 09.11.18 10:01 Сейчас в теме
Почему нельзя ? Все можно . Вам просто надо все сделать правильно.
1) добавить 2 ключевых параметра Идентификатор команды - тип строка и ДополнительнаяОбработкаСсылка с типом Справочник ссылка Дополительные внешние отчеты и обработки
2) в модуле формы создать команду которая будет запускать длительную операцию ( но это не сама длительная операция ) см мой 19 ответ в этой теме процедура ЗагрузитьИЗаписать только надо будет заменит ВыполнитьКомандуВФоне на ДлительныеОперацииКлиент.ВыполнитьКомандуВФоне

3) В модуле объекта пишешь функцию регистрации внешней обработки (сведения о внешней обработке )
И добавляешь процедуру ВыполнитьКоманду ( ИдентификаторКоманды,Параметрывыполнения) - тут могу ошибиться как звучит второй параметр , в которой реализуешь свою длительную операцию

Вот и все
RFP; Xershi; +2 Ответить
26. zarankony 294 09.11.18 12:32 Сейчас в теме
(25) Зачем регистрировать? то есть можно и регистрировать, но идея в том что БСП-шная процедура ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки открывает обработку просто как внешний файл и выполняет экспортную процедуру из её модуля. Команда здесь тоже не нужна, хотя наверное и через неё можно.
27. vadim1011985 95 09.11.18 12:39 Сейчас в теме
(26) я описал типовой механизм вызова длительной операции из внешней обработки как это рекомендует 1с.

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

Плюс вам писали про стандартные методы БСП и Вы сказали что Вам не нравится что нет идентификатора задания и котик вам не нравится и хотелось бы получать прогресс , но как я Вам уже отвечал это все решаемо , как раз Ваша статья на ряду с другими на эту тему натолкнула меня на мысль написать свою хотя она повторят то чт оо чем я писал тут выше
28. victor_k 95 30.01.19 02:37 Сейчас в теме
Спасибо! Разобрался, использую
29. EvgenS 22.06.19 17:34 Сейчас в теме
Я то то не так понял или фоновое задание которое будет выполняться должно располагаться в конфигурации, а не в обработке?
30. zarankony 294 24.06.19 09:19 Сейчас в теме
(29)в обратотке, в модуле объекта. В конфигурации должна быть БСП с методом ДлительныеОперации.ЗапуститьВыполнениеВФоне.
32. km_if 21.08.19 21:43 Сейчас в теме
(30)
...
ПараметрыКоманды.Вставить("Каталог", Объект.Каталог);
//ПараметрыКоманды.Вставить("Объект",Объект);
ПараметрыКоманды.Вставить("ТипЗагрузкиДокументов",Объект.ТипЗагрузкиДокументов);
ПараметрыКоманды.Вставить("НачПериода",Объект.НачПериода);
ПараметрыКоманды.вставить("КонПериода",Объект.КонПериода);
...
Можно ли в этих параметрах передавать что то сложнее чем число или сторку? Хотел бы передать ТЗ и КомпановщикНастроек.
33. vadim1011985 95 21.08.19 22:05 Сейчас в теме
(32) что мешает поместить тз во временное хранилище , и через параметры передать адрес
34. km_if 21.08.19 23:49 Сейчас в теме
(33)Насколько понял, создается другой сеанс для длительной операции. Поэтому переменная во временном хранилище, созданном в другом сеансе наверно видна не будет. А передать ее стандартным способом не получается, потому что она не сериализируется.
35. vadim1011985 95 22.08.19 01:47 Сейчас в теме
(34) не очень вас понял - посмотрите в стандартных конфигурациях - там сплошь и всюду так делается.
37. km_if 22.08.19 11:56 Сейчас в теме
(35)Попробывал даже вот так - https://forum.infostart.ru/forum9/topic118827/
В процедуре формы оборачивал нужную переменную в структуру, а потом помещал в хранилище.
При попытке получить переменные в "Процедура ВыполнитьКоманду" из временного хранилища по переданным адресам ничего нет.
38. vadim1011985 95 22.08.19 12:11 Сейчас в теме
(37) Смотрите - основная проблема у вас в том что вы хотите передать то , что не может быть передано с клиента на сервер, ТЗ например таким способом передать можно
39. km_if 22.08.19 16:54 Сейчас в теме
(38) ТЗ через временное хранилище тоже пустая.
Получается варианта два - либо я неправильно передаю, либо это вообще передавать не нужно.
Для чего все это. В модуле объекта внешней обработки я в цикле формирую отчеты (по времени долго), для которых и пытаюсь передать отборы любым способом, и все это пытаюсь передать на сервер для организации длительной обработки. Внешнюю обработку естественно помещаю в "Дополнительные отчеты и обработки".
Как можно обойтись без этого?
36. km_if 22.08.19 09:43 Сейчас в теме
(35) До передачи в ПараметрыКоманды попробывал поместить:

АдресВХранилищеОтборы = ПоместитьВоВременноеХранилище(Объект.Отборы, Новый УникальныйИдентификатор);


Отборы - реквизит объекта внешней обработки, тип "КомпоновщикНастроекКомпоновкиДанных"

"Ошибка при выполнении запроса POST к ресурсу /e1cib/files/9ead0971-78e9-4061-8983-34f3c58b5395:
Переданное значение не может быть помещено во временное хранилище".
40. user1095593 25.09.19 15:36 Сейчас в теме
nikita0832, ты можешь сбросить сам файл обработки? Уже два дня мучаюсь не могу толком разобраться... везде только обрывки кода или разные способы, которые не получается довести до ума... Очень хочу с этим разобраться.
41. zarankony 294 25.09.19 15:40 Сейчас в теме
42. cyborg55 33 23.10.19 16:22 Сейчас в теме
nikita0832, а можно мне тоже пример файла обработки, пжт
Оставьте свое сообщение

См. также

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

Универсальные функции Механизмы платформы 1С Запросы Платформа 1С v8.3 Бесплатно (free)

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

30.10.2017    31717    unichkin    18    

93

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

Механизмы платформы 1С Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

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

27.01.2016    91543    Serginio    116    

183

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

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

15.10.2018    40790    tormozit    107    

125

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

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

16.04.2019    25090    m-rv    18    

29

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

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

05.12.2017    32305    itriot11    34    

35

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

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

04.09.2017    65336    m-rv    64    

170

Регулярные выражения без внешних компонент? Легко!

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Сложный способ организовать проверку строки с помощью регулярного выражения в 1С. При этом ни одна внешняя компонента не пострадала. Ну и от платформы (Linux, MustDie) - не зависит.

04.03.2016    80928    starik-2005    111    

414

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

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

24.06.2007    92875    tormozit    32    

215

Отладка подключаемых обработок

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

04.01.2017    93552    unichkin    121    

330

Недокументированное использование стандартных обработок из меню "Все функции".

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

19.06.2015    129914    ekaruk    148    

1067

Простая и быстрая эмуляция операций с битовыми строками

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Битовые строки могли бы упростить реализацию некоторых алгоритмов на языке платформы «1С: Предприятие 8». Но пока в платформе операций с битовыми строками нет. В то же время уже сделанные попытки смоделировать эти операции преобразованиями над числами опираются на циклы обработки отдельных битов, что плохо сказывается на скорости их работы. Предлагается новое простое решение, основанное на представлении битовых строк строками символов «0» и «1». Приводится примеры кода выполнения основных логических операций AND, OR, XOR, NO без использования циклов. В качестве прикладной задачи рассмотрено получение последовательных значений кода Грэя, который можно использовать для ускорения перебора вариантов.

22.06.2016    31429    ildarovich    14    

74

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

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

12.01.2016    382277    mrXoxot    209    

1064

Как устроена регламентированная отчетность в 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бухгалтерский учет Бесплатно (free)

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

30.11.2015    88309    mrXoxot    36    

333

Правильная индикация прогресса цикла на клиенте

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

08.08.2008    60727    tormozit    62    

175

XDTO - это просто

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    368178    Evil Beaver    193    

1121

Многопоточность как способ ускорения некоторых процедур

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

09.04.2013    71720    Aleksey.Bochkov    77    

256

Что на самом деле делает свойство «БлокироватьДляИзменения»

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мотивацией к написанию данной статьи, послужило большое количество заблуждений касаемо свойства «БлокироватьДляИзменения». Большая часть материалов в сети, посвящена либо управляемым блокировкам, либо режиму разделения итогов, свойство «БлокироватьДляИзменения» затрагивается лишь частично без конкретики, в итоге у многих возникают вопросы при его использовании. Цель данной статьи заполнить этот пробел. Прошу сначала прочитать статью полностью и только после этого делать выводы. Надеюсь, данный материал будет кому-то полезен.

04.08.2013    64641    Andreynikus    152    

246

Динамический состав реквизитов

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Решим не стандартную задачу. Нам необходимо добавить к документам некие реквизиты, которые появляются у объектов в зависимости от настроек (значений реквизитов документа).

14.12.2012    26558    Infostart    7    

20

Сортировка строк формы, с сохранением второго порядка

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

14.04.2012    20433    i132    2    

11

Управление индексами и секциями в 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

17.11.2011    23613    German    33    

72

Практика регулярных выражений в 1С или "парсим неудобные форматы"

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В продолжение статьи Использование регулярных выражений (RegExp) в 1С8.х. Углубляемся в практику использования регулярных выражений в 1С. Основы работы с регулярными выражениями хорошо описаны в указанной публикации. А я попробую ответить на вопрос "почему именно регулярные выражения?" на примере конкретной рабочей задачи.

26.10.2011    31403    1cspecialist    33    

95

Методы работы с универсальным отчетом в подсистеме "Варианты отчетов" на БСП

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

вчера в 13:00    866    quazare    2    

35

О цикле обратном замолвите слово...

Механизмы платформы 1С Языки и среды Платформа 1С v8.3 Платформа 1C v8.2 Бесплатно (free)

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

08.09.2022    6473    DrAku1a    71    

31

Эволюция расширения конфигурации

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

С каждым днем всё больше возможностей появляется в расширении конфигурации, но не все до сих пор работают даже на платформе 8.3.6! Давайте окунемся в историю появления и эволюции расширения конфигурации, чтобы знать и понимать, когда можно применить тот или иной функционал!

06.02.2020    22582    Xershi    50    

193

Версионирование объектов VS История данных

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    5841    dsdred    37    

126

Самодельный обработчик ПослеЗаписи объекта

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Иногда при записи объекта хочется обработчик ПослеЗаписи, который бы выполнялся всегда после успешного завершения транзакции записи объекта. Статья описывает способ реализации такого обработчика.

03.04.2023    2821    tormozit    63    

39

Снова об использовании ТекущаяДата() на клиенте и на сервере и о работе в разных часовых поясах

БСП (Библиотека стандартных подсистем) Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

24.04.2023    4038    Alxby    26    

40

Золотые костыли

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Немного о программировании.

23.08.2018    12304    vasilev2015    39    

43

Создаем периодические реквизиты или привет из 1С 7.7

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

26.10.2022    1308    morin    4    

26

Расширение глобального поиска 1С, или Глобальный поиск "на максималках"

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мало кто знает, что поле "Глобального поиска" в 1С можно доработать. Добавить свои варианты поиска, кнопочки в результатах и даже целые пользовательские меню.

27.03.2023    4193    SeiOkami    9    

121

Postgres как предчувствие. Вычисляем процент импортозамещения в режиме Highload от 1С

HighLoad оптимизация Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

1С работает с СУБД Postgres более 10 лет, а сейчас это единственный легальный вариант для инсталляций в России. Много ли мы потеряем в производительности по сравнению с MS SQL? Выдержит ли Postgres 15.2 жесткий Highload со стороны 1С? Цель этой статьи - ответить на данные вопросы, с цифрами, которые можно использовать при расчете архитектуры.

23.03.2023    1645    1CUnlimited    9    

28

Оператор GOTO в 1С - табу или волшебная палочка?

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

19.02.2023    5697    Dementor    72    

43

Идентификатор объекта в запросе. Вы этого хотели?

Запросы Механизмы платформы 1С Платформа 1С v8.3 Запросы Бесплатно (free)

В платформе 8.3.22 появилась возможность получать идентификатор в запросе. Лично я ждал этого давно, но по итогу ждал большего. Что не так?

12.01.2023    12928    dsdred    15    

68

Маленькие хитрости большой платформы (часть 1)

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

29.12.2022    4225    zeltyr    25    

41

Практическая шпаргалка по новым возможностям языка запросов 1С

Механизмы платформы 1С Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

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

21.11.2022    16333    quazare    34    

113

Асинхронное нечто, или так, как раньше!

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все же знают, что раньше было лучше! Возврат к истокам и погружение в детали...

23.10.2022    4777    starik-2005    38    

40

Использование Стека вызовов в качестве условия оператора Если [...] Тогда

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Делюсь интересным приёмом, позволяющим использовать данные стека исполнения кода 1С в качестве условия, накладываемого на выполнение кода.

12.07.2020    13681    sapervodichka    65    

93