8.х Печатная форма табеля

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

  1. TopicStarter Overlay
    Ольгусик
    Offline

    Ольгусик Опытный в 1С Команда форума

    Регистрация:
    4 фев 2010
    Сообщения:
    646
    Симпатии:
    3
    Баллы:
    29
    Здравствуйте. Есть документ "Ремонт техники". В табличной части есть реквезит датаМесяца. Это те дни, в которые водитель производил ремонт техники. Мне нужно сделать внешний отчет "Табель". Требуется, чтобы те дни, которые отмечены в документе отмечались в табеле. Не получается с выводом областей. Первый водитель выводится, как положено. В следующей строчке, у следующего водителя, кроме своих дней отмечаются и дни первого, у третьего-дни первого и второго и т.д.



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

    Запрос.УстановитьПараметр("ДатаК", ДатаК);
    Запрос.УстановитьПараметр("ДатаН", ДатаН);
    Запрос.УстановитьПараметр("Организация", Организация);
    Дней=День(ДатаК);
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьИтоги=Макет.ПолучитьОбласть("Итоги");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();


    ВыборкаВодитель=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаВодитель.Следующий() Цикл
    ОбластьДетальныхЗаписей.Параметры.Сотрудник=ВыборкаВодитель.Водитель;
    Сообщить(ВыборкаВодитель.Водитель);
    Выборка=ВыборкаВодитель.Выбрать();
    Пока Выборка.Следующий() Цикл
    ДМ=День(Выборка.ДеньМесяца);
    Сообщить(ДМ);
    ОбластьДетальныхЗаписей.Параметры["Часы"+ДМ]="8";
    КонецЦикла;
    ТабДок.Вывести(ОбластьДетальныхЗаписей);

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

    Вложения:

  2. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    1) Первое что бросается в глаза - это то, что в выборке у вас Ссылка.Водитель, а группируете вы по Ссылка.Водитель1 - это опечатка?

    2) Вы один раз инициализируете область, куда выводятся данные о водителе. Далее, в эту область вы устанавливаете параметры.
    Когда нужно вывести следующего водителя, вы используете уже инициализированную область с УЖЕ ЗАПОЛНЕННЫМИ параметрами.

    Либо инициализацию ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали"); перенесите в цикл перебора водителей, либо в этом цикле организуйте еще один вложенный цикл, в котором станете "занулять" табель (параметры области) до вывода табеля текущего водителя.
  3. TopicStarter Overlay
    Ольгусик
    Offline

    Ольгусик Опытный в 1С Команда форума

    Регистрация:
    4 фев 2010
    Сообщения:
    646
    Симпатии:
    3
    Баллы:
    29
    Да, опечатка. Водитель1. В отчете все правильно с этим
  4. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    2) Вы один раз инициализируете область, куда выводятся данные о водителе. Далее, в эту область вы устанавливаете параметры.
    Когда нужно вывести следующего водителя, вы используете уже инициализированную область с УЖЕ ЗАПОЛНЕННЫМИ параметрами.

    Либо инициализацию
    Код:
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    перенесите в цикл перебора водителей, либо в этом цикле организуйте еще один вложенный цикл, в котором станете "занулять" табель (параметры области) до вывода табеля текущего водителя.
  5. TopicStarter Overlay
    Ольгусик
    Offline

    Ольгусик Опытный в 1С Команда форума

    Регистрация:
    4 фев 2010
    Сообщения:
    646
    Симпатии:
    3
    Баллы:
    29
    Если переношу в цикл перебора водителей, то строчка по одному и тому же водителю выводится несколько раз.
  6. TopicStarter Overlay
    Ольгусик
    Offline

    Ольгусик Опытный в 1С Команда форума

    Регистрация:
    4 фев 2010
    Сообщения:
    646
    Симпатии:
    3
    Баллы:
    29
    Uza? Спасибо большое. Все получилось

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