Столкнулся с проблемой зависания 1С 7.7 Торговля и Склад 9.2 при печати счета-фактуры 1137. При отладке печати обнаружил одну особенность в функции ПодготовитьМнЧосн : если товара не хватает в первой партии, то происходит зацикливание в блоке:
Пока (ОстКолво > 0)
и (ТаблицаГТД.НайтиЗначение(ТаблицаОснования.Номенклатура, НомСтр, «Номенклатура») <> 0)
Цикл
ТаблицаГТД.ПолучитьСтрокуПоНомеру(НомСтр);
РаспредГТД.НоваяСтрока();
РаспредГТД.Колво = Мин(ОстКолво, ?(ТаблицаОснования.Коэффициент <> 0, ТаблицаГТД.Количество / ТаблицаОснования.Коэффициент, ТаблицаГТД.Количество));
РаспредГТД.Номер = ТаблицаГТД.ГТД;
РаспредГТД.Страна = ТаблицаГТД.СтранаПроисхождения;
ТаблицаГТД.Количество = ТаблицаГТД.Количество — РаспредГТД.Колво * ?(ТаблицаОснования.Коэффициент = 0, 1, ТаблицаОснования.Коэффициент);
Если ТаблицаГТД.Количество // если по ГТД все списали, то удаляем строку
ТаблицаГТД.УдалитьСтроку();
КонецЕсли;
ОстКолво = ОстКолво — РаспредГТД.Колво;
НомСтр = 0;
КонецЦикла;
Причем проблема была в том, что не выполнялось условие при значении 0 и происходило зацикливание:
Если ТаблицаГТД.Количество
// если по ГТД все списали, то удаляем строку
ТаблицаГТД.УдалитьСтроку();
КонецЕсли;
Проблема оказалась в том, что при создании колонок таблицы значений РаспредГТД колонка Колво создавалась без указания типа:
РаспредГТД = СоздатьОбъект(«ТаблицаЗначений»);
РаспредГТД.НоваяКолонка(«Колво»);
РаспредГТД.НоваяКолонка(«Страна»);
РаспредГТД.НоваяКолонка(«Номер»);
А в стандартной процедуре печати счета-фактуры эта колонка создается с указанием типа Число: РаспредГТД.НоваяКолонка(«Колво», «Число», 14, 3)
После исправления зацикливание было устранено.
Надеюсь кому-нибудь пригодится.