Имя: Пароль:
1C
1С v8
Отчет по часами
0 Федя1305
 
06.11.23
07:27
Процедура ОтчетНажатие(Элемент)
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    ЧАС(ОтчетКассовойСменыДеталноСписокЧеков.ДатаЧек) КАК Час,
        |    ОтчетКассовойСменыДеталноСписокЧеков.Ссылка.Касса КАК Касса,
        |    СУММА(ОтчетКассовойСменыДеталноСписокЧеков.СуммаЧек) КАК Сумма,
        |    СУММА(ВЫБОР
        |            КОГДА ОтчетКассовойСменыДеталноСписокЧеков.СуммаЧек <> 0
        |                ТОГДА 1
        |            ИНАЧЕ 0
        |        КОНЕЦ) КАК Количество
        |ИЗ
        |    Документ.ОтчетКассовойСменыДетално.СписокЧеков КАК ОтчетКассовойСменыДеталноСписокЧеков
        |ГДЕ
        |    ОтчетКассовойСменыДеталноСписокЧеков.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
        |    И ОтчетКассовойСменыДеталноСписокЧеков.Ссылка.Проведен = ИСТИНА
        |    И ЧАС(ОтчетКассовойСменыДеталноСписокЧеков.ДатаЧек) МЕЖДУ ЧАС(&ЧасНачала) И ЧАС(&ЧасКонца)
        |
        |СГРУППИРОВАТЬ ПО
        |    ОтчетКассовойСменыДеталноСписокЧеков.Ссылка.Касса,
        |    ЧАС(ОтчетКассовойСменыДеталноСписокЧеков.ДатаЧек)";

    Запрос.УстановитьПараметр("ДатаКонца", ДатаКонца);
    Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
    Запрос.УстановитьПараметр("ЧасКонца", ЧасКонца);
    Запрос.УстановитьПараметр("ЧасНачала", ЧасНачала);

    РезультатЗапроса = Запрос.Выполнить();

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

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

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;

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

ЧасНачала=НачалоДня(ТекущаяДата());
ЧасКонца=КонецДня(ТекущаяДата());
ДатаНачала=ТекущаяДата()-432000;
ДатаКонца=ТекущаяДата();
1 Федя1305
 
06.11.23
07:29
2 Федя1305
 
06.11.23
07:32
Всем доброе утро. Пожалуйста, помогите мне. Я почти хочу, чтобы это было так
https://ibb.co/2gV8R3P
3 rphosts
 
06.11.23
07:57
у тебя макет для списка а хочешь что-бы была кросс-таблица. Есть 2 рациональных варианта решения этой задачи:
1.сделай всё это в СКД - ни строчки кодить не придётся.
2.перепиши цикл (будет 2 вложенных цикла и немного кода сверх того - вариантов как это писать несколько).

Через СКД чуть сложнее но в дальнейшем все затраты на изучение СКД окупятся.
Считаю что помог. И да, за тебя ни кто это делать не будет.

Недочёты запроса:
1.при наличии хотя-бы минимального опыта пишут вот так:  "И ОтчетКассовойСменыДеталноСписокЧеков.Ссылка.Проведен"
2.непонятно зачем отдельно условия на Дни а зачем условия на Часы, если дату документа можно привести к часу.
3.А вот это вообще жуть!
ЧасНачала=НачалоДня(ТекущаяДата());
ЧасКонца=КонецДня(ТекущаяДата());
ДатаНачала=ТекущаяДата()-432000;
ДатаКонца=ТекущаяДата();
4 Федя1305
 
06.11.23
08:08
(3) Вы абсолютно правы. Мне нужно изучить СКД.
5 Обработка
 
06.11.23
08:25
Тему бы поменять в ветке...
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.