Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывод заголовка в печатной форме  (Прочитано 2683 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kuza_87
Новенький

ru
Offline Offline

« : 25-05-2012 07:14 » 

Привет, товарищи! Делал внешнюю печатную форму к документу "Зарплата к выплате". Там всё простенько выводиться список сотрудников с сортировкой по подразделениям. Мне нужно сделать так, чтобы выводлся заголовок с подразделением человека, если подразделение не равно предыдущему. Вот сам запрос:

Код: (1C v8)
Запрос=Новый Запрос;

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

Запрос.Параметры.Вставить("Период",СсылкаНаОбъект.Дата);
Запрос.Параметры.Вставить("Ссылка",СсылкаНаОбъект.Ссылка); //ЗНАЧЕНИЕ(Документ.ЗарплатаКВыплатеОрганизаций.ПустаяСсылка)
РезультатЗапроса=Запрос.Выполнить();
Выборка=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией );//ПоГруппировкам/Прямой
ТЗ=РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);//ПоГруппировкам/Прямой
//Заполняем в таблицу значений только 1-ю строку чтобы люди не двоились
Для Каждого Стр1 из ТЗ.Строки Цикл
ЗаполнитьЗначенияСвойств(Стр1, Стр1.Строки [0])
КонецЦикла;
ТЗ.Строки.Сортировать("СотрудникПодразделениеОрганизации");
ТЗ.ВыбратьСтроку();

А вот сам код который заполняет строки:

Код: (1C v8)
//заполняем строки      
ТекущееПодразделение = Неопределено;
Для Каждого Сотрудник из ТЗ.Строки Цикл
ЗаполнитьЗначенияСвойств(Стр1, Стр1.Строки [0]);
ОбластьМакетаСтрока.Параметры.Заполнить(Сотрудник);
ОбластьМакетаПодразделение.Параметры.Заполнить(Сотрудник);
ТекущееПодразделение = ОбластьМакетаПодразделение.Параметры.Подразделение;
Если Сотрудник.Подразделение<>ТекущееПодразделение тогда
ТабДокумент.Вывести(ОбластьМакетаПодразделение);
КонецЕсли


Помогите разобраться что я написал не так, буду очень признателен.
« Последнее редактирование: 25-05-2012 08:24 от RXL » Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 28-05-2012 14:38 » 

Самая главная ошибка в алгоритме - ты в цикле сначал присваиваешь значение, а потом сравниваешь его же - значит всегда получаешь ИСТИНА.
Вместо:
Код: (1C v8)
ТекущееПодразделение = ОбластьМакетаПодразделение.Параметры.Подразделение;
Если Сотрудник.Подразделение<>ТекущееПодразделение тогда
ТабДокумент.Вывести(ОбластьМакетаПодразделение);
КонецЕсли
Должно быть:
Код: (1C v8)
Если ТекущееПодразделение <> Сотрудник.Подразделение Тогда
        ТекущееПодразделение = Сотрудник.Подразделение;
        ТабДокумент.Вывести(ОбластьМакетаПодразделение);
КонецЕсли;
Также сортировка в запросе должна быть сначала по подразделению, а лишь затем - по сотруднику. А то получишь слишком много строк с одинаковыми подразделениями вразброс по документу.
Кроме того "ИТОГИ ПО" и Выборка с обходом по группировкам (особенно с иерархией) из результатов запроса не нужны (в рамках поставленной задачи) - достаточно обход Прямой.
Да и достаточно или выборки (РезультатЗапроса.Выбрать()) или ТЗ (РезультатЗапроса.Выгрузить()) - одно из них лишнее. Я бы предпочел выборку.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines