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


1С:Предприятие ::

Метки: 

Простейший запрос, который показывает сумму последних n документов

Я
   Dev
 
21.08.18 - 11:00
Добрый день, в общем есть два документа, списание денежных средств и поступление с реквизитами касса и сумма, и регистр накопления в котором ведется учет этих документов. Необходимо построить запрос, который бы показывал сумму последних n документов списания и поступления в разрезе кассы. Количество документов и касса должны быть параметрами запроса и запрос должен работать в консоле запросов, есть идеи как можно это реализовать ? Не могу понять каким образом можно определенное количество документов вытащить, передавая параметром количество
 
 
   Fedor-1971
 
1 - 21.08.18 - 11:03
(0)
Выбрать Первые &СкокоНужноДокументов

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

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

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

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

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

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

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

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

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



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