Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0
Добрый день. Уважаемые форумчане, прошу помощи в технической реализации такой вот проблемы. Есть документ "Прием на работу", табличная часть которого имеет следующую структуру (см. рисунок 1)
напротив каждой фамилии содержится название должности. В печатном документе необходимо реализовать группировку фамилий по должностям. Интересующая часть макета должна иметь вид (см. рисунок 2):
Для вывода данных документа создал следующий запрос:
в котором "СписокФізичнихОсіб" как раз и есть название интересующей табличной части документа.
у меня получается вывести только в следующем виде:
,что не совсем красиво.
Подскажите, как перестроить запрос или сформировать код вывода, чтобы документ приобрел нормальный вид. Подозреваю, что решение лежит где-то совсем на поверхности (или другая структура запроса, или сам код вывода), но я самоучка, поэтому многого еще не знаю. Если для ответа нужен код модуля менеджера, то его часть, в которой проблема здесь:
ВставлятьРазделительСтраниц = Ложь; Пока Выборка.Следующий() Цикл Если ВставлятьРазделительСтраниц Тогда ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли;
По теме. В запросе нужно обращаться к табличной части. Т.е. ВЫБРАТЬ ... ИЗ Документ.ПрийомНаРоботу.СписокФізичнихОсіб, добавить секцию ИТОГИ ПО НазваПосадиВЗнахідномуВідмінку и выборку сделать 2-х уровневую:
Выборка0 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка0.Следующий() Цикл //... // тут будет доступно поле НазваПосадиВЗнахідномуВідмінку //...
Выборка1 = Выборка0.Выбрать(); Пока Выборка1.Следующий() Цикл //... // тут доступно остальное //... КонецЦикла;
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(Vofka @ 23.05.16, 9:18)
и выборку сделать 2-х уровневую
Можно подробнее??? не совсем понятно, что отбирать в первом, а что во втором уровнях и как их собрать в Запрос?
Насколько я понял задача решается тремя запросами: 1. Запрос отвечает за формирование основнйо части документа (если таковая имеется) 2. Запрос формирует список уникальных в пределах табличной части наименований должности 3. отбирает фамилии в рамках предыдущего запроса?
ТАк?
И еще один вопрос. Как в запросе, который обращается к табличной части документа указать ссылку на текущий документ в качестве параметра. А то у меня полчается выборка данных всех табличных частей всех документов данного типа.
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0
Спасибо. Попробовал последовать Вашему совету. Вот что получилось:
В модуле у меня вышло два запроса: 1. Первый запрос отвечает за выборку данных для "шапки приказа". Там все просто и работает, если смотреть в отдельности.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПрийомНаРоботу.Дата, | ПрийомНаРоботу.Номер, | ПрийомНаРоботу.Період.НазваПеріодуУРодовомуВідмінку КАК Період |ИЗ | Документ.ПрийомНаРоботу КАК ПрийомНаРоботу |ГДЕ | ПрийомНаРоботу.Ссылка В(&Ссылка)"; Запрос.Параметры.Вставить("Ссылка", Ссылка); Выборка = Запрос.Выполнить().Выбрать();
2. Второй запрос выбирает и группирует данные табличной части. (это мое понимание Вашего совета):
Запрос0 = Новый Запрос; Запрос0.Текст = "ВЫБРАТЬ | ПрийомНаРоботуСписокФізичнихОсіб.ПосадаПоДокументах.НазваПосадиВЗнахідномуВідмінку КАК НазваПосадиВЗнахідномуВідмінку, | ПрийомНаРоботуСписокФізичнихОсіб.ФізичнаОсоба.Наименование КАК ФізичнаОсобаНаименование |ИЗ | Документ.ПрийомНаРоботу.СписокФізичнихОсіб КАК ПрийомНаРоботуСписокФізичнихОсіб | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПрийомНаРоботу КАК ПрийомНаРоботу | ПО ПрийомНаРоботуСписокФізичнихОсіб.Ссылка = ПрийомНаРоботу.Ссылка |ГДЕ | ПрийомНаРоботу.Ссылка = &Ссылка | И ПрийомНаРоботуСписокФізичнихОсіб.Бухгалтерія = &Бухгалтерія | |СГРУППИРОВАТЬ ПО | ПрийомНаРоботуСписокФізичнихОсіб.ПосадаПоДокументах.НазваПосадиВЗнахідномуВідмінку, | ПрийомНаРоботуСписокФізичнихОсіб.ФізичнаОсоба.Наименование | |УПОРЯДОЧИТЬ ПО | НазваПосадиВЗнахідномуВідмінку, | ФізичнаОсобаНаименование"; Запрос0.параметры.Вставить("Ссылка", Ссылка); Запрос0.Параметры.Вставить("Бухгалтерія", Истина);
(Пробовал было объединить оба запроса в один или перестроить второй запрос без левого соединения, но выдается сообщение, говорящее об ошибке при вызове метода контекста. Группировка по таблицам верхнего уровня и вложенным таблицам .)
Если просматриваю результат работы второго запроса во внешней обработке - дает необходимые данные, но когда пытаюсь вшить в код модуля и запустить его, опять выводится сообщение об ошибке метода контекста. Неправильные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. как я понимаю, проблема в восприятии строки
ПрийомНаРоботу.Ссылка = &Ссылка
А этот параметр необходим, т.к. позволяет работать только с табличной частью открытого документа.
Кроме того конструктор запросов настоятельно добавляет в группировку еще и фамилии.
СГРУППИРОВАТЬ ПО | ПрийомНаРоботуСписокФізичнихОсіб.ПосадаПоДокументах.НазваПосадиВЗнахідномуВідмінку, | ПрийомНаРоботуСписокФізичнихОсіб.ФізичнаОсоба.Наименование
"ВЫБРАТЬ | ПосадаПоДокументах.НазваПосадиВЗнахідномуВідмінку КАК НазваПосадиВЗнахідномуВідмінку, | ФізичнаОсоба.Наименование КАК ФізичнаОсобаНаименование |ИЗ | Документ.ПрийомНаРоботу.СписокФізичнихОсіб КАК Док
|ГДЕ Док.Ссылка = &Ссылка И Док.Бухгалтерія
|СГРУППИРОВАТЬ ПО | ПосадаПоДокументах.НазваПосадиВЗнахідномуВідмінку, | ФізичнаОсоба.Наименование | |УПОРЯДОЧИТЬ ПО | НазваПосадиВЗнахідномуВідмінку, | ФізичнаОсобаНаименование";
ВставлятьРазделительСтраниц = Ложь; Пока Выборка.Следующий() Цикл Если ВставлятьРазделительСтраниц Тогда ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли;
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!