Имя: Пароль:
1C
1C 7.7
v7: Вывод сообщений при массовой обработке документов
,
0 vadim777
 
13.12.16
11:42
Обработка "Обработка документов", выводит в окно сообщений сообщение о каждом действии над каждым документов. Сильно-ли замедляется процесс обработки документов (конкретно - отмена проведения, пометка на удаление) вывод этой информации?
PS: обработка работает уже третьи сутки, помечаются на удаление документы за последние 5 лет.
1 nordbox
 
13.12.16
11:43
Из практики: На 7.7 есть замедление, не сильное но есть, но... тогда ты не увидишь что он делает ))
2 Жан Пердежон
 
13.12.16
11:44
>>3 сутки
продолжайте наблюдения
3 nordbox
 
13.12.16
11:45
(0) Сколько лет уже удалил за трое суток? ))
4 Ёпрст
 
13.12.16
11:47
(0) замедляет и на много. Но, самый тормоз - ЖР.
Тормозните поделку, отключите ЖР в пофигураторе, отключите вывод в сообщении, максимум, каждые 300 доков, например. Усё.

Но лучше, пометить всё и удалить прямым запросом. Займёт минуты 3 на всё.
5 nordbox
 
13.12.16
11:47
А теперь представь что он еще кроме пометки удалять их будет .....
6 Ёпрст
 
13.12.16
11:48
+ ТА сдвинь назад, на самый первый док. Удалять штатно будет в разы быстрее.
7 Ёпрст
 
13.12.16
11:48
Это, если мозгов не хватает написать запрос на простейший delete
8 vadim777
 
13.12.16
12:08
(4)(7) Угу, не хватает :(
9 trdm
 
13.12.16
12:17
(0) Лучше писать в тестовый лог, а сообщения заменить на Состояние("Удаляется документ такой-то").
А Важные сообщения уже выводить на экран.
10 trdm
 
13.12.16
12:20
(9) Для лога:
//******************************************************************************
// глЗаписатьВЛогФайл(ИмяЛога, ЧтоЗаписать = "Тест") // <<© ТрДм 2005>>  
// Просто пишет в текстовый файл в каталоге БД строку с текущим временем и датой.
Функция глЗаписатьВЛогФайлУпрощенно(псИмяЛога, псСтрокаЗаписи, псДобавитьВремя = 0, псСтрокаЗаголовкаЛога = "") Экспорт
    ЗначВозврата = 0;
    Если ПустоеЗначение(псСтрокаЗаписи) = 1 Тогда
        Возврат 0;
    КонецЕсли;
    глКаталогЛогов = КаталогИБ() + "Logs\";
    Если ФС.СуществуетФайл(глКаталогЛогов) = 0 Тогда
        ФС.СоздатьКаталог(глКаталогЛогов);
    КонецЕсли;
    вИмяФайлаЛога = глКаталогЛогов + псИмяЛога + ".log";
    fso=СоздатьОбъект("Scripting.FileSystemObject");
    вБылаОшибка = Нет;
    Попытка        вТекстСтрим=fso.OpenTextFile(вИмяФайлаЛога, 8, 1, 0); //Открываем файл в режиме "дозаписи"
    Исключение        
        вБылаОшибка = Да;
        глСообщитьОбОшибке("Ошибка при создании файла "+вИмяФайлаЛога,"!");        
    КонецПопытки;
    Если вБылаОшибка = Да Тогда
        Попытка     вТекстСтрим=fso.OpenTextFile(вИмяФайлаЛога, 8, 1, 0); //Открываем файл в режиме "дозаписи"
        Исключение    Возврат 0;
        КонецПопытки;
    КонецЕсли;
    вFileSizeCheck = FSO.GetFile(вИмяФайлаЛога);
    Если вFileSizeCheck.Size() = 0 Тогда
        вКоммент2 = псСтрокаЗаголовкаЛога + РазделительСтрок;
        вТекстСтрим.Write(вКоммент2);
    КонецЕсли;
    
    вСтрокаДатыВремени = "" + глДатаФормат(ТекущаяДата(),"ГГГГ-ММ-ДД_ЧЧ:WW");
    Если ТипЗначенияСтр(псСтрокаЗаписи) = "Строка" Тогда
        вТекстСтрим.Write(вСтрокаДатыВремени + " " + псСтрокаЗаписи+ РазделительСтрок );
    ИначеЕсли ТипЗначенияСтр(псСтрокаЗаписи) = "СписокЗначений" Тогда
        СЦ = 0;
        Для СЦ = 1 По псСтрокаЗаписи.РазмерСписка() Цикл
            вТекстСтрим.Write(вСтрокаДатыВремени + " " + псСтрокаЗаписи.ПолучитьЗначение(СЦ)+ РазделительСтрок );
        КонецЦикла;
    КонецЕсли;
    вТекстСтрим.Close();
    Возврат 1;
КонецФункции // глЗаписатьВЛогФайл()
11 trdm
 
13.12.16
12:22
(8) А база хоть на скуле?
12 Вафель
 
13.12.16
12:24
(10) а вызов СоздатьОбъект("Scripting.FileSystemObject") каждый раз не медленно ли?
13 trdm
 
13.12.16
12:25
(12) Да, можно оптимизировать. Чет не думал об этом, спасибо!
14 trdm
 
13.12.16
12:27
Хотя думаю разумнее сделать кешь таких объектов со временем создания и прибивать их если пару минут не используются.
15 Ёпрст
 
13.12.16
12:28
(8) ну, если не хватает, тогда тормози и делай следующее
1. Открываешь монопольно общий журнал, встаешь на первый документ, ПКМ-установить ТА на него
2.из обработки поделки ремишь все Сообщить
3.Открываешь пофигуратор, администрирование-ЖР - сымаешь все галки.
4. Можно еще и файло итогов прибить, но лишнее.
5.Запускаешь, радуешься.
16 trdm
 
13.12.16
12:30
(15) эх когда то возился в 2003 году. мне б твои советы )))
17 vadim777
 
13.12.16
12:34
(6) Можно-ли программно изменить ТА в немонопольном режиме.
Дело в том, что какого-то #$% SQL 2008 не дает войти в монопольном режиме.
18 Вафель
 
13.12.16
12:35
(17) kill
19 Ёпрст
 
13.12.16
12:39
(17) можно, прямым запросом
20 Ёпрст
 
13.12.16
12:39
но лучше, отстрели все активные соединения к базе.
21 Ёпрст
 
13.12.16
12:40
на корне в остнастке скуля, пкм - монитор активности, там прибей все обращения к нужной базе
22 vadim777
 
13.12.16
12:46
(21) Это в Data File I/O ?
23 vadim777
 
13.12.16
12:47
Кста, только что был сбой питания, думал после этого можно будет войти монопольно - не, не пускает.
24 Ёпрст
 
13.12.16
13:10
(23) ну, если не найдешь, то тупо рестартани скуль и прибей все lck в каталоге с базой
25 Ёпрст
 
13.12.16
13:10
службу скуля рестартани.
26 Ёпрст
 
13.12.16
13:10
хотя проще, все соединения грохнуть
27 vadim777
 
13.12.16
13:33
28 vadim777
 
13.12.16
13:34
29 vadim777
 
13.12.16
13:48
После сбоя питания сбойнулф и база.
Как сделать rebuild log-файлу?
30 Ёпрст
 
13.12.16
13:51
(28) а че ты хочешь от него, если он остановлен ?
31 Ёпрст
 
13.12.16
13:51
службу то подыми
32 vadim777
 
13.12.16
13:59
(31) Та запустил уже, копию базы также запустил - работает.
А на той, что была в работе во время сбоя - выдает, что нарушен log-файл, и предлагает его или достать из архива, или перестроить.
Как его перестроить?
33 Это_mike
 
13.12.16
14:00
(32) а читать инструкции уже не популярно?
34 vadim777
 
13.12.16
14:04
(33) что сейчас усиленно и делаю...
35 trdm
 
13.12.16
14:28
(32) Сделай сохранение документов при их записи в xml-файлы.
Потом можно будет их восстановить за потерянное время.
36 Ёпрст
 
13.12.16
14:28
(32)
DBCC REBUILD_LOG('db_name', 'Полный путь к новому файлу ldf') GO
37 trdm
 
13.12.16
14:29
+(35) это на случай креша БД.
38 vadim777
 
13.12.16
14:48
(35) Мне не нужно восстанавливать документы. Нужно продолжить работать с базой - помечать на удаление старые документы. С базой никто не работает.
39 trdm
 
13.12.16
15:21
(38) Забей.
40 Это_mike
 
13.12.16
15:32
(39) "коси и забивай"™
41 linoblack
 
13.12.16
16:55
(15) там перенос ТА может затянуться )))
42 Ёпрст
 
13.12.16
16:56
(41) назад ? Нет, сделается мгновенно
43 Ёпрст
 
13.12.16
16:57
А так то у него скуль, и вообще непонятны все эти потуги со штатным удалением, когда всё через qa удаляется за секунды.
44 vadim777
 
13.12.16
18:26
(43) Как? Попробовал УдалениеДокументовСредствамиSQL.ert, Generatsiya_SQL-skripta_dlya_udaleniya_dokumentov_pri_svertke_bazy.ert -
что-то лишнее задело, остатки полетели. Почитал на форуме, кто как удаляет доки в SQL базе, некоторые были за использование штатных средств 1С.
45 Злопчинский
 
13.12.16
18:27
И Сообщить и Состояние - очень сильно замедляют процесс.
46 Ёпрст
 
13.12.16
18:31
(44) че как ? Примитивный запрос который удалит записи в _1sjourn (если надо насовсем) или апдейт _1sjourn по полю closed + флаги с регистров (если надо оставить помеченным на удаление)
+ в табличках движений регистров delete записей по условию , ну и в проводках и операциях. + если насовсем, то еще и в _1scrdoc , в _1sconst.  + пересчёт итогов прямым запросом. Усё
47 vadim777
 
13.12.16
18:39
(36) Это для SQL 2000
48 uno-group
 
13.12.16
19:00
(46) НУ дык на десяток одинесников которые это смогут сделать, наберется сотня которые вообще не смогут и два десятка которые при этом, что то напортачат.
49 Ёпрст
 
13.12.16
19:34
(47) ну тогда DBCC CHECKDB.
+ смотри там параметры в справке
50 vadim777
 
13.12.16
19:52
(49) Да уже понял. Только сделал detach базы, теперь attach не получается - log-файл нарушен.
51 vadim777
 
13.12.16
19:59
(50) По совету товарища Галиева с http://blog.galievr.ru/?p=382:
Для всех версий SQL Server подойдет следующий вариант: делаем Detach database(отсоединить базу данных), удаляем журнал транзакций(файл с расширением ldf) и делаем Attach database(присоединить базу данных). В мастере выбираем наш mdf файл и жмем ОК.
Никакого мастера не появилось, attach сделать не могу.
Таким советчикам ....
52 Ёпрст
 
13.12.16
20:05
(51) ну а сам лог то удалил ?
53 Ёпрст
 
13.12.16
20:06
перед атачем ?
54 vadim777
 
13.12.16
20:13
(52) Нет, переименовывал. Потом возвращал взад,пытался снова attach, выводилось сообщение, что требуется rebuild log. Замкнутый круг.
55 Ёпрст
 
13.12.16
20:36
(54) вообще оставь только мдф и делай атач
56 Ёпрст
 
13.12.16
20:37
после атача - чекдб, можешь с параметром репеарлос
57 Ёпрст
 
13.12.16
20:42
и вот так, аттачится у тебя ?
alter database mydatabase set EMERGENCY
58 Ёпрст
 
13.12.16
20:46
Ну и вот еще, пробуй..
https://web.archive.org/web/20120827060529/http://dev.by/blog/7414

про архивы тока не забывай лепить
59 vadim777
 
14.12.16
03:50
(57) Конечно нет, ошибка:
Msg 5011, Level 14, State 5, Line 1
User does not have permission to alter database 'DB_20161207', the database does not exist, or the database is not in a state that allows access checks.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
60 vadim777
 
14.12.16
06:44
(58) Кажись сработало.