7.7 Торг-12.

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем Scooby, 28 янв 2009.

  1. TopicStarter Overlay
    Scooby
    Offline

    Scooby

    Регистрация:
    15 ноя 2007
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Помогите плиз!

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

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

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

    Код:
    //*******************************************
    Процедура Печать(Докум, Устройство=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);
    Возврат;
    КонецЕсли;
    
    
    КонецПроцедуры // ПриОткрытии()
    
    
Похожие темы
  1. Skazi
    Ответов:
    2
    Просмотров:
    704
Загрузка...

Поделиться этой страницей