Имя: Пароль:
1C
1С v8
Помогите запросом. туплю.
0 temsa
 
04.06.13
19:55
ТекстЗапроса = "ВЫБРАТЬ
   |ТоварыНаСкладахОстатки.Номенклатура,
   |ТоварыНаСкладахОстатки.КоличествоОстаток
   |ИЗ
   |РегистрНакопления.ТоварыНаСкладах.Остатки(&текдата) КАК ТоварыНаСкладахОстатки";
   Возврат ТекстЗапроса;


Как сделать в одном запросе остаток на текущую дату и остаток на начало месяца???
1 PR
 
04.06.13
19:59
Памажите кто чем может?
ОстаткиИОбороты или ОБЪЕДИНИТЬ.
2 Cyberhawk
 
04.06.13
20:00
(0) дождись первого числа месяца. Выполни запрос. Выведи два раза. Результат будет достигнут.
3 temsa
 
04.06.13
20:03
(1) Я так и думал. Что без остатки и оброты не обойтись
4 PR
 
04.06.13
20:04
(3) Странно. А я вроде по-русски написал "или ОБЪЕДИНИТЬ" :))
5 temsa
 
04.06.13
20:06
(4)  да понял понял. ОБъединять я еще не сильно научился.
6 Dionis Sergeevich
 
04.06.13
20:07
или соединение - отгда с параметрами Период и НачалоМесяца(период)
7 Dionis Sergeevich
 
04.06.13
20:09
(5) А соединять научился? =)) wiki:Join_(SQL) вот если что. А вообще если не силен в запросах - велком http://sql-ex.ru/ Учебные начать можно с гуглом, сложность нарастает постепенно. Решишь рейтинговые - считай научился
8 PR
 
04.06.13
20:17
(5) Не слушай (6), он ерунду какую-то тебе толкает.
9 Dionis Sergeevich
 
04.06.13
20:22
(8) А то как же. Сижу вредю всем, ерунду толкаю.
10 Dionis Sergeevich
 
04.06.13
20:24
+(9) соединение оно и побыстрее объединения будет =))
11 PR
 
04.06.13
20:25
(10) Напиши текст запроса
12 Vesa
 
04.06.13
20:26
Если нужны только остатки, без оборотов, то лучше объединить. Говорят, таблица ОстаткиИОбороты "тяжелая".
13 Dionis Sergeevich
 
04.06.13
20:35
ЫБРАТЬ
   а.Номенклатура,
   а.КоличествоОстаток как ОстатокНаНачалоМесяца
   б.КОличествоОстаток как ОстатокНаДату
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки(&текдата) КАК а

левое соединение РегистрНакопления.ТоварыНаСкладах.Остатки(&текдата2) как б по а.Номенклатура = б.Номенклатура
14 ДенисЧ
 
04.06.13
20:36
(13) у тебя в первом слове буква Р лишняя
15 temsa
 
04.06.13
20:40
а текдата я должен как параметр определять или достаточно как переменная ?
16 Dionis Sergeevich
 
04.06.13
20:41
(15) ТекДата2 - параметр - Дата Остатка, ТекДата - параметр - начало месяца
17 PR
 
04.06.13
20:44
(13) Я так и думал.
Садись, два.
18 PR
 
04.06.13
20:51
Все больше склоняюсь к мнению, что стоит добавить в свои тесты задачку на понимание разницы между соединением и объединением :))
19 Dionis Sergeevich
 
04.06.13
20:51
(17) (17) А что тут думать то? Все бы так сделали. Ибо самый простой и логичный способ
20 PR
 
04.06.13
20:53
(19) Ну да, логично, зачем думать :))
Что ты получишь, если есть остаток на конец 10 рублей, но нет остатка на начало?
22 zak555
 
04.06.13
20:56
где третий вариант ?
23 zak555
 
04.06.13
20:59
с соединением
24 PR
 
04.06.13
21:00
(22) Он дебильный, хотя и возможный через задницу, поэтому я его не привел.
25 zak555
 
04.06.13
21:02
(24) какой дебильный ?
26 Dionis Sergeevich
 
04.06.13
21:03
(25) С полным соединением и выбором номенклотуры из левой или правой части запроса по значению NULL
27 Dionis Sergeevich
 
04.06.13
21:04
Ну да не предусмотрел отсутствие остатка. Пойду учиться
28 zak555
 
04.06.13
21:04
(36) так объединение -- тоже тупость =)
29 PR
 
04.06.13
21:05
(28) Почему? Объединение в данном случае вполне себе гуд.
30 Dionis Sergeevich
 
04.06.13
21:06
(29) Обходить запрос проще, цикл +- в 2 раза меньше
31 zak555
 
04.06.13
21:06
(29) чем виртуальная таблица ОстаткиИОбороты не гуд ?
32 zak555
 
04.06.13
21:06
(30) ??
33 PR
 
04.06.13
21:07
Если нужна запись одна, то не вопрос, все помещается во вложенный запрос и группируется по номенклатуре.
34 PR
 
04.06.13
21:08
(31) Я не говорил, что она не гуд.
Но не уверен, что будет быстрее, поскольку в ней еще речь про обороты.
Но может и будет быстрее, ХЗ.
35 zak555
 
04.06.13
21:09
(33) вложенный запрос -- это разве хорошо ?
36 zak555
 
04.06.13
21:09
(34) так у тебя будет Приход, РАсход, Оборот
в 0 ггруппировки нет
37 PR
 
04.06.13
21:10
(35) Плохо наверное, но как иначе, если использовать объединение?
38 PR
 
04.06.13
21:10
(36) Так а зачем мне оборот?
39 zak555
 
04.06.13
21:11
(37) используй соединение =)
40 zak555
 
04.06.13
21:12
(38) ты его в выборке полей не вибирай
41 PR
 
04.06.13
21:14
(39) Охрененно, пойду подумаю ад этой глубокой мыслью :))
42 PR
 
04.06.13
21:14
(40) И это поможет?
43 zak555
 
04.06.13
21:15
ВЫБРАТЬ
   ЕСТЬNULL(ТоварыНаСкладахОстаткиДата1.Номенклатура, ТоварыНаСкладахОстаткиДата2.Номенклатура) КАК Номенклатура,
   ТоварыНаСкладахОстаткиДата1.КоличествоОстаток КАК КоличествоОстатокНаДату1,
   ТоварыНаСкладахОстаткиДата2.КоличествоОстаток КАК КоличествоОстатокНаДату2
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата1, ) КАК ТоварыНаСкладахОстаткиДата1
       ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата2, ) КАК ТоварыНаСкладахОстаткиДата2
       ПО ТоварыНаСкладахОстаткиДата1.Номенклатура = ТоварыНаСкладахОстаткиДата2.Номенклатура
44 PR
 
04.06.13
21:15
(43) Спасибо, КЭП :))
45 zak555
 
04.06.13
21:16
(44) не за что
46 zak555
 
04.06.13
21:26
ты предлагал сделать так ?


ВЫБРАТЬ
   ВложенныйЗапрос.Номенклатура,
   СУММА(ВложенныйЗапрос.КоличествоОстатокНаДату1) КАК КоличествоОстатокНаДату1,
   СУММА(ВложенныйЗапрос.КоличествоОстатокНаДату2) КАК КоличествоОстатокНаДату2
ИЗ
   (ВЫБРАТЬ
       ТоварыНаСкладахОстаткиДата1.Номенклатура КАК Номенклатура,
       ТоварыНаСкладахОстаткиДата1.КоличествоОстаток КАК КоличествоОстатокНаДату1,
       0 КАК КоличествоОстатокНаДату2
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата1, ) КАК ТоварыНаСкладахОстаткиДата1
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       ТоварыНаСкладахОстаткиДата2.Номенклатура,
       0,
       ТоварыНаСкладахОстаткиДата2.КоличествоОстаток
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата2, ) КАК ТоварыНаСкладахОстаткиДата2) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос.Номенклатура
47 zak555
 
04.06.13
21:28
и так ?



ВЫБРАТЬ
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
   ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоОстатокНаДату1,
   ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоОстатокНаДату2
ИЗ
   РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
48 temsa
 
05.06.13
05:52
Спасибо господа! Просветили. Вроде бы эементарно вот пока не могу от семерошного запроса отойти полностью
Программист всегда исправляет последнюю ошибку.