Имя: Пароль:
1C
1С v8
Как в запросе СКД получить 2 результата запроса на разные даты
, ,
0 tciban
 
28.02.23
07:15
Уважаемые коллеги! Делаю на СКД отчет по оборачиваемости для 10.3 Ничего хитрого, но начальству нужно получить начало/приход/расход/оборачиваемость за квартал и за последний месяц квартала. Это фактически один и тот же запрос, только периоды и периодичность разные. И вот мне стало интересно - можно ли как то извернуться и не писать объединение 2-х одинаковых запросов, а как то так сделать, что бы был один запрос куда передается параметрами период и периодичность?
1 НафНаф
 
28.02.23
08:11
(0) Остатки обороты с периодичностью месяц и периодом квартал, поля придется сделать самому - ВЫБОР КОГДА ТОГДА
2 tciban
 
28.02.23
08:50
(1) Разве нельзя написать РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
            НАЧАЛОПЕРИОДА(&НачалоПериода, &Периодичность),
            КОНЕЦПЕРИОДА(&КонецПериода, &Периодичность),
            &Периодичность,
            ДвиженияИГраницыПериода,
            {Склад, Номенклатура}) КАК ТоварыНаСкладахОстаткиИОбороты
3 tciban
 
28.02.23
10:42
Ладно, фиг с ним, с одним запросом вместо двух одинаковых! Теперь другая проблема! Написал запрос, в консоли запросов проверил, все хорошо. Считает за Квартал и за последний месяц квартала. А вставил запрос в СКД - он стало мне выдавать еще и за первый и второй месяц квартала!!! Что делать - ума не приложу :(
4 DJ Anthon
 
28.02.23
10:45
параметры в запросе скд надо в фигурных скобочках писать, иначе он свои создает
5 DJ Anthon
 
28.02.23
10:46
воспользуйся консолью с перехватом запроса из скд, увидишь новые параметры
6 vicof
 
28.02.23
10:46
И автозаполнение отключать
7 tciban
 
28.02.23
10:50
Для параметров использовал стандартные имена НачалоПериода и КонецПериода. У периода роль выключил. Не помогает!
8 tciban
 
28.02.23
10:51
(5) это в ИР где то есть?
9 PR
 
28.02.23
10:55
(0) >>можно ли как то извернуться и не писать объединение 2-х одинаковых запросов...
Зачем?
10 tciban
 
28.02.23
10:56
(9) потому что 2 совершенно одинаковых запроса. И если добавлять что то - менять оба, не слишком удобно
11 Обработка
 
28.02.23
11:00
(10) В чем неудобность?
В кодинге иногда повтор помогает не заморачиваясь на сложное решение.
Что у вас запрос выполняется сутками что ли?
Или код запроса километровый?
12 tciban
 
28.02.23
11:08
(11) Честно говоря никакой сложности, чистое любопытство - можно ли сделать так, без повтора кода
13 tciban
 
28.02.23
11:09
(11) Просто когда нибудь может оказаться  и запрос с километровым кодом на сутки выполнения... Вот тогда это знание и пригодится
14 tciban
 
28.02.23
11:10
Но сейчас у меня в полный рост другая проблема.
15 PR
 
28.02.23
11:11
(10) И что?
16 PR
 
28.02.23
11:13
(12) Лучше так не делать
И вряд ли так можно
17 PR
 
28.02.23
11:13
(14) Сейчас у тебя одна проблема, слишком много свободного времени на всякую хрень
18 Обработка
 
28.02.23
11:21
(0)
1. Вытащи в первом запросе за период квартал но с периодичностью месяц.
2. Сделай с него ВТ
3. Дальше делай что хочешь.

В результате то что ты хотел решаешь.
1. Запрс к данным 1 раз.
2. запрос не зависит от длины кода первичного запроса.
19 АгентБезопасной Нацио
 
28.02.23
11:38
(8) есть и в ИР, есть (на ИТС) и штатный с селезневки.
20 АгентБезопасной Нацио
 
28.02.23
11:40
(18) из помесячной оборачиваемости за три месяца не получить оборачиваемость за квартал
21 Обработка
 
28.02.23
12:04
(20) Ой пардон не подумал. Да и внимательно не читал.
Но а если вытащить нужные цифры в Вт и там уже обработать вычислениями эти данные?
22 Галахад
 
гуру
28.02.23
12:06
Посчитать в модуле. Передать в СКД таблицу значений.
23 Обработка
 
28.02.23
12:08
Вот формула оборачиваемости:
Обдн = Средний товарный запас за период × Количество дней / Товарооборот за период.

Можно же это и по отдельности можно и в целом подсчитать?
24 tciban
 
28.02.23
12:15
В общем посмотрел запрос. Коварная СКд заменила, там где у меня было написано
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&КонецПериода, МЕСЯЦ), КОНЕЦПЕРИОДА(&КонецПериода, МЕСЯЦ), МЕСЯЦ, ДвиженияИГраницыПериода, {(Склад), (Номенклатура)}) КАК ТоварыНаСкладахОстаткиИОбороты

она заменила на:
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&П, &П2, МЕСЯЦ, ДвиженияИГраницыПериода, ((Склад) В(&П3)) И (Номенклатура) В ИЕРАРХИИ(&П4)) КАК ТоварыНаСкладахОстаткиИОбороты
А в П и П2 засунула начало и конец квартала!!!
Кто нибудь преодолевал такое поведение СКД?
25 НафНаф
 
28.02.23
13:56
(24) параметры надо готовить на уровне СКД, а не на уровне запроса
26 tciban
 
28.02.23
14:51
(25) И все равно СКД подменит в ТоварыНаСкладах.ОстаткиИОбороты начальную и конечную дату на П и П2
27 tciban
 
28.02.23
14:52
Мне же нужно что бы в одном месте был один период (квартал) а в другом - другой (месяц)
28 tciban
 
28.02.23
14:52
впрочем заборол уже. Некрасиво заборол, через ГДЕ
29 АгентБезопасной Нацио
 
28.02.23
15:55
(23) Ну да, только надо отдельно показатели считать по каждому месяцу, а уже на их основании оборачиваемость.
(28) вариантов несколько. Например, у периода сделать номер, суммировать по нему, затем вычислять оборачиваемость. Длинновато, зато одним запросом. Или вычислять оборачиваемость в вычисляемых полях. Запрос простой, зато выражения длинные
30 tciban
 
01.03.23
08:09
Коллеги! А вот такой вопрос по оборачиваемости: Оборачиваемость считаю как расход/средний остаток за период. Так вот - вы перемещения берете в расчет? Ну т.е. в расход включаете расход по перемещениям? или только продажи?

Ну и интересно кто как считает средний остаток. Я по простому пока посчитал (Остаток на начало+остаток на конец)/2, но как я понимаю самая точная формула среднего остатка - сумма остатков на каждый день/количество дней
31 НафНаф
 
01.03.23
08:11
(26) нет
32 АгентБезопасной Нацио
 
01.03.23
08:27
(30) смотря какую оборачиваемость и для чего считаешь. Оборачиваемость товара на складе - это один показатель. Оборачиваемость товара в компании - совершенно другой.
твой расчет среднего остатка - сверхидиотский. Впрочем, к "сумме остатков за каждый день" тоже есть претензии
33 tciban
 
01.03.23
09:57
Сумма остатков за каждый день это которая средняя хронологическая моментального ряда? Которая как сумма всех остатков на каждый день деленное на количество дней? А к нему то какие претензии? На утро брать остаток или на вечер каждого дня?
34 АгентБезопасной Нацио
 
01.03.23
10:54
(33) >>>А к нему то какие претензии? На утро брать остаток или на вечер каждого дня?  - а вот именно такие.
Представь, что тебе, грузчику, зарплату начисляют по оборачиваемости склада. И утром машина приходит, ты ее разгружаешь. В течение дня загружаешь в уходящие машины. И на вечер, уставший, убеждаешься, что остаток - ноль.  И так каждый день. Приходишь за зарплатой, а оборачиваемость у тебя - ноль!
35 tciban
 
01.03.23
11:17
ну хорошо, а как вычисление среднего вот тут https://infostart.ru/public/92490/ и тут http://www.gilev.ru/остатки-на-каждый-день/ ?
36 tciban
 
01.03.23
11:19
Ну и насчет темы с грузчиком - для них помашинно думаю считают, а обсуждаемые способы расчета среднего - для других расчетов. Кстати, во всех статьях пишут что чем меньше оборачиваемость - тем лучше, значит 0 - это совсем хорошо? :)
37 АгентБезопасной Нацио
 
01.03.23
12:32
(35) Для некоторых целей - хорошо. Для некоторых - бесполезно.
(36)>>Rстати, во всех статьях пишут что чем меньше оборачиваемость - тем лучше - Значит, вы какие-то неправильные статьи читаете. А нужно просто подумать- каждый "оборот" (хоть товара, хоть денег) приносит некоторый положительный эффект, называемый прибылью. И вот подумайте, лучше один раз обернуть свои деньги с прибылью, или несколько? (хотя и тут "есть варианты".)
38 tciban
 
01.03.23
12:47
(37) под оборачиваемостью я понимал скорость продаж, коэффициент оборачиваемости, т.е. я в (36) неясно выразился, виноват. Ну а чем выше скорость оборотов тем оно лучше (бизнесу) это да.
39 АгентБезопасной Нацио
 
01.03.23
12:53
(38) "под оборачиваемостью я понимал скорость продаж" - а надо понимать все-таки оборачиваемость.  Ибо кроме продаж нужны еще и закупки. В общем, традиционно - "никогда не считайте разные коэффициенты, если не представляете, что с ними делать дальше"©
40 tciban
 
09.03.23
14:48
Уважаемые коллеги! В силу того, что ветку с моим вопросом сочли продолжением этой (ну да, это про тот же отчет, который я делаю дальше, но про другое!) и закрыли, напишу свой вопрос тут:

Делаю отчет на СКД. В нем получаю по некоей формуле средний остаток на складах за месяц, запрос нехитрый - временная таблица и потом из нее получаю нужное. Но дело даже не в том, что я там получаю, а в том, что нужны данные за за выбранный месяц плюс за аналогичный месяц прошлого года плюс за предыдущий месяц. Ну что бы сравнивать могли. Короче нужно им и все. А вообще отчет нужно за квартал по месяцам. Т.е. по сути надо один и тот же запрос повторить 7 раз с разными месяцами. Как это написать в рамках одного запроса для СКД? В голове как то не укладывается никак

7 раз одно и тоже через ОБЪЕДИНИТЬ ВСЕ. Это первое, что приходит в голову. И будет портянка. А если понадобиться извлечь еще какие нидуь данные - менять в 7 местах. Как то рука не поднимается такое делать. Это заложить себе проблем на будущее. Ищу способ сделать как нибудь иначе

Сделать ТЗ и передать в СКД вместо использования запроса - то же не совсем красиво, теряю возможность нормального использования отборов (которые вроде как должны оптимизировать запрос) и прочих плюшек СКД.

Может есть еще способ?
41 PR
 
09.03.23
14:51
(40) И что же в твоем "новом" вопросе нового?
То, что теперь объединений не 2, а 7?
Ну охренеть теперь, срочно начинаем обсуждать все заново
42 PR
 
09.03.23
14:52
+(41) Начни с ответа на (15) что ли
43 tciban
 
09.03.23
14:55
(41) Нового в том, что первый вопрос у меня был в подмене параметров НачалоПериода и КонецПериода СКД на свои параметры. А второй совсем с этим не связан, второй вопрос у меня о том, как имея запрос скажем так средней сложности повторить для 7 различных периодов которые впрочем легко вычисляются из 1-го параметра. Как это сделать не повторяя 7 раз один и тот же текст запроса. Надеюсь я сумел понятно изложить разницу? И поскольку с моей точки зрения это совершенно не связанные проблемы, я открыл новую тему.
44 PR
 
09.03.23
14:58
(43) Либо через ОБЪЕДИНИТЬ либо через ВЫБОР во всех полях, зависящих от этого параметра (при условии, что объединения не пересекающиеся, иначе только ОБЪЕДИНИТЬ)
Что тут нового-то обсуждать?
45 tciban
 
09.03.23
14:58
Кроме того ветка эта еще и отклонилась в обсуждение расчета оборачиваемости и способов ее расчета. Я считаю несколько непродуктивным обсуждать различные проблемы в одном месте, т.к. льщу себе надеждой, что ответ на мои вопросы будет интересен еще кому то, и ему будет проще и быстрее разобраться в обсуждении одной конкретной проблемы, а не 3-х
46 tciban
 
09.03.23
14:59
(44) А вот ро выбор - мысль интересная. Может что и смогу сваять.
47 PR
 
09.03.23
15:00
(45) Так не нужно заводить новую ветку, как только старую засрали
48 PR
 
09.03.23
15:00
(46) Тебе про него в (1) написали, прочти уже ветку
49 tciban
 
09.03.23
15:02
(48) Так мне уже не нужен квартал то. Все течет, все изменяется, в том числе и ТЗ
50 Fish
 
09.03.23
15:06
(43) " повторить для 7 различных периодов" - Имеется ввиду различных между собой по длине? Например, день, неделя, потом 15 дней да ещё и могущих пересекаться между собой? Или речь о 7 месяцах подряд, например?
51 tciban
 
09.03.23
15:07
Для итех, кому интересно выложу текст базового запроса, который надо рассчитать для кучи месяцев :)

ВЫБРАТЬ
    ПродажиОбороты.Период КАК Период,
    ПродажиОбороты.ДокументПродажи.Склад КАК Склад,
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    СУММА(ПродажиОбороты.КоличествоОборот) КАК Продано
ПОМЕСТИТЬ втПродажи
ИЗ
    РегистрНакопления.Продажи.Обороты(
            НАЧАЛОПЕРИОДА(&КонецПериода, МЕСЯЦ),
            КОНЕЦПЕРИОДА(&КонецПериода, МЕСЯЦ),
            Месяц,
            Номенклатура В ИЕРАРХИИ (&Номенклатура)
                И ДокументПродажи.Склад В ИЕРАРХИИ (&Склады) {(ДокументПродажи.Склад), (Номенклатура)}) КАК ПродажиОбороты
ГДЕ
    ПродажиОбороты.Период = НАЧАЛОПЕРИОДА(&КонецПериода, МЕСЯЦ)

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Период,
    ПродажиОбороты.ДокументПродажи.Склад,
    ПродажиОбороты.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    &НачалоПериода КАК Месяц,
    ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    СУММА(ВЫБОР
            КОГДА ТоварыНаСкладахОстаткиИОбороты.Период = &НачалоПериода
                ТОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
            ИНАЧЕ ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот
        КОНЕЦ * (РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.Период, &КонецПериода, ДЕНЬ) + 1)) КАК СреднийЗапас
ПОМЕСТИТЬ втВсегоПоДням
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
            &НачалоПериода,
            &КонецПериода,
            День,
            ,
            Номенклатура В ИЕРАРХИИ (&Номенклатура)
                И Склад В ИЕРАРХИИ (&Склады)) КАК ТоварыНаСкладахОстаткиИОбороты

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втВсегоПоДням.Месяц КАК Месяц,
    втВсегоПоДням.Склад КАК Склад,
    втВсегоПоДням.Номенклатура КАК Номенклатура,
    втВсегоПоДням.СреднийЗапас КАК срЗапас,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НОстаток,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КОстаток,
    втВсегоПоДням.СреднийЗапас КАК ОстатокПоДням,
    РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) + 1 КАК КоличествоДней,
    втВсегоПоДням.СреднийЗапас - ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток + ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток / 2 + ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / 2 КАК СрОстаток,
    (втВсегоПоДням.СреднийЗапас - ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток + ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток / 2 + ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / 2) / (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) + 1) КАК Среднее,
    втПродажи.Продано КАК Продано
ИЗ
    втВсегоПоДням КАК втВсегоПоДням
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
                &НачалоПериода,
                &КонецПериода,
                Месяц,
                ,
                Номенклатура В ИЕРАРХИИ (&Номенклатура)
                    И Склад В ИЕРАРХИИ (&Склады)) КАК ТоварыНаСкладахОстаткиИОбороты
        ПО втВсегоПоДням.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура
            И втВсегоПоДням.Склад = ТоварыНаСкладахОстаткиИОбороты.Склад
        ЛЕВОЕ СОЕДИНЕНИЕ втПродажи КАК втПродажи
        ПО втВсегоПоДням.Склад = втПродажи.Склад
            И втВсегоПоДням.Номенклатура = втПродажи.Номенклатура

Конфигурация - УТ 10.3. Есть конечно изменения, но тут типоые регистры и измерения вроде
52 Fish
 
09.03.23
15:11
(50) А, всё, прочитал (40).
53 PR
 
09.03.23
15:17
(49) И что и что?
Совет-то общий, для любого поля для любого количества объединений
54 tciban
 
10.03.23
06:46
И все? Больше ни у кого никаких интересных идей?
Печально.
55 Обработка
 
10.03.23
07:09
(0) Не мучай всех вопросами.
1. Сделай отчет по месяцам и еще итог выведи.
2. Выбирай итог за кавартал.
Вполне стандартный отчет и хотелки от руководства закрывает.
56 АгентБезопасной Нацио
 
10.03.23
08:03
(43) Ну и строй свою портянку динамически на основании одного-единственного "базового" запроса. получай его из схемы, достраивай, и запихивай обратно...
57 PR
 
10.03.23
09:50
(54) Ой, идей еще целый вагон!
Например, можно все на внешних источниках данных забацать
Или сделать справочник шаблонов частей запроса и формировать текст запроса по нему
Или выборку делать одну, а потом быстренько все в ТЗ обработать
Столько еще всякой хуйни в голове
58 tciban
 
10.03.23
12:42
(55) Еще как идея соединение в СКД сделать
59 PR
 
10.03.23
12:43
(58) Прекрасная идея
60 tciban
 
15.03.23
14:51
Сделал. Через соединение в СКД с таблицей начала интересующих меня месяцев. Как ни странно - работает.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший