|
v7: еще раз про прогрессор, как задать 100% | ☑ | ||
---|---|---|---|---|
0
forest-rg
21.06.12
✎
23:15
|
конфиг БП дописанная переписанная, там есть отчет по заявкам(данные берет из справочника заявок)в нем задается период, и тд и запускается заявок уже порядка 20 000, и делается порядка 5-8 часов, потом еще сохраняется в Excel часа 4-6.
Хотелось бы прикрутить какой нибудь прогресбар чтобы понять долго еще осталось. Прикрутить не проблема это сделал не понимаю как сделать чтобы бралось правильное значение затраченного времени, те 100% это все заявки за заданный период, их может быть как 50 так и все 20 000, как правильно это прописать? пробовал при запуске вставить счетчик, но это тоже не то, точнее то только счетчик тупо считает каждую заявку по мере формирования отчета а должен посчитать кол-во заявок за заданный период и взять это значение за 100% и по мере прохода по заявкам отмечать какой процент от общего количества он уже сделал. |
|||
1
IamAlexy
21.06.12
✎
23:16
|
заявки циклом перебераешь?
количество() получи из коллекции - вот тебе максимальное значение |
|||
2
smaharbA
21.06.12
✎
23:21
|
100 - 500
1..100 - х в школе не проходили ? |
|||
3
smaharbA
21.06.12
✎
23:21
|
ну или наоборот
|
|||
4
oleg_prg
21.06.12
✎
23:31
|
Формула такая:
ПроцентВыполнения = НомерТекущейЗаявки / (КоличествоЗаявок/100); Например: НомерТекущейЗаявки = 200; КоличествоЗаявок = 1000; тогда ПроцентВыполнения = 200 / (1000/100) = 20% |
|||
5
oleg_prg
21.06.12
✎
23:34
|
Можешь в цикле еще добавить определение текущего времени, делай замер прошедшего времени за 1% и умножай это на оставшийся процент, таким образом можешь выводить сколько осталось времени до завершения операции
|
|||
6
Злопчинский
21.06.12
✎
23:35
|
(21) это утебя какой-то мозг ленивый. все уже научились в эксель сохранять без ожидания 6-10 часов
|
|||
7
Злопчинский
21.06.12
✎
23:36
|
dct кгругом уроды. вычисляем колво заявок, приходящееся на один шаг прогрессора. считаем количество отработанных заявок. если = шагпргрессора - обновить прогрессор, счетчикзаявок обнулить.
|
|||
8
oleg_prg
21.06.12
✎
23:39
|
А вообще я иногда просто паражаюсь лени человеческой
|
|||
9
forest-rg
21.06.12
✎
23:48
|
а как работает количество(), искал в СП но не нашел того что нужно
простите за тупые вопросы, но я новичок в програмировании |
|||
10
oleg_prg
21.06.12
✎
23:50
|
Тебе надо узнать количество элементов в справочнике? Какое количество интересует?
|
|||
11
forest-rg
21.06.12
✎
23:53
|
oleg_prg - за заданный период, про ПроцентВыполнения = НомерТекущейЗаявки / (КоличествоЗаявок/100); спасибо, не додумался
Злопчинский - видел тут на форуме тему про plugin_mxl_doctor, но как говорится руки пока не дошли, я не програмист я сис админ, да и вообще разнорабочий |
|||
12
oleg_prg
21.06.12
✎
23:55
|
КоличествоЗаявок = 0;
Док = СоздатьОбъект("Документ.Заявка"); Док.ВыбратьДокументы(Дата1, Дата2); Пока Док.ПолучитьДокумент() = 1 Цикл Если (Док.Проведен() = 0) или (Док.ПометкаУдаления() = 1) Тогда Продолжить; КонецЕсли; КоличествоЗаявок = КоличествоЗаявок + 1; КонецЦикла; |
|||
13
zak555
21.06.12
✎
23:57
|
(12) установитьФильтр() неее ?
|
|||
14
oleg_prg
22.06.12
✎
00:00
|
Причем здесь фильтр, надо пощитать кол-во документов. Или я чего-то незнаю... или недопонимаю?
|
|||
15
zak555
22.06.12
✎
00:01
|
(14) запрос с счётчиком
|
|||
16
oleg_prg
22.06.12
✎
00:02
|
(14) Согласен :) Запрос тоже можно, ток в 1С7.7. я их не люблю. брррр
|
|||
17
forest-rg
22.06.12
✎
00:03
|
вот счетчиком я как раз и сделал, но он считает по мере прохождения заявок, те не суммарное кол-во сразу
Док = СоздатьОбъект("Документ.Заявка"); {Отчет.ОтчетПоЗаявкам2.Форма.Модуль(901)}: Неудачная попытка создания объекта (Документ.Заявка) |
|||
18
forest-rg
22.06.12
✎
00:06
|
пордон туплю
|
|||
19
oleg_prg
22.06.12
✎
00:06
|
(17) Док = СоздатьОбъект("Документ.Заявка"); Заявка это я к примеру написал, тебе надо поставить нужный документ Док = СоздатьОбъект("Документ.СюдаВпишиНужныйДокумент");
|
|||
20
Злопчинский
22.06.12
✎
00:09
|
(11) возьми готовый вариант - повесь кнопку на панель...
http://infostart.ru/public/14186/ |
|||
21
zak555
22.06.12
✎
00:09
|
Операции -> Журналы документов -> Полный -> считаем
|
|||
22
Злопчинский
22.06.12
✎
00:10
|
(13) фильтр тупо отсеет по типовым флажкам выборку - не надо по каждому документ удергать базу на проведенность и удаленность
|
|||
23
forest-rg
22.06.12
✎
00:12
|
блин, да я потом уж понял, когда написал туплю
Док = СоздатьОбъект("Справочник.я_СпискиЗаявокЭкспедирование"); Пока Док.ПолучитьЭлемент() = 1 Цикл //Если (Док.Проведен() = 0) или (Док.ПометкаУдаления() = 1) Тогда // Продолжить; //КонецЕсли; КоличествоЗаявок = КоличествоЗаявок + 1; КонецЦикла; но все равно не работает да и ктому же помойму то получается тоже самое что у меня уже есть, те счетчик, или я не прав? Счетчик = 0; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(ЗапросПоЗаявкам) |ТекущийЭлемент = Справочник.я_СпискиЗаявокЭкспедирование.ТекущийЭлемент; |ДатаЗ = Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ; |Группировка ТекущийЭлемент без групп; |Условие(ДатаЗ >= Дата1); |Условие(ДатаЗ <= Дата2); |//}}ЗАПРОС" ; Запрос.Выполнить(ТекстЗапроса); Таб=СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Шапка"); //СпрЗаявка=СоздатьОбъект("Справочник.я_СпискиЗаявокЭкспедирование"); //СпрЗаявка.ВыбратьЭлементы(); //Пока СпрЗаявка.ПолучитьЭлемент()=1 цикл Пока Запрос.Группировка(1) = 1 Цикл Счетчик = Счетчик +1; |
|||
24
zak555
22.06.12
✎
00:13
|
(22) УстановитьФильтр(1,0) не покатит ?
|
|||
25
zak555
22.06.12
✎
00:14
|
(23)
1. где выбратьЭлементы() ? 2. что за дата ? |
|||
26
Злопчинский
22.06.12
✎
00:14
|
ТекстЗапроса = "
|Период с ДатаН по ДатаК; |Обрабатывать Проведенные; |ТекДок = Документ.ЗаявкаПокупателя.ТекущийДокумент; |Функция Опочки = Счётчик(); |Группировка ТекДок; |"; |
|||
27
zak555
22.06.12
✎
00:15
|
(26) у него справочник =)
|
|||
28
МихаилМ
22.06.12
✎
00:15
|
если скл то
можно переписать минут за 5 будет формироваться |
|||
29
oleg_prg
22.06.12
✎
00:15
|
Док = СоздатьОбъект("Справочник.я_СпискиЗаявокЭкспедирование");
Пока Док.ПолучитьЭлемент() = 1 Цикл Если (Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ>=Дата1) и ((Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ<=Дата2)) Тогда КоличествоЗаявок = КоличествоЗаявок + 1; КонецЕсли; КонецЦикла; |
|||
30
oleg_prg
22.06.12
✎
00:16
|
(29) так можешь определить количество заявок
|
|||
31
zak555
22.06.12
✎
00:17
|
Док = СоздатьОбъект("Справочник.я_СпискиЗаявокЭкспедирование");
Док.ВыбратьЭлементы(0); Пока Док.ПолучитьЭлемент() = 1 Цикл Если (Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ>=Дата1) и ((Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ<=Дата2)) Тогда КоличествоЗаявок = КоличествоЗаявок + 1; КонецЕсли; КонецЦикла; |
|||
32
zak555
22.06.12
✎
00:18
|
> Док = СоздатьОбъект("Справочник.я_СпискиЗаявокЭкспедирование")
это какой над тобой так издевался ? |
|||
33
oleg_prg
22.06.12
✎
00:20
|
//Находим число обрабатываемых заявок
Спр = СоздатьОбъект("Справочник.я_СпискиЗаявокЭкспедирование"); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если (Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ>=Дата1) и ((Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ<=Дата2)) Тогда КоличествоЗаявок = КоличествоЗаявок + 1; КонецЕсли; КонецЦикла; Пока Запрос.Группировка(1) = 1 Цикл Счетчик = Счетчик +1; //Находим % обработанных заявок ПроцентВыполнения = Счетчик / (КоличествоЗаявок/100); Состояние("Выполнено:"+СокрЛП(Окр(ПроцентВыполнения))+"%"); //Выводим этот процент |
|||
34
oleg_prg
22.06.12
✎
00:21
|
(32) Спокойствие, только спокойствие. )))))
|
|||
35
zak555
22.06.12
✎
00:23
|
жесть
|
|||
36
zak555
22.06.12
✎
00:23
|
переходите на 8ку
|
|||
37
oleg_prg
22.06.12
✎
00:23
|
(33) Ошибочка
Спр = СоздатьОбъект("Справочник.я_СпискиЗаявокЭкспедирование"); Спр.ВыбратьЭлементы(); //ДОБАВЬ! Пока Спр.ПолучитьЭлемент() = 1 Цикл |
|||
38
oleg_prg
22.06.12
✎
00:24
|
(36) я уже там )))
|
|||
39
oleg_prg
22.06.12
✎
00:24
|
7.7 Это настальжи
|
|||
40
forest-rg
22.06.12
✎
15:23
|
а можно про это по подробнее "Можешь в цикле еще добавить определение текущего времени, делай замер прошедшего времени за 1% и умножай это на оставшийся процент, таким образом можешь выводить сколько осталось времени до завершения операции"
ведь 1 % может быть и 1 заявка и может и 101 и тд... все сделал конечный код получился такой Процедура Сформировать() счетчик =0; КоличествоЗаявок = 0; Итог_СтЗак=0; Итог_Дельта=0; Итог_СтПер=0; Итог_ОплатаРуб=0; Итог_СуммаПер=0; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(ЗапросПоЗаявкам) |ТекущийЭлемент = Справочник.я_СпискиЗаявокЭкспедирование.ТекущийЭлемент; |ДатаЗ = Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ; |Группировка ТекущийЭлемент без групп; |Условие(ДатаЗ >= Дата1); |Условие(ДатаЗ <= Дата2); |"//}}ЗАПРОС ; Запрос.Выполнить(ТекстЗапроса); Таб=СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Шапка"); СпрЗаявка=СоздатьОбъект("Справочник.я_СпискиЗаявокЭкспедирование"); СпрЗаявка.ВыбратьЭлементы(); Пока СпрЗаявка.ПолучитьЭлемент()=1 цикл Если (СпрЗаявка.ДатаЗ>=Дата1) и ((СпрЗаявка.ДатаЗ<=Дата2)) Тогда КоличествоЗаявок = КоличествоЗаявок + 1; КонецЕсли; КонецЦикла; Пока Запрос.Группировка(1) = 1 Цикл СпрЗаявка = Запрос.ТекущийЭлемент; Счетчик = Счетчик +1; //Находим % обработанных заявок ПроцентВыполнения = Счетчик / (КоличествоЗаявок/100); ПроцентВ=Лев(Строка(ПроцентВыполнения),4)+"%"; ПроцентВ это соответственно на форму |
|||
41
shegy
22.06.12
✎
17:14
|
Жесть, с начало делаем цикл по справочнику и курим бамбук, а потом еще и по запросу, автор тебе же написали используй Счетчик в запросе. Мне интересно, что за база или сервак такой, что отчет 5-6 часов делается?
|
|||
42
shegy
22.06.12
✎
17:17
|
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ЗапросПоЗаявкам) |ТекущийЭлемент = Справочник.я_СпискиЗаявокЭкспедирование.ТекущийЭлемент; |ДатаЗ = Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ; |Группировка ТекущийЭлемент без групп; |Функция Опочки = Счётчик(); |Условие(ДатаЗ >= Дата1); |Условие(ДатаЗ <= Дата2); |"//}}ЗАПРОС Запрос.Выполнить(ТекстЗапроса); КоличествоЗаявок = Запрос.Опочки; |
|||
43
oleg_prg
22.06.12
✎
17:39
|
(42) Я все понимаю что по документации надо пользоваться запросами, НО!!! НЕ В ЭТОМ СЛУЧАЕ! НУЖЕН ЦИКЛ И ПЕРЕБОР. Я ток что накидал обработку
Процедура Сформировать() Сообщить("Страт "+СокрЛП(ТекущееВремя())); Кол = 0; Спр = СоздатьОбъект("Справочник.Материалы"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Кол = Кол + 1; КонецЦикла; Сообщить(Кол); Сообщить("конец тест 1 "+СокрЛП(ТекущееВремя())); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса ="//{{ЗАПРОС(ЗапросПоЗаявкам) |ТекущийЭлемент = Справочник.Материалы.ТекущийЭлемент; //|ДатаЗ = Справочник.я_СпискиЗаявокЭкспедирование.ДатаЗ; |Группировка ТекущийЭлемент без групп; |Функция Опочки = Счётчик(); //|Условие(ДатаЗ >= Дата1); //|Условие(ДатаЗ <= Дата2); |";//}}ЗАПРОС Запрос.Выполнить(ТекстЗапроса); КоличествоЗаявок = Запрос.Опочки; Сообщить("конец тест 2 "+СокрЛП(ТекущееВремя())); КонецПроцедуры Вот результат выполнения Страт 16:36:32 31432 <= Кстати - это количество элементов в моем справочнике конец тест 1 16:36:33 конец тест 2 16:36:38 СМОТРИ ВИДНО ЧТО ЦИКЛОМ ОПРЕДЕЛИЛИ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ЗА 1 СЕКУНДУ!!! А ЗАПРОСОМ 5 СЕКУНД!!! ЧТО СКАЖИТЕ ;) shegy |
|||
44
Mikeware
22.06.12
✎
17:41
|
За отчет 8 часов и сохранение 4 часа полагается 7 лет расстрела....
|
|||
45
Попытка1С
22.06.12
✎
17:51
|
(28) А если dbf переписать нельзя?
|
|||
46
oleg_prg
22.06.12
✎
17:57
|
(45) Да все можно, просто ТС не программист а админ, которому поручили эту задачку... Как показывает практика, там работает хреново, где мало платят, и спецов не ценят
|
|||
47
Попытка1С
22.06.12
✎
18:02
|
(43) Ну как бы ничего удивительного, единственное время выполнения модно считать через _getperformancecounter =)
|
|||
48
forest-rg
23.06.12
✎
15:42
|
oleg_prg попробовал у себя такое сделать, получил следующее,
когда просто считается кол-во элементов то быстрей Старт 15:40:00 19359 конец тест 1 15:40:01 (1 сек) конец тест 2 15:40:10 (9 сек) но на деле оказалось так, в работающем отчете когда был запрос 26 сек на обработку 56 элементов получить элементы 28 сек на те же 56 элементов |
|||
49
mehfk
23.06.12
✎
16:40
|
(1) Переходи на 7-ку, там это не реализовано.
|
|||
50
forest-rg
23.06.12
✎
21:16
|
а как в счетчик вставить еще несколько условий?
например выбор заказчика, они в оригинале есть но тут не хотят работать точнее работают но не так считают. нужно если значания попадает в дату, а потом в этой дате есть заявки с определенным заказчиком то их отбирать Процедура Сформировать() Сообщить("Старт "+СокрЛП(ТекущееВремя())); Кол = 0; Спр = СоздатьОбъект("Справочник.я_СпискиЗаявокЭкспедирование"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если (Спр.ДатаЗ>=Дата1) и ((Спр.ДатаЗ<=Дата2)) Тогда Продолжить; Конецесли; Если(ВыбЗаказчик.Выбран()=1)и(Спр.Заказчик<>ВыбЗаказчик)Тогда Продолжить; Конецесли; Кол = Кол + 1; КонецЦикла; Сообщить(Кол); Сообщить("конец тест 1 "+СокрЛП(ТекущееВремя())); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |