//****************************************************************************** // Изменена печать: вместо одного столбца расчетные листки печатаются в два столбца // Для исходной таблицы РасчЛ2 (т.е. Пар1=1) и начисления, и удержания выводятся в один столбец // то есть заполняются значения только СуммаНач СуммаКС1 а СуммаУд и СуммаКС2 нулевые // может потребоваться настроить ЧислоКолонок СтолбцовВКолонке ИсходнаяТаблица МаксСтрок // исходный релиз Конфигурация Зарплата (7.70.211) // Описание функции ПечататьРЛ из глобального модуля: // Пар=1 - группировка сотрудников по фамилиям, 0 - по кодам // Пар1=1 - используется общая таблица РасчЛ2, 0 - РасчЛ1 // ДатаАктуальности - любая дата внутри месяца, за которые печатаются расчетные листки Функция ПечататьРЛ(Пар,Пар1,ДатаАктуальности) Экспорт ЖрнЗарплата = СоздатьОбъект("ЖурналРасчетов.Зарплата"); //ДатаАктуальности = ЖрнЗарплата.КонецТекущегоПериода(); ДатаАктуальности=КонМесяца(ДатаАктуальности); НП=НачМесяца(ДатаАктуальности); КП=КонМесяца(ДатаАктуальности); СпрНЛ = СоздатьОбъект("Справочник.НалоговыеЛьготы"); ТЗН= "//{{ЗАПРОС(Печатать) |Период с {ДатаАктуальности} по {ДатаАктуальности}; |Сотр = ЖурналРасчетов.Зарплата.Объект; |ВР = ЖурналРасчетов.Зарплата.ВидРасч; |Дн = ЖурналРасчетов.Зарплата.Дни; |Чс = ЖурналРасчетов.Зарплата.Часы; |Рез = ЖурналРасчетов.Зарплата.Результат; |Подр = ЖурналРасчетов.Зарплата.Объект.Подразделение; |Док = ЖурналРасчетов.Зарплата.ТекущийДокумент; |Условие(Рез<>0); |Условие((ВР.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1) Или (ВР.ВходитВГруппу(ГруппаРасчетов.ВсеУдержания)=1));"; Если СотрРЛ.Выбран()=1 Тогда ТЗН = ТЗН+" |Условие(Сотр=СотрРЛ);"; Иначе Если РасчРЛ.Выбран()=1 Тогда ТЗН=ТЗН+" |Условие(Сотр.Родитель=РасчРЛ);"; КонецЕсли; Если ПодрРЛ.Выбран()=1 Тогда ТЗН = ТЗН+" |Условие(ПринадлПодмножеству(Подр,ПодрРЛ)=1);"; КонецЕсли; КонецЕсли; Если Пар=1 Тогда ТЗН = ТЗН+" |Группировка Сотр Упорядочить По Сотр.Наименование без групп;"; Иначе ТЗН = ТЗН+" |Группировка Сотр Упорядочить По Сотр.Код без групп;"; КонецЕсли; ТЗН=ТЗН+" //|Группировка ВР Упорядочить По ВР.Очередность; |Функция Начисл = Сумма(Рез) Когда( (ВР.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1) И (ВР<>ВидРасчета.НачальноеСальдо)); |Функция Суммы = Сумма(Рез) Когда ((ВР<>ВидРасчета.НачальноеСальдо) И (ВР<>ВидРасчета.ВыплатаЗарплаты) И (ВР<>ВидРасчета.ВыплатаПенсии) И (ВР<>ВидРасчета.ДолгНачалоМесяца)); |Функция СальдоНач = Сумма(Рез) Когда(( ВР=ВидРасчета.НачальноеСальдо) ИЛИ (ВР=ВидРасчета.НевыплаченнаяСумма)); |Функция Удерж = Сумма(Рез) Когда( (ВР.ВходитВГруппу(ГруппаРасчетов.ВсеУдержания)=1) И ( ВР<>ВидРасчета.ВыплатаЗарплаты) И ( ВР<>ВидРасчета.ВыплатаПенсии) И ( ВР<>ВидРасчета.ДолгНачалоМесяца)); |Функция Долг = Сумма(Рез) Когда( ВР=ВидРасчета.ДолгНачалоМесяца); |Функция Зарпл = Сумма(Рез) Когда( ВР=ВидРасчета.ВыплатаЗарплаты); |Функция Пенсия = Сумма(Рез) Когда( ВР=ВидРасчета.ВыплатаПенсии); |Функция НакопПенс = Сумма(Рез) Когда( ВР=ВидРасчета.УдержаниеИНПС); |Функция ПодНалог = Сумма(Рез) Когда( ВР=ВидРасчета.ПодоходныйНалог); |Функция Дни = Сумма(Дн) Когда( ВР.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1); |Функция Часы = Сумма(Чс) Когда( ВР.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1); |"; ЗапросН=СоздатьОбъект("Запрос"); Если (ЗапросН.Выполнить(ТЗН)=0) Тогда Возврат 0; КонецЕсли; СпрПарам = СоздатьОбъект("Справочник.ПараметрыОтчетов"); СпрПарам.НайтиПоКоду(1); // номер строки Таб=СоздатьОбъект("Таблица"); //!!!!!!!!!!!!!!!!!!!!!!!!!!! Если Пар1=1 Тогда Таб.ИсходнаяТаблица("РасчЛ2"); СтолбцовВКолонке=7;//Вот здесь нужно настроить-число используемых столбцов в исходныой таблице РасчЛ2 ЧислоКолонок=3 Иначе Таб.ИсходнаяТаблица("РасчЛ1"); СтолбцовВКолонке=10;//Вот здесь нужно настроить-число используемых столбцов в исходныой таблице РасчЛ1 ЧислоКолонок=2 КонецЕсли; НС=0; МаксСтрок=100; //максимальное число строк таблицы на печатной странице ЗанятоСтрок0=0;//сколько строк всего занято целыми страницами в формируемой ТабП без последней неполной страницы Пр=0;//0-печатается левая колонка, 1-вторая, 2-третья ТабП=СоздатьОбъект("Таблица"); //формируемая таблица печати вместо Таб ///////////////////////////// Пока ЗапросН.Группировка("Сотр")=1 Цикл Сотр=ЗапросН.Сотр; //Сообщить(""+НС+" > "+СпрПарам.Страница); Если НС>СпрПарам.Страница-СпрПарам.Раздел1Загл-СпрПарам.Раздел1Подв-5 Тогда Таб.НоваяСтраница(); НС=0; КонецЕсли; НС=НС+СпрПарам.Раздел1Загл; Если ЗапросН.Долг<>0 Тогда НСальдоН="Долг за работником"; СуммаНС1=0; СуммаНС2=ЗапросН.Долг; Иначе НСальдоН="Долг за предприятием "; СуммаНС1=ЗапросН.СальдоНач; СуммаНС2=0; КонецЕсли; СпрНЛ.ИспользоватьВладельца(Сотр); СпрНЛ.ВыбратьЭлементы(); Пока СпрНЛ.ПолучитьЭлемент()=1 Цикл Если (СпрНЛ.ДатаНачала < КП) и ((СпрНЛ.ДатаОкончания > НП) или (СпрНЛ.ДатаОкончания = Дата(" . . "))) Тогда Если СпрНл.ТипЛьготы.СпособРасчета=Перечисление.ТипНалоговойЛьготы.МинЗарплатВмесяц Тогда Льгот = "" + СпрНЛ.ТипЛьготы.Величина+" миним.з/п в месяц;"; КонецЕсли; Если СпрНл.ТипЛьготы.СпособРасчета=Перечисление.ТипНалоговойЛьготы.НеБолееОпредПроцента Тогда Льгот = Льгот + ""+"не более "+ СпрНЛ.ТипЛьготы.Величина+" процентов"; КонецЕсли; КонецЕсли; КонецЦикла; Если ПустаяСтрока(Льгот)=1 Тогда Льгот=" нет"; КонецЕсли; НаРукиЗП=0; НаРукиПС=0; ВсегоН=0; ВсегоУ=0; НачНачГода=0; НалогНачГода=0; МпНачГода=0; РКНачГода=0; ВЛНачГода=0; Таб.ВывестиСекцию("Шапка"); НС=НС+СпрПарам.Раздел1Загл; ВсегоН=ЗапросН.Начисл; ВсегоУ=ЗапросН.Удерж; ЖрнЗарплата.ВыбратьПериодПоОбъекту(ЗапросН.Сотр,ДатаАктуальности); Пока ЖрнЗарплата.ПолучитьЗапись()>0 Цикл Если ЖрнЗарплата.Результат=0 Тогда Продолжить; КонецЕсли; Если ((ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1) И (ЖрнЗарплата.ВидРасч<>ВидРасчета.НачальноеСальдо)) или ((ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеУдержания)=1) И ( ЖрнЗарплата.ВидРасч<>ВидРасчета.ВыплатаЗарплаты) И ( ЖрнЗарплата.ВидРасч<>ВидРасчета.ВыплатаПенсии) И (ЖрнЗарплата.ВидРасч<>ВидРасчета.ДолгНачалоМесяца)) Тогда Иначе Продолжить; КонецЕсли; СуммаНач=0; СуммаУд=0; Если ЖрнЗарплата.ВидРасч<>ВидРасчета.ВыплатыПрочие Тогда ВРНач=ЖрнЗарплата.ВидРасч.Наименование; Иначе Если ЖрнЗарплата.Документ.Вид()="ПлатежнаяВедомость1" Тогда ВРНач="Выплата "+ЖрнЗарплата.Документ.Расчет.Наименование; ИначеЕсли ЖрнЗарплата.Документ.Вид()="ПриказПоОтпускуРУз" Тогда ВРНач="Выплата отпускных"; Иначе ВРНач=ЖрнЗарплата.ВидРасч.Наименование; КонецЕсли; КонецЕсли; Если ЖрнЗарплата.ВидРасч=ВидРасчета.ПодоходныйНалог Тогда НалогТекМесяц=НалогТекМесяц+ЖрнЗарплата.Результат; КонецЕсли; Если ЖрнЗарплата.ВидРасч=ВидРасчета.УдержаниеИНПС Тогда НалогТекМесяц=НалогТекМесяц+ЖрнЗарплата.Результат; КонецЕсли; //!!!!!!!!!!!!!!!!!!!!!!! Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1 Тогда СуммаНач=ЖрнЗарплата.Результат; //ВсегоН=ВсегоН+ЖрнЗарплата.Результат; КонецЕсли; Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеУдержания)=1 Тогда Если Пар1=1 Тогда СуммаНач=-ЖрнЗарплата.Результат; Иначе СуммаУд=ЖрнЗарплата.Результат; КонецЕсли; //ВсегоУ=ВсегоУ+ЖрнЗарплата.Результат; КонецЕсли; Дни=ЖрнЗарплата.Дни; Часы=ЖрнЗарплата.Часы; НМес=?(ДатаМесяц(ДатаАктуальности)<>ДатаМесяц(ЖрнЗарплата.ДатаОкончания),ДатаМесяц(ЖрнЗарплата.ДатаОкончания),""); Таб.ВывестиСекцию("ВР"); НС=НС+СпрПарам.Раздел1Загл; КонецЦикла; ДатаХ=НачГода(ДатаАктуальности); Пока ДатаХ<КонМесяца(ДатаАктуальности) Цикл ЖрнЗарплата.ВыбратьПериодПоОбъекту(ЗапросН.Сотр,ДатаХ); Пока ЖрнЗарплата.ПолучитьЗапись()>0 Цикл Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ОблагаетсяПН)=1 Тогда НачНачГода=НачНачГода+ЖрнЗарплата.Результат; КонецЕсли; Если ЖрнЗарплата.ВидРасч=ВидРасчета.ПодоходныйНалог Тогда НалогНачГода=НалогНачГода+ЖрнЗарплата.Результат; КонецЕсли; Если ЖрнЗарплата.ВидРасч=ВидРасчета.УдержаниеИНПС Тогда НалогНачГода=НалогНачГода+ЖрнЗарплата.Результат; КонецЕсли; Если ЖрнЗарплата.ВидРасч.ВходитВГруппу(ГруппаРасчетов.МатПомощь)=1 Тогда МПНачГода=МПНачГода+ЖрнЗарплата.Результат; КонецЕсли; Если ЖрнЗарплата.ВидРасч=ВидРасчета.РайонныйКоэффициент Тогда РКНачГода=РКНачГода+ЖрнЗарплата.Результат; КонецЕсли; Если ЖрнЗарплата.ВидРасч=ВидРасчета.ДоплатаЗаВыслугЛет Тогда ВЛНачГода=ВЛНачГода+ЖрнЗарплата.Результат; КонецЕсли; КонецЦикла; ДатаХ=ДобавитьМесяц(ДатаХ,1); НС=НС+СпрПарам.Раздел1Загл; КонецЦикла; НаРукиЗП=ЗапросН.Зарпл; НаРукиПС=ЗапросН.Пенсия; ИтогоМ=ВсегоН-ВсегоУ-НаРукиЗП-НаРукиПС; Если ИтогоМ<0 Тогда Если Пар1=1 Тогда НСальдоК="Долг за работником"; СуммаКС1=0; СуммаКС2=(ИтогоМ*(-1)); Иначе НСальдоК="Долг за работником"; СуммаКС1=ИтогоМ; СуммаКС2=0; КонецЕсли; Иначе НСальдоК="Долг за предприятием "; СуммаКС1=ИтогоМ; СуммаКС2=0; КонецЕсли; Если НаРукиПС<>0 Тогда НаимПенс="пенсия"; Иначе НаимПенс=""; КонецЕсли; Таб.ВывестиСекцию("Низ"); НС=НС+СпрПарам.Раздел1Загл; Если Константа.ИспользоватьРК=Перечисление.ДаНет.Да Тогда Таб.ВывестиСекцию("РК"); НС=НС+СпрПарам.Раздел1Загл; КонецЕсли; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Если Пар1=1 Тогда Если Таб.ВысотаТаблицы()<1 Тогда Продолжить;КонецЕсли; Если Пр=0 Тогда //печатаем левую колонку ЗанятоСтрок=ТабП.ВысотаТаблицы(); ЛевоеПоле=0; Иначе ЛевоеПоле=СтолбцовВКолонке*Пр; КонецЕсли; Если ЗанятоСтрок=0 Тогда //!!!!!!!!!!!!!!! Для иколон=1 По ЧислоКолонок Цикл Для истолб=1 По СтолбцовВКолонке Цикл ТабП.Область(1,истолб+СтолбцовВКолонке*(иколон-1),1,истолб+СтолбцовВКолонке*(иколон-1)).ШиринаСтолбца( Таб.Область(1,истолб,1,истолб).ШиринаСтолбца()); КонецЦикла; КонецЦикла; КонецЕсли; ////////////////// Для истр=1 По Таб.ВысотаТаблицы() Цикл Для истолб=1 По СтолбцовВКолонке Цикл РежимРасшифровки = ?(ПустоеЗначение(Таб.Область(истр,истолб,истр,истолб).Расшифровка()) = 1, 2, 0); ГоризонтальноеПоложение = 2; ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).Текст= Таб.Область(истр,истолб,истр,истолб).Текст; ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).Расшифровка (Таб.Область(истр,истолб,истр,истолб).Расшифровка(), РежимРасшифровки); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).Шрифт (Таб.Область(истр,истолб,истр,истолб).Шрифт()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).РазмерШрифта (Таб.Область(истр,истолб,истр,истолб).РазмерШрифта()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).Полужирный (Таб.Область(истр,истолб,истр,истолб).Полужирный()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).Курсив (Таб.Область(истр,истолб,истр,истолб).Курсив()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).Подчеркнутый (0); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).ВертикальноеПоложение (3); // ВертикальноеПоложение()=0 ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).ГоризонтальноеПоложение (ГоризонтальноеПоложение); // ГоризонтальноеПоложение()=0 ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).Контроль (Таб.Область(истр,истолб,истр,истолб).Контроль()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).РамкаСверху (Таб.Область(истр,истолб,истр,истолб).РамкаСверху()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).РамкаСнизу (Таб.Область(истр,истолб,истр,истолб).РамкаСнизу()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).РамкаСлева (Таб.Область(истр,истолб,истр,истолб).РамкаСлева()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).РамкаСправа (Таб.Область(истр,истолб,истр,истолб).РамкаСправа()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).ЦветФона (Таб.Область(истр,истолб,истр,истолб).ЦветФона()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).ЦветРамки (Таб.Область(истр,истолб,истр,истолб).ЦветРамки()); ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).ЦветТекста (Таб.Область(истр,истолб,истр,истолб).ЦветТекста()); КонецЦикла; КонецЦикла; //ТабП.Область(истр+ЗанятоСтрок,истолб+ЛевоеПоле,истр+ЗанятоСтрок,истолб+ЛевоеПоле).Объединить(); //не знаю, обязательно ли это Таб.Очистить(); Если Пр+1<=ЧислоКолонок Тогда Если Пр+1<ЧислоКолонок Тогда Пр=Пр+1; Иначе Пр=0; Если ТабП.ВысотаТаблицы()-ЗанятоСтрок0>МаксСтрок Тогда ТабП.НоваяСтраница(ЗанятоСтрок); ЗанятоСтрок0=ЗанятоСтрок; КонецЕсли; ЗанятоСтрок=ТабП.ВысотаТаблицы(); КонецЕсли; КонецЕсли; ////////////////////////////////////// КонецЕсли; КонецЦикла; //ЗапросН.Группировка("Сотр")=1 //Сообщить(""+ДатаАктуальности); Если Пар1=1 Тогда ТабП.ПараметрыСтраницы(1,60,0,0,0,0,0,0,0,0); ТабП.Показать("Расчетные листки",); Возврат 1; Иначе Таб.ПараметрыСтраницы(1,60,0,0,0,0,0,0,0,0); Таб.Показать("Расчетные листки",); Возврат 1; КонецЕсли; КонецФункции Проверена: Laziz M. Ismailov http://rusfaq.ru/?Step=info&Action=User&ID=10130