Имя: Пароль:
1C
1С v8
Простейший запрос, который показывает сумму последних n документов
0 Dev
 
21.08.18
11:00
Добрый день, в общем есть два документа, списание денежных средств и поступление с реквизитами касса и сумма, и регистр накопления в котором ведется учет этих документов. Необходимо построить запрос, который бы показывал сумму последних n документов списания и поступления в разрезе кассы. Количество документов и касса должны быть параметрами запроса и запрос должен работать в консоле запросов, есть идеи как можно это реализовать ? Не могу понять каким образом можно определенное количество документов вытащить, передавая параметром количество
1 Fedor-1971
 
21.08.18
11:03
(0) Выбрать Первые &СкокоНужноДокументов
так уже пробовал?
2 Dev
 
21.08.18
11:04
Да не работает
3 dezss
 
21.08.18
11:05
а зачем параметром?
как насчет СтрЗаменить?
4 dezss
 
21.08.18
11:06
(3) + или консоль запросов - это обязательное условие?
5 Dev
 
21.08.18
11:06
Да именно в консоле надо
6 dezss
 
21.08.18
11:08
ИМЕЮЩИЕ Количество (Различные) > &N
7 dezss
 
21.08.18
11:09
(6) + с группировкой, ессно
8 VS-1976
 
21.08.18
11:47
Лучше использовать совет из (3) иначе перемножение и тебе это точно не понравится, так как может всё "умереть"
9 Dev
 
21.08.18
11:49
А под (различные) Что подразумевается ? Нужно посчитать тогда количество вхождения регистратора
10 Dev
 
21.08.18
11:50
(8) Нужно именно в консоле сделать с параметрами
11 Fedor-1971
 
21.08.18
12:05
(10) Полностью: ИМЕЮЩИЕ Количество (Различные Ссылка) > &N - это подсчёт количества различных ссылок в результирующей выборке
12 elCust
 
21.08.18
12:29
(1) >> так уже пробовал?
(2) >> Да не работает

А как реализовывали, что не работает?
13 Sayan_mi
 
21.08.18
12:34
Выбери из регистра во временные таблицы по 6 документов прихода и списания, а дальше уже ими оперируй.
14 Dev
 
21.08.18
15:33
(11) Таким способом он отображает только если в запросе соответствует количество полей, указанных в параметре, если не соответствует то он вообще ничего не выводит, а мне же нужно посчитать сумму скажем последних 3 документов из пяти, если я задам в параметре 3 он мне выведет ту же сумму что и если там задать 4, потому что просто это попадает под условие,  если задам 5 то просто будет пусто
15 Dev
 
21.08.18
15:39
(13) Это что то вообще не понял, а зачем по 6 именно ? Ну выбрал я и что дальше ? Как мне манипулировать процессом с помощью параметров, мне надо два последних дока скажем из шести или три, как мне это реализовать используя параметры ?
16 Salimbek
 
21.08.18
15:42
(14) Почему "если задам 5 то просто будет пусто"?
17 Dev
 
21.08.18
15:44
Потому что если в запросе всего пять полей скажем а в параметре получается >5 то будет пусто в сумме, потому что не попадает под условие
18 Dev
 
21.08.18
15:45
Ну вот например так если запрос построить

Выбрать  

Сумма (Сумма) КАК Сумма
ИЗ
РегистрНакопления.ДвиженияДенСредств

ГДЕ ВидДвижения = &Расход

ИМЕЮЩИЕ Количество(Различные Регистратор) = &N
19 Dev
 
21.08.18
15:47
Или больше там ставить знак или меньше, значения не имеет он либо выводит сумму, либо нет
20 Dev
 
21.08.18
15:51
А мне нужна сумма скажем 3 доков или 2, а не вся сумма которая получается в общем по расходникам
21 Ботаник Гарден Меран
 
21.08.18
15:55
Ну, декартово произведение во временную таблицу, затем условие по рассчитанному нарастающему полю количества.
Но тормозить будет...
22 mistеr
 
21.08.18
15:57
(0) Поиск "нумерация строк в запросе".

Собеседование что ли? Непрактичная задача какая-то.
23 Salimbek
 
21.08.18
15:59
(19)
Выбрать что, тебе, нужно из (Выбрать первые &N * из РегистрНакопления.ДвиженияДенСредств упорядочить по Дата убыв)  как Выборка
24 Dev
 
21.08.18
16:00
Выбрать первые &N такое не работает, я тоже так хотел бы
25 Dev
 
21.08.18
16:02
(22) Да, тестовое, нестандартная задача и я думаю как ее можно оптимально решить
26 Бухгалтер76
 
21.08.18
16:40
нумеруешь по порядку внутри кассы, потом отбираешь по пор.номеру < &Заданный, н-р так:

выбрать Т.Касса, Т.Ссылка, Т.СуммаДокумента, Количество(Т1.Ссылка) КАК Нпп
из Документ.РасходныйКассовыйОрдер КАК Т
левое соединение Документ.РасходныйКассовыйОрдер КАК Т1
по Т.Касса= Т1.Касса
    И (Т.Дата < Т1.Дата
        ИЛИ (Т.Дата = Т1.Дата И Т.Ссылка < Т1.Ссылка))
сгруппировать по Т.Касса, Т.Ссылка, Т.СуммаДокумента
имеющие Количество(Т1.Ссылка) < 3
упорядочить по Т.Касса, Т.Дата, Т.Ссылка
27 Бухгалтер76
 
21.08.18
16:41
насчет оптимально не знаю, но хоть как-то сначала реши!
28 Dev
 
21.08.18
17:00
И что тут получится ? А зачем мы два расходника соединяем и еще сравниваем в них поля дата и ссылка ?
29 Бухгалтер76
 
21.08.18
17:05
Нумеруешь документы по порядку внутри кассы, см. поле НПП.
30 mistеr
 
21.08.18
17:36
(28) Это математика, брат, хоть и элементарная. Требуется немного напрячь мозг.
31 Buster007
 
21.08.18
17:38
задача уг. Скорее всего какое-нибудь собеседование
32 Малыш Джон
 
21.08.18
17:43
(31) задачи не бывают уг или не уг, задачи бывают, которые ты можешь решить и с которыми ты справиться не можешь))

(25) если совсем оптимально, то как в (3), если чисто запросом, то, никуда не денешься - придется таблицу саму на себя умножать
33 Бухгалтер76
 
21.08.18
17:44
(31) в такой постановке уг, но в жизни поставщики могут просить выгружать например последние 10 зарегистрированных поступлений
34 Бухгалтер76
 
21.08.18
17:45
(32) чем поможет стрЗаменить?
35 leonidk
 
21.08.18
17:50
(34) Программно сформировать текст запроса с нужным количеством N в "ВЫБРАТЬ ПЕРВЫЕ"
36 Dev
 
21.08.18
17:55
(29) Ну посчитал я сколько документов у меня, прилепил это поле и что дальше то, как теперь параметром передать количество доков, ИМЕЮЩИЕ не подходит, ИМЕЮЩИЕ это значит либо имеется у тебя в запросе такое количество либо не имеется, либо выводит он результат, либо нет, а результат там не меняется, сумма остается той же, не то это. Да тут как то отдельно надо рассчитать таблицы.Программно конечно проще можно было бы там СтрЗаменить и все
37 Бухгалтер76
 
21.08.18
17:58
(35) че-то не соображу, для каждой кассы отдельно?
38 Бухгалтер76
 
21.08.18
17:59
(36) ты бы запрос скопировал в консоль и посмотрел что будет

см. имеющие Количество(Т1.Ссылка) < 3
39 Dev
 
21.08.18
18:00
Ну вообще да, отбор там по кассе должен быть но суть не в этом, я уже скопировал переделал и посмотрел, ничего хорошего
40 Бухгалтер76
 
21.08.18
18:02
)) ну покажи что напеределывал
41 Dev
 
21.08.18
18:02
Получилось тоже самое что я и выше в запросе писал, только еще поле появилось с количеством доков, ну и группировки с сортировкой, нужно как то получить последние доки, передав параметр количествоДок
42 Dev
 
21.08.18
18:03
выбрать
Т.Касса,
Т.Регистратор,
Т.Сумма,
Т.Период,
Количество(Т1.Регистратор) КАК Нпп
из РегистрНакопления.ДвиженияДенСредств КАК Т
левое соединение РегистрНакопления.ДвиженияДенСредств КАК Т1
по Т.Касса= Т1.Касса
сгруппировать по Т.Касса, Т.Регистратор, Т.Период, Т.Сумма
имеющие Количество(Т1.Регистратор) = 3
упорядочить по Т.Касса, Т.Период,  Т.Регистратор
43 Бухгалтер76
 
21.08.18
18:05
Понятно. Разница в условии соединения, для начала. "Имеющие" пока закомментируй, чтоб видеть что получается
44 Бухгалтер76
 
21.08.18
18:06
А так ты на правильном пути
45 Dev
 
21.08.18
18:06
Вот это для чего вообще было  И (Т.Дата < Т1.Дата
        ИЛИ (Т.Дата = Т1.Дата И Т.Ссылка < Т1.Ссылка))
46 Dev
 
21.08.18
18:08
Да что там получится, ну выводятся у меня все поля, которые я запрашиваю с полем количество документов дублирующемся для каждого регистратора
47 Малыш Джон
 
21.08.18
18:11
(45) это такой способ нумерации строк в запросе, погугли
48 Бухгалтер76
 
21.08.18
18:11
Ну мне-то не рассказывай ))
49 Малыш Джон
 
21.08.18
18:11
(45) да и в принципе в книге знаний есть
50 Dev
 
21.08.18
18:12
Это я знаю и без гугла
51 Бухгалтер76
 
21.08.18
18:12
Это к (46)
52 Dev
 
21.08.18
18:13
А понял (51)
53 Малыш Джон
 
21.08.18
18:13
(50) тогда к чему было (45) ?
54 Dev
 
21.08.18
18:14
(53) Не про то подумал
55 Dev
 
21.08.18
18:15
Ну мы там вроде соединяли две таблицы такие же, дата там одинаковая или я ошибаюсь ?
56 DrShad
 
21.08.18
18:15
правильный ответ в (23)
57 dka80
 
21.08.18
18:15
58 Dev
 
21.08.18
18:16
(56) Не правильный это не работает
59 Dev
 
21.08.18
18:18
*Неправельный
60 Бухгалтер76
 
21.08.18
18:19
(56) есть по 5 документов в каждой из 5ти касс, надо выбрать по 3 последних документа в каждой кассе. Какой будет запрос с "выбрать первые"?
61 dka80
 
21.08.18
18:19
(59) все равно с ошибкой написал ))
62 Dev
 
21.08.18
18:22
))) Да Неправильный ))
63 Dev
 
21.08.18
18:25
(60) Там нужно вначале отсортировать и сгруппировать все, а потом выбирать, давайте мою задачу лучше решим
64 Бухгалтер76
 
21.08.18
18:27
(56) "выбрать первые" должно быть во вложенном запросе, а соединение идти с полями запроса верхнего уровня. 1с так не умеет, или есть какой-то хитрый ход
65 Бухгалтер76
 
21.08.18
18:28
(63) Так уже решили!
66 dka80
 
21.08.18
18:28
Ты (57) смотрел? Пронумеруй и отбери с номером <N
67 Dev
 
21.08.18
18:30
Если тебе нужно конкретное количество доков получить то можно упорядочить по дате убыв и выбрать первые N
68 Dev
 
21.08.18
18:30
(66) Сейчас попробую
69 Dev
 
21.08.18
18:32
А про нумерацию я и раньше смотрел
70 dka80
 
21.08.18
18:33
Нельзя выбрать первые N. Сами пробывали прежде чем советовать?
71 Dev
 
21.08.18
18:33
Ну в смысле первые сколько то
72 Dev
 
21.08.18
18:34
Конкретное число я имел ввиду
73 Бухгалтер76
 
21.08.18
18:36
(70) Вот и мне кажется - внутри группы нельзя
74 DrShad
 
21.08.18
18:49
(70) неоднакратно пробовали, в чем проблема?
75 dka80
 
21.08.18
19:02
(74) я про &N - в качестве параметра, а не числа
76 Dev
 
21.08.18
19:07
(66) Да все правильно, получилось, не думал что так будет работать, но работает, добавил в условие сравнение даты и все
77 DrShad
 
21.08.18
19:07
текст запроса можно и собрать
78 Dev
 
21.08.18
19:09
выбрать
Т.Касса,
Т.Регистратор,
Т.Сумма,
Т.Период,
Количество(Т1.Регистратор) КАК Нпп
из РегистрНакопления.ДвиженияДенСредств КАК Т
левое соединение РегистрНакопления.ДвиженияДенСредств КАК Т1
по Т.Касса= Т1.Касса И
Т.Период <= Т1.Период
сгруппировать по Т.Касса, Т.Регистратор, Т.Период, Т.Сумма
имеющие Количество(Т1.Регистратор) <= 3
упорядочить по Т.Касса, Т.Период,  Т.Регистратор
79 Dev
 
21.08.18
19:10
Бухгалтер тоже был прав )
80 bootini
 
21.08.18
19:16
(78) Тебе надо собрать n списаний и n поступлений и их просуммировать?
Или тупо n записей регистра?
81 Dev
 
21.08.18
19:19
(80) Там же вначале написано что параметрами передать количество и кассу и чтобы в консоле работало
82 Бухгалтер76
 
21.08.18
19:20
(74) есть по 5 документов в каждой из 5ти касс, надо выбрать по 3 последних документа в каждой кассе. Какой будет запрос с "выбрать первые"?
83 Dev
 
21.08.18
19:25
(80) Записей регистра и получить сумму в итоге поступлений и списаний в разрезе кассы
84 bootini
 
21.08.18
19:26
(83) понял
85 ILM
 
гуру
21.08.18
19:27
В любой кассе документы должны быть пронумерованы для идентификации. Может стоит использовать поле номер документа?
86 Dev
 
21.08.18
19:30
А смысл ? Если документ будет проведен задним числом скажем
87 DrShad
 
21.08.18
21:15
Сколько даешь за текст запроса?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn