Имя: Пароль:
1C
1С v8
Узнать причину аварийного завершения 1С
0 егаис
 
20.07.22
09:31
После включения суммового учета по складам в БП, появились суммы с + и - по складам, что логично, в принципе. Сводно по номенклатуре = 0.
Задача свернуть. Обработка простая
&НаСервере
Процедура СверткаНаСервере()
    
    Проводки = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    Проводки.ОбменДанными.Загрузка = Истина;
    Проводки.Отбор.Регистратор.Установить(ДокОперация);
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ХозрасчетныйОстатки.Счет КАК Счет,
        |    ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
        |    ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
        |    ХозрасчетныйОстатки.Субконто3 КАК Субконто3,
        |    ХозрасчетныйОстатки.Организация КАК Организация,
        |    ХозрасчетныйОстатки.Подразделение КАК Подразделение,
        |    СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СуммаОстаток,
        |    СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток,
        |    СУММА(ХозрасчетныйОстатки.СуммаНУОстаток) КАК СуммаНУОстаток,
        |    СУММА(ХозрасчетныйОстатки.СуммаПРОстаток) КАК СуммаПРОстаток,
        |    СУММА(ХозрасчетныйОстатки.СуммаВРОстаток) КАК СуммаВРОстаток
        |ИЗ
        |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет В (&Счет10), , ) КАК ХозрасчетныйОстатки
        |
        |СГРУППИРОВАТЬ ПО
        |    ХозрасчетныйОстатки.Субконто1,
        |    ХозрасчетныйОстатки.Организация,
        |    ХозрасчетныйОстатки.Субконто2,
        |    ХозрасчетныйОстатки.Подразделение,
        |    ХозрасчетныйОстатки.Субконто3,
        |    ХозрасчетныйОстатки.Счет
        |ИТОГИ ПО
        |    Счет,
        |    Субконто1";
    
    Запрос.УстановитьПараметр("Период", НачалоДня(ДатаСвертки));
    
    МассивСчетов = Новый Массив;
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.СырьеИМатериалы);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ПокупныеПолуфабрикатыИКомплектующие);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.Топливо);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.Тара);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ЗапасныеЧасти);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеМатериалы);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.СтроительныеМатериалы);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежности);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.СпецоснасткаИСпецодеждаНаСкладе);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ПриобретениеМалоценногоОборудованияИЗапасов);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ВыбытиеМалоценногоОборудованияИЗапасов);
    Запрос.УстановитьПараметр("Счет10", МассивСчетов);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеСчет = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Счет");
    Пока ВыборкаДетальныеСчет.Следующий() Цикл
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ВыборкаДетальныеСчет.Счет);    
        ВыборкаДетальныеНоменклатура = ВыборкаДетальныеСчет.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Субконто1");
        Пока ВыборкаДетальныеНоменклатура.Следующий() Цикл
            Если (ВыборкаДетальныеНоменклатура.СуммаОстаток <> 0) ИЛИ (ВыборкаДетальныеНоменклатура.КоличествоОстаток <> 0) Тогда
                Продолжить;
            КонецЕсли;    
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ВыборкаДетальныеНоменклатура.Субконто1);    
            ВыборкаДетальные = ВыборкаДетальныеНоменклатура.Выбрать();
            Пока ВыборкаДетальные.Следующий() Цикл
                НоваяПроводка = Проводки.Добавить();      
                НоваяПроводка.Период = ДокОперация.Дата;
                НоваяПроводка.СчетКт = ПланыСчетов.Хозрасчетный.Вспомогательный;
                
                НоваяПроводка.СчетДт = ВыборкаДетальные.Счет;
                НоваяПроводка.Организация = ВыборкаДетальные.Организация;
                НоваяПроводка.ПодразделениеДт = ВыборкаДетальные.Подразделение;
                БухгалтерскийУчет.УстановитьСубконто(НоваяПроводка.СчетДт, НоваяПроводка.СубконтоДт, "Номенклатура", ВыборкаДетальные.Субконто1);
                БухгалтерскийУчет.УстановитьСубконто(НоваяПроводка.СчетДт, НоваяПроводка.СубконтоДт, "Склады", ВыборкаДетальные.Субконто2);  
                БухгалтерскийУчет.УстановитьСубконто(НоваяПроводка.СчетДт, НоваяПроводка.СубконтоДт, "Партии", ВыборкаДетальные.Субконто3);  
                НоваяПроводка.Сумма = - ВыборкаДетальные.СуммаОстаток;
                НоваяПроводка.СуммаВРДт = - ВыборкаДетальные.СуммаВРОстаток;
                НоваяПроводка.СуммаПРДт = - ВыборкаДетальные.СуммаПРОстаток;
                НоваяПроводка.СуммаНУДт = - ВыборкаДетальные.СуммаНУОстаток;
            КонецЦикла;    
        КонецЦикла;
    КонецЦикла;
    Проводки.Записать();
    
КонецПроцедуры




Но блин практически сразу ловлю аварийное завершение. В логи не пишется, ТиИ предварительно делал.
Как отловить ошибку?
1 mikecool
 
20.07.22
09:32
в отладчике пройдись по шагам
2 Галахад
 
гуру
20.07.22
09:35
Может памяти не хватает. Почему это не в запросе?  (ВыборкаДетальныеНоменклатура.СуммаОстаток <> 0) ИЛИ (ВыборкаДетальныеНоменклатура.КоличествоОстаток <> 0)
3 егаис
 
20.07.22
09:35
(1) все строки отрабатывают нормально, но на каком-то этапе крашится. Записей - сотни тысяч, думаю не доживу
4 егаис
 
20.07.22
09:35
(2) ищем где сводно по номенклатуре = 0
5 6awkup_true
 
20.07.22
09:36
переполнение стека может быть. вариант "Остановиться по ошибке" не предлагать? можно попробовать платформу другой версии
6 егаис
 
20.07.22
09:37
(5) пробовал тормозить по ошибке, не останавливается.
Тестировал по одному субсчету, такая же фигня, дело в не памяти, сервер нормальный
7 Lama12
 
20.07.22
09:37
Технологический журнал?
8 mikecool
 
20.07.22
09:38
памяти скорее всего не хватает, пиши пачками по 1000 проводок или сколько нить
9 егаис
 
20.07.22
09:39
(8) нет, ошибка проявляется достаточно быстро, видимо придется тыкать F11
10 егаис
 
20.07.22
09:40
Точнее по f5 по циклу бегать
11 6awkup_true
 
20.07.22
09:42
(10) напиши свой лог в хмл. на каждой итерации пишешь данные проводки в файл. файл записываешь, после записываешь проводку. на момент как 1С упадет у тебя в файле будут данные проводки, которая все положила
12 6awkup_true
 
20.07.22
09:44
(9) еще можешь попробовать выгрузить/загрузить базу. он сделает реструктуризацию таблиц БД и возможно все взлетит
13 mikecool
 
20.07.22
09:45
(12) еще очень много советов было, но жаль - куры все сдохли...
14 егаис
 
20.07.22
09:46
(11) да, точно, не догадался
15 6awkup_true
 
20.07.22
09:48
(13) таки сначала нужно попробовать провести стандартные действия, полагаю, а уже потом искать помощи. а тут кроме ТиИ ТС ничего не сделал. потому и советов будет 9К+)
16 егаис
 
20.07.22
11:17
проблема оказалась в платформе
(8.3.19.1351) в топку