Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
24 Июл 2017, 11:50
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Построение макета документа с группировкой  (Прочитано 922 раз)

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

Оффлайн Koriolan

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-05-22
  • Сайт: 
  • Профессия: Разработчик 1С
Добрый день.
Уважаемые форумчане, прошу помощи в технической реализации такой вот проблемы. Есть документ "Прием на работу", табличная часть которого имеет следующую структуру (см. рисунок 1)

напротив каждой фамилии содержится название должности.
В печатном документе необходимо реализовать группировку фамилий по должностям. Интересующая часть макета должна иметь вид (см. рисунок 2):

Для вывода данных документа создал следующий запрос:
Макет = Документы.ПрийомНаРоботу.ПолучитьМакет("Друкувати");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПрийомНаРоботу.Дата,
    |    ПрийомНаРоботу.Номер,
    |    ПрийомНаРоботу.Період.НазваПеріодуУРодовомуВідмінку КАК Період,
    |    ПрийомНаРоботу.СписокФізичнихОсіб.(
    |        ФізичнаОсоба.ПрізвищеРодовийВідмінок,
    |        ФізичнаОсоба.ІмяРодовийВідмінок,
    |        ФізичнаОсоба.ПоБатьковіРодовийВідмінок,
    |        ПосадаПоДокументах.НазваПосадиВЗнахідномуВідмінку КАК Посада,
    |        НомерСтроки
    |    )
    |ИЗ
    |    Документ.ПрийомНаРоботу КАК ПрийомНаРоботу
    |ГДЕ
    |    ПрийомНаРоботу.Ссылка В(&Ссылка)
    |    И ПрийомНаРоботу.СписокФізичнихОсіб.Бухгалтерія = &Бухгалтерія";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Запрос.Параметры.Вставить("Бухгалтерія", Истина);
    Выборка = Запрос.Выполнить().Выбрать();

в котором "СписокФізичнихОсіб" как раз и есть название интересующей табличной части документа.

у меня получается вывести только в следующем виде:


,что не совсем красиво.

Подскажите, как перестроить запрос или сформировать код вывода, чтобы документ приобрел нормальный вид. Подозреваю, что решение лежит где-то совсем на поверхности (или другая структура запроса, или сам код вывода), но я самоучка, поэтому многого еще не знаю. Если для ответа нужен код модуля менеджера, то его часть, в которой проблема здесь:
Процедура Друкувати(ТабДок, Ссылка) Экспорт
   
 //{{_КОНСТРУКТОР_ПЕЧАТИ(Друкувати)
    Макет = Документы.ПрийомНаРоботу.ПолучитьМакет("Друкувати");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПрийомНаРоботу.Дата,
    |    ПрийомНаРоботу.Номер,
    |    ПрийомНаРоботу.Період.НазваПеріодуУРодовомуВідмінку КАК Період,
    |    ПрийомНаРоботу.СписокФізичнихОсіб.(
    |        ФізичнаОсоба.ПрізвищеРодовийВідмінок,
    |        ФізичнаОсоба.ІмяРодовийВідмінок,
    |        ФізичнаОсоба.ПоБатьковіРодовийВідмінок,
    |        ПосадаПоДокументах.НазваПосадиВЗнахідномуВідмінку КАК Посада
    |    )
    |ИЗ
    |    Документ.ПрийомНаРоботу КАК ПрийомНаРоботу
    |ГДЕ
    |    ПрийомНаРоботу.Ссылка В(&Ссылка)
    |    И ПрийомНаРоботу.СписокФізичнихОсіб.Бухгалтерія = &Бухгалтерія";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Запрос.Параметры.Вставить("Бухгалтерія", Истина);
    Выборка = Запрос.Выполнить().Выбрать();
   
    Заголовок = Макет.ПолучитьОбласть("Заголовок");
    ШапкаНаказу = Макет.ПолучитьОбласть("ШапкаНаказу");
    ПунктНаказу = Макет.ПолучитьОбласть("ПунктНаказу");
    Підпункт = Макет.ПолучитьОбласть("Підпункт");
    Підвал = Макет.ПолучитьОбласть("Підвал");
   
    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;

        //Заголовок   
        ТабДок.Вывести(Заголовок);
       
        //ШапкаНаказу
        ШапкаНаказу.Параметры.ДатаНаказу = Формат(Выборка.Дата,"ДЛФ=DD");
        ШапкаНаказу.Параметры.НомерНаказу = Выборка.Номер;
        ШапкаНаказу.Параметры.ПеріодВРодовомуВідмінку = Выборка.Період;
        ШапкаНаказу.Параметры.ДатаНаказуРік = Формат(Выборка.Дата,"ДФ=yyyy");
       
        ТабДок.Вывести(ШапкаНаказу, Выборка.Уровень());
       
        //ПунктНаказу
        ВыборкаСписокФізичнихОсіб = Выборка.СписокФізичнихОсіб.Выбрать();
       
        Пока ВыборкаСписокФізичнихОсіб.Следующий() Цикл
           
            ПунктНаказу.Параметры.НазваПосадиВЗнахідномуВідмінку = НРег(ВыборкаСписокФізичнихОсіб.Посада);
            // Сода нужно вывести список фамилий
            ТабДок.Вывести(ПунктНаказу, ВыборкаСписокФізичнихОсіб.Уровень());
           
        КонецЦикла;
       
       

        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
КонецПроцедуры


Заранее благодарен за ответ.


Оффлайн Kironten

  • *****
  • Сообщений: 809
  • РЕПУТАЦИЯ: 171
  • КПД: 21%
  • Регистрация: 2013-08-12
  • Сайт: 
  • Профессия: Ученик 1С
В двух словах: Надо делать группировку в запросе по полю "Посада" и делать обход по группировкам:
ВыборкаГруппировка = Запрос.Выполнить.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаГруппировка.Следующий() Цикл
// тут вывод пунктов 1. 2. и т.д
ВыборкаДетальныеЗаписи = ВыборкаГруппировка.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// тут вывод пунктов 1.1, 1.2, 1.3, 2.1, 2.2 и т.д
КонецЦикла
КонецЦикла

Оффлайн Koriolan

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-05-22
  • Сайт: 
  • Профессия: Разработчик 1С
В двух словах: Надо делать группировку в запросе по полю "Посада" и делать обход по группировкам:

Спасибо. Попробовал последовать Вашему совету. Вот что получилось:

В модуле у меня вышло два запроса:
1. Первый запрос отвечает за выборку данных для "шапки приказа". Там все просто и работает, если смотреть в отдельности.

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

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


Если просматриваю результат работы второго запроса во внешней обработке - дает необходимые данные, но когда пытаюсь вшить в код модуля и запустить его опять выводится сообщение об ошибке метода контекста. Неправильные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов.
как я понимаю, проблема в восприятии строки
ПрийомНаРоботу.Ссылка = &Ссылка
Кроме того конструктор запросов настоятельно добавляет в группировку еще и фамилии.
СГРУППИРОВАТЬ ПО
| ПрийомНаРоботуСписокФізичнихОсіб.ПосадаПоДокументах.НазваПосадиВЗнахідномуВідмінку,
| ПрийомНаРоботуСписокФізичнихОсіб.ФізичнаОсоба.Наименование
А этот параметр необходим, т.к. позволяет работать только с табличной частью открытого документа.
Короче, засада у меня с текстом запроса.

Последний раз редактировалось: Koriolan; 24 Май 2016, 20:26

Оффлайн Kironten

  • *****
  • Сообщений: 809
  • РЕПУТАЦИЯ: 171
  • КПД: 21%
  • Регистрация: 2013-08-12
  • Сайт: 
  • Профессия: Ученик 1С
Подумал об одном, а написал другое...
Не СГРУППИРОВАТЬ ПО, а ИТОГИ ПО. Тогда мы получим группировку верхнего уровня, а не свертку по полю группировки.
Если уж совсем сложно, оставьте 2 запроса, в первый выбирайте данные для шапки, а во второй выберите табличную часть.
Запрос будет примерно такой:
Запрос0 = Новый Запрос;
 Запрос0.Текст =
        "ВЫБРАТЬ
        |    ПрийомНаРоботуСписокФізичнихОсіб.ПосадаПоДокументах.НазваПосадиВЗнахідномуВідмінку КАК НазваПосадиВЗнахідномуВідмінку,
        |    ПрийомНаРоботуСписокФізичнихОсіб.ФізичнаОсоба.Наименование КАК ФізичнаОсобаНаименование
        |ИЗ
        |    Документ.ПрийомНаРоботу.СписокФізичнихОсіб КАК ПрийомНаРоботуСписокФізичнихОсіб
        |ГДЕ
        |    ПрийомНаРоботуСписокФізичнихОсіб.Ссылка = &Ссылка
        |    И ПрийомНаРоботуСписокФізичнихОсіб.Бухгалтерія
        |
        |УПОРЯДОЧИТЬ ПО
        |    НазваПосадиВЗнахідномуВідмінку,
        |    ФізичнаОсобаНаименование
        |ИТОГИ ПО
        |    НазваПосадиВЗнахідномуВідмінку";

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

Ну а дальше выводите, как я писал ранее.

Оффлайн Koriolan

  • *
  • Сообщений: 6
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-05-22
  • Сайт: 
  • Профессия: Разработчик 1С
Логику запроса, кажется, схватил. Вот только остается проблема с параметром.

ПрийомНаРоботуСписокФізичнихОсіб.Ссылка = &Ссылка

По-прежнему идет ошибка несовместимости данных.

       
Добавлено: 25 Май 2016, 21:36

Кажется, решил.

Переписал проблемную строку запроса следующим образом:
ПрийомНаРоботуСписокФізичнихОсіб.Ссылка В(&Ссылка)
вместо
ПрийомНаРоботуСписокФізичнихОсіб.Ссылка = &Ссылка
и все заработало :zebzdr::zebzdr:

Спасибо всем за помощь.

Последний раз редактировалось: Koriolan; 25 Май 2016, 21:36. Причина: Объединение сообщений

Оффлайн Kironten

  • *****
  • Сообщений: 809
  • РЕПУТАЦИЯ: 171
  • КПД: 21%
  • Регистрация: 2013-08-12
  • Сайт: 
  • Профессия: Ученик 1С
Проверяйте, что у вас передается в параметр Ссылка. Должен быть тип "ДокументСсылка.ПрийомНаРоботу"


Теги:
 

Не открывает форму сохраненного документа, открывает форму нового.

Автор EHOTРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 4191
Последний ответ 13 Апр 2012, 23:26
от Vit1501
Автоматическое заполнение табличной части документа из табличной части другого

Автор WillРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 14672
Последний ответ 16 Авг 2012, 12:07
от Will
Заполнение поля табличной части документа из табличной части справочника.

Автор Kurt_WagnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 3766
Последний ответ 06 Апр 2015, 20:08
от Kurt_Wagner
Заполнение табличной части документа реквизитами табличной части справочника

Автор kaf_infoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 291
Последний ответ 10 Май 2017, 20:44
от ilnur75
Добавление сведений в графу "основание" документа "ТОРГ-12"

Автор Ярослав1984Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 7231
Последний ответ 20 Авг 2013, 18:45
от Ярослав1984

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

oleg-x
93 Сообщений
alex0402
93 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
64 Сообщений
Golickoff Golickoff
51 Сообщений
ilyay ilyay
45 Сообщений
AIFrame
41 Сообщений
wise wise
31 Сообщений
Амал
30 Сообщений
ab30ru
24 Сообщений
lansy
22 Сообщений

* Кто онлайн

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal