Помогите плиз!

Есть внешняя печатная форма ТОРГ-12 для документа "Отгрузка материалов на сторону".
При выведении на печать она разбивает 30 материалов на 3 листа.
В первом 10 товаров.
Во втором 1 товар.
В третьем всё остальное...

Собственно сильно напрягает ситуация со вторым листом vis.gif

Собственными мозгами разобраться не удалось :-(
Поиск юзал - ничего путного не нашёл cry_1.gif

Код
//*******************************************
Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
СтатусВозврата(0);


НомерДокПечатнойФормы = глПреобразоватьНомерДок(Докум.НомерДок, 0, 0);

//Для простоты настройки печатной формы примем следующие соглашения:
// - высота строк в таблице печатной формы задана жестко,
// тогда известно, сколько строк помещается на странице;
СтрокНаСтранице = 20;
// - высота шапки и подвала задана жестко и кратна высоте строк таблицы,
// тогда можно указать, сколько строк занимают шапка и подвал
// в пересчете на строки таблицы;
СтрокШапки = 10;
СтрокПодвала = 8;
// - для нормальной работы алгоритма необходимо, чтобы шапка и подвал
// могли поместиться на одной странице + хотя бы одна строка таблицы:
// СтрокНаСтранице >= СтрокШапки + СтрокПодвала + 1
// - если подвал не помещается на странице, он переносится на другую
// страницу с последней строкой; исключение составляет случай,
// когда в таблице всего одна строка.

//**********+ААВ+*********
//Если КоличествоСтрок() <= 4 Тогда
// ПереноситьПоследнююСтроку = 0;
//Иначе
// ЦелыхСтраницСПодвалом = Цел((СтрокШапки+КоличествоСтрок()+СтрокПодвала)/СтрокНаСтранице);
// ЦелыхСтраницБезПодвала = Цел((СтрокШапки+КоличествоСтрок()-1)/СтрокНаСтранице);
// ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала;
//КонецЕсли;

КолСтр=0;
Докум.ВыбратьСтроки();

Пока Докум.ПолучитьСтроку()=1 Цикл
Если ПустоеЗначение(Докум.Материал.Наименование)=1 Тогда
Дл=СтрДлина(Докум.Материал.Наименование);
Иначе
Дл=СтрДлина(Докум.Материал.Наименование);
КонецЕсли;
Зн=60;
Если Дл-Цел(Дл/Зн)*Зн>0 Тогда
Стр=Цел(Дл/Зн)+1;
Иначе
Стр=Цел(Дл/Зн);
КонецЕсли;
КолСтр=КолСтр+Стр;
КонецЦикла;
Если КолСтр <= 4 Тогда
ПереноситьПоследнююСтроку = 0;
Иначе
ЦелыхСтраницСПодвалом = Цел((СтрокШапки+КолСтр+СтрокПодвала)/СтрокНаСтранице);
ЦелыхСтраницБезПодвала = Цел((СтрокШапки+КолСтр-1)/СтрокНаСтранице);
ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала;
КонецЕсли;
//**********-ААВ-**********

//Если ПереноситьПоследнююСтроку = 1 - переносить,
//если ПереноситьПоследнююСтроку = 0 - не надо переносить.

Если Докум.Итог("НП") > 0 Тогда
ФлагНП = 1;
Иначе
ФлагНП = 0;
КонецЕсли;

Если Докум.Договор.ВалютаДоговора.Выбран() = 1 Тогда
ЦеныВДоговоре = 2;
Кратность = Докум.Договор.ВалютаДоговора.Кратность.Получить(Докум.ДатаДок);
Кратность = ?(Кратность = 0, 1, Кратность);
Если Докум.Договор.ВестиУчетРасчетовУЕ = 1 Тогда
Кратность = Кратность * 100 / (100 + Докум.Договор.ПроцентКорректировкиКурсаУЕ);
КонецЕсли;

Иначе
ЦеныВДоговоре = 1;
КонецЕсли;

Таб = СоздатьОбъект("Таблица");

Таб.ИсходнаяТаблица("ТОРГ-12");


// формирование адреса поставщика
ОрганизацияАдресП = СокрЛП(Константа.ОфициальноеНазваниеОрганизации);
глДобавитьРеквизит(ОрганизацияАдресП, ", ИНН/КПП ", СокрЛП(Константа.ИННОрганизации));
глДобавитьРеквизит(ОрганизацияАдресП, ", ", глПредставлениеАдреса(Константа.ПочтовыйАдресОрганизации));
глДобавитьРеквизит(ОрганизацияАдресП, ", тел. : ", Константа.ТелефоныОрганизации);
глДобавитьРеквизит(ОрганизацияАдресП, ", р/с ",Константа.ОсновнойБанковскийСчет.Номер + " в "+ Константа.ОсновнойБанковскийСчет.БанкОрганизации);
глДобавитьРеквизит(ОрганизацияАдресП, ", БИК ",Константа.ОсновнойБанковскийСчет.БанкОрганизации.Код);
глДобавитьРеквизит(ОрганизацияАдресП, ", корр/с ", Константа.ОсновнойБанковскийСчет.БанкОрганизации.КоррСчет);


// формирование адреса грузоотправителя
Если ПустоеЗначение(Докум.Контрагент) = 1 Тогда
Адрес = ОрганизацияАдресП;

Иначе
СчетКонтрагента = "";
СчетКонтрагента = глРасчетныйСчетКонтрагента(Докум.Контрагент);
ГрузоотправительАдрес = "ИНН/КПП"+СокрЛП(Докум.Контрагент.ИНН);
Если ПустоеЗначение(СчетКонтрагента) = 0 Тогда
глДобавитьРеквизит(ГрузоотправительАдрес, ", р/с ", СокрЛП(СчетКонтрагента.Номер) + " в " + СчетКонтрагента.БанкОрганизации);
глДобавитьРеквизит(ГрузоотправительАдрес, ", БИК ", СокрЛП(СчетКонтрагента.БанкОрганизации.Код));
глДобавитьРеквизит(ГрузоотправительАдрес, ", корр/с ", СчетКонтрагента.БанкОрганизации.КоррСчет);
КонецЕсли;
КонецЕсли;

ОрганизацияАдрес = СокрЛП(Константа.ОфициальноеНазваниеОрганизации);
глДобавитьРеквизит(ОрганизацияАдрес, ", ИНН/КПП ", СокрЛП(Константа.ИННОрганизации));
глДобавитьРеквизит(ОрганизацияАдрес, ", ", глПредставлениеАдреса(Константа.АдресОрганизации));
глДобавитьРеквизит(ОрганизацияАдрес, ", тел. : ", Константа.ТелефоныОрганизации);
глДобавитьРеквизит(ОрганизацияАдрес, ", р/с ",Константа.ОсновнойБанковскийСчет.Номер + " в "+ Константа.ОсновнойБанковскийСчет.БанкОрганизации);
глДобавитьРеквизит(ОрганизацияАдрес, ", БИК ",Константа.ОсновнойБанковскийСчет.БанкОрганизации.Код);
глДобавитьРеквизит(ОрганизацияАдрес, ", корр/с ", Константа.ОсновнойБанковскийСчет.БанкОрганизации.КоррСчет);

ПредставлениеГода = Лев(ДатаГод(Докум.ДатаДок),2);

// формирование адреса плательщика
СчетКонтрагента = "";
СчетКонтрагента = глРасчетныйСчетКонтрагента(Докум.Контрагент);
КонтрагентАдрес = СокрЛП(Докум.Контрагент.ПолнНаименование)+",ИНН/КПП "+СокрЛП(Докум.Контрагент.ИНН) +", "+СокрЛП(Докум.Контрагент.ПочтовыйАдрес)+", тел: "+СокрЛП(Докум.Контрагент.Телефоны);


Если ПустоеЗначение(СчетКонтрагента) = 0 Тогда
глДобавитьРеквизит(КонтрагентАдрес, ", р/с ", СокрЛП(СчетКонтрагента.Номер) + " в " + СчетКонтрагента.БанкОрганизации);
глДобавитьРеквизит(КонтрагентАдрес, ", БИК ", СокрЛП(СчетКонтрагента.БанкОрганизации.Код));
глДобавитьРеквизит(КонтрагентАдрес, ", корр/с ", СчетКонтрагента.БанкОрганизации.КоррСчет);
КонецЕсли;

// формирование адреса грузополучателя
Если ПустоеЗначение(Докум.Контрагент) = 1 Тогда
ГрузополучательАдрес = КонтрагентАдрес;

Иначе
СчетКонтрагента = "";
СчетКонтрагента = глРасчетныйСчетКонтрагента(Докум.Контрагент);
ГрузополучательАдрес = СокрЛП(Докум.Контрагент.ПолнНаименование)+", "+СокрЛП(Докум.Контрагент.ЮридическийАдрес)+", тел: "+СокрЛП(Докум.Контрагент.Телефоны);
Если ПустоеЗначение(СчетКонтрагента) = 0 Тогда
глДобавитьРеквизит(ГрузополучательАдрес, ", р/с ", СокрЛП(СчетКонтрагента.Номер) + " в " + СчетКонтрагента.БанкОрганизации);
глДобавитьРеквизит(ГрузополучательАдрес, ", БИК ", СокрЛП(СчетКонтрагента.БанкОрганизации.Код));
глДобавитьРеквизит(ГрузополучательАдрес, ", корр/с ", СчетКонтрагента.БанкОрганизации.КоррСчет);
КонецЕсли;
КонецЕсли;

Таб.ВывестиСекцию("Шапка|БезНГСМиНП");

НомерСтраницы = 1;
ИтогоКоличествоНаСтранице = 0;
ИтогоСуммаНаСтранице = 0;
ИтогоНДСНаСтранице = 0;
ИтогоСуммаСНДСНаСтранице = 0;
ИтогоНПНаСтранице = 0;
ИтогоСумма = 0;
ИтогоСуммаСНДС = 0;
ИтогоНДС = 0;
ИтогоНП = 0;
Таб.ВывестиСекцию("ЗаголовокТаблицы|БезНГСМиНП");
Если ФлагНП = 1 Тогда
Таб.ПрисоединитьСекцию("ЗаголовокТаблицы|НП");
КонецЕсли;
//**********+ААВ+*********
//Ном = 0;
//ВыбратьСтроки();
//Пока ПолучитьСтроку() = 1 Цикл
// Ном = Ном + 1;
// //Начинаем новую страницу, если предыдущая строка была последней на странице
// //или пора переносить последнюю строку на последнюю страницу с подвалом.

СтавкаНДС= Докум.ВариантРасчетаНалогов.СтавкаНДС;
КНС=0;
Ном = 0;
Докум.ВыбратьСтроки();
Пока Докум.ПолучитьСтроку() = 1 Цикл
Если ПустоеЗначение(Докум.Материал.Наименование)=1 Тогда
Дл=СтрДлина(Докум.Материал.Наименование);
Иначе
Дл=СтрДлина(Докум.Материал.Наименование);
КонецЕсли;
Зн=60;
Если Дл-Цел(Дл/Зн)*Зн>0 Тогда
Стр=Цел(Дл/Зн)+1;
Иначе
Стр=Цел(Дл/Зн);
КонецЕсли;
Ном = Ном + 1;
КНС=КНС+Стр;
//Начинаем новую страницу, если предыдущая строка была последней на странице
//или пора переносить последнюю строку на последнюю страницу с подвалом.
ЦелаяСтраница = (СтрокШапки+КНС-1)/СтрокНаСтранице;
Если (ЦелаяСтраница = Цел(ЦелаяСтраница)) или (ЦелаяСтраница = Цел(ЦелаяСтраница)+0.05)
или ((ПереноситьПоследнююСтроку = 1) и (КНС = КолСтр)) Тогда
//**********-ААВ-**********
Таб.ВывестиСекцию("ИтогоПоСтранице|БезНГСМиНП");
Если ФлагНП = 1 Тогда
Таб.ПрисоединитьСекцию("ИтогоПоСтранице|НП");
КонецЕсли;
ИтогоКоличествоНаСтранице = 0;
ИтогоСуммаНаСтранице = 0;
ИтогоНДСНаСтранице = 0;
ИтогоСуммаСНДСНаСтранице = 0;
ИтогоНПНаСтранице = 0;
Таб.НоваяСтраница();
НомерСтраницы = НомерСтраницы + 1;
Таб.ВывестиСекцию("ЗаголовокТаблицы|БезНГСМиНП");
Если ФлагНП = 1 Тогда
Таб.ПрисоединитьСекцию("ЗаголовокТаблицы|НП");
КонецЕсли;
КонецЕсли;
Кол = ?(Докум.КоличествоНадлежитОтпустить = 0, 1, Докум.КоличествоНадлежитОтпустить);
ЦенаНаПечать = Докум.Сумма / Докум.КоличествоНадлежитОтпустить;
СуммаНаПечать = Докум.Сумма;


Если ЦеныВДоговоре = 2 Тогда
СуммаНаПечать = СуммаНаПечать*Докум.Курс/Кратность;
ЦенаНаПечать = ЦенаНаПечать*Докум.Курс/Кратность;
НДСНаПечать = Докум.НДС*Докум.Курс/Кратность;
НПНаПечать = Докум.НП*Докум.Курс/Кратность;
Иначе
НДСНаПечать = Докум.НДС;
НПНаПечать = Докум.НП;
КонецЕсли;
Таб.ВывестиСекцию("Строка|БезНГСМиНП");
Если ФлагНП = 1 Тогда
Таб.ПрисоединитьСекцию("Строка|НП");
КонецЕсли;
//**********+ААВ+*********
ВыбОбл=Таб.Область(Таб.ВысотаТаблицы(),1);
ВыбОбл.ВысотаСтроки(Стр*22);
//**********-ААВ-**********

ИтогоКоличествоНаСтранице = ИтогоКоличествоНаСтранице + Докум.КоличествоНадлежитОтпустить;
ИтогоСуммаНаСтранице = ИтогоСуммаНаСтранице + СуммаНаПечать;
ИтогоСумма = ИтогоСумма + СуммаНаПечать;
ИтогоНДС = ИтогоНДС + НДСНаПечать;
ИтогоНП = ИтогоНП + НПНаПечать;
ИтогоНДСНаСтранице = ИтогоНДСНаСтранице + НДСНаПечать;
ИтогоСуммаСНДСНаСтранице = ИтогоСуммаСНДСНаСтранице + СуммаНаПечать + НДСНаПечать;
ИтогоСуммаСНДС = ИтогоСуммаСНДС + СуммаНаПечать + НДСНаПечать;
ИтогоНПНаСтранице = ИтогоНПНаСтранице + НПНаПечать;
КонецЦикла;

Таб.ВывестиСекцию("ИтогоПоСтранице|БезНГСМиНП");
Если ФлагНП = 1 Тогда
Таб.ПрисоединитьСекцию("ИтогоПоСтранице|НП");
КонецЕсли;
Таб.ВывестиСекцию("Всего|БезНГСМиНП");
Если ФлагНП = 1 Тогда
Таб.ПрисоединитьСекцию("Всего|НП");
КонецЕсли;
Таб.ВывестиСекцию("Подвал|БезНГСМиНП");
Таб.Опции(0,0,0,0,"ОпцииПечатиНакладной","ОкноНакладной");
Таб.ПараметрыСтраницы(2,,,,,0,0,,,1);
Таб.ТолькоПросмотр(1);
Таб.Показать("Печать накладной","");

КонецПроцедуры

//******************************************************************************
// ПоКнопкеПечать()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Описание:
//
Процедура ПоКнопкеПечать()

Если Док.Выбран() = 0 Тогда
Предупреждение("Не выбран документ!", 60);
Возврат;
КонецЕсли;

Печать(Док);

КонецПроцедуры // ПоКнопкеПечать()


//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии()

Если ПустоеЗначение(Форма.Параметр) = 0 Тогда

Докум = Форма.Параметр.Получить("Контекст");
Устройство = Форма.Параметр.Получить("Устройство");
КолвоКопий = Форма.Параметр.Получить("КоличествоКопий");

Печать(Докум, Устройство, КолвоКопий);
Статусвозврата(0);
Возврат;
КонецЕсли;


КонецПроцедуры // ПриОткрытии()