//*****************************************************************************// Если БыстраяПечать=1, то печать производится в режиме быстрой продажи.Процедура ПечатьТОРГ_12(БыстраяПечать=0, псСДовер = 0) Если глРазрешитьНапечатать(Контекст, КонтекстФормыДокумента) = 0 Тогда Возврат; КонецЕсли; СтрСортировки = ""; Если (Модифицированность() = 1) И (глДокументСортируется(Контекст, СтрСортировки) = 1) Тогда Если глПользователь.ОтменитьВопросОСортировке = 1 Тогда глСортироватьНакладную(Контекст); Иначе Если Вопрос("Сортировать документ? "+СтрСортировки,"Да+Нет") = "Да" Тогда глСортироватьНакладную(Контекст); КонецЕсли; КонецЕсли; КонецЕсли; //Для простоты настройки печатной формы примем следующие соглашения: // - высота строк в таблице печатной формы задана жестко, // тогда известно, сколько строк помещается на странице; СтрокНаСтранице = 22; // - высота шапки и подвала задана жестко и кратна высоте строк таблицы, // тогда можно указать, сколько строк занимают шапка и подвал // в пересчете на строки таблицы; СтрокШапки = 14; СтрокПодвала = 8; // - для нормальной работы алгоритма необходимо, чтобы шапка и подвал // могли поместиться на одной странице + хотя бы одна строка таблицы: // СтрокНаСтранице >= СтрокШапки + СтрокПодвала + 1 // - если подвал не помещается на странице, он переносится на другую // страницу с последней строкой; исключение составляет случай, // когда в таблице всего одна строка. Если КоличествоСтрок() = 1 Тогда ПереноситьПоследнююСтроку = 0; Иначе ЦелыхСтраницСПодвалом = Цел((СтрокШапки+КоличествоСтрок()+СтрокПодвала)/СтрокНаСтранице); ЦелыхСтраницБезПодвала = Цел((СтрокШапки+КоличествоСтрок()-1)/СтрокНаСтранице); ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала; КонецЕсли; //Если ПереноситьПоследнююСтроку = 1 - переносить, //если ПереноситьПоследнююСтроку = 0 - не надо переносить. гВалютаПечати=Рубли; Фирма.ИспользоватьДату(ДатаДок); ПечПоставщик = ""; ПечПоставщикПа = ""; Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("ТОРГ-12"); Если УчитыватьНП=1 Тогда Секц="|НП"; Иначе Секц="|БезНП"; КонецЕсли; вДата = ДатаДок; печДатаДокДень = глДатаФормат(вДата,"ДД"); печДатаДокМесяц = глДатаФормат(вДата,"ММММ"); печДатаДокГод = глДатаФормат(вДата,"ГГ"); ОрганизацияАдрес = СокрЛП(Фирма.ПолнНаименование)+", ИНН "+СокрЛП(Фирма.ИНН)+", "+ глАдресСтрокой(Фирма.ЮридическийАдрес); Если (ПустоеЗначение(Фирма) = 0) И (ПустоеЗначение(Клиент) = 0) Тогда ПечПоставщик = СокрЛП(Фирма.ПолнНаименование)+", ИНН "+СокрЛП(Фирма.ИНН)+", "+глАдресСтрокой(Фирма.ЮридическийАдрес); ПечПоставщикПА = СокрЛП(Фирма.ПолнНаименование)+", ИНН "+СокрЛП(Фирма.ИНН)+", "+глАдресСтрокой(Фирма.ПочтовыйАдрес); Иначе Предупреждение("Не выбран клиент или фирма!"); Возврат; КонецЕсли; СчетФирмы = РасчетныйСчет; Если ПустоеЗначение(СчетФирмы) = 1 Тогда СчетФирмы = Фирма.СчетПоУмолчанию; КонецЕсли; Если ПустоеЗначение(СчетФирмы) = 0 Тогда Если ПустоеЗначение(СчетФирмы.БанкОрганизации) = 0 Тогда ОрганизацияАдрес = ОрганизацияАдрес + ", БИК " + СчетФирмы.БанкОрганизации.Код; ОрганизацияАдрес = ОрганизацияАдрес + ", счет № " + СокрП(СчетФирмы.Номер); ОрганизацияАдрес = ОрганизацияАдрес + ", в " + СокрП(СчетФирмы.БанкОрганизации.Наименование); КонецЕсли; КонецЕсли; ДопСтрокаОснование = ""; ДопСтрокаОснование = ДопСтрокаОснование + ?(ПустоеЗначение(ЧерезКого) = 1, "", " через: " + СокрЛП(ЧерезКого)); ДопСтрокаОснование = ДопСтрокаОснование + ?(ПустоеЗначение(НомерДоверенности) = 1, "", " доверенность №" + СокрЛП(НомерДоверенности) + " от " + ДатаДоверенности); ПечГрузополучатель = глГрузополучательПеч(Контекст,1); СекцияШапки = Таб.ПолучитьСекцию("Шапка"+Секц); СекцияШапки.Область("Грузополучатель").Текст = ПечГрузополучатель; Если ПустоеЗначение(ПлательщикСтрокой) = 0 Тогда СекцияШапки.Область("ПлательщикСтрокой").Текст = СокрЛП(ПлательщикСтрокой); КонецЕсли; Таб.ВывестиСекцию(СекцияШапки); //Таб.ВывестиСекцию("Шапка"+Секц); НомерСтраницы = 1; ИтогоКоличествоНаСтранице = 0; ИтогоСуммаНаСтранице = 0; ИтогоНДСНаСтранице = 0; ИтогоСуммаСНДСНаСтранице = 0; ИтогоНГСМНаСтранице = 0; ИтогоНПНаСтранице = 0; ИтогоКоличество = 0; ИтогоСумма = 0; ИтогоНДС = 0; ИтогоСуммаСНДС = 0; ИтогоНГСМ = 0; ИтогоНП = 0; ЭтоНоваяВерсияДокументаНДС = глЭтоНоваяВерсияДокументаСоСтавкойНДС(Контекст); ТаблЧ = СоздатьОбъект("ТаблицаЗначений");; Сворачивать = 0; Сворачивать = 1; ТаблЧ = глПодготовитьТаблицуДокументаТОРГ12(Контекст); Таб.ВывестиСекцию("ЗаголовокТаблицы"+Секц); Ном=0; Если Сворачивать = 1 Тогда ТаблЧ.ВыбратьСтроки(); Пока ТаблЧ.ПолучитьСтроку() = 1 Цикл Ном=Ном+1; //Начинаем новую страницу, если предыдущая строка была последней на странице //или пора переносить последнюю строку на последнюю страницу с подвалом. ЦелаяСтраница = (СтрокШапки+Ном-1)/СтрокНаСтранице; Если (ЦелаяСтраница = Цел(ЦелаяСтраница)) или ((ПереноситьПоследнююСтроку = 1) и (Ном = ТаблЧ.КоличествоСтрок())) Тогда Таб.ВывестиСекцию("ИтогоПоСтранице"+Секц); ИтогоКоличествоНаСтранице = 0; ИтогоСуммаНаСтранице = 0; ИтогоНДСНаСтранице = 0; ИтогоСуммаСНДСНаСтранице = 0; ИтогоНГСМНаСтранице = 0; ИтогоНПНаСтранице = 0; Таб.НоваяСтраница(); НомерСтраницы = НомерСтраницы + 1; Таб.ВывестиСекцию("ЗаголовокТаблицы"+Секц); КонецЕсли; прмТовар = ТаблЧ.Товар; прмЕдиница = ТаблЧ.Единица; прмКоличество = ТаблЧ.Количество; ПромНДС = ТаблЧ.ПромНДС; ПечЦена = глПересчет(ТаблЧ.Цена ,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечСумма = глПересчет(ТаблЧ.Сумма ,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечСуммаБезНДС = глПересчет(ТаблЧ.Сумма-ТаблЧ.ПромНДС ,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечНДС = глПересчет(ТаблЧ.ПромНДС ,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечНП = глПересчет(ТаблЧ.СуммаНП ,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечСтавкаНДС = "Х"; Если ПромНДС <> 0 Тогда Если ПустоеЗначение(ТаблЧ.СтавкаНДС) = 1 Тогда ПечСтавкаНДС=?(Розница=1,"Х",?(ВсегдаПечататьНДС = 0,ТаблЧ.Товар.СтавкаНДС.Получить(ДатаДок),Перечисление.ЗначенияНДС.НоваяСтавкаНДС)); Иначе ПечСтавкаНДС=?(Розница=1,"Х",ТаблЧ.СтавкаНДС); КонецЕсли; КонецЕсли; Таб.ВывестиСекцию("СтрокаТЗ"+Секц); ИтогоКоличествоНаСтранице = ИтогоКоличествоНаСтранице + прмКоличество; ИтогоСуммаНаСтранице = ИтогоСуммаНаСтранице + ПечСумма - ПечНДС; ИтогоНДСНаСтранице = ИтогоНДСНаСтранице + ПечНДС; ИтогоСуммаСНДСНаСтранице = ИтогоСуммаСНДСНаСтранице + ПечСумма; ИтогоНПНаСтранице = ИтогоНПНаСтранице + ПечНП; ИтогоКоличество = ИтогоКоличество + прмКоличество; ИтогоСумма = ИтогоСумма + ПечСумма - ПечНДС; ИтогоНДС = ИтогоНДС + ПечНДС; ИтогоСуммаСНДС = ИтогоСуммаСНДС + ПечСумма; ИтогоНП = ИтогоНП + ПечНП; КонецЦикла; Иначе ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл Ном=Ном+1; //Начинаем новую страницу, если предыдущая строка была последней на странице //или пора переносить последнюю строку на последнюю страницу с подвалом. ЦелаяСтраница = (СтрокШапки+Ном-1)/СтрокНаСтранице; Если (ЦелаяСтраница = Цел(ЦелаяСтраница)) или ((ПереноситьПоследнююСтроку = 1) и (Ном = КоличествоСтрок())) Тогда Таб.ВывестиСекцию("ИтогоПоСтранице"+Секц); ИтогоКоличествоНаСтранице = 0; ИтогоСуммаНаСтранице = 0; ИтогоНДСНаСтранице = 0; ИтогоСуммаСНДСНаСтранице = 0; ИтогоНГСМНаСтранице = 0; ИтогоНПНаСтранице = 0; Таб.НоваяСтраница(); НомерСтраницы = НомерСтраницы + 1; Таб.ВывестиСекцию("ЗаголовокТаблицы"+Секц); КонецЕсли; //ПромНДС = ?(ВсегдаПечататьНДС = 0, НДС, ?(ДатаДок<Дата("01.01.04"),Сумма * 20 / 120,Сумма * 18 / 118)); Если ЭтоНоваяВерсияДокументаНДС <> 1 Тогда ПромНДС = ?(ВсегдаПечататьНДС = 0, НДС, ?(ДатаДок<Дата("01.01.04"),Сумма * 20 / 120,Сумма * 18 / 118)); Иначе ПромНДС = НДС; КонецЕсли; ПечЦена = глПересчет(Цена - Окр(Цена*ПроцентСкидки/100,2) -ПромНДС/ ?(Количество=0,1,Количество) ,Валюта,Курс,гВалютаПечати,Дата_Курса); //ПечЦена = глПересчет(Цена-ПромНДС/Количество,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечСумма = глПересчет(Сумма,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечСуммаБезНДС = глПересчет(Сумма-ПромНДС,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечНДС = глПересчет(ПромНДС,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечНП = глПересчет(СуммаНП,Валюта,Курс,гВалютаПечати,Дата_Курса); ПечСтавкаНДС = "Х"; Если ПромНДС <> 0 Тогда Если ПустоеЗначение(СтавкаНДС) = 1 Тогда ПечСтавкаНДС=?(Розница=1,"Х",?(ВсегдаПечататьНДС = 0,Товар.СтавкаНДС.Получить(ДатаДок),Перечисление.ЗначенияНДС.НоваяСтавкаНДС)); Иначе ПечСтавкаНДС=?(Розница=1,"Х",СтавкаНДС); КонецЕсли; КонецЕсли; //ПечСтавкаНДС=?(Розница=1,"Х",?(ВсегдаПечататьНДС = 0,Товар.СтавкаНДС.Получить(ДатаДок),Перечисление.ЗначенияНДС.НоваяСтавкаНДС)); Таб.ВывестиСекцию("Строка"+Секц); ИтогоКоличествоНаСтранице = ИтогоКоличествоНаСтранице + ?(Количество=0,1,Количество); ИтогоСуммаНаСтранице = ИтогоСуммаНаСтранице + ПечСумма - ПечНДС; ИтогоНДСНаСтранице = ИтогоНДСНаСтранице + ПечНДС; ИтогоСуммаСНДСНаСтранице = ИтогоСуммаСНДСНаСтранице + ПечСумма; ИтогоНПНаСтранице = ИтогоНПНаСтранице + ПечНП; ИтогоКоличество = ИтогоКоличество + Количество; ИтогоСумма = ИтогоСумма + ПечСумма - ПечНДС; ИтогоНДС = ИтогоНДС + ПечНДС; ИтогоСуммаСНДС = ИтогоСуммаСНДС + ПечСумма; ИтогоНП = ИтогоНП + ПечНП; КонецЦикла; КонецЕсли; //Если ЭтоНоваяВерсияДокументаНДС = 0 Тогда // ПромИтогоНДС = ?(ВсегдаПечататьНДС = 0, Итог("НДС"), ПромИтогоНДС); //Иначе // ПромИтогоНДС = Итог("НДС"); //КонецЕсли; Таб.ВывестиСекцию("ИтогоПоСтранице"+Секц); Таб.ВывестиСекцию("Всего"+Секц); НаСумму="на сумму "+Формат(ИтогоСуммаСНДС+ИтогоНП,"ЧПДС"); ПодвальнаяСекция = Таб.ПолучитьСекцию("Подвал"+Секц); ПечЧерезКого = СокрЛП(""+Клиент.ПолнНаименование); ПечЧерезКого = ПечЧерезКого + ", " + СокрЛП(ДолжностьДоверенности) + " " + СокрЛП(ЧерезКого); ПодвальнаяСекция.Область("ЧерезКого").Текст = ПечЧерезКого; ПодвальнаяСекция.Область("ДатаДоверенности").Текст = ДатаДоверенности; ПодвальнаяСекция.Область("НомерДоверенности").Текст = НомерДоверенности; Если (ПустоеЗначение(ДоверенностьСотрудника) = 0) И (псСДовер = 1) Тогда вСотр = ДоверенностьСотрудника.владелец; Попытка вСотр = глФИО(вСотр); Исключение вСотр = ""; КонецПопытки; ПодвальнаяСекция.Область("ОтпускРазрешилФИО").Текст = ""+вСотр; ПодвальнаяСекция.Область("ДоверенностьСотрудника").Текст = ""+ДоверенностьСотрудника; Попытка ПодвальнаяСекция.Область("ОтпускРазрешилДолжность").Текст = ДоверенностьСотрудника.Владелец.Должность; Исключение КонецПопытки; КонецЕсли; Таб.ВывестиСекцию(ПодвальнаяСекция); Если БыстраяПечать=1 Тогда Таб.ПараметрыСтраницы(2,,,,,,,,,1,,); Таб.КоличествоЭкземпляров(Константа.ПечКолЭкзТорг12ПриБыстройПродаже); Таб.Напечатать(0); ИначеЕсли БыстраяПечать="Почта" Тогда глОтправитьПочтой(Таб,"ТОРГ_12"+НомерДок+"от"+Формат(ДатаДок,"ДГГГГММДД"),Клиент.ЭлПочта,,Контекст); Иначе Таб.Опции(0,0,0,0,"ОпцииПечатиНакладной","ОкноНакладной"); Таб.Защита(Константа.ФлагЗащитыТаблиц); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(2,,,0,0,0,0,,,1); Таб.Показать("Печать накладной",""); КонецЕсли; КонецПроцедуры //Печать Торг12
///////////////////////////////////////////////////////////////////////////////// setHeaderText()////////////////////////////////////////////////////////////////////////////////// Set the text for the header. Rich text is supported. HTML tags may be used/// to format the text and align elements. The following page variables may be/// included in the text:/// - \&page; - Insert current page number/// - \&date; - Insert current date, using the format set with setPageFormat()///////////////////////////////////////////////////////////////////////////////
C++ (Qt) QString headertext = "<table width=\"100%\">" " <tr>" " <td align=\"left\"><strong>%1</strong></td>" " <td align=\"right\"><strong>&date;</strong></td>" " </tr>" "</table>"; QString footertext = "<table width=\"100%\">" " <tr>" " <td align=\"left\"><strong>%1</strong></td>" " <td align=\"right\"><strong>&page; / &pages;</strong></td>" " </tr>" "</table>"; QString titleDoc = tr("Inventory doc #: %1").arg(m_numberDoc); m_textPrinter->setHeaderText(headertext.arg(titleDoc)); m_textPrinter->setFooterText(footertext.arg(titleDoc));