Имя: Пароль:
1C
1С v8
Помогите с запросом
0 breezee
 
23.04.15
11:09
Есть 1 физическая таблица(табличная часть док-та) в которой 60 позиций номенклатуры и вторая(вирутальная) в которой эти же 60 позиций + 2 которые в первой раны NULL, как мне получить 62 позиции из первой таблицы с нулл парметром (другой парамтр заполнен). Я совсем запутался, получаю либо 106, илбо 108, либо вообще 3728, в зависимости от левого или правого или полного соединения, соединяю по номенклатуре таблицы. Подскажите, пожалуйста, без повторяющихся не работает, потому что там поле неорганиченной длины пишет.
1 Vladal
 
23.04.15
11:12
> потому что там поле неорганиченной длины пишет.

Напиши в запросе
ВЫРАЗИТЬ(ПолеНеограниченнойДлины КАК Строка 1000)

Должно помочь.
2 breezee
 
23.04.15
11:17
(1) Да, помогло, спасибо. только теперь 44 и 46 в зависимости от соеднения позиций выводятся, вариант с различными не подходит
3 fishb1
 
23.04.15
11:21
Соединением сложно, а объединением с группировкой по номенклатуре и отбором по "Не Номенклатура ЕСТЬ NULL" можно.
4 breezee
 
23.04.15
11:31
(1) Еще раз спасибо, это я не правильно написал, там было 46 все же. Сейчас все проверю еще раз
5 Vladal
 
23.04.15
11:36
Прими в дар шпаргалку по соединениям. без-воз-мез-дно

http://s020.radikal.ru/i705/1504/3a/182584658044.png
6 breezee
 
23.04.15
11:42
(5) Спасибо. Все же у меня 62 записи, я запутался, не одно из таблицы мне не подходит, подскажи что делать пожалуйста.
7 AntonH851
 
23.04.15
11:47
(6) Покажи текст запроса
8 breezee
 
23.04.15
11:50
(7) ВЫБРАТЬ
    ЗаказПоставщикуТовары.Сумма,
    ЗаказПоставщикуТовары.Количество,
    ЗаказПоставщикуТовары.Цена,
    ЗаказПоставщикуТовары.Номенклатура.Артикул КАК Артикул,
    ЗаказПоставщикуТовары.Номенклатура,
    ЗаказПоставщикуТовары.Номенклатура.Родитель КАК НоменклатураРодитель,
    ЗаказПоставщикуТовары.Ссылка,
    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента КАК НаименованиеНоменклатуры
ПОМЕСТИТЬ ррр
ИЗ
    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        ПО (НоменклатураКонтрагентов.Номенклатура = ЗаказПоставщикуТовары.Номенклатура)
ГДЕ
    ЗаказПоставщикуТовары.Ссылка = &ТекущийДокумент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ррр.Сумма,
    ррр.Количество,
    ррр.Цена,
    ррр.Артикул,
    ррр.Номенклатура,
    ррр.НоменклатураРодитель,
    ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, 0) КАК Значение,
    ЗначенияСвойствОбъектов.Свойство,
    ррр.Ссылка,
    ррр.НаименованиеНоменклатуры
ПОМЕСТИТЬ ккк
ИЗ
    ррр КАК ррр
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        ПО ррр.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
    ЗначенияСвойствОбъектов.Свойство.Наименование = "Наименование (англ)"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ккк.Свойство,
    ккк.Значение КАК Значение,
    ЗаказПоставщикуТовары.Номенклатура,
    ЗаказПоставщикуТовары.Номенклатура.Артикул,
    ЗаказПоставщикуТовары.Сумма,
    ЗаказПоставщикуТовары.Цена,
    ЗаказПоставщикуТовары.Количество,
    ккк.НаименованиеНоменклатуры
ПОМЕСТИТЬ ПустыеЗначения
ИЗ
    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
        ЛЕВОЕ СОЕДИНЕНИЕ ккк КАК ккк
        ПО ЗаказПоставщикуТовары.Номенклатура = ккк.Номенклатура
ГДЕ
    ЗаказПоставщикуТовары.Ссылка = &ТекущийДокумент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПустыеЗначения.Свойство,
    ПустыеЗначения.Значение КАК Значение,
    ПустыеЗначения.Номенклатура КАК Номенклатура,
    ПустыеЗначения.НоменклатураАртикул,
    ПустыеЗначения.Сумма,
    ПустыеЗначения.Цена,
    ПустыеЗначения.Количество,
    ЕСТЬNULL(ПустыеЗначения.НаименованиеНоменклатуры, ПустыеЗначения.Номенклатура.Наименование) КАК НаименованиеНоменклатуры
ИЗ
    ПустыеЗначения КАК ПустыеЗначения
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        ПО ПустыеЗначения.Номенклатура = НоменклатураКонтрагентов.Номенклатура

УПОРЯДОЧИТЬ ПО
    Значение
ИТОГИ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура)
ПО
    ОБЩИЕ
9 Ёпрст
 
23.04.15
11:56
Чего надо то, в целом ?
10 Ёпрст
 
23.04.15
11:56
Зачем по сто раз одно и тоже соединять ?
11 Ёпрст
 
23.04.15
11:58
ну и это..
ГДЕ
    ЗначенияСвойствОбъектов.Свойство.Наименование = "Наименование (англ)"

тут ты своим условием левое соединение превратил во внутреннее, если че.
12 breezee
 
23.04.15
11:58
(10) Надо чтобы подтягивалось для номенклатуры её свойство из регистра свойств и её наименование из регистра наименование поставщика
13 ЧеловекДуши
 
23.04.15
11:58
(8) Каша
14 Ёпрст
 
23.04.15
12:00
(12) и ?
Делай всё в одном запросе, нахрена тебе такое количество временных табличек для этого ?
15 ЧеловекДуши
 
23.04.15
12:07
(12) Используй характеристики
16 ЧеловекДуши
 
23.04.15
12:08
17 breezee
 
23.04.15
13:16
Все равно ни черта не понимаю. ДА, я идиот дурак и т.д.,
Вот у меня есть таблица я её делаю левым соединением ко второй - в результирующее таблице будет столько же строчек, с одной таблицей работает(с наименованием номенклатуры), а с другой таблицей (со свойствами объектов) - появляются новые записи

Вот запрос

ВЫБРАТЬ
    ЗаказПоставщикуТовары.Номенклатура КАК Номенклатура
ИЗ
    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        ПО ЗаказПоставщикуТовары.Номенклатура = НоменклатураКонтрагентов.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        ПО ЗаказПоставщикуТовары.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
    ЗаказПоставщикуТовары.Ссылка = &ТекущийДокумент
ИТОГИ
    КОЛИЧЕСТВО(Номенклатура)
ПО
    ОБЩИЕ
18 breezee
 
23.04.15
13:26
А если ставлю условие - получается меньше записей. Как правая таблица в левом соединении может менять количество записей?
19 ЧеловекДуши
 
23.04.15
13:30
(17) РегистрСведений.ЗначенияСвойствОбъектов

Как правило:
1. имеет составной тип, так что лучше писать с отбором по типу "ЗначенияСвойствОбъектов.Объект ссылка Справочник.ТвойСправочник"
2. Там Куева туча свойств, а в данном примере ты выбираешь все, а тебе надо все? :)
20 ЧеловекДуши
 
23.04.15
13:30
(18) Сколько элементов, столько и связей
21 GenAcid
 
23.04.15
13:31
(18) легко и непринужденно

таб 1
элемент1
элемент2

таб2
элемент1   2
элемент1   7
элемент2   9
элемент3   1

как думаешь что будет если выбрать данные из таб1 и соединить их с таб2?
22 breezee
 
23.04.15
13:33
(19) Спасибо, нет, только 1 св-во, только когда его делаю сильно режется количество номенклатуры, пытался экспеременитровать)

элемент1   2
элемент1   7
элемент2   9
элемент3   1
Так?
Но у меня же существующие значения в первой таблице а не NULL
23 breezee
 
23.04.15
13:36
(19) Когда ставлю значение номенклатуры - ставится обратно на объект, свойства мне в условиях ставить? Они не будут ограничивать выборку?
24 breezee
 
23.04.15
13:40
Да что за фигня? Если я хочу просто выбрать все поля из левой таблицы и найти для них соотвествие в правой то я должен поставить условие и выбрать левое соединение. Где я не прав?
25 breezee
 
23.04.15
13:43
Без повторяющихся 65 - это близко но всё же не 62. Кстати, если я буду использовать повторяющиеся и попадется 2 одинаковых записи тч - одна удалится, или это сделано ка раз для случаев как у меня? И все же почему 65?
26 GenAcid
 
23.04.15
13:45
Подумай над (19) проблема скорее всего в этом.
27 GenAcid
 
23.04.15
13:50
(26) Хотя я твой запрос посмотрел, не должно быть в этом проблемы.
28 breezee
 
23.04.15
13:55
Всем спасибо. В общем сделал так - в пером запросе выбрал без посторяющихся и совмести с тч документа - все вышло, хотя я так и не понял что без этого не работало

Может кому пригодится
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказПоставщикуТовары.Номенклатура КАК Номенклатура,
    ЗначенияСвойствОбъектов.Объект,
    ЗначенияСвойствОбъектов.Значение
ПОМЕСТИТЬ ррр
ИЗ
    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        ПО ЗаказПоставщикуТовары.Номенклатура = НоменклатураКонтрагентов.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        ПО ЗаказПоставщикуТовары.Номенклатура = ЗначенияСвойствОбъектов.Объект
ГДЕ
    ЗаказПоставщикуТовары.Ссылка = &ТекущийДокумент
    И ЗначенияСвойствОбъектов.Свойство.Наименование = "Наименование (англ)"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказПоставщикуТовары.Номенклатура КАК Номенклатура,
    ррр.Номенклатура КАК Номенклатура1,
    ррр.Значение КАК Значение
ИЗ
    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
        ЛЕВОЕ СОЕДИНЕНИЕ ррр КАК ррр
        ПО (ррр.Номенклатура = ЗаказПоставщикуТовары.Номенклатура)
ГДЕ
    ЗаказПоставщикуТовары.Ссылка = &ТекущийДокумент
ИТОГИ
    КОЛИЧЕСТВО(Номенклатура),
    КОЛИЧЕСТВО(Номенклатура1),
    КОЛИЧЕСТВО(Значение)
ПО
    ОБЩИЕ
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.