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