Имя: Пароль:
1C
1С v8
Как не делать запрос в цикле.
,
0 Alxesp
 
11.02.16
14:47
Задача простая: выбираем документы за период - только те по которым есть(или нет) сальдо(пусть по регистру бухии) по контрагенту документа на дату документа.
Вопрос: как сделать одним запросом, без запроса в цикле?
1 Fragster
 
гуру
11.02.16
14:48
что такое "есть сальдо по документу"?
2 butterbean
 
11.02.16
14:49
как может быть сальдо по документу??
3 Fragster
 
гуру
11.02.16
14:49
у документа могут быть обороты, может быть начальное (на позицию перед документом) или конечное (сразу после документа) сальдо.
4 asady
 
11.02.16
14:54
(1) там речь о начальном сальдо на дату документа
(0) можно сделать не вопрос
5 DexterMorgan
 
11.02.16
14:57
(0) Нужно как то себя заставить
6 Garykom
 
гуру
11.02.16
14:59
а дату с какой точностью будете брать?
7 Alxesp
 
11.02.16
15:03
(1) (2) Вы что и чем читали?

"сальдо(по регистру бухии) по контрагенту документа на дату документа"
8 Alxesp
 
11.02.16
15:04
(4) (5) Не получается - подозреваю что просто и изящно - НИКАК!
9 Kamelot
 
11.02.16
15:06
(6) ну как то так, берем таблицу остатки и обороты - переодичность регистратор и режим ее по условию СуммаНачальныйОстаток > 0, там и контрагента вытащить можно и регисратор
10 Alxesp
 
11.02.16
15:06
(6) Без разницы - пусть с точностью до секунды.
11 Alxesp
 
11.02.16
15:08
(9) Документ не регистратор.
Период вытащить нельзя - точнее можно только период регистратора, а не произвольное время любого дока.
12 Kamelot
 
11.02.16
15:10
(11)>>Документ не регистратор.
чего?
>>а не произвольное время любого дока.
чего чего? о_О
13 Alxesp
 
11.02.16
15:11
(11) В смысле можно получить период движения регистра.
А нужно на каждый момент времени или хотя бы секунду.
Напомню что нам нужен остаток а не движение.
14 Alxesp
 
11.02.16
15:12
(12) Счет фактура например - читай (0)
15 Web00001
 
11.02.16
15:16
>>Нужно сальдо по документу
>>Документ не регистратор
Причем здесь вообще документ?
16 Kamelot
 
11.02.16
15:17
(13) переодичность -  это параметр виртуальной таблицы, может быть День, месяц, Запись, Регистратор и т.д.

получая запросом виртуальную таблицу остатков и оборотов задав параметр Переодичность со значением регистратор результат будет начальный остаток |Приход | расход | конечный остаток на каждый "Регистратор"
17 Alxesp
 
11.02.16
15:47
(15) ">>Нужно сальдо по документу"
Я ТАКОГО НЕ ПИСАЛ!
3-Й УЖЕ - ПРОЧИТАЙ ЖЕ  ТЕМУ НАКОНЕЦ.

Еще раз - для особо талантливых: выбраем счет фактуры за период. В результате запроса нужно получить счет фактуру + сальдо по бухии на ДатуВремя счета-фактуры по контрагенту из счета-фактуры.
18 Alxesp
 
11.02.16
15:49
(16) Зачем нам остаток на момент регистратора?
Нам нужен остаток на ДатуВремя Счета-фактуры, который регистратором не является.
19 Alxesp
 
11.02.16
15:50
Или проблема слишком сложная или программисты перестали заходить на мисту - одни троли.
20 hhhh
 
11.02.16
15:57
(18) ну тогда вообще детская задача, берете счета-фактуры и левое соединение с таблицей ОстаткиОбороты с периодичностью секунда.
21 hhhh
 
11.02.16
15:58
(18) поручите какому нибудь падавану ее, чего вы сами заморачиваетесь на такую фигню?
22 zak555
 
11.02.16
16:00
делаем запрос к РБостаки с субконто ДокументРассчёта
23 Фрэнки
 
11.02.16
16:01
(19) да задачка слишком простая :)

вот как выше начали предлагать К выборке Контрагентов из счетФактур Левое соединение из остатки обороты

Или Вам хочется иметь остаток с актуальностью до ТА СчетФактуры? Тогда одним запросом не сможете, т.к. у вас таблицы ОстаткиОбороты агрегируемая по параметру Период.
24 itlikbez
 
11.02.16
16:01
(0) Такие задачи более естественно решать, используя цикл, а не запрос.
25 cons74
 
11.02.16
16:01
(19) лично я три раза перечитал (0) и нифига не понял. Так что переформируйте вопрос - иначе ответа не будет.
26 asady
 
11.02.16
16:03
(0)
1. выбираешь СФ за период и группируем по датам и контрагентам (договорам?) результат во временную таблицу ВТ1
2. выбираем остатки на начало периода с отбором по контрагентам из ВТ1 результат в ВТ2
3. выбираем обороты за период по контрагентам с периодичностью регистратор в разрезе контрагентов и дат результат ВТ3
4. выбираем все документы движения из ВТ3 с внутренним соединением с ВТ1 по контрагенту и дата<датаВТ1 и группируем для получения суммарных оборотов на дату результат ВТ4
5. соединяем ВТ4 и ВТ2 по контрагенту суммируя  для получения полного остатка на дату
27 zak555
 
11.02.16
16:07
(26) сразу попрут с экзамена за запрос к документам
28 Фрэнки
 
11.02.16
16:08
(26) а я бы просто из основной таблицы регистра выгребал тогда уже все движения приход расход и получал остаток из Приход - Расход

зы Хорошая задачка. извращенная, да!
29 ks_83
 
11.02.16
16:08
(24) Такие задачи обычно являются следствием нелепых хотелок постановщика, непонимания сути текущей проблемы и неверного ведения учета.
30 Фрэнки
 
11.02.16
16:09
(27) не к документам, а к ВТ по документам
31 zak555
 
11.02.16
16:10
(30) а вт из документов как формируется ?
32 asady
 
11.02.16
16:13
(27) получение списка контрагентов и дат СФ можно сделать и из регистра если чо - это не принципиально в данной задаче - можно вообще грузить из ТЗ.

весь смысл в следующих пунктах - п1. подготовительный
33 zak555
 
11.02.16
16:16
(32) пока задача в 0 не ясна
34 su_mai
 
11.02.16
16:18
(17) А чо ты тут разорался то? Нормально сформулируй задачу.
35 asady
 
11.02.16
16:20
(33) это самая банальная задача по получению остатков (курсов валют) на дату документа

решали уже много раз разными способами - тот что я описал в (26) самый распространенный и уже разобран давно

эту задачу любят давать на собеседованиях в качестве теста
36 su_mai
 
11.02.16
16:22
(35) Корелированный подзапрос, называется
37 Kamelot
 
11.02.16
16:23
(17)делай циклом не ипи моск.
тебе потом еще читать этот запрос через пару недель.
38 GANR
 
11.02.16
16:26
(0) Отговорить заказчика от хотелки, путь к решению которой лежит через запрос в цикле ))).
39 GANR
 
11.02.16
16:35
+(38) А если серьезно, то разве что через соединение таблиц документов с таблицей ОстаткиИОбороты с периодичностью Регистратор.
40 Alxesp
 
11.02.16
17:37
(20) (23) Период в ОстаткиИОбороты только в моменты движения.
На произвольную секунду нельзя.
41 Alxesp
 
11.02.16
17:38
(26) Пожалуй верно. Но весьма сложно.
42 Alxesp
 
11.02.16
17:42
(35) Ну тут не курсы валют.
На 1-й взгляд проще, но в результате все гораздо сложнее.
43 hhhh
 
11.02.16
17:46
(40) то есть надо взять регистратор следующий за счет фактурой по мементу движений.
44 hhhh
 
11.02.16
17:47
(40) второй вариант: просто поставить галку на счет-факиуре, что он - регистратор этого регистра.
45 Фрэнки
 
11.02.16
20:01
(40) Я же так и написал, что все таблицы, о который тут в ветке вспоминают, агрегатные - им не получится воспользоваться в такой задаче не задавая параметром ТА

Можно только передирать все движения регистра непосредственно и резать эту относительно большу таблу условием с вхождением в СФ и по времену раньше ТА из каждой СФ. Естественно, что будут попадать очень много уже обнулившихся.
46 APXi
 
11.02.16
20:32
Вот так сделают запросом на 100500 строк и 30 ВТ, а потом через год сидят и вспоминают, что они этим запросом хотели сделать.
Иногда лучше медленно, но понятно. И тебе проще и тем кто сопровождать будет.