|
v7: Runtime error при проведении документа торг->бух | ☑ | ||
---|---|---|---|---|
0
lg2marvel
15.05.13
✎
13:36
|
Добрый день, столкнулся с проблемой при формировании проводок 1с вылетает с ошибкой Runtime error!
Конфигурация сервера такая: Xeon 5130 2GHz, 2Gb RAM, HDD RAID 1 SAS База в SQL, MSSQL Server 2000 SP4, размер базы 13,6 Gb Формирование проводок делается ежедневно, раньше такого не было, разве что если попробовать сформировать проводки за неделю Проводки формируются сводные, т.к. база распределенная на перифириях могут возникнуть проблемы. Сейчас как последняя капля формируются детальные проводки по всем документам Покопался в сети, часто спасает удаление журнала - удалил - не помогло Перенес каталог ИБ в другое место - не помогло Запускал формирование на другой машине - не помогло (Xeon 5503 2GHz, 24GB RAM, HDD RAID1 SATA 1Tb, MSSQL 2005) Запускал формирование на сетевой машине - не помогло Сделал бекап sql базы, очистил каталог информационной базы (оставил MD и DDS) Делал выгрузку и загрузку Проверял жесткий на ошибки Пробовал другим документом списать товар (сейчас это ОтчетКА, пробовал Розничной накладной) Остается только выгрузка базы и обратная загрузка... но на таком объеме это займет пару суток и не факт что поможет. Это не выход из ситуации Как быть? Подозреваю что проблема в нехватке памяти, но в тоже время встает вопрос почему же тогда не формируется на машине с 24 гигами оперативки и 2005 скуле? Скриншот сделан с сетевой машины, где установлен медок и прочие мелочи жизни. на сервере ничего подобного нет. |
|||
1
lg2marvel
15.05.13
✎
13:37
|
||||
2
Утконос
15.05.13
✎
13:38
|
ТА на 31.05
|
|||
3
lg2marvel
15.05.13
✎
13:41
|
ТА стоит на 31.05
|
|||
4
Ёпрст
15.05.13
✎
13:44
|
(0) а по документам сразу не судьба проводки лепить ?
|
|||
5
пипец
15.05.13
✎
14:15
|
всунь в формирование проводок счетчик и начать транзакцию + завершить транзакцию в паузе
ЗЫ вряд ли поможет , на таких объемах |
|||
6
пипец
15.05.13
✎
14:17
|
кстати - запросы и прочие радости типа ТЗ все равно как временные хранятся в дбф
|
|||
7
lg2marvel
15.05.13
✎
15:18
|
(4) Я вас не понял
Получается такая ситуация: ставлю формирование проводок, оно проводится доходит до определенного документа и на нем вылетает. Пробовал делить документ, вылетает на меньшей части, потом делил меньшую еще пополам, и все равно. (6) Если вы ведете к тому что не хватает места на жестком диске или права доступа - врядли. Места на винте больше 150 гиг (и на системном и на том где база). С правами тоже все нормально, до этого год формировало. |
|||
8
Ёпрст
15.05.13
✎
15:23
|
(7) формируйте проводки в момент проведения документа, а не потом
|
|||
9
lg2marvel
15.05.13
✎
15:50
|
(8) Спасибо попробуем, но это на будущее, хотелось бы понять причину почему получается ошибка, т.к. уже есть еще один день где проводки не формируются.
|
|||
10
пипец
15.05.13
✎
15:53
|
(7) кто сказал что 150 гиг не хватает - пропишите для того пользователя который формирует проводки темп с 1С-а
C:\1Cv77\BIN\1cv7s.exe /TD:\мойтемп и посмотрите что делается при формировании проводок в этом мойтемпе |
|||
11
lg2marvel
15.05.13
✎
16:04
|
(10) Спасибо попробую
|
|||
12
lg2marvel
15.05.13
✎
21:03
|
(8) Не подскажите как включить формирование проводок при проведения документов
|
|||
13
lg2marvel
15.05.13
✎
22:49
|
(12) уже не надо :-)
|
|||
14
Злой Бобр
16.05.13
✎
00:01
|
(0) Это все потому что ваша контора жлобится нанять нормального админа. Так им и нада.
Причин может быть много, от элементарной нехватки оперативы, до ... По фото нелечится. Почему на второй машине не взлетело - ХЗ. Должно было все вертикально взлететь. Может проблема в сети?.. Или это все делается на одной машине? Релиз 1С я надеюсь 27 ?.. |
|||
15
lg2marvel
16.05.13
✎
01:04
|
(14) Релиз 27, все делается на локальной машине.
Да должно взлететь, но почему-то не взлетает. Смотрел количество документов (по торговым операциям) за этот день - 3926. Еще один день который вылетает с этой ошибкой - 3723. В остальные дни не привышает 3100, даже на конец года документов меньше. Может быть причина в количестве. Возможно в дбф варианте заработает нормально, но к сожалению проверять это времени нет. |
|||
16
lg2marvel
16.05.13
✎
01:07
|
Проблема явно не в документе. Документы на которых происходил вылет переместил на более ранее время - вылетело на более позднем.
Есть подозрение что sql где-то достигает своего предела, возможно даже не sql, может что-то с временными файлами. Может предела достигло количество строк во временной таблице. |
|||
17
Злой Бобр
16.05.13
✎
04:02
|
Ну тогда нужно смотреть код, чем ты там проводки формируешь ... Есть подозрение что делается все в одной огромной транзакции, которая ложит скуль. Я б копал в эту сторону.
|
|||
18
lg2marvel
16.05.13
✎
14:03
|
Процедура ОбработкаДокументов()
Если ПометкаУдаления()=1 Тогда Предупреждение("Документ помечен на удаление. |Перепроведение не может быть выполнено.", 5); Возврат; ИначеЕсли ПроверкаПериодаФормированияПроводок(Контекст)=0 Тогда Предупреждение("При проверке документа обнаружены ошибки. |Перепроведение не может быть выполнено.", 5); Возврат; КонецЕсли; ДатаНач=глНачалоПериодаФормированияПроводок(Контекст); Начало=ДатаНач; Если (МонопольныйРежим()=0) и (ПолучитьДатуТА()<Начало) Тогда Начало=ПолучитьПозициюТА(); КонецЕсли; Попытка Если Модифицированность()=1 Тогда Если Вопрос("Записать документ?", "ОК+Отмена")<>"ОК" Тогда Возврат; КонецЕсли; ПриЗаписиПерепроводить(0); Записан=Записать(); ПриЗаписиПерепроводить(1); Если Записан=0 Тогда Предупреждение("Формирование проводок не выполнено!"); Возврат; КонецЕсли; КонецЕсли; ПозицияГраницыОсновнойПоследовательности = Последовательность.ОсновнаяПоследовательность.ПолучитьПозицию(); НачатьТранзакцию(); Объект=СоздатьОбъект("Документ"); Объект.УстановитьФильтр(1, 0, 0, 2, 1, 2); Объект.ВыбратьПоЗначению(Начало, ДатаДок,"Фирма",Фирма); Пока Объект.ПолучитьДокумент()=1 Цикл Если (Метаданные.Документ(Объект.Вид()).ОперативныйУчет = 0) или (Метаданные.Документ(Объект.Вид()).БухгалтерскийУчет = 0) Тогда Продолжить; КонецЕсли; Если Лев(Объект.Вид(),2) <>"Т_" Тогда // налоговые не перепроводим Продолжить; ИначеЕсли (Объект.СравнитьТА()=1) Тогда // перепроводятся все документы за ТА ИначеЕсли (Метаданные.Документ(Объект.Вид()).БухгалтерскийУчет<>1) Тогда Продолжить; ИначеЕсли (Объект.ДатаДок<ДатаНач) ИЛИ (Объект.Фирма<>Фирма) ИЛИ (Объект.ТипУчета=Упр) Тогда Продолжить; ИначеЕсли (Детализация=Перечисление.ФормированиеПроводок.Детальные) Тогда // перепроводятся все документы ИначеЕсли (Объект.СуществуетОперация()=глНужныДетальныеПроводки(Объект, Контекст)) Тогда Продолжить; КонецЕсли; Если Объект.Провести()=0 Тогда ОтменитьТранзакцию(); Предупреждение("Формирование проводок не выполнено!"); Возврат; КонецЕсли; Если Объект.ПолучитьПозицию() < ПозицияГраницыОсновнойПоследовательности Тогда Последовательность.ОсновнаяПоследовательность.Установить(ПозицияГраницыОсновнойПоследовательности); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); Если Провести()=0 Тогда Предупреждение("Формирование проводок не завершено!"); Иначе Предупреждение("Формирование проводок завершено."); КонецЕсли; Исключение ПриЗаписиПерепроводить(1); // если не удачная попытка Записать(); глКомментарий(ОписаниеОшибки()); Предупреждение("Формирование проводок не выполнено!"); КонецПопытки; КонецПроцедуры // ОбработкаДокументов() |
|||
19
Ёпрст
16.05.13
✎
14:11
|
транзакцию выкини из кода и усё.
|
|||
20
lg2marvel
16.05.13
✎
14:33
|
(19) Спасибо попробую
|
|||
21
пипец
16.05.13
✎
14:36
|
оййооо внутри попытки начать транзакцию ... да еще с перебором документов
|
|||
22
lg2marvel
16.05.13
✎
16:02
|
Прокатило!
Сделаем транзакцию отключаемую :-) Спасибо всем за помощь. Премного благодарен. |
|||
23
пипец
16.05.13
✎
16:18
|
(22) в данном случае уж тогда конструкция типа
начатьтранзакцию Цикл счетчик твои проведения блабла проверка счетчика (каждые сто например документов) попытка зафиксировать транзакцию пауза начатьтранзакцию вначалоцикла ЗЫ на забыть последнюю транзакцию закрыть ЗЫЫ делалось на скуль2000 для создания большого количества документов |
|||
24
lg2marvel
16.05.13
✎
17:56
|
в том то и прикол, что нет смысла закрывать транзакцию пока не обработались все документы. Проводки формируем сводные, закрываться она должна после того как.
|
|||
25
lg2marvel
17.05.13
✎
08:35
|
Блин таки не в транзакции дело
|
|||
26
Bigbro
17.05.13
✎
08:42
|
(24) если не закрывать транзакцию пока не отработались все 3900 документов - это скорее всего не будет работать.
перестраивайте логику, чтобы обработка небольшого числа документов (порядка 100) в одной транзакции была возможна. |
|||
27
ЧеловекДуши
17.05.13
✎
08:43
|
(0) Убери из кода команды "Транзакция" и все получится :)
|
|||
28
ЧеловекДуши
17.05.13
✎
08:44
|
(25) В ней... тупо памяти не хватает, что ты хочешь.
Учись оптимизировать код, коль не научился это делать на других языках программирования, отличных от Визуал Бейсика :) |
|||
29
lg2marvel
17.05.13
✎
08:44
|
Убрал, не получилось. Тот же результат
|
|||
30
ЧеловекДуши
17.05.13
✎
08:45
|
+(25) Если алгоритм обрабатывает объем информации заведомо превышаемый возможности 32-ух битного приложения, то раздели этот объем на мелкие кусочки.
|
|||
31
ЧеловекДуши
17.05.13
✎
08:45
|
(29) "Мозг купи" - все что связано с командами "Выбрать" уже кушает память :)
|
|||
32
Bigbro
17.05.13
✎
08:46
|
(29) твои попытка исключение и внутри обработка ВСЕХ документов - та же самая транзакция. убирай и делай частями.
|
|||
33
пипец
17.05.13
✎
09:06
|
(32) ему уже намекали в (21) ;)) и вообще попытка исключение а внутри цикл по документам это фантастишш
|
|||
34
lg2marvel
17.05.13
✎
11:50
|
Вот думаю...
Пока Объект.ПолучитьДокумент()=1 Цикл ... КонецЦикла; Таким образом я обрабатываю все документы сейчас. Как правильнее будет обработать документы частями? Пока в голову приходит мысль что примерно так: КвоДок = 0; Пока Объект.ПолучитьДокумент()=1 Цикл Если Лев(Объект.Вид(),2) <>"Т_" Тогда Продолжить; Иначе КвоДок = КвоДок + 1; КонецЕсли; КонецЦикла; Сообщить(КвоДок); Счетчик = 0; СчетчикПорог = 1001 Пока Счетчик <= КвоДок Цикл Пока (Объект.ПолучитьДокумент()=1) и (Счетчик <= СчетчикПорог) Цикл Счетчик = Счетчик + 1; ... СчетчикПорог = СчетчикПорог + 1000 КонецЦикла; КонецЦикла; Только будет ли он дальше обрабатывать документы или каждый раз начинать сначала? Или бред все сивой кобылы? |
|||
35
lg2marvel
17.05.13
✎
12:05
|
СчетчикПорог = СчетчикПорог + 1000
да во внешнем цикле |
|||
36
пипец
17.05.13
✎
12:09
|
вопрос первый - как связано массовая обработка документов с ожидаемым результатом ? / там чо - сводные проводки которые частями низя чоли ?/
-- вопрос второй - а результаты загнать в ТЗ и потом ТЗ провести как документ не? -- вопрос третий - концепция сего действа сделать шоб работало или как раньше ? |
|||
37
пипец
17.05.13
✎
12:11
|
+ само по себе проведение документа это как бэ транзакция
|
|||
38
lg2marvel
17.05.13
✎
12:23
|
(36) 1. нельзя создать еще один документ торг->бух в этот день, при проведении он обрабатывает все документы за период од предыдущего документа до сегодняшнего дня включительно
2. в ТЗ разве что загнать перечень документов и потом их обрабатывать, но это теже яйца только в профиль 3. шоб работало естественно |
|||
39
пипец
17.05.13
✎
12:26
|
(38) в ТЗ загнать результаты , не ? и потом эти результаты писАть ... или сами документы при проведении чототам досчитывают ? / так досчитывайте снаружи а документ как приложение к модулю проведения с готовыми данными
|
|||
40
пипец
17.05.13
✎
12:28
|
в конце концов прикрутите к проведению 1С++ которая 1cpp.dll
|
|||
41
lg2marvel
17.05.13
✎
15:35
|
Отладчик наше все, буду искать на каком моменте вылетает.
|
|||
42
пипец
17.05.13
✎
15:48
|
(41) при наличии разных процессов в винде фиг ты точно найдешь - если это с памятью связано , грю ж прикрути 1с++ - все будет легче
|
|||
43
lg2marvel
17.05.13
✎
15:54
|
компоненту скачал, подключил, что дальше с ней делать хз(
не программист я, только учусь |
|||
44
пипец
17.05.13
✎
16:12
|
(43) дальше переписывать движения документов , заодно и научитесь (естестно на копии)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |