Имя: Пароль:
1C
1C 7.7
v7: ПрогрессБар в строке состояния
0 SashaNNA
 
26.10.11
13:41
В Глобальный модуль вставить процедуру:

//******************************************************************************
Процедура глПрогрессор(Сообщение,Всего,Текущ) Экспорт
Если Всего>0 Тогда
Процент=Цел(Текущ/Всего*100);
Если Процент > Цел((Текущ-1)/Всего*100) Тогда
Состояние(Сообщение + ": "+Формат(Процент,"Ч(0)2")+"% "+СтрЗаменить(Формат("","С"+Мин(99,Процент))," ","l")+СтрЗаменить(Формат("","С"+Мин(99,99-Процент))," ","'")+"l");
КонецЕсли;
КонецЕсли;
КонецПроцедуры


И пользовать.. Вот пример:

Для ин=1 По 100000 Цикл
глПрогрессор("Тест",100000,ин);
КонецЦикла;


Подскажите пожалуйста как его встроить например сюда:

Процедура XXXXX()
СПР=СоздатьОбъект("Справочник.Контрагенты");
СПР.ВыбратьЭлементы ();
Пока СПР.ПолучитьЭлемент () = 1 Цикл
ТРАЛИ ВАЛИ
КонецЦикла;
КонецПроцедуры
1 filh
 
26.10.11
13:43
узнать сколько всего элементов в справочнике + переменная в цикле
2 1Сергей
 
26.10.11
13:44
(1)+100500
или использовать ЗАпрос
3 andrewks
 
26.10.11
13:46
(1)(2) это щас не модно, модно так: сначала ползунок бежит вправо, потом влево, и так, пока не закончится процесс ;-)
4 filh
 
26.10.11
14:08
(3) это тоже старо, модно когда "бегунок" хаотично бегает по квадрату и "стирает" слой, под которым изображение (v)
5 1Сергей
 
26.10.11
14:09
(3) так в никсах обычно
6 SashaNNA
 
26.10.11
16:04
Подскажите пожалуйста, как всетаки установить этот код в процедуру, предположим что я получил количество строк СПР и установил переменную в цикле:

Процедура XXXXX()
СПР=СоздатьОбъект("Справочник.Контрагенты");
нн=0;
СПР.ВыбратьЭлементы ();
Пока СПР.ПолучитьЭлемент () = 1 Цикл
нн=нн+1;
ТРАЛИ ВАЛИ
КонецЦикла;
КонецПроцедуры


как в процедуру поместить этот код:

Для ин=1 По 100000 Цикл
глПрогрессор("Тест",100000,ин);
КонецЦикла;
7 filh
 
26.10.11
16:08
Процедура XXXXX()
СПР=СоздатьОбъект("Справочник.Контрагенты");
нн=0;
КолвоСПР=КоличествоСтрокСПР;
СПР.ВыбратьЭлементы ();
Пока СПР.ПолучитьЭлемент () = 1 Цикл
нн=нн+1;
глПрогрессор("Тест",КолвоСПР,нн);
КонецЦикла;
КонецПроцедуры
8 DJ Anthon
 
26.10.11
16:13
а если есть группировки? или вложенные циклы? я написал универсальную процедуру показа процентов, но боюсь, ты ее не осилишь..
9 SashaNNA
 
26.10.11
16:17
(8)Вот вот, перебивают и горит почти всегда "Выполняется обработка" и т.д. короче не работает это добро.
10 DJ Anthon
 
26.10.11
16:18

//******************************************************************************
//    УстановитьПроцент()
//
//    Параметры:
//        Процент - число от 0.0 до 100
//
//    Описание:
//        Устанавливает процент вывода на экран в полосу процентов
//        Инструкция, бл*ть.
//        1) тупо поставить процент - УстановитьПроцент(Контекст, 100, " выполнено...")
//        2) тупо инициализировать - УстановитьПроцент(Контекст);
//        3) если надо сделать замер времени и много уровней компоновки -
//            инициализируем и перед рекурсивными вызовами ставим
//            УстановитьПроцент(Контекст, "Г", ВсегоЭлементовНаЭтомУровнеГруппировки);
//            где "Г" - уникальное строковое обозначение данного уровня группировки,
//            берется от балды, но обычно забиваются следующие: "С" - по сотрудникам
//            "П" - по подразделениям, "М" - по месяцам, "Д" - по доходам (отдельная история)
//            "БД" - по балансодержателям, "ИФ" - по источникам финансирования, "ФКР" - по ФКР.
//            размер уровня устанавливается при первом же вызове и сохраняется до вызова
//            вышестоящей группировки. все устанавливается автоматически. клево...
//            если в какой-то момент пропускаются определенные этапы, можно четвертым параметром
//            указать конкретный номер этапа (начиная с единицы), или вообще вручную поменять
//            максимальное значение группировки (глУровни.УстановитьЗначение(НомерСтрокиСГруппировкой, "Максимум", НовыйМаксимум);
//            Проценты высчитываются из промежутка глНачПроцент-глКонПроцент
//            Промежуток текущего этапа - глНачало-глКонец
//
Функция УстановитьПроцент(Конт, Знач Процент = -1, ДопСтатус = "", Место = 1) Экспорт
   Если ТипЗначения(Процент) = 2 Тогда
       Если ТипЗначенияСтр(глУровни) <> "ТаблицаЗначений" Тогда
           УстановитьПроцент(Конт);
       КонецЕсли;
       Стр = 0;
       Если глУровни.НайтиЗначение(Процент, Стр, "Уровень") = 0 Тогда
           Если ТипЗначения(ДопСтатус) = 1 Тогда
               Если Окр(ДопСтатус) > 1 Тогда
                   глУровни.НоваяСтрока();
                   глУровни.Уровень = Процент;
                   глУровни.Место = Место;
                   глУровни.Максимум = Окр(Макс(1, ДопСтатус));
               КонецЕсли;
           КонецЕсли;
       Иначе
           глУровни.ПолучитьСтрокуПоНомеру(Стр);
           глУровни.Место = глУровни.Место + 1;
           Если глУровни.Место > глУровни.Максимум Тогда
               глУровни.Место = 1;
           КонецЕсли;
           глУровни.КоличествоСтрок(Стр);
       КонецЕсли;
       глНачало = глНачПроцент;
       глКонец = ?(глКонПроцент = -1, 100, глКонПроцент);
       глУровни.ВыбратьСтроки();
       Пока глУровни.ПолучитьСтроку() = 1 Цикл
           Шаг = (глКонец - глНачало) / глУровни.Максимум;
           глНачало = Мин(100, глНачало + Шаг * (глУровни.Место - 1));
           глКонец = Мин(100, глНачало + Шаг);
       КонецЦикла;
       УстановитьПроцент(Конт, глНачало);
       Возврат Окр(глНачало, 1);
   КонецЕсли;
   Если ТипЗначения(Конт) <> 100 Тогда
       глНачПроцент = 0;
       глКонПроцент = -1;
       глНачало = 0;
       глКонец = -1;
       Возврат -1;
   КонецЕсли;
   глКонтекстПроцентов = Конт;
   ПроцентСтарый = Процент;
   Если Процент >= 0 Тогда
       глСтатус = СокрЛП(Формат(Процент, "Ч4.1")) + "% выполнено... " + ДопСтатус;
       Состояние(глСтатус);
       Осталось = "Осталось: вычисляется...";
       Если Процент > 0 Тогда
           мкс = _getPerformanceCounter() - глВремя;
           мкс = мкс / Процент * (100 - Процент);
           сек = Цел(мкс / 1000);
           минут = Цел(сек / 60);
           часов = Цел(минут / 60);
           дней = Цел(часов / 24);
           мкс = мкс - дней * 24 * 60 * 60 * 1000;
           сек = Цел(мкс / 1000);
           минут = Цел(сек / 60);
           часов = Цел(минут / 60);
           мкс = мкс - часов * 60 * 60 * 1000;
           сек = Цел(мкс / 1000);
           минут = Цел(сек / 60);
           мкс = мкс - минут * 60 * 1000;
           сек = Цел(мкс / 1000);
           Осталось = "Осталось: " + ?(дней = 0, "", "" + дней + " дн. ") + ?(часов + дней = 0, "",
               Формат(часов, "Ч(0)2") + ":") + Формат(минут, "Ч(0)2") + ":" + Формат(сек, "Ч(0)2");
       КонецЕсли;
       Конт.Форма.ВремяВыполнения.Заголовок(Осталось);
       Конт.Форма.ВремяВыполнения.Видимость(1);
       ЗаголовокСистемы(СокрЛП(Константа.НазваниеОрганизации) + " - " + Формат(Процент, "Ч4.1") + "%" + " " + Осталось);
       Процент = Окр(Мин(100, Процент), 1);
       Конт.Форма.ПроцентВыполненияТекст.Заголовок(?(Процент = 100, "100%", Формат(Процент, "Ч4.1") + "%"));
       Конт.Форма.ПолосаПроцент.Заголовок(Лев("llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll?????????????????????????????????????????????????",
           Процент));
       Конт.Форма.ПроцентВыполненияЗаголовок.Видимость(1);
       Конт.Форма.ПолосаПроцент.Видимость(1);
       Конт.Форма.ПроцентВыполненияТекст.Видимость(1);
       Конт.Форма.РамкаПроцент.Видимость(1);
       Конт.Форма.AnthonVersion.Видимость(0);
   Иначе
       ЗаголовокСистемы(СокрЛП(Константа.НазваниеОрганизации));
       Конт.Форма.ВремяВыполнения.Видимость(?(Процент = -1, 0, 1));
       Конт.Форма.ПроцентВыполненияЗаголовок.Видимость(?(Процент = -1, 0, 1));
       Конт.Форма.ПолосаПроцент.Видимость(?(Процент = -1, 0, 1));
       Конт.Форма.ПроцентВыполненияТекст.Видимость(?(Процент = -1, 0, 1));
       Конт.Форма.РамкаПроцент.Видимость(?(Процент = -1, 0, 1));
       Конт.Форма.AnthonVersion.Видимость(?(Процент = -1, 1, 0));
       Если Процент = -1 Тогда
           глНачПроцент = 0;
           глКонПроцент = -1;
           глНачало = 0;
           глКонец = -1;
           глКонтекстПроцентов = ПолучитьПустоеЗначение();
           глУровни = СоздатьОбъект("ТаблицаЗначений");
           глУровни.НоваяКолонка("Уровень");
           глУровни.НоваяКолонка("Место");
           глУровни.НоваяКолонка("Максимум");
           глВремя = _getPerformanceCounter();
       КонецЕсли;
   КонецЕсли;
   Возврат ПроцентСтарый;
КонецФункции    // УстановитьПроцент
11 filh
 
26.10.11
16:21
(9) полностью покажи, что делаешь в цикле
12 DJ Anthon
 
26.10.11
16:21
подключается к любому коду и к любому отчету. на форме отчета нужны только контролы (стандартные), могу скинуть, если интересно.

еще в глобальнике надо добавить

Перем глКонтекстПроцентов Экспорт;
Перем глУровни Экспорт;
Перем глВремя Экспорт;
Перем глНачПроцент Экспорт;
Перем глКонПроцент Экспорт;
Перем глНачало Экспорт;
Перем глКонец Экспорт;


пример использования элементарен, надо?
13 filh
 
26.10.11
16:21
(10) обработку кинь с примеров. А то на форме должно быть еще что то
:)
14 DJ Anthon
 
26.10.11
16:23
дада, щас выдеру
15 filh
 
26.10.11
16:25
кстате, в формэксе есть тоже решение.
16 DJ Anthon
 
26.10.11
16:34
пример в ЗиКе:
во всех глобальных процедурах (долгоиграющих, например, ОбходСотрудниковДляСтраховыхВзносов2011)
вставляем такой код, где СВ - любые удобные вам буквы. и обход этих функций будет внутри интервала процентов, которые вы зададите.

   // перебираем сотрудников
   Для СчСотров = 1 По ВсегоСотров Цикл
   
       Сотрудник=Сотрудники.ПолучитьЗначение(СчСотров);
//Anthon -<
       Если ТипЗначения(глКонтекстПроцентов) = 100 Тогда
           Если глКонПроцент > глНачПроцент Тогда
               УстановитьПроцент(глКонтекстПроцентов, "СВ", ВсегоСотров);
           КонецЕсли;
       КонецЕсли;
//Anthon ->



сам пример обработки


http://zalil.ru/31938203

если не запустится, извиняйте, у меня в глобальнике много изменений.

(15) я смотрел, мне не понравилось че-та..
17 DJ Anthon
 
26.10.11
16:40
для других конфигураций надо убирать строчку

ЗаголовокСистемы(СокрЛП(Константа.НазваниеОрганизации));

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

вообще у меня почти все отчеты переписаны, там этот прогрессбар нужен (почти все настроены на пакетную обработку).
чтобы можно было вечером поставить формироваться, а утром приходишь на работу, у тебя все отчеты напечатаны, по подразделениям, по проводкам, по месяцам.
18 filh
 
26.10.11
17:02
прикольно)
19 DJ Anthon
 
26.10.11
17:04
че, работает, что ли? )))
20 DJ Anthon
 
26.10.11
17:08
когда 30 подразделений, и у каждого есть две три категории работников, и каждый получает зп по разным кбк, статьям и источникам финансирования, число одних только сводов доходит до 200. вручную их делать (как в стандартном зике) тупо нереально. а еще отчетов самих дофига.
Закон Брукера: Даже маленькая практика стоит большой теории.