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


1С:Предприятие :: 1С:Предприятие 8 общая

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

Простейший запрос, который показывает сумму последних 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
Сколько даешь за текст запроса?


Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует