Имя: Пароль:
1C
 
v7: Незаметное групповое перепроведение доков, как выполнить?
0 temsa
 
19.10.10
13:23
Вот задался целью проводить доки по определенному контрагенту за период иногда надо чуть ли за пол года. Нужно проводить доки не мешая другим.  Обычно проводили или ночью или небольшимим партиями. Есть нескольок вариантов. Ну идеи не новы это всем известно.
Вариант 1 проводить через обработку ожидания.
Вариант 2 проводить прямо в цикле но в цикле сделать задержу.

Помоему второй вариант пацанский? У кого как? Подскажите.

ЗЫ про то что добиться того чтобы не было перепроведений не обсуждается перепроведенияесть и будут ну  хотябы за последни несколько дней.
1 Chai Nic
 
19.10.10
13:26
Незаметно не получится, ибо блокировка.
2 Aleksey_3
 
19.10.10
13:28
"обработку ожидания. " - в 7ке без ВК, если и взлетит, то низенько, низенько
3 temsa
 
19.10.10
13:30
(1) Ну я имел ввиду чтоб народ не ждал по 10 - 20 минут пока проведешь по контрагенту месяц другой. Вобщем автоматическое проведения как-будто бы обычный пользователь который провдоит с разрывом во времени. Провле пару тройку доко и замер на пару минут итд.
4 ДенисЧ
 
19.10.10
13:30
и шо? Понятия не позволяют? Ты, главное, делай, когда сделаешь пацаны тебя поймут...
5 temsa
 
19.10.10
13:32
(2) Это почему же??? Метод (функция) обработка ожидания встроен же в 1с 77. НУ с помощью обработки ожидания  всякие там выгонялки делают. запускают отчеты итп.
6 temsa
 
19.10.10
13:32
(4) ну хотелось услышать кто что и как. А так конечно сделаем без вопросов.
7 PuhUfa
 
19.10.10
13:33
Ночью дешевле (с)
а главное правильнее и спокойнее...
8 andrewks
 
19.10.10
13:34
если нагрузка на базе хорошая, то "незаметно" точно не получится, юзеры вдоволь пообщаются с Ее Величеством Транзакцией :)
9 ДенисЧ
 
19.10.10
13:34
(6) У меня просто цикл с Спатель.Спать(30) стоит.
10 Aleksey_3
 
19.10.10
13:34
(5) Оно конечно есть, но это же 1С, т.е. если окно программы 1С не активно, то и обработка ожидания работать не будет
11 ДенисЧ
 
19.10.10
13:35
(10) Это как?? Хорошо, что у меня консоль сервера закрыта... А то мой робот прочитал бы это и отказался бы работать...
12 Aleksey_3
 
19.10.10
13:35
(11) Мы же про 7-ку говорим?
13 ДенисЧ
 
19.10.10
13:36
(12) ну да, естественно.
14 Aleksey_3
 
19.10.10
13:37
Автор Fеникс. Занесено для Базы знаний.
Для справки:
...обработка ожидания срабатывает далеко не всегда. Она никогда не сработает в случаях:
=> пока выполняется какая-нибудь обработка
=> пока у пользователя открыт диалог ввода значения
=> пока у пользователя выведено предупреждение или вопрос
Также обработка ожидания может не сработать в случаях:
=> если система заблокирована
=> если модально открыта какая-нибудь форма
=> если открыто меню интерфейса
=> если окно программы 1С не активно
=> если программа зависла

(с) Обработка ожидания работает через раз
15 ДенисЧ
 
19.10.10
13:37
(14) про модаольность согласен.
Про неактивность - никогда не натыкался.
16 Aleksey_3
 
19.10.10
13:39
Юзаешь глобальную или локальную обоработкуОжидания?
17 temsa
 
19.10.10
13:40
(14) ну ясное дело все это учтется. Обработка (читай как алгоритм)проведения прямо в вызываемой функции будет реализвано. И причем для определенного юзера можно настроить чтбы можно было запускать задание пярмо в винде
18 AeDen
 
19.10.10
13:41
"проводить доки по определенному контрагенту за период иногда надо чуть ли за пол года"
особенно шикарно в закрытых периодах править данные.
Спасибо от бухов гарантировано.
19 temsa
 
19.10.10
13:42
(7) ночью не получиться база работает круглосуточно. тольок для выгрузки  делается пауза в 30 минут. Хотя ночю с базой работает всего 3-4 человека а днем 25-30. Видимо задание буду запускать ночью
20 temsa
 
19.10.10
13:43
(18) Перепроведение доков не затронет бухию ни как. Проводиться будет по упр регистрам.
21 andrewks
 
19.10.10
13:43
(19) а что бы ночью не работать с распределенной базой, а с центральной в это время делать все что хочешь?
22 Aleksey_3
 
19.10.10
13:43
(19) А если через УРБД? Правда большой период она будет полдня загружать при рабочих юзерах
23 andrewks
 
19.10.10
13:43
(20) "Перепроведение доков не затронет бухию ни как"???
у вас что бух.учет отдельно ведется, в параллельной базе?
24 milan
 
19.10.10
13:44
База самописная проводим доки и по контрагентам и за период, обычно по разделам учета - БУ отдельно, УУ отдельно - отлично все работает.
Не забудь патч ромикса поставить ;)
25 temsa
 
19.10.10
13:46
(23) А вы слышали что в 1с77 можно проводить в разных режимах если отключить галочку "Автоматическое уделние движений"?
26 temsa
 
19.10.10
13:47
(19) так база как раз и УРБД. Токо вот в той которой надо проводить как раз таки центральная и она боевая.
27 temsa
 
19.10.10
13:51
+(19) да и думаю овчинка выделки не стоит ради перепроведения по одному регистру тольок лишь некторых контров из за наружения закрытия взаиморасчетов..
28 Sserj
 
19.10.10
13:51
(25) Ну так если проводишь по какому то определенному регистру, так и проводить надо сразу, как появилась необходимость.
Исправили документ, сразу все остальные провести восстановить, по одному то регистру и полгода не должно напрягать.
29 andrewks
 
19.10.10
13:51
(26) я имел в виду: сделать еще одну периферийную базу "ночную", утром из нее быстро слить ночную движуху, вечером - в нее из ЦБ, тогда ночью с ЦБ можно че-нить делать
(25) слышал
30 Chai Nic
 
19.10.10
13:54
Можно придумать эвристический алгоритм, который бы предсказывал периоды простоя базы на основании многодневной статистики, и интенсивность перепроведения динамически подстраивал под прогнозируемую нагрузку. :)
31 temsa
 
19.10.10
13:56
(28) По опред контру проведение занимает пару минут. А вот если за пол года тогда народ это чувствует. А проводить человеку румаи по месяцам по неделям отнимает время
32 Mikeware
 
19.10.10
13:56
(9) широкое поле для творчества.
33 andrewks
 
19.10.10
13:57
(31) ну тады ставь в ночь, о чем базар :)
34 temsa
 
19.10.10
13:57
(30) Как интересно :) По ходу нагрузку я и так знаю когда что и как. можно не парится когда а вто как это интересно.
35 ТочноеЯдро
 
19.10.10
13:58
(14) 2004 год... 0_о
столкнулся с этим буквально на днях. Неприятно удивился. Особенно отвратно когда вопрос с таймаутом никак закрываться не хочет пока окно не активно.
36 Sserj
 
19.10.10
13:59
(31) Что-то не то, если по одному регистру полгода мучает :)
Это поди взаиморасчеты какие-то, типа кред.историю восстанавливать.
Там поле большое для размышлений, проверки при восстановлении поубирать, остатки не контролировать.
Вообщем у нас в момент проведения задним числом автоматом перепроводится все по кредитам и особо не напрягает, главное оптимизировать нормально.
А вообще ромиксовая вроде компонента была, которая приоритетами рулила.
37 temsa
 
19.10.10
14:00
(31) Ставлю в ночь это уже мы опеделили. но я не буду ставить монопаольно. Потому что ночью  в базе люди их может быть 2-3. А в раделенном режиме если посаблю обработку проведение по нескольким котрам за пол года это может занять как раз таки пол часа или более. Народ взвоет ночью.
38 Mikeware
 
19.10.10
14:01
(30) Нужно учитывать еще фазу луны...
39 ТочноеЯдро
 
19.10.10
14:06
(37) паузы делай между пачками документов.
Днём ставлю перепроведение нескольких тыс документов и никто не замечает
40 temsa
 
19.10.10
14:09
(39) так вот вопрос как раз таки как организвать паузу?
41 Mikeware
 
19.10.10
14:10
(39) позвольте вам не поверить...
42 andrewks
 
19.10.10
14:14
(39) дбф или скул?
43 temsa
 
19.10.10
14:17
(41) Допустим днем значит 10 часов это 600 минут или 36000 секунд. Пусть док проводится док за 0.5 сек пару тыс доков это 1000 сек. это каждые полминуты проводите док или даже пачку доков. да поверить тяжело.
44 andrewks
 
19.10.10
14:17
(40) как насчет ТекущееВремя+ТекущаяДата?
45 ДенисЧ
 
19.10.10
14:19
(40) У меня для паузы используется класс

Класс Спать = .\Классы\Спать.txt
{
   void Спать(КоличествоСекунд);
}


Перем Сист;

Процедура Конструктор()
   Сист = СоздатьОбъект("Система");
КонецПроцедуры

Процедура Спать(количествоСекунд) Экспорт
   Для сч=1 По КоличествоСекунд Цикл
       Состояние("Спим " + сч);
       Сист.Уснуть(1000);
   КонецЦикла;
   
   Возврат;
КонецПроцедуры
46 andrewks
 
19.10.10
14:22
(40)
Процедура Задержка(КолвоСек)
   Перем ч,м,с;
   
   НачДата=ТекущаяДата();
   ТекущееВремя(ч,м,с);
   ТекПоз=ч*3600+м*60+с;
   КонПоз=ТекПоз+КолвоСек;
   
   Пока (ТекПоз<КонПоз) Цикл
       ТекДата=ТекущаяДата();
       ТекущееВремя(ч,м,с);
       ТекПоз=ч*3600+м*60+с;
       Если ТекДата>НачДата Тогда
           ТекПоз=ТекПоз+(ТекДата-НачДата)*86400;
       КонецЕсли;
       
   КонецЦикла;
   
КонецПроцедуры
47 temsa
 
19.10.10
14:25
(44) не совсем понял, хотя догадываюсь почти..?
48 ДенисЧ
 
19.10.10
14:49
(46) Плохое решение.
49 andrewks
 
19.10.10
14:52
(48) обоснуй (смену сист.времени не предлагать)
50 1Сергей
 
19.10.10
14:58
(49) очевидно же - проц грузит
51 ДенисЧ
 
19.10.10
14:59
(49) 100% загрузка проца - это не самое лучшее, что может сделаться с компом.
52 andrewks
 
19.10.10
14:59
(50) дык посмотри в процессах - нифига не грузит (если конечно у тебя не XT :)))
53 temsa
 
19.10.10
15:00
(50) угу и я оом же хоел сказать. Кстати из за этого и не хотел такой простой метод юзать и начал обращать внимание на ожидание()
54 ДенисЧ
 
19.10.10
15:00
(52) исчо как грузит...
55 temsa
 
19.10.10
15:00
В вот то что в (45) меня приятно удивило. Он же не грузит ак ведь?
56 andrewks
 
19.10.10
15:01
(54) докажи
57 ДенисЧ
 
19.10.10
15:01
(56) не собираюсь очевидные вещи доказывать...
58 andrewks
 
19.10.10
15:01
+(56) и кстати что там в Сист.Уснуть(1000)?
59 ДенисЧ
 
19.10.10
15:02
(58) Системный вызов sleep(). Передаёт управление другим процессам.
60 temsa
 
19.10.10
15:03
(56) действительно что там доказывать. я как то пытался такую задержку сделать но сразу в глаза бросилось то что грузит процу.
61 МихаилМ
 
19.10.10
15:06
56
100 % загрузки пороцесора - резултат Вашей  процедуры.
проверил.
62 andrewks
 
19.10.10
15:07
ладно, согласен, лажа, я ее так, для примера написал
(61) 100% - это лишку, сейчас тестил на двух компах - 20-30% загрузки
63 ДенисЧ
 
19.10.10
15:08
(62) небось 4хядерные компы? :-)
64 Эльниньо
 
19.10.10
15:08
Перем Док, Пр, Неуд, ДокПосл, ИдДока;
//*******************************************
Процедура ПриВыбДока()
   ИдДока = СпДоков.ПолучитьЗначение(СпДоков.ТекущаяСтрока());
КонецПроцедуры //ПриВыбДока
//_____________________________________________________________________________
Процедура Перепров()
   Если Кончить > 0 Тогда
       Ч = 0;
       ТекущееВремя(Ч);
       Если Ч = Кончить Тогда
           ЗавершитьРаботуСистемы(0);
       КонецЕсли;
   КонецЕсли;
   Если Док.Проведен() = 1 Тогда
       Фл = 0;
       Для х = 1 По 3 Цикл
           Попытка
               Если Док.Провести() = 1 Тогда
                   Пр = Пр + 1;
                   ДокПосл = Док.ТекущийДокумент();
                   ЗначениеВФайл(КаталогПользователя() + "\PoslDok", ДокПосл);
                   Форма.Обновить();
                   Фл = 0;
                   Прервать;
               Иначе
                   Фл = 1;
               КонецЕсли;
           Исключение
           КонецПопытки;
       КонецЦикла;
       Если Фл = 1 Тогда
           Сообщить("Не удалось провести " + Док.ТекущийДокумент());
           Неуд = Неуд + 1;
       КонецЕсли;
   КонецЕсли;
   Если Док.ПолучитьДокумент() = 0 Тогда
       Форма.Сформировать.Доступность(1);
       НачДата = ДокПосл.ДатаДок;
       Сообщить("Проведено " + Пр + " неудачно " + Неуд);
       Форма.ОбработкаОжидания("Перепров", 0);
   КонецЕсли;
КонецПроцедуры
//----------------------------------------------------------
Процедура Сформировать()
   Форма.Сформировать.Доступность(0);
   Пр = 0;
   Неуд = 0;
   Док = СоздатьОбъект("Документ." + ИдДока);
   Док.ВыбратьДокументы(НачДата, КонДата);
   Док.ПолучитьДокумент();
   Форма.ОбработкаОжидания("Перепров", Интервал);
КонецПроцедуры

//----------------------------------------------------------
Процедура ПриОткрытии()
   Если ФС.СуществуетФайл(КаталогПользователя() + "\PoslDok") = 1 Тогда
       ЗначениеИзФайла(КаталогПользователя() + "\PoslDok", ДокПосл);
   Иначе    
       ДокПосл = Последовательность.Производство.ПолучитьДокумент();
       ДокПосл = ДокПосл.ТекущийДокумент();
   КонецЕсли;
   НачДата = ДокПосл.ДатаДок;
   КонДата = РабочаяДата();
   Интервал = 1;
КонецПроцедуры
//*******************************************

Для х = 1 По Метаданные.Документ() Цикл
   СпДоков.ДобавитьЗначение(Метаданные.Документ(х).Идентификатор);
КонецЦикла;
СпДоков.ТекущаяСтрока(1);
ПриВыбДока();
65 andrewks
 
19.10.10
15:09
(63) 2-х всего...
66 ДенисЧ
 
19.10.10
15:10
(65) коре 2 дуо? :-))
67 ДенисЧ
 
19.10.10
15:10
Ты учти, что 77 не умеет параллелить свои задачи, поэтому грузит 1с процессор... Вот и видна суммарная загрузка...
68 andrewks
 
19.10.10
15:10
(66) я что похож? :)
69 ДенисЧ
 
19.10.10
15:11
(68) На что??
70 andrewks
 
19.10.10
15:11
кстати, ТочноеЯдро так и не рассказал свое ноу-хау, как он так лихо доки проводит...
71 andrewks
 
19.10.10
15:12
(69) не на что, а на кого
72 temsa
 
19.10.10
15:13
(62) не может быть либо 25 либо 50 либо 100 ну там плс минус 1-2 процента
73 andrewks
 
19.10.10
15:16
(72) у задачи - да, я смотрел общую нагрузку в статус-строке
74 temsa
 
19.10.10
15:19
(73) значит у тебя  4х процовый комп или двухпоцовый но разделеленный по два каждый .. короче 4 ядра.

25 утебя кушает 1с именнос этой задачей а 5 % жругие приблуды в оси.
75 andrewks
 
19.10.10
15:23
(74) да, щас не поленился сходил проверил - в диспетчере устр-в 4 строчки. но в принципе это уже не важно - я ж согласился что лажа
76 ДенисЧ
 
19.10.10
15:25
(75) Значит, таки похож :-)
77 andrewks
 
19.10.10
15:27
(76) no comments
78 temsa
 
19.10.10
15:28
(64) что за перл выдал сей друг я таки не понял. какое отношение имеет это к сабжу?
79 andrewks
 
19.10.10
15:30
судя по всему, прямое
80 Эльниньо
 
19.10.10
15:30
(78) Срочно понадобилось "Незаметное групповое перепроведение доков".
Вот и накропал на скорую руку.
Работает третьи сутки, юзерам не мешает.
Спрашивай - что непонятно.
81 temsa
 
19.10.10
15:39
(80) Внимательно прошелся по коду понял суть и последовательность выполнения. НУ вобщем понял что на скорую руку. Хотя можно было бы покрасивше.

а на кой надо писать? Форма.ОбработкаОжидания("Перепров", Интервал); можно было бы без форма.

как то не привычно.
82 Эльниньо
 
19.10.10
15:48
(81) Недокументированная фишка
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.