Имя: Пароль:
1C
1С v8
Как присоединить таблицу за прошлый год и вывести ее в отчет.
,
0 progaoff
 
18.09.15
14:58
Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |ДвижениеДенежныхСредствОбороты.Организация КАК Организация,
    |ДвижениеДенежныхСредствОбороты.Период КАК Неделя,
    |ЕСТЬNULL(ДвижениеДенежныхСредствОбороты.СуммаОборот, 0) КАК Сумма,
    |ВесьМесяц.Месяц КАК Месяц,
    |ВесьМесяц.СуммаЗаМесяц КАК СуммаЗаМесяц,
    |ВесьМесяцСтарый.МесяцСтарый,
    |ЕСТЬNULL(ВесьМесяцСтарый.СредняяВыручкаЗаСмену,0) КАК СуммаЗаМесяцСтарый
    |ИЗ
    |РегистрНакопления.ДвижениеДенежныхСредств.Обороты(&НачПериода, &КонПериода, Неделя, Статья В (&СЗ)) КАК ДвижениеДенежныхСредствОбороты
    |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |        ДвижениеДенежныхСредствОбороты.Организация КАК Организация,
    |        СУММА(ЕСТЬNULL(ДвижениеДенежныхСредствОбороты.СуммаОборот, 0)) КАК СуммаЗаМесяц,
    |        ДвижениеДенежныхСредствОбороты.Период КАК Месяц
    |    ИЗ
    |        РегистрНакопления.ДвижениеДенежныхСредств.Обороты(&НачПериодаМес, &КонПериодаМес, Месяц, Статья В (&СЗ)) КАК ДвижениеДенежныхСредствОбороты
    |    
    |    СГРУППИРОВАТЬ ПО
    |        ДвижениеДенежныхСредствОбороты.Организация,
    |        ДвижениеДенежныхСредствОбороты.Период) КАК ВесьМесяц
    |    ПО ДвижениеДенежныхСредствОбороты.Организация = ВесьМесяц.Организация
    |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |        УчетнаяПолитика.Организация КАК Организация,
    |        УчетнаяПолитика.Период КАК МесяцСтарый,
    |        УчетнаяПолитика.СредняяВыручкаЗаСмену КАК СредняяВыручкаЗаСмену
    |    ИЗ
    |        РегистрСведений.УчетнаяПолитика КАК УчетнаяПолитика
    |    ГДЕ
    |        УчетнаяПолитика.Период МЕЖДУ &НачПериодаМесСтарый И &КонПериодаМесСтарый
    |    
    |    СГРУППИРОВАТЬ ПО
    |        УчетнаяПолитика.Организация,
    |        УчетнаяПолитика.Период,
    |        УчетнаяПолитика.СредняяВыручкаЗаСмену) КАК ВесьМесяцСтарый
    |    ПО ДвижениеДенежныхСредствОбороты.Организация = ВесьМесяцСтарый.Организация
    |
    |    УПОРЯДОЧИТЬ ПО
    |Организация,
    |Неделя
    |    ИТОГИ
    |СУММА(Сумма),
    |СУММА(СуммаЗаМесяц)
    |    ПО
    |Организация,
    |Неделя";
    
    СЗ=Новый СписокЗначений;
    СЗ.Добавить(Справочники.СтатьиРасходов.ВыручкаПарикмахерскийЗал);
    СЗ.Добавить(Справочники.СтатьиРасходов.ВыручкаМаникюрныйКабинет);
    СЗ.Добавить(Справочники.СтатьиРасходов.ВыручкаКосметология);
    СЗ.Добавить(Справочники.СтатьиРасходов.ВыручкаМассажныйКабинет);
    СЗ.Добавить(Справочники.СтатьиРасходов.В);
    СЗ.Добавить(Справочники.СтатьиРасходов.В);
    СЗ.Добавить(Справочники.СтатьиРасходов.П);
    СЗ.Добавить(Справочники.СтатьиРасходов.П);
    СЗ.Добавить(Справочники.СтатьиРасходов.П);
    СЗ.Добавить(Справочники.СтатьиРасходов.П);
    СЗ.Добавить(Справочники.СтатьиРасходов.И);
    СЗ.Добавить(Справочники.СтатьиРасходов.Пр);
    СЗ.Добавить(Справочники.СтатьиРасходов.Пр);
    
    НачПериода1=НачалоНедели(НачПериода);
    КонПериода1=КонецНедели(КонПериода);
    НачПериодаМес=НачалоДня(НачПериода);
    КонПериодаМес=КонецДня(КонПериода);
    НачПериодаМесСтарый=НачалоМесяца(ДобавитьМесяц(НачПериода,-12));
    КонПериодаМесСтарый=КонецМесяца(ДобавитьМесяц(КонПериода,-12));
    Запрос.УстановитьПараметр("НачПериода",НачПериода1);
    Запрос.УстановитьПараметр("КонПериода",КонПериода1);
    Запрос.УстановитьПараметр("НачПериодаМес",НачПериодаМес);
    Запрос.УстановитьПараметр("КонПериодаМес",КонПериодаМес);
    Запрос.УстановитьПараметр("НачПериодаМесСтарый",НачПериодаМесСтарый);
    Запрос.УстановитьПараметр("КонПериодаМесСтарый",КонПериодаМесСтарый);
    Запрос.УстановитьПараметр("СЗ",СЗ);
    КолвоДнейВМесяце=Цел((КонПериодаМес-НачПериодаМес)/86400)+1;
    КолвоДнейВМесяцеСтаром=Цел((КонПериодаМесСтарый-НачПериодаМесСтарый)/86400)+1;
    Результат=Запрос.Выполнить();
    
    ТабличныйДокумент = ЭлементыФормы.ПолеТабличногоДокумента1;
    ТабличныйДокумент.Очистить();
    
    Макет = ПолучитьМакет("Макет");
    Область = Макет.ПолучитьОбласть("Шапка|Общая");
    

    ТабличныйДокумент.Вывести(Область);
    Область = Макет.ПолучитьОбласть("Шапка|Выручка");
    Область.Параметры.Неделя=ПредставлениеПериода(НачПериодаМесСтарый,КонПериодаМесСтарый);
    ТабличныйДокумент.Присоединить(Область);
    ВыборкаДетальныеЗаписи = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Неделя","Все");
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Область.Параметры.Неделя=ПредставлениеПериода(ВыборкаДетальныеЗаписи.Неделя,КонецНедели(ВыборкаДетальныеЗаписи.Неделя));
        ТабличныйДокумент.Присоединить(Область);
    КонецЦикла;
    Область.Параметры.Неделя=ПредставлениеПериода(НачПериодаМес,КонПериодаМес);
    ТабличныйДокумент.Присоединить(Область);
    
    ВыборкаОрганизация=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Организация");
    Пока ВыборкаОрганизация.Следующий() Цикл
        Область = Макет.ПолучитьОбласть("Город|Общая");
        Область.Параметры.Город=ВыборкаОрганизация.Организация;
        ТабличныйДокумент.Вывести(Область);
        Область = Макет.ПолучитьОбласть("Город|Выручка");
        ВыборкаДетальныеЗаписи = ВыборкаОрганизация.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Неделя","Все");
        ПерваяНеделя=Истина;
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Попытка
                СуммаЗаМесяц=Окр(ВыборкаДетальныеЗаписи.СуммаЗаМесяц/КолвоДнейВМесяце,2);
            Исключение
                СуммаЗаМесяц=0;
            КонецПопытки;
            Попытка
                СуммаЗаМесяцСтарый    
            Исключение
                СуммаЗаМесяцСтарый=0;
            КонецПопытки;
            Если ПерваяНеделя Тогда
                Область.Параметры.ОбщаяВыручка=СуммаЗаМесяцСтарый;
                ТабличныйДокумент.Присоединить(Область);
                ПерваяНеделя=Ложь;
            КонецЕсли;
        
            Попытка
                Область.Параметры.ОбщаяВыручка=Окр(ВыборкаДетальныеЗаписи.Сумма/7);
                
            Исключение
                Область.Параметры.ОбщаяВыручка=0;
            КонецПопытки;
            ТабличныйДокумент.Присоединить(Область);
            
        КонецЦикла;
        Область = Макет.ПолучитьОбласть("Город|Выручка");
        Область.Параметры.ОбщаяВыручка=СуммаЗаМесяц;
        ТабличныйДокумент.Присоединить(Область);
        СоотношениеКПрошломуГоду = Окр(СуммаЗаМесяц-СуммаЗаМесяцСтарый)/СуммаЗаМесяцСтарый*100;
        Область = Макет.ПолучитьОбласть("ПрошлыйГод|Город");
        Область.Параметры.ОбщаяВыручкаП = СоотношениеКПрошломуГоду;
        ТабличныйДокумент.Присоединить(Область);

    КонецЦикла;
        
    //установим параметры отображения табличного документа
    ТабличныйДокумент.ТолькоПросмотр = Ложь;
    ТабличныйДокумент.ОтображатьЗаголовки = Ложь;
    ТабличныйДокумент.ОтображатьСетку = Ложь;
    ТабличныйДокумент.АвтоМасштаб=Истина;
    ТабличныйДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
    ТабличныйДокумент.ФиксацияСверху=3;
    //покажем табличный документ на экране
    ТабличныйДокумент.Показать();
Есть данные за прошлый год они хранятся в РС УчетныеПолитики данные за этот год я беру из РН движениеДС потом их считаю и вывожу за каждую неделю. Не могу вывести данные из РС при расчете пишет либо null либо деление на ноль
1 ВедущийП
 
18.09.15
15:04
Зачем два соединения с РН?
2 ВедущийП
 
18.09.15
15:05
Понял зачем. Ошибка в том что группировки есть, а функций нет. Добавь Сумма() в ресерсе РС
3 ВедущийП
 
18.09.15
15:06
т.е. среднюювыручкузасмену надо сделать ресурсом а не группировкой
4 progaoff
 
18.09.15
15:17
ЕСТЬNULL(ВесьМесяцСтарый.СредняяВыручкаЗаСмену,0) КАК СуммаЗаМесяцСтарый сюда еще сумму прилепить? (3) (3)
5 ВедущийП
 
18.09.15
15:18
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |        УчетнаяПолитика.Организация КАК Организация,
    |        УчетнаяПолитика.Период КАК МесяцСтарый,
    |        СУММА(УчетнаяПолитика.СредняяВыручкаЗаСмену) КАК СредняяВыручкаЗаСмену
    |    ИЗ
    |        РегистрСведений.УчетнаяПолитика КАК УчетнаяПолитика
    |    ГДЕ
    |        УчетнаяПолитика.Период МЕЖДУ &НачПериодаМесСтарый И &КонПериодаМесСтарый
    |    
    |    СГРУППИРОВАТЬ ПО
    |        УчетнаяПолитика.Организация,
    |        УчетнаяПолитика.Период) КАК ВесьМесяцСтарый
6 progaoff
 
18.09.15
15:26
да, результат есть, но цифра сильно маленькая...
7 progaoff
 
18.09.15
15:28
блин ступил она же делится у меня на количество дней в месяце
8 ВедущийП
 
18.09.15
15:30
(7) убери период и группировку по периоду, оставь только отбор по периоду.тогда у тебя будет сумма за месяц
9 ВедущийП
 
18.09.15
15:32
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |        УчетнаяПолитика.Организация КАК Организация,
    |        СУММА(УчетнаяПолитика.СредняяВыручкаЗаСмену) КАК СредняяВыручкаЗаСмену
    |    ИЗ
    |        РегистрСведений.УчетнаяПолитика КАК УчетнаяПолитика
    |    ГДЕ
    |        УчетнаяПолитика.Период МЕЖДУ &НачПериодаМесСтарый И &КонПериодаМесСтарый
    |    
    |    СГРУППИРОВАТЬ ПО
    |        УчетнаяПолитика.Организация) КАК ВесьМесяцСтарый
10 ВедущийП
 
18.09.15
15:34
а это что?
Попытка
                СуммаЗаМесяцСтарый    
            Исключение
                СуммаЗаМесяцСтарый=0;
            КонецПопытки;
11 ВедущийП
 
18.09.15
15:36
А это?
СоотношениеКПрошломуГоду = Окр(СуммаЗаМесяц-СуммаЗаМесяцСтарый)/СуммаЗаМесяцСтарый*100;

окр применяется к разнице сумм, а не к результату выражения.
12 ВедущийП
 
18.09.15
15:37
А проверку деленияна ноль через попытку..исключение я вообще первый раз вижу :)
13 progaoff
 
18.09.15
15:40
(9) красота) я попытку делал что бы увидеть результат)
14 progaoff
 
18.09.15
15:40
(13) спасибо большое
15 progaoff
 
18.09.15
15:41
(11) это соотношение к прошлому году вычисляется
16 progaoff
 
18.09.15
15:42
(11) а че там не так??
17 ВедущийП
 
18.09.15
15:43
(15) да, но ты наверное хочешь процент округлить до целых.
СоотношениеКПрошломуГоду = Окр((СуммаЗаМесяц-СуммаЗаМесяцСтарый)/СуммаЗаМесяцСтарый*100);
18 ВедущийП
 
18.09.15
15:43
(16) смысла нет округлять результат вычитания
19 progaoff
 
18.09.15
15:45
ааа....понял...ну да тоже тупость
20 ВедущийП
 
18.09.15
15:53
(13) Увидеть результат чего? не совсем понял.
Попытка
СуммаЗаМесяц=Окр(ВыборкаДетальныеЗаписи.СуммаЗаМесяц/КолвоДнейВМесяце,2);
Исключение
СуммаЗаМесяц=0;
КонецПопытки;

нужно заменить на
СуммаЗаМесяц=Окр(?(КолвоДнейВМесяце=0, 0, ВыборкаДетальныеЗаписи.СуммаЗаМесяц/КолвоДнейВМесяце,2);
21 ВедущийП
 
18.09.15
15:54
скобку пропустил...
СуммаЗаМесяц=Окр(?(КолвоДнейВМесяце=0, 0, ВыборкаДетальныеЗаписи.СуммаЗаМесяц/КолвоДнейВМесяце),2);
22 progaoff
 
18.09.15
15:56
а что это даст?
23 ВедущийП
 
18.09.15
15:56
Тут "Исключение" никогда не сработает, можно оставить только то, что в блоке "Попытка"

Попытка
Область.Параметры.ОбщаяВыручка=Окр(ВыборкаДетальныеЗаписи.Сумма/7);
Исключение
Область.Параметры.ОбщаяВыручка=0;
КонецПопытки;
24 ВедущийП
 
18.09.15
15:57
(22) А зачем ты делал блок "Попытка", не для проверки на ноль? Т.к. он срабатывает только если вызывается исключение, в данном случае оно может быть только при делении на ноль. Вот я  и проверяю КолвоДнейВМесяце на равенство нулю, если выполняется, возвращается 0, иначе расчитывается выражение.
25 progaoff
 
18.09.15
16:06
(24) т.е можно было без попыток сделать все?