8.х Макет с вертикальными областями

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Люсёк, 21 дек 2010.

  1. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Пожалуйста, очень нужна помощь с выводом отчета в макет. В макете есть пересекающиеся области (горизонтальные и вертикальные). Проблема состоит как раз с вертикальными областями, я никогда раньше с ними не работала(( поэтому очень нужен совет. В вертикальные области выводятся все начисления и удержания по конкретному человеку за конкретный период.Нужно выводить вертикальные области столько раз сколько начислений или ужержаний. Макет в преккрепленных файлах. Сам отчет должен выглядить примерно следующим образом:


    № | Месяц | Начисление1 | Начисление2 . . . | Начисление n | Итого | Удержания1 . . .
    1 Январь 4290 5000 400 9690 100
    2 Февраль 2000 2000 200
    3 Март 3050 1000 4050


    Вот мой код:

    ТабДокумент = Новый ТабличныйДокумент;

    Макет = ПолучитьМакет("Макет");

    ОбластьШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьЛьготы = Макет.ПолучитьОбласть("Льготы");
    ОбластьПустая = Макет.ПолучитьОбласть("Пустая");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрокаНачисления = Макет.ПолучитьОбласть("Строка|Начисления");
    ОбластьШапкаНачисления = Макет.ПолучитьОбласть("Шапка|Начисления");
    ОбластьНачисления = Макет.ПолучитьОбласть("Начисления");
    ОбластьУдержания = Макет.ПолучитьОбласть("Удержания");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

    Для каждого СтрокаТЧ Из Сотрудники Цикл
    ТабДокумент.Вывести(ОбластьШапка);


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

    СГРУППИРОВАТЬ ПО
    ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета,
    НАЧАЛОПЕРИОДА(ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации, МЕСЯЦ),
    ОсновныеНачисленияРаботниковОрганизаций.ОтработаноДней

    ОБЪЕДИНИТЬ ВСЕ

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

    СГРУППИРОВАТЬ ПО
    ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета,
    НАЧАЛОПЕРИОДА(ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации, МЕСЯЦ)) КАК ОсновныеДополнительныеНачисления

    СГРУППИРОВАТЬ ПО
    ОсновныеДополнительныеНачисления.ВидРасчета,
    ОсновныеДополнительныеНачисления.Результат,
    ОсновныеДополнительныеНачисления.Период,
    ОсновныеДополнительныеНачисления.ОтработаноДней
    ИТОГИ ПО
    Период ПЕРИОДАМИ(МЕСЯЦ, &НачалоПериода, &КонецПериода)
    Запрос.УстановитьПараметр("НачалоПериода",ЭлементыФормы.ДатаНачала.Значение);
    Запрос.УстановитьПараметр("КонецПериода",ЭлементыФормы.ДатаОкончания.Значение);
    Запрос.УстановитьПараметр("Организация",ЭлементыФормы.Организация.Значение);
    Запрос.УстановитьПараметр("Физлицо",СтрокаТЧ.Сотрудник.Физлицо);

    ВыборкаПоПериоду = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");
    Пока ВыборкаПоПериоду.Следующий() Цикл
    ДетальныеЗаписи = ВыборкаПоПериоду.Выбрать();
    Пока ДетальныеЗаписи.Следующий() Цикл
    ОбластьШапкаНачисления.Параметры.ВидРасчета=ДетальныеЗаписи.ВидРасчета;
    ОбластьСтрокаНачисления.Параметры.Результат=ДетальныеЗаписи.Результат;

    ТабДокумент.Присоединить(ОбластьШапкаНачисления);

    КонецЦикла;
    ТабДокумент.Вывести(ОбластьСтрока);
    КонецЦикла;
    КонецЦикла;

    ТабДокумент.Показать(Макет);





    Сейчас выводится одна кривота(((

    Вложения:

  2. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    используйте систему компоновки данных. там вывод отчета в таблицу с произвольным количеством колонок уже на уровне платформы заложен.. ничего программировать ненадо и мучится с кодом.
  3. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    надо именно с помощью макета((((
  4. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    Пример макета
    Посмотреть вложение 6180
    Ваша задача решается так...
    1. Регистрируем все колонки макета.
    2. При получении шапки рассчитываем количество колонок начисления и удержания, все рисуем.
    3. Получаем область строка, выводим все колонки дло начисления, потом получаем область начисления, им начинаем в цикле выводить одну и туже область пока не закончатся начисления, также с удержаниями, итоги областей выводим как обычно.

    Вложения:

  5. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    а можно поподробнее) может примерчик какой-нибудь наподобии есть?
  6. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Особенно вот этот пунк хотелось бы поподробнее, пожалуйста)
  7. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Вот пример на абум, если не сможете сделать по примеру варианта 3.
    1. садиться за книги.
    2. Подробнее изучить пример.
    3. Заказать на определенной ветке форума.
    Посмотреть вложение 6181

    Вложения:

    • 1.epf
      Размер файла:
      8,1 КБ
      Просмотров:
      171
  8. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Спасибо, будем разбираться)
  9. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    У меня возник еще вопросик. Подскажите, пожалуйста, как обойти результат запроса по группировкам без повторей?

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

    ОбластьНачисления.Параметры.ВидРасчета=ДетальныеЗаписи.ВидРасчета;
    ТабДокумент.Присоединить(ОбластьНачисления);

    КонецЦикла;
    КонецЦикла;
  10. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    что за повторы?
  11. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    в запросе есть группировки по периоду. Надо вывести все начисления.Когда запрос формируется за несколько месяцев, то при обходе этих группировок начисления повторяются.

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

    Запрос.УстановитьПараметр("НачалоПериода",ЭлементыФормы.ДатаНачала.Значение);
    Запрос.УстановитьПараметр("КонецПериода",ЭлементыФормы.ДатаОкончания.Значение);
    Запрос.УстановитьПараметр("Организация",ЭлементыФормы.Организация.Значение);
    Запрос.УстановитьПараметр("Физлицо",СтрокаТЧ.Сотрудник.Физлицо);

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

    ОбластьНачисления.Параметры.ВидРасчета=ДетальныеЗаписи.ВидРасчета;
    ТабДокумент.Присоединить(ОбластьНачисления);

    КонецЦикла;
    КонецЦикла;
  12. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Что-то я туплю наверно. Можешь показать как сейчас и как надо?
  13. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    1. Группируй весь запрос по периоду
    2. Попробуй ПоГрупировкамСИерархией
    ВыборкаПоПериоду = Запрос.Выполнить().Выбрать
    Код:
    (ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "Период", "ВСЕ");
    
  14. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1

    Я в отчет вывожу начисления по месяцам. Например, в январе есть начисление "Оклад по дням" и в феврале есть такое же начисление и у меня оно снова выводится в шапку.А надо чтобы не выводилось. Смотри прикрепленный файл.

    Вложения:

  15. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    У тебя получается не сгруппировался по виду расчета. А отладчиком пробегал? Чета 2 оклада в марте получилось
  16. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    На картинке видно не все. На самом деле отчет продолжается вправо там еще куча начислений. Сначала выводятся все начисления за один месяц, к ним присоединяются начисления за другой и так далее. Поэтому начисления повторяются.Я хочу, чтобы этого не было, но незнаю как исправить(( А строчки я просто попробывала вывести, они пока вообще криво выводятся. поэтому в марте получилось два оклада. Как вывести суммы в строках, так чтобы они соответствовали начислениям это второй вопрос,который я хотела задать))) Надеюсь понятно объяснила, если нет, то спрашивайте еще)
  17. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    почему результат в группировке? не в сумме разве должен быть?
  18. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Если поставить результат в сумму, получается тоже самое.
  19. anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26

    Очень хороший пример! Все доступно и понятно! Спасибо!

Поделиться этой страницей