Имя: Пароль:
1C
1C 7.7
v7: ТИС: отчет за период и без выходных дней
,
0 Kapystin
 
22.12.14
17:42
Добрый день.

Подскажите как можно в запросе указать условие отбора без выходных дней?

мне нужно вывести информацию в таблицу при помощи запроса.
и чтобы информация за выходной день не попадала.

ТекстЗапроса = "            
    |Период с НачДата по КонДата;  
    |Фирма                 = Регистр.ПартииНаличие.Фирма;
    |Себестоимость        = Регистр.ПартииНаличие.СуммаРуб;            
    |
    |Функция КО = КонОст(Себестоимость);

//    |Условие (                            
    |Условие (Фирма = Фирма1);  
    |Группировка День;
    |";
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Сообщить("Ошибка в запросе");
        Возврат;
    КонецЕсли;  
    
    Пока Запрос.Группировка("День") = 1 Цикл
            
        ТабДата = Запрос.День;
        ТабСебестоимость = Запрос.КО;
    
        Таблица.ВывестиСекцию("Строка");  
        
    КонецЦикла;
    Таблица.Показать();
1 mikecool
 
22.12.14
17:44
как это влияет на себестоимость?
2 Kapystin
 
22.12.14
17:44
никак, просто хочу чтобы в отчет не попадала инфа за выходные дни
3 Aleksey
 
22.12.14
17:46
Ф у функции есть параметр Когда
плюс можно внешнюю функцию заюзать
4 mikecool
 
22.12.14
17:47
(2) когда деньНедели 6 или 7 тогда продолжить
5 Mutniy2
 
22.12.14
17:49
(3) Все бы хорошо, но какую переменную запроса анализировать собираешся? "День"? не думаю, что сработает.
6 Aleksey
 
22.12.14
17:51
(5) Регистр.ТекущийДокумент.ДатаДок
7 Kapystin
 
22.12.14
17:52
(5) Регистр.ТекущийДокумент.ДатаДок
а каким образом условие в запросе составить?
8 Aleksey
 
22.12.14
17:53
(7) На функцию условие вешай, чтобы когда суббота или воскресенье он брал 0 иначе из регистра
9 Aleksey
 
22.12.14
17:54
Хотя ... конечный остаток... может не сработать
10 Kapystin
 
22.12.14
17:55
спасибо огромное, теперь буду пробовать
не не не КО обязателен.
может есть еще варианты?
11 spectre1978
 
22.12.14
21:11
(10) Минутку. Если я правильно помню структуру регистра в семерке, там есть таблица движений и таблица итогов. В случаях когда период запроса превышает период сохранения итогов, используются таблицы итогов. Но свертка итогов в эти таблицы осуществляется по всем движениям, и этот процесс программистом никак не может быть изменен.
Таким образом, если даже мы сумеем исключить из КО выходные в периоде менее периода сохранения итогов, то в случае периода более периода сохранения итогов в запросе будут использованы таблицы итогов, из которых возьмутся данные по всем движениям. В том числе с учетом выходных. Таким образом, в результате будет белиберда - где-то исключены выходные, где-то нет. Похоже, задача нерешаема...
12 Mutniy2
 
22.12.14
21:23
(6) > Регистр.ТекущийДокумент.ДатаДок
Нету такого
Есть Регистр.ВидРегистра.ТекущийДокумент.ВидДокумента.ДатаДок;
+ вопрос по остаткам!!!
13 Mutniy2
 
22.12.14
21:25
Лучше фильтровать при выводе.
14 Kapystin
 
23.12.14
08:47
(13) Уточните как это? примером
я так понимаю в запросе УСЛОВИЕ ФУНКЦИЯ (функция которая будет проверять на день недели) не нужно использовать.

а уже в цикле по группировке производить отбор?
15 Mutniy2
 
23.12.14
08:59
Что ты собираешся делать с запросом?
16 Kapystin
 
23.12.14
09:09
в запросе указать
    |Условие (ВыходнойДень(ТекДок) = 1);
а функция проверяет на
Функция ВыходнойДень(ТекДок)
    ДатДок = ТекДок.ДатаДок;
    Сообщить(НомерДняНедели(ДатДок));
    Если (НомерДняНедели(ДатДок) = 6) или (НомерДняНедели(ДатДок) = 7) Тогда
        Возврат 0;
    Иначе
        Возврат 1;
    КонецЕсли;
т.е мы не выводим инфу за выходные дни

я вот так сделал
17 Kapystin
 
23.12.14
09:39
Функция ВыходнойДень(ТекДок)
    ДатДок = ТекДок.ДатаДок;
    Сообщить(НомерДняНедели(ДатДок));
    Если (НомерДняНедели(ДатДок) = 6) или (НомерДняНедели(ДатДок) = 7) Тогда
        Возврат 0;
    Иначе
        Возврат 1;
    КонецЕсли;  
  
    //Сообщить(ТекДок);
    //Сообщить(ДатДок);
    
КонецФункции


Процедура Сформировать()
    
    Фирмы = СоздатьОбъект("Справочник.Фирмы");
    Фирмы.НайтиПоКоду("ВР001");  
    ФирмаЭлис = Фирмы.ТекущийЭлемент();
    
    Таблица = СоздатьОбъект("Таблица");
    Таблица.ВывестиСекцию("Заголовок");
    Таблица.ВывестиСекцию("Шапка");
                                       
    Запрос = СоздатьОбъект("Запрос");
        
    ТекстЗапроса = "            
    |Период с НачДата по КонДата;  
    |Фирма                 = Регистр.ПартииНаличие.Фирма;
    |Себестоимость        = Регистр.ПартииНаличие.СуммаРуб;            
    |ТекДок                = Регистр.ПартииНаличие.ТекущийДокумент;
    |    
    |Функция ПР = Приход(Себестоимость);  
    |Функция РА = Расход(Себестоимость);
    |Функция КО = КонОст(Себестоимость);

    |Условие (ВыходнойДень(ТекДок) = 1);                            
    |Условие (Фирма = ФирмаЭлис);
    |Группировка День;  
    
    |";
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Сообщить("Ошибка в запросе");
        Возврат;
    КонецЕсли;  
    ТЗ = "";
    Запрос.Выгрузить(ТЗ);
    ТЗ.ВыбратьСтроку();  
    //
    Пока Запрос.Группировка("День") = 1 Цикл
            
        ТабДата = Запрос.День;
        ТабСебестоимость = Запрос.КО;
        Таблица.ВывестиСекцию("Строка");
        ТабСебестоимость = "";
        //    Сообщить(Запрос.ТекДок);
        //    Сообщить(Запрос.КО);
        //    Сообщить(Запрос.Фирма);
            
    КонецЦикла;
    Таблица.Показать();
КонецПроцедуры  
ОчиститьОкноСообщений();


Ошибка в том что в отчет выводится информация за ВЫХОДНЫЕ!
данные в СУББОТУ И ВОСКРЕСЕНЬЕ идентичны что и в ПЯТНИЦУ.

Возможно есть вариант не выводить просто дни выходные(функция не помогла)
или сделать нулевыми данные за ВЫХОДНЫЕ(повторюсь что инфа на выходных идентична ПЯТНИЦЕ)

как это исправить?
Спасибо
18 Kapystin
 
23.12.14
09:41
ДАТА    Себестоимость
14.11.14    54769168.69    пятница
15.11.14    54769168.69    суббота        
16.11.14    54769168.69    воскресение
17.11.14    56631635.88    понедельниу

что добавить в запрос или какие можно внести изменения чтобы ВЫХОДНЫЕ были НУЛЕВЫЕ или Пустые
19 Mutniy2
 
23.12.14
16:11
Еще раз, в черном запросе ты такое не отфильтруешь.
Нет там переменной "День".
Фильровать надо тут:


   Пока Запрос.Группировка("День") = 1 Цикл
        ТабДата = Запрос.День; // < тут надо спотреть и отбрасывать выходные.
        ТабСебестоимость = Запрос.КО;
        Таблица.ВывестиСекцию("Строка");
        ТабСебестоимость = "";
    КонецЦикла;
20 Kapystin
 
23.12.14
17:43
Вот только разобрался хотел написать как у самого получилось допетрить))))

а тут уже добрый народ разжевал все!!!
Спасибо ВСЕМ огромное.
21 Злопчинский
 
24.12.14
02:33
Вполне можно все в запрсе получить/отфильтровать по типу как в (17)
22 Kapystin
 
24.12.14
08:59
Если у кого-то будет время подскажите как это можно в запросе отфильтровать?
23 lavalit
 
24.12.14
13:59
В запросе легко
Условие(ДеньВыходной(День)=0);

А вот отдельно от запроса ставь функцию
Функция ДеньВыходной(дата)
Перем Рез;
// Здесь блабла бла выясняешь выходной это или нет
// можно для этого использовать "рабочий календарь" если он //есть в конфиге просто не помню в ТиС оно есть или нет в //комплексной и в производстве точняк есть
//из него получишь не только сб и вскр но и праздники если //оно надо тебе
устаканиваешь  переменку рез = 0 или 1
Возврат Рез;
КонецФункции

В результате получишь  выборку в запросе с уже выполненным условием по выхам. дополнительно не надо проверять.
24 lavalit
 
24.12.14
14:02
Ну конечно
Функция ДеньВыходной(ПроверяемаяДата)
...просто "Дата" низзя ))) оно обругается)))
25 Mutniy2
 
24.12.14
14:03
А я говорю, что в черном запросе не получится.
Ведь он хочет остатки получить, а не движения.
26 lavalit
 
24.12.14
14:19
ну тогда использовать не условие а
Функция КО = КонОст(Себестоимость) Когда(ДеньВыходной(День)=0);
27 Kapystin
 
24.12.14
16:29
ок, спасибо
28 lavalit
 
24.12.14
17:35
какой вариант получился в итоге?
29 Kapystin
 
24.12.14
18:24
В цикле.

После изменения в запросе себе себестоимость пропала.
дату выводит верно, а себестоимость 0.

|Функция КО = КонОст(Себестоимость) Когда (ВыходнойДень(ТекДок)=0);

Спасибо за помощь