8.х Подвязка областей по периоду

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем PavelA, 3 окт 2012.

  1. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    Задача следующая у меня в макете есть колонки январь, февраль, март...декабрь. (Данные по которым выодятся из запроса)

    Нужно чтобы в зависимости от периода выводились эти колонки.
    То есть допстим я задаю дату с 01/01/2012 по 01.04.2012 и выводит только первые 4 месяца!
    Области обозвал, как в цикле задаьб в зависимочти от выбранного периода вывод этих колонок?
  2. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Думаю, это не совсем правильный подход.
    В макете должна быть всего одна колонка, при выводе, в ней должен указываться период, потом должна присоединяться справа эта же колонка с новым названием периода, и т.д.
  3. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    1. Вопрос актуален
  4. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    А в чем, собственно, возникает проблема? Приведи тут код, которым пытаешься вывести. Можно и скриншет макета, с включеным отображением всех областей.
  5. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    Вот код и скрин макета

    Код:
    &НаСервере
    Процедура СформироватьНаСервере()
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    ЭтотОтчетОбъект = РеквизитФормыВЗначение("Отчет");
    Макет = ЭтотОтчетОбъект.ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Пользователи.Ссылка КАК Куратор,
    | СведенияОПользователях.Подразделение,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК КолРабДней,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 1
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Январь,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 2
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Февраль,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 3
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Март,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 4
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Апрель,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 5
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Май,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 6
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Июнь,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 7
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Июль,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 8
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Август,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 9
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Сентябрь,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 10
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Октябрь,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 11
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Ноябрь,
    | СУММА(ВЫБОР
    |   КОГДА ВремяРаботыВ1С.Период <> &ПустаяСсылка
    |	 И МЕСЯЦ(ВремяРаботыВ1С.Период) = 12
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК Декабрь,
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВремяРаботыВ1С.Период) КАК Месяц
    |ИЗ
    | Справочник.Пользователи КАК Пользователи
    |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВремяРаботыВ1С КАК ВремяРаботыВ1С
    |  ПО Пользователи.Ссылка = ВремяРаботыВ1С.Пользователь
    |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
    |  ПО Пользователи.Ссылка = СведенияОПользователях.Пользователь
    |ГДЕ
    | (Пользователи.Ссылка = &Пользователь
    |   ИЛИ &НетУсловияПользователь)
    | И ВремяРаботыВ1С.Период МЕЖДУ &дата1 И &дата2
    | И СведенияОПользователях.Подразделение В ИЕРАРХИИ(&Подразделение)
    |
    |СГРУППИРОВАТЬ ПО
    | Пользователи.Ссылка,
    | СведенияОПользователях.Подразделение
    |ИТОГИ
    | СУММА(КолРабДней),
    | СУММА(Январь),
    | СУММА(Февраль),
    | СУММА(Март),
    | СУММА(Апрель),
    | СУММА(Май),
    | СУММА(Июнь),
    | СУММА(Июль),
    | СУММА(Август),
    | СУММА(Сентябрь),
    | СУММА(Октябрь),
    | СУММА(Ноябрь),
    | СУММА(Декабрь)
    |ПО
    | ОБЩИЕ
    |АВТОУПОРЯДОЧИВАНИЕ";
    Запрос.УстановитьПараметр("дата1", Период.ДатаНачала);
    Запрос.УстановитьПараметр("дата2", Период.ДатаОкончания);
    Запрос.УстановитьПараметр("НетУсловияПользователь",?(ЗначениеЗаполнено(Куратор),Ложь,Истина));
    Запрос.УстановитьПараметр("Подразделение", Подразделение);
    Запрос.УстановитьПараметр("Пользователь", Куратор);
    Запрос.УстановитьПараметр("ПустаяСсылка", );
    СписокОбъектовКуратора = Новый СписокЗначений;
    Если ЗначениеЗаполнено(Куратор) Тогда
    Подр = РегистрыСведений.СведенияОПользователях.Получить(Новый Структура("Пользователь", Куратор)).Подразделение;
    Подр = Подр.Управление;
    КонецЕсли;
    Результат = Запрос.Выполнить();
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    //ОбластьЯнварь = Макет.ПолучитьОбласть("Январь");
    //ОбластьФевраль = Макет.ПолучитьОбласть("Февраль");
    //ОбластьМарт = Макет.ПолучитьОбласть("Март");
    //ОбластьАпрель = Макет.ПолучитьОбласть("Апрель");
    //ОбластьМай = Макет.ПолучитьОбласть("Май");
    //ОбластьИюнь = Макет.ПолучитьОбласть("Июнь");
    //ОбластьИюль = Макет.ПолучитьОбласть("Июль");
    //ОбластьАвгуст = Макет.ПолучитьОбласть("Август");
    //ОбластьСентябрь = Макет.ПолучитьОбласть("Сентябрь");
    //ОбластьОктябрь = Макет.ПолучитьОбласть("Октябрь");
    //ОбластьНоябрь = Макет.ПолучитьОбласть("Ноябрь");
    //ОбластьДекабрь = Макет.ПолучитьОбласть("Декабрь");
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    ВыборкаОбщийИтог.Следующий();  // Общий итог
    ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
    ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень());
    ВыборкаДетальныеЗаписи = ВыборкаОбщийИтог.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    //Если Месяц(Период.ДатаОкончания) > 1 Тогда
    // ТабДок.Вывести(ОбластьЯнварь);
    //
    //ИначеЕсли
    // Месяц(Период.ДатаОкончания) > 2 Тогда
    // ТабДок.Вывести(ОбластьФевраль);
    //ИначеЕсли Месяц(Период.ДатаОкончания) > 3 Тогда
    // ТабДок.Вывести(ОбластьМарт);
    //
    //КонецЕсли;
    //ТабДок.Вывести(ОбластьЯнварь);
    //ТабДок.Вывести(ОбластьФевраль);
    //ТабДок.Вывести(ОбластьМарт);
    //ТабДок.Вывести(ОбластьАпрель);
    //ТабДок.Вывести(ОбластьМай);
    //ТабДок.Вывести(ОбластьИюнь);
    //ТабДок.Вывести(ОбластьИюль);
    //ТабДок.Вывести(ОбластьАвгуст);
    //ТабДок.Вывести(ОбластьСентябрь);
    //ТабДок.Вывести(ОбластьОктябрь);
    //ТабДок.Вывести(ОбластьНоябрь);
    //ТабДок.Вывести(ОбластьДекабрь);
    // Конецесли;
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    КонецПроцедуры

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      75,6 КБ
      Просмотров:
      24
  6. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    Вопрос очень актуален(
  7. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    Вопрос пока не решен. Прошу помощи!!!
  8. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Павел, последуйте совету, который дал вам WaRDeR. Вам требуется для задачи реально всего одна колонка, которую в цикле надо будет многократно вывести, взависимости от длины вашего периода. Зачем огороды городить?
  9. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    не знаю как реализовать, если можно небольшой примерчик..
  10. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    пройдитесь поиском по форуму, примеров уже много было...
  11. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    не смог найти, руки не из того места видимо( все же буду очень благодарен за помощь!
  12. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну в целом можно такой алгоритм попробовать:
    1.Переделать макет. 2 вертикальные области: одна содержит все колонки, которые не по месяцам у вас, вторая - это 1 колонка для данных за месяц
    2.Формируете данные для вывода (формат уж сами определите)
    3. Выводите первую вертикальную область
    4. В цикле по количеству месяцев в периоде заполняете и присоединяете вторую область.

    Про совпадение количества строк во всех областях надо позаботиться отдельно, не зная ваш алгоритм получения даннзх для вывода в макет, сложно сказать определенное что-то...

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