Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 07:48

ЗУП внешняя печатная к документу "Зарплата к выплате организации"

Автор kuza_87, 10 мая 2012, 12:35

0 Пользователей и 1 гость просматривают эту тему.

kuza_87

День добрый. Написал внешнюю обработку - печатная форма для документа зарплата к выплате.вот код:


Функция ПечатьРеестр() Экспорт
   Запрос=Новый Запрос;

         Запрос.Текст = "ВЫБРАТЬ
      |   ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо КАК Физлицо,
      |   ЗарплатаКВыплатеОрганизацийЗарплата.Сумма КАК Сумма,
      |   ЕСТЬNULL(РаботникиОрганизацийСрезПоследних.Сотрудник.ПодразделениеОрганизации, ДоговорНаВыполнениеРаботСФизЛицом.ПодразделениеОрганизации) КАК СотрудникПодразделениеОрганизации,
      |   РаботникиОрганизацийСрезПоследних.Период КАК Период,
      |   ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка.Номер КАК Номер,
      |   ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка.Дата КАК Дата
      |ИЗ
      |   Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата
      |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период, ) КАК РаботникиОрганизацийСрезПоследних
      |      ПО ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо = РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо
      |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом
      |      ПО ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо = ДоговорНаВыполнениеРаботСФизЛицом.ФизЛицо
      |ГДЕ
      |   ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка = &Ссылка
      |
      |УПОРЯДОЧИТЬ ПО
      |ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо.Наименование,
      |Период УБЫВ
      |ИТОГИ ПО
      |   Физлицо,
      |   Сумма";
            
   Запрос.Параметры.Вставить("Период",СсылкаНаОбъект.Дата);
   Запрос.Параметры.Вставить("Ссылка",СсылкаНаОбъект.Ссылка);  //ЗНАЧЕНИЕ(Документ.ЗарплатаКВыплатеОрганизаций.ПустаяСсылка)
   РезультатЗапроса=Запрос.Выполнить();
   Выборка=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);//ПоГруппировкам/Прямой
   //ТЗ=РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);//ПоГруппировкам/Прямой
   //ТЗ.ВыбратьСтроку();
   
   
   //формирование табличного документа с печатной формой
   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.ПолеСлева = 0;
   ТабДокумент.ПолеСправа = 0;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗарплатаКВыплатеОрганизаций_Реестр";
   
   Макет = ПолучитьМакет("Реестр");
   
   ОбластьМакетаЗаголовок      = Макет.ПолучитьОбласть("Заголовок");
   ОбластьМакетаШапка         = Макет.ПолучитьОбласть("Шапка");
   ОбластьМакетаСтрока         = Макет.ПолучитьОбласть("Строка");
   ОбластьМакетаПодвал       = Макет.ПолучитьОбласть("Подвал");
   
   ТабДокумент.Вывести(ОбластьМакетаЗаголовок);
   ОбластьМакетаШапка.Параметры.Номер = СсылкаНаОбъект.Номер;
   ОбластьМакетаШапка.Параметры.Дата = СсылкаНаОбъект.Дата;
   ОбластьМакетаШапка.Параметры.КакВыплачено = СсылкаНаОбъект.СпособВыплаты;
   ТабДокумент.Вывести(ОбластьМакетаШапка);

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

КонецФункции
Функция Печать () Экспорт
   Возврат   ПечатьРеестр();
   
КонецФункции


там в принципе всё просто, простенький макет для реестра. Расчётчики попросили меня сделать группировку по службам. Я сказал что это не возможно, т.к. в ЗИК-е у сотрудника был реквизит "служба", а в ЗУП-е его нет. В большинстве случаев службой в нашей организации является родитель подразделения из справочника, но иногда служба - это 2, 3 а иногда и 4-й родитель. Поэтому я захотел просто сделать группировку по подразделениям. Но у меня это не получилось, т.к. при выполнении запроса у людей данные берутся из регистра сведений, и если были перемещения, то появляется несколько одинаковых строк (см. вложение под названием "Запрос").
Чтобы в печатной форме они не отображались я написал в коде следующее:

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

Когда я делай в запросе группировку по подразделениям - люди дублируются.
Вопрос. Как можно сделать так чтобы они не дублировались

kuza_87

Я сккрин прикрепил

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск