Вход | Регистрация
 

При формировании отчета не учитывает продажи от 23:00 - 24:00.

При формировании отчета не учитывает продажи от 23:00 - 24:00.
Я
   Nemirov
 
09.10.19 - 08:34
https://ibb.co/Pzb1Rvv


Код объемный. Проблема я так понял продажи учитывают строго по часу от 23:00 до 00:00, но 00:00 это следующий день. Как можно обойти эту ситуацию? Кому не лень Help.
 
 
   Nemirov
 
1 - 09.10.19 - 08:35
(0) Перем Источник;
//Перем ЭтоЦентр;

Перем ТЗСмены;

Функция ПолучитьИсточникДанных(ДатаНачала, ДатаКонца, НеЗакрытаяСмена = Ложь)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    sms_Store.StoreCode,
    |    100000 * sms_Store.StoreCode + sms_POS.PosCode КАК PosCode,
    |    sms_POS.Name КАК PosName,
    |    sms_Shift.ShiftUID КАК Смена,
    |    sms_Cheque.ChequeUID КАК Чек,
    |    sms_Shift.CloseTime КАК ДатаВремяЗакрытияСмены,
    |    sms_Shift.OpenTime КАК ДатаВремяОткрытияСмены,
    |    sms_Shift.ShiftNo КАК НомерСменыККМ,
    |    sms_Cheque.ChequeNo КАК НомерЧекаККМ,
    |    sms_Cheque.CloseTime КАК ДатаВремяЗакрытияЧека,
    |    sms_Cheque.OpenTime КАК ДатаВремяОткрытияЧека,
    |    ВЫБОР
    |        КОГДА sms_Cheque.CloseType <> 0
    |            ТОГДА ""_О""
    |        ИНАЧЕ """"
    |    КОНЕЦ КАК CloseType,
    |    ВЫБОР
    |        КОГДА sms_Cheque.ChequeType = 0
    |            ТОГДА ""Продажа""
    |        КОГДА sms_Cheque.ChequeType = 1
    |            ТОГДА ""Возврат""
    |        ИНАЧЕ ""Не известен""
    |    КОНЕЦ КАК Тип,
    |    sms_ChequeLine.ChequeLineNo КАК НомерПозицииККМ,
    |    sms_Item.ItemID КАК КодТовараSIS,
    |    sms_Item.ItemCode КАК КодТовара,
    |    sms_Item.Name КАК НаименованиеТовара,
    |    sms_ChequeLine.Price КАК Цена,
    |    sms_ChequeLine.Quantity КАК Количество,
    |    sms_ChequeLine.DiscountValue КАК РазмерСкидки,
    |    sms_ChequeLine.Amount КАК Сумма,
    |    ВЫБОР
    |        КОГДА sms_SaleItem.Property1 ЕСТЬ NULL 
    |            ТОГДА """"
    |        ИНАЧЕ sms_SaleItem.Property1.Value
    |    КОНЕЦ + ВЫБОР
    |        КОГДА sms_SaleItem.Property2 ЕСТЬ NULL 
    |            ТОГДА """"
    |        ИНАЧЕ "","" + sms_SaleItem.Property2.Value
    |    КОНЕЦ + ВЫБОР
    |        КОГДА sms_SaleItem.Property3 ЕСТЬ NULL 
    |            ТОГДА """"
    |        ИНАЧЕ "","" + sms_SaleItem.Property3.Value
    |    КОНЕЦ КАК Характеристика,
    |    sms_Employee.EmployeeCode,
    |    sms_Employee.Name КАК ИмяКассира,
    |    horeca_MenuItem.Name КАК Меню,
    |    horeca_Menu.Name КАК ГруппаМеню
    |ИЗ
    |    ВнешнийИсточникДанных.SIS.Таблица.sms_ChequeLine КАК sms_ChequeLine
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.sms_Cheque КАК sms_Cheque
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.sms_Shift КАК sms_Shift
    |                ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.sms_POS КАК sms_POS
    |                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.sms_Store КАК sms_Store
    |                    ПО sms_POS.StoreUID = sms_Store.Ссылка
    |                ПО sms_Shift.PosUID = sms_POS.Ссылка
    |            ПО sms_Cheque.ShiftUID = sms_Shift.Ссылка
    |            ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.sms_Employee КАК sms_Employee
    |            ПО sms_Cheque.CashierUID = sms_Employee.Ссылка
    |            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |                sms_Cheque.ChequeUID КАК ChequeUID
    |            ИЗ
    |                ВнешнийИсточникДанных.SIS.Таблица.sms_ChequeLine КАК sms_ChequeLine
    |                    ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.sms_Cheque КАК sms_Cheque
    |                    ПО sms_ChequeLine.ChequeUID = sms_Cheque.Ссылка
    |            ГДЕ
    |                sms_ChequeLine.Storno = ИСТИНА
    |            
    |            СГРУППИРОВАТЬ ПО
    |                sms_Cheque.ChequeUID) КАК t
    |            ПО (t.ChequeUID = sms_Cheque.ChequeUID)
    |        ПО sms_ChequeLine.ChequeUID = sms_Cheque.Ссылка
    |            И (sms_Cheque.CloseTime >= &ДатаНачала)
    |            И (sms_Cheque.CloseTime <= &ДатаОкончания)
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.sms_SaleItem КАК sms_SaleItem
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.sms_ItemUnitSchema КАК sms_ItemUnitSchema
    |                ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.sms_Item КАК sms_Item
    |                ПО sms_ItemUnitSchema.ItemUID = sms_Item.Ссылка
    |            ПО sms_SaleItem.ItemUnitSchemaUID = sms_ItemUnitSchema.Ссылка
    |        ПО sms_ChequeLine.SaleItemUID = sms_SaleItem.Ссылка
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.horeca_ChequeLine2MenuItem КАК horeca_ChequeLine2MenuItem
    |            ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.horeca_MenuItem КАК horeca_MenuItem
    |                ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SIS.Таблица.horeca_Menu КАК horeca_Menu
    |                ПО horeca_MenuItem.MenuUID = horeca_Menu.Ссылка
    |            ПО horeca_ChequeLine2MenuItem.MenuItemUID = horeca_MenuItem.Ссылка
    |        ПО (horeca_ChequeLine2MenuItem.ChequeLineUID = sms_ChequeLine.Ссылка)
    |ГДЕ
    |    ВЫБОР
    |            КОГДА sms_Cheque.CloseType <> 0
    |                ТОГДА 1
    |            ИНАЧЕ 2
    |        КОНЕЦ = &ОтменённыеЧеки" + 
    ?(НеЗакрытаяСмена,"  И   sms_Shift.CloseTime ЕСТЬ NULL ","") + "
    |{ГДЕ
    |    sms_ChequeLine.Storno КАК СторнированныеТовары,
    |    (ВЫБОР
    |            КОГДА t.ChequeUID ЕСТЬ NULL 
    |                ТОГДА ЛОЖЬ
    |            ИНАЧЕ ИСТИНА
    |        КОНЕЦ) КАК СоСторнированнымиТоварами,
    |    (ВЫБОР
    |            КОГДА sms_Shift.CloseTime ЕСТЬ НЕ NULL 
    |                ТОГДА ИСТИНА
    |            ИНАЧЕ ЛОЖЬ 
    |        КОНЕЦ) КАК Закрытая}";
    
    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
    Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаКонца));
    Запрос.УстановитьПараметр("ОтменённыеЧеки", 2);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    Возврат(РезультатЗапроса);
    
КонецФункции

//Процедура кнНастройкаНажатие(Элемент)

//    
//    Если Источник.Настройка() Тогда

//        СформироватьОтчет();
//    КонецЕсли;

//    
//КонецПроцедуры


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    Если омПроцедурыСетевогоОбмена.МагазинИлиЦентр() Тогда
        Предупреждение("Данный отчет можно запускать только в магазине!!!", 10, "Ошибка запуска");
        Отказ = Истина
    КонецЕсли;    
    
    //Если ОмSMS2.SMSЭтоSMS2() Тогда

    //НоваяФорма=Отчеты.SISЧековаяЛента.ПолучитьФорму("ФормаОтчета");

    //НоваяФорма.Открыть();

    //Отказ = Истина;

    //Конецесли;    

    
    Если НЕ глКомпоненты.СМС.ПроверитьИнтерфейс(,,Истина) Тогда
        Отказ = Истина;
    КонецЕсли;
    //ЭтоЦентр = ОмSMS.SMSЭтоЦентр();

    
КонецПроцедуры

Процедура ПриОткрытии()
    
    ВариантНастройки = 1;
    ДатаНач = НачалоДня(ТекущаяДата());
    ДатаКон = КонецДня(ТекущаяДата());
    ЭлементыФормы.ВремяНач.Значение = Формат(НачалоДня(ТекущаяДата()),"ДЛФ=ЧЧммсс");
    ЭлементыФормы.ВремяКон.Значение = Формат(КонецДня(ТекущаяДата()),"ДЛФ=ЧЧммсс");
    ЭлементыФормы.ПолеВыбора1.Значение = "Равно";
    ЭлементыФормы.Номенклатура.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы;
    
    КнопкаЗаполнить = ЭлементыФормы.КоманднаяПанель1.Кнопки.Добавить("ВыборВарианта",ТипКнопкиКоманднойПанели.Действие,НСтр("ru = ""Выбрать вариант 2""; en = ""select the option 2"""),Новый Действие("КоманднаяПанель1ВыбратьВариант"));    
    КнопкаЗаполнить.ИзменяетДанные = Истина; 
    НастроитьКнопкуКоманднойпанели(КнопкаЗаполнить);
    ЭлементыФормы.Флажок3.Видимость = Ложь;
    
КонецПроцедуры

Процедура НастроитьКнопкуКоманднойПанели(КнопкаКоманднойПанели)
    
    КнопкаКОманднойПанели.Подсказка = КнопкаКоманднойПанели.Текст;
    КнопкаКоманднойПанели.Пояснение = КнопкаКоманднойПанели.Текст;
    
КонецПроцедуры

Процедура СформироватьОтчет()
    
    Если Флажок1 = Ложь И Флажок2 = Ложь И Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
        Если Вопрос("Выполнение обработки может занять продолжительное время. Продолжить?",РежимДиалогаВопрос.ДаНет,15,КодВозвратаДиалога.Да,"Внимание!!!",КодВозвратаДиалога.Да) = КодВозвратаДиалога.Нет Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;    
    ЭлементыФормы.ТабДок.Очистить();    
    ТЗ = ПолучитьИсточникДанных(ДатаНач,ДатаКон);
    ЭлементыФормы.Документ.Очистить();
    ТЗМолочка = Новый ТаблицаЗначений;
    ТЗМолочка.Колонки.Добавить("Дата1",,"Дата1");
    ТЗМолочка.Колонки.Добавить("Дата",,"Дата");
    ТЗМолочка.Колонки.Добавить("Время",,"Время");
    ТЗМолочка.Колонки.Добавить("Наименование",,"Наименование");
    ТЗМолочка.Колонки.Добавить("КодТовара",,"КодТовара");
    ТЗМолочка.Колонки.Добавить("Количество",,"Количество");
    ТЗМолочка.Колонки.Добавить("Касса",,"Касса");
    ТЗМолочка.Колонки.Добавить("Сумма",,"Сумма");
    ТЗМолочка.Колонки.Добавить("НомерЧека",,"НомерЧека");
    ТЗМолочка.Колонки.Добавить("НомерСмены",,"НомерСмены");
    ПродажиПредыдущегоДня = 0;
    сч = 0;
    Для Каждого Строка Из ТЗ Цикл
        Ч = (Строка.ДатаВремяЗакрытияЧека - НачалоДня(Строка.ДатаВремяЗакрытияЧека));
        Если Час(ВремяНач) < Час(ВремяКон) Тогда
            Если  Ч < Час(ВремяНач) * 3600 ИЛИ Ч > Час(ВремяКон) * 3600  Тогда
                Продолжить;
            КонецЕсли;    
        ИначеЕсли Час(ВремяНач) > Час(ВремяКон) Тогда
            Если НЕ Ч > Час(ВремяНач) * 3600 И  НЕ Ч < Час(ВремяКон) * 3600 Тогда
                Продолжить;
            КонецЕсли;    
        КонецЕсли;    
        Если Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
            //Если Строка.Сумма > 0 Тогда

            СтрокаТЗМолочка              = ТЗМолочка.Добавить();
            СтрокаТЗМолочка.Дата1        = Формат(Строка.ДатаВремяЗакрытияЧека,"ДЛФ=Д");
            СтрокаТЗМолочка.Дата         = Строка.ДатаВремяЗакрытияЧека;
            СтрокаТЗМолочка.Время        = ?(ВариантНастройки = 2,ПолучитьИнтервалыЧасов(Час(Строка.ДатаВремяЗакрытияЧека)),Час(Строка.ДатаВремяЗакрытияЧека));   
            СтрокаТЗМолочка.Наименование = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(Строка.КодТовара))//Строка.НаименованиеТовара;

            СтрокаТЗМолочка.Количество   =  Строка.Количество;
            СтрокаТЗМолочка.Касса = Строка.PosName;
            СтрокаТЗМолочка.Сумма        = Строка.Сумма;
            СтрокаТЗМолочка.НомерЧека    = Строка.НомерЧекаККМ;
            СтрокаТЗМолочка.НомерСмены    = Строка.НомерСменыККМ;
            //КонецЕсли;

        ИначеЕсли ЭлементыФормы.ПолеВыбора1.Значение = "Равно" Тогда
            //Если СокрЛП(Строка.НаименованиеТовара) = СокрЛП(Номенклатура.Наименование) Тогда

            Если СокрЛП(Строка.КодТовара) = СокрЛП(Номенклатура.Код) Тогда
                Если Строка.ДатаВремяЗакрытияЧека < НачалоДня(ДатаНач) Тогда
                    Продолжить;
                Иначе
                    СтрокаТЗМолочка              = ТЗМолочка.Добавить();
                    СтрокаТЗМолочка.Дата1        = Формат(Строка.ДатаВремяЗакрытияЧека,"ДЛФ=Д");
                    СтрокаТЗМолочка.Дата         = Строка.ДатаВремяЗакрытияЧека;
                    СтрокаТЗМолочка.Время        = ?(ВариантНастройки = 2,ПолучитьИнтервалыЧасов(Час(Строка.ДатаВремяЗакрытияЧека)),Час(Строка.ДатаВремяЗакрытияЧека));
                    СтрокаТЗМолочка.Наименование = Номенклатура//Строка.НаименованиеТовара;

                    СтрокаТЗМолочка.Количество   =  Строка.Количество;
                    СтрокаТЗМолочка.Касса = Строка.PosName;
                    СтрокаТЗМолочка.Сумма        = Строка.Сумма;
                    СтрокаТЗМолочка.НомерЧека    = Строка.НомерЧекаККМ;
                    СтрокаТЗМолочка.НомерСмены    = Строка.НомерСменыККМ;
                КонецЕсли;    
            КонецЕсли;
        ИначеЕсли ЭлементыФормы.ПолеВыбора1.Значение = "В группе" Тогда
            //Номен = СокрЛП(Строка.НаименованиеТовара);

            //Номен = Справочники.Номенклатура.НайтиПоНаименованию(Номен);

            Номен = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(Строка.КодТовара));
            Если НЕ Номен = Справочники.Номенклатура.ПустаяСсылка() Тогда
                Если Номен.ПринадлежитЭлементу(Номенклатура) Тогда
                    //Если Строка.Сумма > 0 Тогда

                    СтрокаТЗМолочка              = ТЗМолочка.Добавить();
                    СтрокаТЗМолочка.Дата1        = Формат(Строка.ДатаВремяЗакрытияЧека,"ДЛФ=Д");
                    СтрокаТЗМолочка.Дата         = Строка.ДатаВремяЗакрытияЧека;
                    СтрокаТЗМолочка.Время        = ?(ВариантНастройки = 2,ПолучитьИнтервалыЧасов(Час(Строка.ДатаВремяЗакрытияЧека)),Час(Строка.ДатаВремяЗакрытияЧека));
                    СтрокаТЗМолочка.Наименование = Номен//Строка.НаименованиеТовара;

                    СтрокаТЗМолочка.Количество   =  Строка.Количество;
                    СтрокаТЗМолочка.Касса = Строка.PosName;
                    СтрокаТЗМолочка.Сумма        = Строка.Сумма;
                    СтрокаТЗМолочка.НомерЧека    = Строка.НомерЧекаККМ;
                    СтрокаТЗМолочка.НомерСмены    = Строка.НомерСменыККМ;
                    //КонецЕсли;    

                КонецЕсли;
            КонецЕсли;
        ИначеЕсли ЭлементыФормы.ПолеВыбора1.Значение = "В группе из списка" Тогда
            Если Номенклатура.Количество() > 0 Тогда
                Номен = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(Строка.КодТовара));
                Для Каждого Стр Из Номенклатура Цикл
                    Если Номен.ПринадлежитЭлементу(Стр.Значение) Тогда
                        //Если Строка.Сумма > 0 Тогда

                        СтрокаТЗМолочка              = ТЗМолочка.Добавить();
                        СтрокаТЗМолочка.Дата1        = Формат(Строка.ДатаВремяЗакрытияЧека,"ДЛФ=Д");
                        СтрокаТЗМолочка.Дата         = Строка.ДатаВремяЗакрытияЧека;
                        СтрокаТЗМолочка.Время        = ?(ВариантНастройки = 2,ПолучитьИнтервалыЧасов(Час(Строка.ДатаВремяЗакрытияЧека)),Час(Строка.ДатаВремяЗакрытияЧека));
                        СтрокаТЗМолочка.Наименование = Номен//Строка.НаименованиеТовара;

                        СтрокаТЗМолочка.Количество   =  Строка.Количество;
                        СтрокаТЗМолочка.Касса = Строка.PosName;
                        СтрокаТЗМолочка.Сумма        = Строка.Сумма;
                        СтрокаТЗМолочка.НомерЧека    = Строка.НомерЧекаККМ;
                        СтрокаТЗМолочка.НомерСмены    = Строка.НомерСменыККМ;
                        Прервать;
                        //КонецЕсли;    

                    КонецЕсли; 
                КонецЦикла;
            КонецЕсли;    
        КонецЕсли;
    КонецЦикла;
    Если ВариантНастройки = 2 Тогда
        ТЗВторойВариант = Новый ТаблицаЗначений;
        ТЗВторойВариант.Колонки.Добавить("Номенклатура",,"Номенклатура");
        ТЗВторойВариант.Колонки.Добавить("Кол7",,"Кол7");
        ТЗВторойВариант.Колонки.Добавить("Кол8",,"Кол8");
        ТЗВторойВариант.Колонки.Добавить("Кол10",,"Кол10");
        ТЗВторойВариант.Колонки.Добавить("Кол12",,"Кол12");
        ТЗВторойВариант.Колонки.Добавить("Кол14",,"Кол14");
        ТЗВторойВариант.Колонки.Добавить("Кол15",,"Кол15");
        ТЗВторойВариант.Колонки.Добавить("Кол16",,"Кол16");
        ТЗВторойВариант.Колонки.Добавить("Кол17",,"Кол17");
        ТЗВторойВариант.Колонки.Добавить("Кол18",,"Кол18");
        ТЗВторойВариант.Колонки.Добавить("Кол20",,"Кол20");
        ТЗВторойВариант.Колонки.Добавить("Кол21",,"Кол21");
        ТЗВторойВариант.Колонки.Добавить("Кол24",,"Кол24");
        ТЗВторойВариант.Колонки.Добавить("Остаток",,"Остаток");
        ТЗВторойВариант.Колонки.Добавить("КолИтого",,"КолИтого");
        ТЗМолочка.Свернуть("Наименование,Время","Количество");
        ТЗМолочка.Сортировать("Время Возр");
        Для Каждого Строка Из ТЗМолочка Цикл
            НайденнаяСтрока = ТЗВторойВариант.Найти(Строка.Наименование,"Номенклатура");
            Если НайденнаяСтрока = Неопределено Тогда
                НоваяСтрока = ТЗВторойВариант.Добавить();
                НоваяСтрока.Номенклатура = Строка.Наименование;
                НоваяСтрока.КолИтого     = Строка.Количество;
                Если Строка.Время = 7 Тогда
                    НоваяСтрока.Кол7 = Строка.Количество;
                ИначеЕсли Строка.Время = 8 Тогда
                    НоваяСтрока.Кол8 = Строка.Количество;
                ИначеЕсли Строка.Время = 10 Тогда
                    НоваяСтрока.Кол10 = Строка.Количество;
                ИначеЕсли Строка.Время = 12 Тогда
                    НоваяСтрока.Кол12 = Строка.Количество;
                ИначеЕсли Строка.Время = 14 Тогда
                    НоваяСтрока.Кол14 = Строка.Количество;
                ИначеЕсли Строка.Время = 15 Тогда
                    НоваяСтрока.Кол15 = Строка.Количество;
                ИначеЕсли Строка.Время =16 Тогда
                    НоваяСтрока.Кол16 = Строка.Количество;
                ИначеЕсли Строка.Время = 17 Тогда
                    НоваяСтрока.Кол17 = Строка.Количество;
                ИначеЕсли Строка.Время = 18 Тогда
                    НоваяСтрока.Кол18 = Строка.Количество;
                ИначеЕсли Строка.Время = 20 Тогда
                    НоваяСтрока.Кол20 = Строка.Количество;
                ИначеЕсли Строка.Время = 21 Тогда
                    НоваяСтрока.Кол21 = Строка.Количество;    
                ИначеЕсли Строка.Время = 24 Тогда
                    НоваяСтрока.Кол24 = Строка.Количество;
                КонецЕсли;    
            Иначе
                НайденнаяСтрока.КолИтого = НайденнаяСтрока.КолИтого + Строка.Количество;
                Если Строка.Время = 7 Тогда
                    НайденнаяСтрока.Кол7 = Строка.Количество;
                ИначеЕсли Строка.Время = 8 Тогда
                    НайденнаяСтрока.Кол8 = Строка.Количество;
                ИначеЕсли Строка.Время = 10 Тогда
                    НайденнаяСтрока.Кол10 = Строка.Количество;
                ИначеЕсли Строка.Время = 12 Тогда
                    НайденнаяСтрока.Кол12 = Строка.Количество;
                ИначеЕсли Строка.Время = 14 Тогда
                    НайденнаяСтрока.Кол14 = Строка.Количество;
                ИначеЕсли Строка.Время = 15 Тогда
                    НайденнаяСтрока.Кол15 = Строка.Количество;
                ИначеЕсли Строка.Время =16 Тогда
                    НайденнаяСтрока.Кол16 = Строка.Количество;
                ИначеЕсли Строка.Время = 17 Тогда
                    НайденнаяСтрока.Кол17 = Строка.Количество;
                ИначеЕсли Строка.Время = 18 Тогда
                    НайденнаяСтрока.Кол18 = Строка.Количество;
                ИначеЕсли Строка.Время = 20 Тогда
                    НайденнаяСтрока.Кол20 = Строка.Количество;
                ИначеЕсли Строка.Время = 21 Тогда
                    НайденнаяСтрока.Кол21 = Строка.Количество;
                ИначеЕсли Строка.Время = 24 Тогда
                    НайденнаяСтрока.Кол24 = Строка.Количество;
                КонецЕсли;
            КонецЕсли;    
        КонецЦикла;    
        ЭлементыФормы.ТабДок.Очистить();
        Макет = ПолучитьМакет("МакетВСтроку");
        Заг = Макет.ПолучитьОбласть("Заголовок");
        Если ЭлементыФормы.ПолеВыбора1.Значение = "Равно" Тогда
            Заголовок = "Отчет почасовая продажа товара " + СокрЛП(Номенклатура.Наименование); 
        ИначеЕсли ЭлементыФормы.ПолеВыбора1.Значение = "В группе из списка" Тогда
            Заголовок = "Отчет почасовая продажа товара в группам: ";
            Сч = 0;
            Для Каждого Стр Из Номенклатура Цикл
                Сч = Сч + 1;
                Заголовок = Заголовок + Строка(Стр.Значение) + "";
                Если Сч = Номенклатура.Количество() Тогда
                    Заголовок = Заголовок + ".";
                Иначе
                    Заголовок = Заголовок + "; ";
                КонецЕсли;
            КонецЦикла;    
        Иначе
            Заголовок = "Отчет почасовая продажа товара в группе: " + СокрЛП(Номенклатура.Наименование); 
        КонецЕсли;
        Если Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
            Заголовок = "Отчет почасовая продажа товара: по всей номенклатуре";
        КонецЕсли;    
        Заг.Параметры.Установить(0, Заголовок);
        ЭлементыФормы.ТабДок.Вывести(Заг);
        Заг1 = Макет.ПолучитьОбласть("Заголовок1");
        ВремяС = Формат(ВремяНач,"ДЛФ=В"); 
        ВремяПо = Формат(ВремяКон,"ДЛФ=В");
        Если ВремяС = "" Тогда
            ВремяС = "00:00:00";
        КонецЕсли;
        Если ВремяПо = "" Тогда
            ВремяПо = "00:00:00";
        КонецЕсли;    
        Заголовок1 = "С " + Формат(ДатаНач,"ДЛФ=Д") + " по " + Формат(ДатаКон,"ДЛФ=Д") + " в период времени с " + ВремяС + " по " + ВремяПо;
        Заг1.Параметры.Установить(0,Заголовок1);
        ЭлементыФормы.ТабДок.Вывести(Заг1);
        Шапка = Макет.ПолучитьОбласть("Шапка");
        ЭлементыФормы.ТабДок.Вывести(Шапка);
        МакетСтроки = Макет.ПолучитьОбласть("Строка"); 
        Сч = 0;
        ИтогКол7 = 0;
        ИтогКол8 = 0;
        ИтогКол10 = 0;
        ИтогКол12 = 0;
        ИтогКол14 = 0;
        ИтогКол15 = 0;
        ИтогКол16 = 0;
        ИтогКол17 = 0;
        ИтогКол18 = 0;
        ИтогКол20 = 0;
        ИтогКол21 = 0;
        ИтогКол24 = 0;
        ТЗВторойВариант = ДополнитьНоменклатуройСостаткомБезПродажи(ТЗВторойВариант);
        Если Флажок3 Тогда
            Если НЕ ЭлементыФормы.ПолеВыбора1.Значение = "Равно" Тогда//ебашим всю номенклатуру

                ТЗВторойВариант = ДополнитьНоменклатуройПустой(ТЗВторойВариант);
            КонецЕсли;
        КонецЕсли;
        ТЗВторойВариант.Сортировать("Номенклатура Возр");
        Для Каждого Строка Из ТЗВторойВариант Цикл
            Сч = Сч + 1;
            Кол7 = ?(Строка.Кол7 = Неопределено,0,Строка.Кол7);
            Кол8 = ?(Строка.Кол8 = Неопределено,0,Строка.Кол8);
            Кол10 = ?(Строка.Кол10 = Неопределено,0,Строка.Кол10);
            Кол12 = ?(Строка.Кол12 = Неопределено,0,Строка.Кол12);
            Кол14 = ?(Строка.Кол14 = Неопределено,0,Строка.Кол14);
            Кол15 = ?(Строка.Кол15 = Неопределено,0,Строка.Кол15);
            Кол16 = ?(Строка.Кол16 = Неопределено,0,Строка.Кол16);
            Кол17 = ?(Строка.Кол17 = Неопределено,0,Строка.Кол17);
            Кол18 = ?(Строка.Кол18 = Неопределено,0,Строка.Кол18);
            Кол20 = ?(Строка.Кол20 = Неопределено,0,Строка.Кол20);
            Кол21 = ?(Строка.Кол21 = Неопределено,0,Строка.Кол21);
            Кол24 = ?(Строка.Кол24 = Неопределено,0,Строка.Кол24);
            ИтогКол7 = ИтогКол7 + Кол7;
            ИтогКол8 = ИтогКол8 + Кол8;
            ИтогКол10 = ИтогКол10 + Кол10;
            ИтогКол12 = ИтогКол12 + Кол12;
            ИтогКол14 = ИтогКол14 + Кол14;
            ИтогКол15 = ИтогКол15 + Кол15;
            ИтогКол16 = ИтогКол16 + Кол16;
            ИтогКол17 = ИтогКол17 + Кол17;
            ИтогКол18 = ИтогКол18 + Кол18;
            ИтогКол20 = ИтогКол20 + Кол20;
            ИтогКол21 = ИтогКол21 + Кол21;
            ИтогКол24 = ИтогКол24 + Кол24;
            МакетСтроки.Параметры.Установить(0, Сч); 
            МакетСтроки.Параметры.Установить(1, Строка.Номенклатура);
            МакетСтроки.Параметры["Остаток"] = Строка.Остаток//ПолучитьЗапросТекущихОстатков(Строка.Номенклатура);

            //МакетСтроки.Параметры["Кол7"]    = Кол7;

            МакетСтроки.Параметры["Кол8"]    = Кол7 + Кол8;
            МакетСтроки.Параметры["Кол10"]   = Кол7 + Кол8 + Кол10;
            МакетСтроки.Параметры["Кол12"]   = Кол7 + Кол8 + Кол10 + Кол12;
            МакетСтроки.Параметры["Кол14"]   = Кол7 + Кол8 + Кол10 + Кол12 + Кол14;
            МакетСтроки.Параметры["Кол15"]   = Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15;
            МакетСтроки.Параметры["Кол16"]   = Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16;
            МакетСтроки.Параметры["Кол17"]   = Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16 + Кол17;
            МакетСтроки.Параметры["Кол18"]   = Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16 + Кол17 + Кол18;
            МакетСтроки.Параметры["Кол20"]   = Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16 + Кол17 + Кол18 + Кол20;
            МакетСтроки.Параметры["Кол21"]   = Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16 + Кол17 + Кол18 + Кол20 + Кол21;
            МакетСтроки.Параметры["КолИтог"] = Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16 + Кол17 + Кол18 + Кол20 + Кол21 + Кол24;
            //МакетСтроки.Параметры.Установить(2,ПолучитьЗапросТекущихОстатков(Строка.Номенклатура));

            //МакетСтроки.Параметры.Установить(4, Кол7);

            //МакетСтроки.Параметры.Установить(5, Кол7 + Кол8);

            //МакетСтроки.Параметры.Установить(6, Кол7 + Кол8 + Кол10);

            //МакетСтроки.Параметры.Установить(7, Кол7 + Кол8 + Кол10 + Кол12);

            //МакетСтроки.Параметры.Установить(8, Кол7 + Кол8 + Кол10 + Кол12 + Кол14);

            //МакетСтроки.Параметры.Установить(9, Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15);

            //МакетСтроки.Параметры.Установить(10, Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16);

            //МакетСтроки.Параметры.Установить(11,Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16 + Кол17);

            //МакетСтроки.Параметры.Установить(12,Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16 + Кол17 + Кол18);

            //МакетСтроки.Параметры.Установить(13,Кол7 + Кол8 + Кол10 + Кол12 + Кол14 + Кол15 + Кол16 + Кол17 + Кол18 + Кол24);

            ЭлементыФормы.ТабДок.Вывести(МакетСтроки);
        КонецЦикла;    
        МакетПодвал = Макет.ПолучитьОбласть("Подвал"); 
        //МакетПодвал.Параметры.Установить(0, ИтогКол7);

        МакетПодвал.Параметры.Установить(0, ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(1, ИтогКол10 + ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(2, ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(3, ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(4, ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(5, ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(6, ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(7, ИтогКол18 + ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(8, ИтогКол20 + ИтогКол18 + ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(9, ИтогКол21 + ИтогКол20 +    ИтогКол18 + ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7);
        МакетПодвал.Параметры.Установить(10, ИтогКол24 + ИтогКол21 + ИтогКол20 + ИтогКол18 + ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7);
        ЭлементыФормы.ТабДок.Вывести(МакетПодвал);
        
        Итоги7  = ИтогКол7;
        Итоги8  = ИтогКол8 + ИтогКол7;
        Итоги10 = ИтогКол10 + ИтогКол8 + ИтогКол7;
        Итоги12 = ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7;
        Итоги14 = ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7;
        Итоги15 = ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7;
        Итоги16 = ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7;
        Итоги17 = ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7;
        Итоги18 = ИтогКол18 + ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7;
        Итоги20 = ИтогКол20 + ИтогКол18 + ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7;
        Итоги21 = ИтогКол21 + ИтогКол20 + ИтогКол18 + ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7;
        ИтогКолИтог =  ИтогКол24 + ИтогКол21 + ИтогКол20 + ИтогКол18 + ИтогКол17 + ИтогКол16 + ИтогКол15 + ИтогКол14 + ИтогКол12 + ИтогКол10 + ИтогКол8 + ИтогКол7;
        
        МакетРазница = Макет.ПолучитьОбласть("ПодвалРазницаПоЧасам"); 
        МакетРазница.Параметры.Установить(0, Итоги8 - Итоги7);
        МакетРазница.Параметры.Установить(1, Итоги10 - Итоги8);
        МакетРазница.Параметры.Установить(2, Итоги12 - Итоги10);
        МакетРазница.Параметры.Установить(3, Итоги14 - Итоги12);
        МакетРазница.Параметры.Установить(4, Итоги15 - Итоги14);
        МакетРазница.Параметры.Установить(5, Итоги16 - Итоги15);
        МакетРазница.Параметры.Установить(6, Итоги17 - Итоги16);
        МакетРазница.Параметры.Установить(7, Итоги18 - Итоги17);
        МакетРазница.Параметры.Установить(8, Итоги20 - Итоги18);
        МакетРазница.Параметры.Установить(9, Итоги21 - Итоги20);
        МакетРазница.Параметры.Установить(10, ИтогКолИтог - Итоги21);
        ЭлементыФормы.ТабДок.Вывести(МакетРазница);
    Иначе 
        Если Флажок1 = Ложь И Флажок2 = Ложь Тогда
            ТЗМолочка.Сортировать("Дата, Время");
            ТЗСмены = Новый ТаблицаЗначений;
            ТЗСмены = ТЗМолочка.Скопировать();
            ТЗМолочка.Свернуть("Наименование, Дата1, Время","Количество , Сумма");  
            //выводим отчет

            ЭлементыФормы.ТабДок.Очистить();
            Макет = ПолучитьМакет("Макет1");
            Заг = Макет.ПолучитьОбласть("Заголовок");
            Если ЭлементыФормы.ПолеВыбора1.Значение = "Равно" Тогда
                Заголовок = "Отчет почасовая продажа товара " + СокрЛП(Номенклатура.Наименование); 
            Иначе
                Заголовок = "Отчет почасовая продажа товара в группе: " + СокрЛП(Номенклатура.Наименование); 
            КонецЕсли;
            Если Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
                Заголовок = "Отчет почасовая продажа товара: по всей номенклатуре";
            КонецЕсли;    
            Заг.Параметры.Установить(0, Заголовок);
            ЭлементыФормы.ТабДок.Вывести(Заг);
            Заг1 = Макет.ПолучитьОбласть("Заголовок1");
            ВремяС = Формат(ВремяНач,"ДЛФ=В"); 
            ВремяПо = Формат(ВремяКон,"ДЛФ=В");
            Если ВремяС = "" Тогда
                ВремяС = "00:00:00";
            КонецЕсли;
            Если ВремяПо = "" Тогда
                ВремяПо = "00:00:00";
            КонецЕсли;    
            Заголовок1 = "С " + Формат(ДатаНач,"ДЛФ=Д") + " по " + Формат(ДатаКон,"ДЛФ=Д") + " в период времени с " + ВремяС + " по " + ВремяПо;
            Заг1.Параметры.Установить(0,Заголовок1);
            ЭлементыФормы.ТабДок.Вывести(Заг1);
            НадписьДата = Макет.ПолучитьОбласть("Дата");
            НадписьВремя = Макет.ПолучитьОбласть("Время");
            Шапка = Макет.ПолучитьОбласть("Шапка");
            ЭлементыФормы.ТабДок.Вывести(Шапка);
            Таблица = Макет.ПолучитьОбласть("Строка");
            НомерПП = 0;
            Дата = Неопределено;
            ТекстВремени = Неопределено;
            ТекстДаты = Неопределено;
            Итог = 0;
            ДатаОстаткаНач = НачалоДня(ДатаНач);
            ТЗНомерЧека = Новый ТаблицаЗначений; 
            ТЗНомерЧека.Колонки.Добавить("Номер",,"Номер");
            ТЗНомерСмены = Новый ТаблицаЗначений; 
            ТЗНомерСмены.Колонки.Добавить("Номер",,"Номер");
            ТЗНомерСМены.Колонки.Добавить("ЦЕнаРозн",,"ЦенаРозн");
            Итоги = Макет.ПолучитьОбласть("Итоги"); 
            ЭлементыФормы.ТабДок.НачатьГруппуСтрок("Таблица",Истина);
            НоваяГруппа = 0;
            КоличествоЧековВсего = 0;
            СуммаВсего = 0;
            ПрибыльВсего = 0;
            ПрибыльЧаса = 0;
            Для Счетчик = 1 По ТЗМолочка.Количество() Цикл
                НомерСтрокиТЗ = Счетчик - 1;
                НомерПП = НомерПП + 1;
                Если НЕ ТекстВремени = Строка(ТЗМолочка[НомерСтрокиТЗ].Время) + ":00 - " + Строка((ТЗМолочка[НомерСтрокиТЗ].Время + 1)) + ":00" ИЛИ НЕ ТекстДаты = ТЗМолочка[НомерСтрокиТЗ].Дата1 Тогда
                    Если НЕ Итог = 0 Тогда
                        ТЗНомерЧека.Свернуть("Номер");
                        КоличествоЧеков = ТЗНомерЧека.Количество(); 
                        Итоги.Параметры.Установить(1, Итог);
                        Итоги.Параметры.Установить(2, ПрибыльЧаса);
                        Итоги.Параметры.Установить(0, КоличествоЧеков);
                        КоличествоЧековВсего = КоличествоЧековВсего + КоличествоЧеков;
                        ЭлементыФормы.ТабДок.Вывести(Итоги);
                        Итог = 0;
                        ПрибыльЧаса = 0;
                        ТЗНомерЧека.Очистить();
                    КонецЕсли;
                    Если НоваяГруппа = 1 Тогда 
                        ЭлементыФормы.ТабДок.ЗакончитьГруппуСтрок();
                        НоваяГруппа = 0;
                    КонецЕсли;
                    НадписьВремя.Параметры.Установить(0,Строка(ТЗМолочка[НомерСтрокиТЗ].Время) + ":00 - " + Строка((ТЗМолочка[НомерСтрокиТЗ].Время + 1)) + ":00  " + ТЗМолочка[НомерСтрокиТЗ].Дата1);
                    ЭлементыФормы.ТабДок.Вывести(НадписьВремя);
                    ТЗНомерЧека.Очистить();
                    Если НоваяГруппа = 0 Тогда
                        ЭлементыФормы.ТабДок.НачатьГруппуСтрок("Дата " + ТЗМолочка[НомерСтрокиТЗ].Дата1 ,Ложь);
                        НоваяГруппа = 1;
                    КонецЕсли;
                КонецЕсли;    
                //ищем чеки и смены 

                СтруктураПоиска = Новый Структура;
                СтруктураПоиска.Вставить("Время",ТЗМолочка[НомерСтрокиТЗ].Время);
                СтруктураПоиска.Вставить("Дата1",ТЗМолочка[НомерСтрокиТЗ].Дата1);
                СтруктураПоиска.Вставить("Наименование",ТЗМолочка[НомерСтрокиТЗ].Наименование);
                СтрокиТаблицы = ТЗСмены.НайтиСтроки(СтруктураПоиска);
                Для Каждого Элемент Из СтрокиТаблицы Цикл
                    СтрокаТЗНомерЧека = ТЗНомерЧека.Добавить();    
                    СтрокаТЗНомерЧека.Номер = Элемент.НомерЧека;
                КонецЦикла;
                ТЗНомерСмены.Очистить();
                Для Каждого Элемент Из СтрокиТаблицы Цикл
                    СтрокаТЗНомерСмены = ТЗНомерСмены.Добавить();
                    СтрокаТЗНомерСмены.Номер = Элемент.НомерСмены;
                    СтрокаТЗНомерСмены.ЦенаРозн = (Элемент.Сумма / Элемент.Количество);
                КонецЦикла;
                Прибыль = ПолучитьПрибыль(ТЗМолочка[НомерСтрокиТЗ].Наименование, ТЗНомерСмены);
                Таблица.Параметры.Установить(0, НомерПП);  
                Таблица.Параметры.Установить(1, ТЗМолочка[НомерСтрокиТЗ].Наименование);
                ТекстВремени = Строка(ТЗМолочка[НомерСтрокиТЗ].Время) + ":00 - " + Строка((ТЗМолочка[НомерСтрокиТЗ].Время + 1)) + ":00";
                ТекстДаты = ТЗМолочка[НомерСтрокиТЗ].Дата1;
                Таблица.Параметры.Установить(3, ТекстВремени);
                Таблица.Параметры.Установить(4, ТЗМолочка[НомерСтрокиТЗ].Количество);
                ДатаОстаткаКон = Дата(ТЗМолочка[НомерСтрокиТЗ].Дата1 + " " + ТЗМолочка[НомерСтрокиТЗ].Врем
   Nemirov
 
2 - 09.10.19 - 08:35
(1) Функция ПолучитьИнтервалыЧасов (Период)
    
    СтрокаЧас = 0;
    Если Период < 7 Тогда
        СтрокаЧас = 7;
    ИначеЕсли Период >= 7 И Период < 8 Тогда
        СтрокаЧас = 8;
    ИначеЕсли Период >= 8 И Период < 10 Тогда
        СтрокаЧас = 10;
    ИначеЕсли Период >= 10 И Период < 12 Тогда
        СтрокаЧас = 12;
    ИначеЕсли Период >= 12 И Период < 14 Тогда
        СтрокаЧас = 14;
    ИначеЕсли Период >= 14 И Период < 15 Тогда
        СтрокаЧас = 15;
    ИначеЕсли Период >= 15 И Период < 16 Тогда
        СтрокаЧас = 16;
    ИначеЕсли Период >= 16 И Период < 17 Тогда
        СтрокаЧас = 17;
    ИначеЕсли Период >= 17 И Период < 18 Тогда
        СтрокаЧас = 18;
    ИначеЕсли Период >= 18 И Период < 20 Тогда
        СтрокаЧас = 20;
    ИначеЕсли Период >= 20 И Период < 21 Тогда
        СтрокаЧас = 21;
    ИначеЕсли Период >= 21  Тогда
        СтрокаЧас = 24;
    КонецЕсли;
    Возврат СтрокаЧас;
    
    
КонецФункции
   Ненавижу 1С
 
3 - 09.10.19 - 08:38
сделайте ограничение по времени в запросе, а не в коде, а то похоже вы тяните всю таблицу
   Nemirov
 
4 - 09.10.19 - 12:14
Ограничение убрал теперь вообще 23 час не доступен Все расечты до 22:59

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.