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

    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    Для Каждого элементСсылка Из РезультатЗапроса Цикл
    элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
    УрлДО = элементОбъект.url;
    элементОбъект.url = ";
    элементОбъект.Записать();
    УрлПосле = элементОбъект.url;
    Если УрлДО = УрлПосле Тогда

    иначе
    Сообщить("До " + УрлДО);
    Сообщить("После " + УрлПосле);
    Сообщить(" ");
    КонецЕсли
    КонецЦикла;
    Предупреждение("Обработка завершена", 0, "Сообщение");
    КонецПроцедуры
```

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

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

    Для Каждого элементСсылка Из РезультатЗапроса Цикл
    элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
    УрлДО = элементОбъект.url;
    элементОбъект.url = ";
    элементОбъект.Записать();
    УрлПосле = элементОбъект.url;
    Если УрлДО = УрлПосле Тогда

    иначе
    Сообщить("До " + УрлДО);
    Сообщить("После " + УрлПосле);
    Сообщить(" ");
    КонецЕсли;
    Индикатор = Индикатор + 1;
    КонецЦикла;
    Предупреждение("Было обработанно " + ИндикаторПЕРЕМ.МаксимальноеЗначение + " товаров", 0, "Сообщение");
    КонецПроцедура
```
---
вот тут посмотри
https://helpf.pro/faq/view/961.html
---
У меня сделана общая форма - Состояние. Выполняется запрос и после него вызывается Общая форма по такому листингу:
```1c
    ФормаПрогрессБара = ПолучитьОбщуюФорму("Состояние");
    ФормаПрогрессБара.Открыть();
    ФормаПрогрессБара.ЭлементыФормы.ТекстНадписи.Значение = "Подождите, идет расчет оборотов по основным счетам.";
    ФормаПрогрессБара.индикатор = 0;

    ФормаПрогрессБара.ЭлементыФормы.НадписьВсего.Значение = списокСчетов.Количество()-1;
    для я=0 по списокСчетов.Количество()-1 цикл
    ФормаПрогрессБара.индикатор=(я+1)/списокСчетов.Количество()*100;
    ФормаПрогрессБара.ЭлементыФормы.ТекстНадписи1.Значение = Строка(СписокСчетов.Получить(я).Значение);
    ФормаПрогрессБара.ЭлементыФормы.НадписьОбработано.Значение = я;
    Запр.УстановитьПараметр("Счет",СписокСчетов.Получить(я).Значение);
    ввв=Запр.Выполнить().Выгрузить();
    ввв.Свернуть(","Сумма");
    если ввв.Количество()>0 Тогда
    об=Филиал.получитьОбъект();
    строк=об.СуммыПоСчетам.Добавить();
    строк.Счет=СписокСчетов.Получить(я).Значение;
    строк.ОборотЗаПредыдущийМесяц=ввв[0].Сумма;
    об.Записать();
    конецесли;
    конеццикла;
    ФормаПрогрессБара.Закрыть();
```
---
Сама форма:
---
Допёр сам, методом тыка.
Самая большая проблема была, ввод переменной, ибо не понимал где происходит конфликт.
Готовый код
```1c
    &НаСервере
    Процедура ВыполнитьНажатие(Элемент)
    ОчиститьСообщения();
    Запрос = Новый Запрос();
    Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Ссылка КАК Ссылка,
    | Номенклатура.Наименование КАК Наименование
    |ИЗ
    | Справочник.CMS1C_Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Владелец В ИЕРАРХИИ(&ГруппаНоменклатуры)";

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

    Для Каждого элементСсылка Из РезультатЗапроса Цикл
    элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
    УрлДО = элементОбъект.url;
    элементОбъект.url = ";
    элементОбъект.Записать();
    УрлПосле = элементОбъект.url;
    Если УрлДО = УрлПосле Тогда

    иначе
    Сообщить("До " + УрлДО);
    Сообщить("После " + УрлПосле);
    Сообщить(" ");
    КонецЕсли;
    Индикатор = Индикатор + 1;
    КонецЦикла;
    Предупреждение("Было обработанно " + ИндикаторПЕРЕМ.МаксимальноеЗначение + " товаров", 0, "Сообщение");
    КонецПроцедура
```