Имя: Пароль:
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
Спасибо господа! Просветили. Вроде бы эементарно вот пока не могу от семерошного запроса отойти полностью
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn