helpf.pro
Регистрация

?: печати двух документов на одном листе А4 ландшафт

asdfr1
02.12.2015 09:56Прочитано: 5294

Добрый день! Нужна идея реализации печати двух документов на одном листе А4 ландшафт.

Получаю ссылки на два документа, далее запросом или выборкой заполняю макет, понятно что параметры будут разные.Собственно как разделить данные в цикле.

Код 1C v 8.х
   Строчка = ЭтаФорма.ЭлементыФормы.ДокументыМетрологии.ВыделенныеСтроки;
          КолВоСтрок = ЭтаФорма.ЭлементыФормы.ДокументыМетрологии.ВыделенныеСтроки.Количество();
          
          Если ЧетноеЧисло(КолВоСтрок)= Ложь Тогда
              Предупреждение("Колличество выделенных строк должно быть чётным", 5);
          Возврат
      КонецЕсли;
      
      Если Не КолВоСтрок = 2 ИЛИ КолВоСтрок > 2 Тогда     // чтобы только два
          Возврат
          КонецЕсли;
          
    Для Каждого Стр из Строчка Цикл // данные для двух документов
        //Сообщить(Стр.Номер);
        СсылкаСвидетельствоОПоверке = Стр.ПолучитьОбъект();
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
02.12.2015 20:05Ответ № 1

1. На работе просто в параметрах принтера поставил 2 страницы на листе и все отлично выводит

2. вот идея алгоритма:

Код 1C v 8.х
 	Макет = ВнешнийОтчетОбъект.ПолучитьМакет("Отчет");
Запрос = Новый Запрос;
ТекстЗ = 
"ВЫБРАТЬ
| РеестрНДФЛ.Подразделение КАК Подразделение,
| РеестрНДФЛ.ФизЛицо КАК ФизЛицо,
| ГОД(РеестрНДФЛ.Период) КАК ГодВ,
| МЕСЯЦ(РеестрНДФЛ.Период) КАК МесяцВ,
| РеестрНДФЛ.СтатьиЗатрат КАК СтатьиЗатрат,
| РеестрНДФЛ.Регистратор,
| ВЫБОР
| КОГДА РеестрНДФЛ.ВидДвижения =ВидДвиж
| ТОГДА "" -""
| ИНАЧЕ РеестрНДФЛ.Документ
| КОНЕЦ КАК РеестрНачисленияНДФЛ,
| ВЫБОР
| КОГДА РеестрНДФЛ.ВидДвижения =ВидДвиж
| ТОГДА РеестрНДФЛ.СуммаНДФЛ
| ИНАЧЕ -1 * РеестрНДФЛ.СуммаНДФЛ
| КОНЕЦ КАК НДФЛ,
| ВЫБОР
| КОГДА (НЕ РеестрНДФЛ.ВидДвижения =ВидДвиж)
| ТОГДА РеестрНДФЛ.ВалютнаяСумма
| ИНАЧЕ 0
| КОНЕЦ КАК УдержаноВВалюте,
| РеестрНДФЛ.Период КАК ДатаДокум,
| РеестрНДФЛ.РублевоеПокрытие КАК РублевоеПокрытие
|ИЗ
| РегистрНакопления.РеестрНДФЛ КАК РеестрНДФЛ
|ГДЕ
| РеестрНДФЛ.СуммаНДФЛ <> 0
| И РеестрНДФЛ.Период МЕЖДУПериодН ИПериодК";
Если НЕ ФизЛицо.Пустая() Тогда
ТекстЗ = ТекстЗ + " И РеестрНДФЛ.ФизЛицо =ФизЛицо";
КонецЕсли;
Если НЕ Подразделение.Пустая() Тогда
ТекстЗ = ТекстЗ + " И РеестрНДФЛ.Подразделение В ИЕРАРХИИ(&Подразделение)";
КонецЕсли;
ТекстЗ = ТекстЗ + "
|УПОРЯДОЧИТЬ ПО
| Подразделение,
| ФизЛицо,
| ГодВ,
| МесяцВ,
| СтатьиЗатрат,
| ДатаДокум
|ИТОГИ
| СУММА(НДФЛ),
| СУММА(УдержаноВВалюте),
| СУММА(РублевоеПокрытие)
|ПО
| Подразделение,
| ФизЛицо,
| ГодВ,
| МесяцВ,
| СтатьиЗатрат
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.Текст = ТекстЗ;
Запрос.УстановитьПараметр("ВидДвиж", ВидДвиженияНакопления.Приход);
Запрос.УстановитьПараметр("ПериодК", ПериодК);
Запрос.УстановитьПараметр("ПериодН", ПериодН);
Запрос.УстановитьПараметр("ФизЛицо", ФизЛицо);
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Результат = Запрос.Выполнить();
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьПодразделение = Макет.ПолучитьОбласть("Подразделение");
ОбластьФизЛицо = Макет.ПолучитьОбласть("ФизЛицо");
ОбластьМесяц = Макет.ПолучитьОбласть("Месяц");
ОбластьСтатьиЗатрат = Макет.ПолучитьОбласть("СтатьиЗатрат");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ОбластьКонИтог = Макет.ПолучитьОбласть("КонИтог");
ОбластьСчет20 = Макет.ПолучитьОбласть("Счет20");
ОбластьСчет68 = Макет.ПолучитьОбласть("Счет68");
ОбластьСчет = Макет.ПолучитьОбласть("Счет");
ИТОГБАЗА = 0;
ИТОГНДФЛНач = 0;
ИТОГНДФЛУд = 0;
ИТОГНДФЛУдР = 0;
ИТОГНДФЛУдВ = 0;
    ТабДок.Очистить();
ВыборкаПодразделение = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//Создадим ТЗ для расчета документов
ТЗдок = Новый ТаблицаЗначений;
ТЗдок.Колонки.Добавить("Реестр");
ТЗдок.Колонки.Добавить("База");
ТЗдок.Колонки.Добавить("НДФЛ");
ТЗдок.Колонки.Добавить("Удержание");
ТЗдок.Колонки.Добавить("Рубли");
ТЗдок.Колонки.Добавить("Валюта");  
Пока ВыборкаПодразделение.Следующий() Цикл
ОбластьПодразделение.Параметры.Заполнить(ВыборкаПодразделение);
ТабДок.Вывести(ОбластьПодразделение, ВыборкаПодразделение.Уровень());

ВыборкаФизЛицо = ВыборкаПодразделение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаФизЛицо.Следующий() Цикл
ОбластьФизЛицо.Параметры.Заполнить(ВыборкаФизЛицо);
ТабДок.Вывести(ОбластьФизЛицо, ВыборкаФизЛицо.Уровень());
//Год
ВыборкаГод = ВыборкаФизЛицо.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаГод.Следующий() Цикл

//месяц
ВыборкаМесяц = ВыборкаГод.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ФизЛицоОтб = ВыборкаФизЛицо.ФизЛицо;
Пока ВыборкаМесяц.Следующий() Цикл
//Обнулим итоги по месяцу
БазаИТ=0;
НДФЛИТ=0;
РублиИТ=0;
ВалютаИТ=0;
ЗапКурс=0; 
ОбластьМесяц.Параметры.Месяц = МесяцПрописью(ВыборкаМесяц.МесяцВ)+" "+Формат(ВыборкаГод.ГодВ,"ЧГ=0")+" г.";
//получим курс
ДатаОтч=Дата(Формат(ВыборкаГод.ГодВ,"ЧГ=0"),ВыборкаМесяц.МесяцВ,1);
ДатаUSD=КонецМесяца(ДатаОтч-86400);
ВалютДол =Справочники.Валюты.НайтиПоНаименованию("USD");
Запись = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаUSD, Новый Структура("Валюта", ВалютДол));
ЗапКурс   = Запись.Курс / Запись.Кратность; 
ОбластьМесяц.Параметры.Курс = ЗапКурс;
ТабДок.Вывести(ОбластьМесяц, ВыборкаМесяц.Уровень());
ВыборкаСтатьиЗатрат = ВыборкаМесяц.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаСтатьиЗатрат.Следующий() Цикл
ОбластьСтатьиЗатрат.Параметры.Заполнить(ВыборкаСтатьиЗатрат);
ТабДок.Вывести(ОбластьСтатьиЗатрат, ВыборкаСтатьиЗатрат.Уровень());

ВыборкаДетали = ВыборкаСтатьиЗатрат.Выбрать();
//Вывод документов
ТЗдок.Очистить();
Р=0;
У=0;
Пока ВыборкаДетали.Следующий() Цикл
//Определим дату 
ВыбДата=ВыборкаДетали.ДатаДокум;

//Так было до 141010 - НО НЕПРАВИЛЬНО ОТОБРАЖАЛИСЬ ВОЗВРАТЫ
//Если ВыборкаДетали.НДФЛ > 0 Тогда //это реестр
Если Лев(ВыборкаДетали.Регистратор.Метаданные().Имя,6) = "Реестр" Тогда //это реестр
Попытка
новстр = ТЗдок.Получить(Р);
Исключение
новстр = ТЗдок.Добавить();
КонецПопытки;
//новстр = ТЗдок.Вставить(Р);
новстр.Реестр = ВыборкаДетали.Регистратор; 
новстр.База = ВыборкаДетали.РублевоеПокрытие;
новстр.НДФЛ = ВыборкаДетали.НДФЛ;
Р=Р+1;
Иначе // это удержание
Попытка
новстр = ТЗдок.Получить(У);
Исключение
новстр = ТЗдок.Добавить();
КонецПопытки;
новстр.Удержание = ВыборкаДетали.Регистратор;
Если ВыборкаДетали.УдержаноВВалюте > 0 тогда
новстр.Рубли = 0;
Иначе
новстр.Рубли = ВыборкаДетали.НДФЛ *(-1);
КонецЕсли;
новстр.Валюта = ВыборкаДетали.УдержаноВВалюте;
У=У+1;
КонецЕсли;
//ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
//ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;
//Теперь выведем документы
Для Каждого стр из ТЗдок Цикл
ОбластьДетальныхЗаписей.Параметры.Реестр = СтрЗаменить(Лев(стр.Реестр,СтрДлина(стр.Реестр)-8), "00000","");
ОбластьДетальныхЗаписей.Параметры.База = стр.База;
ОбластьДетальныхЗаписей.Параметры.НДФЛ = стр.НДФЛ;
ОбластьДетальныхЗаписей.Параметры.Удержание = СтрЗаменить(Лев(стр.Удержание,СтрДлина(стр.Удержание)-8), "00000","");
ОбластьДетальныхЗаписей.Параметры.Рубли = стр.Рубли;
ОбластьДетальныхЗаписей.Параметры.Валюта = стр.Валюта;
ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЦикла;
//Вывели, теперь итог посчитаем
БазаИТ = БазаИТ + ТЗдок.Итог("База");
НДФЛИТ = НДФЛИТ + ТЗдок.Итог("НДФЛ");
РублиИТ = РублиИТ + ТЗдок.Итог("Рубли");
ВалютаИТ = ВалютаИТ + ТЗдок.Итог("Валюта");
КонецЦикла;  
ОбластьПодвалТаблицы.Параметры.БазаИТ = БазаИТ;
ОбластьПодвалТаблицы.Параметры.НДФЛИТ = НДФЛИТ;
ОбластьПодвалТаблицы.Параметры.РублиИТ = РублиИТ;
ОбластьПодвалТаблицы.Параметры.ВалютаИТ = ВалютаИТ;
ИТОГБАЗА = ИТОГБАЗА + БазаИТ;
ИТОГНДФЛНач = ИТОГНДФЛНач + НДФЛИТ;
ИТОГНДФЛУд = ИТОГНДФЛУд + РублиИТ+(ВалютаИТ*ЗапКурс);
                    ИТОГНДФЛУдР = ИТОГНДФЛУдР + РублиИТ; ИТОГНДФЛУдВ = ИТОГНДФЛУдВ + ВалютаИТ;   

Фильтр = Новый Структура;
Фильтр.Вставить("ФизЛицо",ФизЛицоОтб);
НаНачалоМес=0;
НаКонецМес=0;

Попытка
НаНачалоМес=РегистрыНакопления.РеестрНДФЛ.Остатки(НачалоМесяца(ВыбДата),Фильтр,"ФизЛицо","СуммаНДФЛ").Получить(0).СуммаНДФЛ;
Исключение
НаНачалоМес=0;
КонецПопытки;
Попытка
НаКонецМес=РегистрыНакопления.РеестрНДФЛ.Остатки(КонецМесяца(ВыбДата),Фильтр,"ФизЛицо","СуммаНДФЛ").Получить(0).СуммаНДФЛ;
Исключение
НаКонецМес=0;
КонецПопытки;
ОбластьПодвалТаблицы.Параметры.НаНачало = ?(НаНачалоМес>=0," Долг за работником на начало месяца:   "+Формат(НаНачалоМес,"ЧДЦ=2"), " Долг за организацией на начало месяца:   "+Формат(НаНачалоМес,"ЧДЦ=2"));
ОбластьПодвалТаблицы.Параметры.НаКонец = ?(НаКонецМес>=0," Долг за работником на конец месяца:   "+Формат(НаКонецМес,"ЧДЦ=2"), " Долг за организацией на конец месяца:   "+Формат(НаКонецМес,"ЧДЦ=2"));
ТабДок.Вывести(ОбластьПодвалТаблицы);

КонецЦикла;//Месяц      
КонецЦикла;//Год
КонецЦикла;
КонецЦикла;


НачПериода = ПериодН;
Пока НачалоМесяца(НачПериода)<=НачалоМесяца(ПериодК) Цикл
СтруктураПечати = Новый Структура;
СтруктураПечати.Вставить("DatN",НачалоМесяца(НачПериода));
СтруктураПечати.Вставить("DatK",?(НачалоМесяца(НачПериода)=НачалоМесяца(ПериодК),КонецДня(ПериодК),КонецМесяца(НачПериода)));
СтруктураПечати.Вставить("ОбластьМесяц",Макет.ПолучитьОбласть("Месяц"));
СтруктураПечати.Вставить("ОбластьПодвал",Макет.ПолучитьОбласть("Подвал"));
СтруктураПечати.Вставить("ОбластьСчет",Макет.ПолучитьОбласть("Счет"));
СтруктураПечати.Вставить("ОбластьСчет20",Макет.ПолучитьОбласть("Счет20"));
СтруктураПечати.Вставить("ОбластьСчет68",Макет.ПолучитьОбласть("Счет68"));
Печать7303(СтруктураПечати,ТабДок,ИТОГБАЗА,ИТОГНДФЛНач,ИТОГНДФЛУд,ИТОГНДФЛУдР);
НачПериода = КонецМесяца(НачПериода)+1;
КонецЦикла;                                                                        

ОбластьКонИтог.Параметры.ИТОГБАЗА = ИТОГБАЗА;
ОбластьКонИтог.Параметры.ИТОГНДФЛНач = ИТОГНДФЛНач;
ОбластьКонИтог.Параметры.ИТОГНДФЛУд = ИТОГНДФЛУд;
ОбластьКонИтог.Параметры.ИТОГНДФЛУдР= ИТОГНДФЛУдР;
ОбластьКонИтог.Параметры.ИТОГНДФЛУдВ = ИТОГНДФЛУдВ;
ТабДок.Вывести(ОбластьКонИтог); 
ТабДок.АвтоМасштаб=Истина;

В результате лист поделен на две части в который выводятся данные из ТЗ

Слева:

ТЗдок.Колонки.Добавить("Реестр");

ТЗдок.Колонки.Добавить("База");

ТЗдок.Колонки.Добавить("НДФЛ");

Справа:

ТЗдок.Колонки.Добавить("Удержание");

ТЗдок.Колонки.Добавить("Рубли");

ТЗдок.Колонки.Добавить("Валюта");  

asdfr1
07.12.2015 16:10Ответ № 2

Спасибо!

Подсказка: Вы можете добавить любую страничку в Избранное щелкнув по значку
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.