Имя: Пароль:
1C
1С v8
v8: Помогите с простым запросом
0 BoaBela
 
11.03.13
15:44
Простой запрос, а не пойму как вывести данные.
Помогите.....мне нужно вывести весь товар на остатке и к нему прицепить цены по типам цены.....Но получается если нет цены, то товар вообще не выводится..........а мне нужно чтобы с нулевой ценой выводился...

Вот текст запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ТоварыНаСкладахОстатки.Склад,
   ТоварыНаСкладахОстатки.Номенклатура,
   ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
   ТоварыНаСкладахОстатки.КоличествоОстаток,
   ЦеныНоменклатурыСрезПоследних.ТипЦен,
   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена,2) как цена
{ВЫБРАТЬ
   Склад.*,
   Номенклатура.*,
   ХарактеристикаНоменклатуры.*,
   КоличествоОстаток,
   ТипЦен.*,
   Цена}
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
       ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
{ГДЕ
   ТоварыНаСкладахОстатки.Склад.*,
   ТоварыНаСкладахОстатки.Номенклатура.*,
   ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры.*,
   ТоварыНаСкладахОстатки.КоличествоОстаток,
   ЦеныНоменклатурыСрезПоследних.ТипЦен.*,
   ЦеныНоменклатурыСрезПоследних.Цена}
{УПОРЯДОЧИТЬ ПО
   Склад.*,
   Номенклатура.*,
   ХарактеристикаНоменклатуры.*,
   КоличествоОстаток,
   ТипЦен.*,
   Цена}
ИТОГИ ПО
   ОБЩИЕ
{ИТОГИ ПО
   Склад.*,
   Номенклатура.*,
   ТипЦен.*}
АВТОУПОРЯДОЧИВАНИЕ

Что не так?
1 tdm
 
11.03.13
15:46
на этом форуме обычно в заголовке темы столько воскл.знаков не ставят, не принято
2 rbcvg
 
11.03.13
15:46
ЕСТЬNULL?
3 BoaBela
 
11.03.13
15:47
Есть ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена,2) как цена
4 drcrasher
 
11.03.13
15:47
(2) здравая мысль, если соединять правильно
5 Конфигуратор1с
 
11.03.13
15:48
(0) вообще при левом соединении накладывание условий на левую таблицу превращает левое соединение неявно к внутреннему
6 BoaBela
 
11.03.13
15:48
я неправильно соединила? Левым соединением....но если вообще небыло установлено цены по такому типу цены то товар без цены не выводится
7 mistеr
 
11.03.13
15:49
Отбор на ЦеныНоменклатурыСрезПоследних превращает левое соединение во внутреннее.
Эти условия перенести в ПО и передавать параметрами.
8 НЕА123
 
11.03.13
15:49
(0)
>Но получается если нет цены, то товар вообще не выводится
точно не выводится, если нет цены?
9 GANR
 
11.03.13
15:50
(0) Построитель? Тогда посмотри Построитель.ПолучитьЗапрос()
10 НафНаф
 
11.03.13
15:50
где фото?
11 Конфигуратор1с
 
11.03.13
15:50
(8) точно. Зуб BoaBela даю
12 BoaBela
 
11.03.13
15:50
Строки, группировки по товару не выводятся вообще! А вот если цена установлена, то товар тогда выводится...
13 Конфигуратор1с
 
11.03.13
15:50
(10) +100500
14 Конфигуратор1с
 
11.03.13
15:51
а в вообще нафига это все нагородили?
15 BoaBela
 
11.03.13
15:51
вообще при левом соединении накладывание условий на левую таблицу превращает левое соединение неявно к внутреннему

что это означает?
16 Конфигуратор1с
 
11.03.13
15:52
это значит что если Вы пишите Выбрать * из таблицы1 левое соединение таблица2 где таблица2.какоетополе = чемуто, то это тоже самое что Вы напишите  Выбрать * из таблицы1 врутреннее  соединение таблица2 где таблица2.какоетополе = чемуто
17 BoaBela
 
11.03.13
15:53
Плиз, подскажите как нужно сделать запрос(но обязательно через построитель!)
18 Конфигуратор1с
 
11.03.13
15:54
(17) построитель древнее моих носков. Юзайте скд
19 BoaBela
 
11.03.13
15:54
у меня я так понимаю есть значение Таблицы1 а вот значения по номенклатуре в Таблица2 - вообще нет!
20 Конфигуратор1с
 
11.03.13
15:55
(19) правильно. поэтому отбор на второе значение будет всегда ложью
21 BoaBela
 
11.03.13
15:55
Мне нужно доработать стандартный отчет, а он ссылается на Универсальный отчет, а там построитель...деваться некуда
22 GANR
 
11.03.13
15:56
(15) Из результирующей таблицы, возвращаемой запросом, уйдут все строки, для которых не найдены записи по условию в  п р а в о й  таблице - будет тот же результат, что при внутреннем (в (5) небольшая опечатка).
23 GANR
 
11.03.13
15:56
(17) что показывает (9) ???
24 фросия
 
11.03.13
15:57
(17) условие для второй таблицы из ГДЕ перенести в ПО.
25 BoaBela
 
11.03.13
15:59
Условия ГДЕ мне нужны только для отбора значений в построителе и на ПО никак не влияют
26 Конфигуратор1с
 
11.03.13
15:59
С построителем не работал, но как то так попробуйте, если не заморачиваться

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   Вложенный.Склад,
   Вложенный.Номенклатура,
   Вложенный.ХарактеристикаНоменклатуры,
   Вложенный.КоличествоОстаток,
   Вложенный.ТипЦен,
   Вложенный.цена
{ВЫБРАТЬ
   Склад.*,
   Номенклатура.*,
   ХарактеристикаНоменклатуры.*,
   КоличествоОстаток,
   ТипЦен.*,
   цена}
ИЗ
   (ВЫБРАТЬ
       ТоварыНаСкладахОстатки.Склад КАК Склад,
       ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
       ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
       ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен,
       ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 2) КАК цена
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
           ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура) КАК Вложенный
{ГДЕ
   Вложенный.Склад.*,
   Вложенный.Номенклатура.*,
   Вложенный.ХарактеристикаНоменклатуры.*,
   Вложенный.КоличествоОстаток,
   Вложенный.ТипЦен.*,
   Вложенный.цена}
{УПОРЯДОЧИТЬ ПО
   Склад.*,
   Номенклатура.*,
   ХарактеристикаНоменклатуры.*,
   КоличествоОстаток,
   ТипЦен.*,
   цена}
ИТОГИ ПО
   ОБЩИЕ
{ИТОГИ ПО
   Склад.*,
   Номенклатура.*,
   ТипЦен.*}
АВТОУПОРЯДОЧИВАНИЕ
27 Конфигуратор1с
 
11.03.13
16:00
(22) да, спасибки. я это, путаю лево с права(((
28 фросия
 
11.03.13
16:01
(25) ПО это не построитель отчетов имеется ввиду, а условие соединение таблиц: ЛЕВОЕ СОЕДИНЕНИЕ ...ПО ...(вот сюда перенесите)
29 BoaBela
 
11.03.13
16:04
Значит так....я сейчас просто в Консоль отчетов добавила вообще простой запрос:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ТоварыНаСкладахОстатки.Склад,
   ТоварыНаСкладахОстатки.Номенклатура,
   ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
   ТоварыНаСкладахОстатки.КоличествоОстаток,
   ЦеныНоменклатурыСрезПоследних.ТипЦен,
   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 2) КАК цена
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
       ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ИТОГИ ПО
   ОБЩИЕ
АВТОУПОРЯДОЧИВАНИЕ

И просто на закладке отбор указала тип цены. Так вот при таком запросе если тип цены не указываю, то строка с остатком выводится, а если указываю, то товар не выводится...
30 mistеr
 
11.03.13
16:05
(28) Один раз не заметила, думаю и во второй не заметит.
31 Конфигуратор1с
 
11.03.13
16:07
(29) сделайте во вложенном запросе и будет Вам счастье. Временно
32 фросия
 
11.03.13
16:07
(29) читайте еще раз: когда в условиях запроса указываете в разделе ГДЕ условия для второй табличке- вы отсекаете из первой таблички те записи которым нет соответствия во второй
33 Конфигуратор1с
 
11.03.13
16:07
а вообще у Вас ничего не получится, пока фотку не выложите
34 фросия
 
11.03.13
16:08
(30) я тоже не спервого раза поняла почему так. так что шанс есть
35 Конфигуратор1с
 
11.03.13
16:09
(34) а это потому, что у Вас тоже  фотки нет)
36 Фауст
 
11.03.13
16:09
Условие по типу цен перенеси в параметры виртуальной таблицы "СрезПоследних"
вот так:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТипЦен) КАК ЦеныНоменклатурыСрезПоследних

из ГДЕ тип цен убери.
37 Фауст
 
11.03.13
16:10
СрезПоследних(ТипЦен = &ТипЦен), то есть так
38 Конфигуратор1с
 
11.03.13
16:10
Кстати, в срез последних не мешало бы дату задать
39 BoaBela
 
11.03.13
16:10
Значит так...со вложенным запросом (как описал Конфигуратор1с) тоже ничего не работает, думаете я ничего не пробовала пока не обратилась за помощью....и вложенные и не вложенные...
40 BoaBela
 
11.03.13
16:12
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   Вложенный.Склад,
   Вложенный.Номенклатура,
   Вложенный.ХарактеристикаНоменклатуры,
   Вложенный.КоличествоОстаток,
   Вложенный.ТипЦен,
   Вложенный.цена
ИЗ
   (ВЫБРАТЬ
       ТоварыНаСкладахОстатки.Склад КАК Склад,
       ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
       ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
       ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен,
       ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК цена
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ) КАК ЦеныНоменклатурыСрезПоследних
           ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура) КАК Вложенный
ИТОГИ ПО
   ОБЩИЕ
АВТОУПОРЯДОЧИВАНИЕ

И с датой тоже не работает....
41 фросия
 
11.03.13
16:12
(39) из ГДЕ условия для второй таблицы уберите.
42 GANR
 
11.03.13
16:13
А если как-нибудь так?

ВЫБРАТЬ
   ТоварыНаСкладахОстатки.Номенклатура,
   ТоварыНаСкладахОстатки.Характеристика,
   ТоварыНаСкладахОстатки.Склад,
   ТоварыНаСкладахОстатки.Помещение,
   ТоварыНаСкладахОстатки.Серия,
   ТоварыНаСкладахОстатки.ВНаличииОстаток,
   ТоварыНаСкладахОстатки.КОтгрузкеОстаток,
   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.ВидЦены, ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)) КАК ВидЦены,
   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура).*, (Помещение).*, (Серия).*, (Склад).*, (Характеристика).*}) КАК ТоварыНаСкладахОстатки
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Валюта).*, (Номенклатура).*, (Регистратор).*, (Упаковка).*, (Характеристика).*}) КАК ЦеныНоменклатурыСрезПоследних
       ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
           И ТоварыНаСкладахОстатки.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика

Этот запрос у ТС не откроется - конфигурация другая. Это только идеи.
43 фросия
 
11.03.13
16:14
(40) должно работать вроде, если это весь запрос
44 BoaBela
 
11.03.13
16:14
(37)СрезПоследних(ТипЦен = &ТипЦен), то есть так

мне не подходит, потому как запрос будет через построитель и эти параметры будут задаваться в отборе построителя
45 GANR
 
11.03.13
16:16
(44) см. (42).
46 Конфигуратор1с
 
11.03.13
16:19
(44) отчет на почту бросьте
47 BoaBela
 
11.03.13
16:20
Сделала как в (42):

ВЫБРАТЬ
   ТоварыНаСкладахОстатки.Номенклатура,
   ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
   ТоварыНаСкладахОстатки.Склад,
   ТоварыНаСкладахОстатки.КоличествоОстаток,
   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.ТипЦен, ЗНАЧЕНИЕ(Справочник.ТипыЦенНоменклатуры.ПустаяСсылка)) КАК ТипЦен,
   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, {(Номенклатура).*}) КАК ТоварыНаСкладахОстатки
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, {(Номенклатура).*}) КАК ЦеныНоменклатурыСрезПоследних
       ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
           И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
         
И та же петрушка........
48 GANR
 
11.03.13
16:21
(44)(46) лучше на files.mail.ru, а ссылку  - в ветку
49 BoaBela
 
11.03.13
16:23
У меня используется - Конфигурация: Управление торговым Предприятием для Украины 1.2.13.2 (это так на всякий случай)
50 Конфигуратор1с
 
11.03.13
16:32
(49) сестра)
51 BoaBela
 
11.03.13
16:44
52 Фауст
 
11.03.13
17:05
(44) тогда как то так:
СрезПоследних(,{(ТипЦен) КАК ОТборПоТипуЦен})

Из ГДЕ условие убери.
53 BoaBela
 
12.03.13
17:22
Файлик разместила, никаких предложений нет? Я уже думаю сделать отдельным отчетом с перебором всех позиций с остатками и подбора цены на дату
54 GANR
 
12.03.13
17:27
(53) Возможно, от построителя придется отказаться. Понять, как работает построитель поможет метод Построитель.ПолучитьЗапрос(). Но то, что это можно сделать в рамках одного запроса - факт. (42), видимо, не работает из-за того, что построитель пихает условие в секцию ГДЕ.
55 GANR
 
12.03.13
17:28
+(54) в секцию ГДЕ на поле правой таблицы
56 BoaBela
 
12.03.13
18:15
может быть...вот и хотелось бы понять....
57 GANR
 
12.03.13
19:15
(56) 3-й раз за ветку говорю Построитель.ПолучитьЗапрос() поможет понять
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший