Имя: Пароль:
1C
1С v8
Исключение товаров и харакетеристик с остатков
,
0 sv201
 
08.08.13
10:08
Добрый день

Не получается что то с запросом решить задачу, а задача следующая
есть документ инвентаризация товаров со списком на складе1:

Склад1:
Номенклатура   характеристика    кол-во    цена      Сумма
****************************************************************
Товар1          Характеристика11   5 шт.    40 руб    200 руб
Товар1          Характеристика12   5 шт.    40 руб    200 руб
Товар1          Характеристика13   5 шт.    40 руб    200 руб
Товар1          Характеристика14   5 шт.    40 руб    200 руб
Товар2          Характеристика21   5 шт.    50 руб    250 руб

И на остатках на складе1:
Номенклатура   характеристика    кол-во    цена      Сумма
****************************************************************
Товар1          Характеристика11   5 шт.    40 руб    200 руб
Товар1          Характеристика12   5 шт.    40 руб    200 руб
Товар1          Характеристика13   5 шт.    40 руб    200 руб
Товар1          Характеристика14   5 шт.    40 руб    200 руб
Товар1          Характеристика15   5 шт.    40 руб    200 руб
Товар2          Характеристика21   5 шт.    50 руб    250 руб
Товар3          Характеристика31   4 шт.    40 руб    160 руб

Нужно запросом сравнить товары в документе с товарами в остатках и выдать те товары которые не входят в состав документа
по нашему примеру получиться вот так:
Номенклатура   характеристика    кол-во    цена      Сумма
****************************************************************
Товар1          Характеристика15   5 шт.    40 руб    200 руб
Товар3          Характеристика31   4 шт.    40 руб    160 руб

То есть необходимо исключить товары и характеристики которые не входят в список товаров документа


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    ИнвентаризацияТоваровТовары.Номенклатура,
|    ИнвентаризацияТоваровТовары.ХарактеристикаНоменклатуры
|ПОМЕСТИТЬ ТабТоваров
|ИЗ
|    Документ.ИнвентаризацияТоваров.Товары КАК ИнвентаризацияТоваровТовары
|ГДЕ
|    ИнвентаризацияТоваровТовары.Ссылка.Ссылка = &Ссылка
|    И ИнвентаризацияТоваровТовары.Ссылка.Склад = &Склад
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ТоварыНаСкладахОстатки.Номенклатура,
|    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
|    ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
|    РегистрНакопления.ТоварыНаСкладах.Остатки(
|            &Дата,
|            НЕ Номенклатура В
|                        (ВЫБРАТЬ
|                            ТабТоваров.Номенклатура
|                        ИЗ
|                            ТабТоваров КАК ТабТоваров)
|                И НЕ ХарактеристикаНоменклатуры В
|                        (ВЫБРАТЬ
|                            ТабТоваров.ХарактеристикаНоменклатуры
|                        ИЗ
|                            ТабТоваров КАК ТабТоваров)
|                И Склад = &Склад) КАК ТоварыНаСкладахОстатки";
1 sv201
 
08.08.13
10:08
данный запрос не срабатывает
2 sv201
 
08.08.13
11:17
выдает пустой результат
3 sv201
 
08.08.13
12:25
???
4 Maxus43
 
08.08.13
12:29
Соединяй таблицу остатков Левым соединением по номенклатуре и характеристике, в условии пиши ГДЕ ТабТоваров.Номенклатура есть null
5 cw014
 
08.08.13
12:29
Значит на остатках кроме этого товара и этой характеристики на эту дату больше ничего нет
6 cw014
 
08.08.13
12:30
И еще - тебе тут достаточно только характеристики выгрузить - они подчинены номенклатуре
7 Maxus43
 
08.08.13
12:30
(5)(6) не, номенклатуры есть повторяющиеся, а сравнивает он В(), т.е. списки и номенклатур и характеристик, а не конкретные номенклатуры с характеристиками
8 Maxus43
 
08.08.13
12:31
т.е. если хоть одна характеристика у номенклатуры там есть - то не отсеет
9 cw014
 
08.08.13
12:33
(7) Он тягает из ТЧ эти характеристики с номенклатурой. Если руки не из заднего места растут - характеристика принадлежит ровно той номенклатуре, которая стоит в этой строке в соответствующем поле
10 Maxus43
 
08.08.13
12:38
ну смотри. в остатках Номенклатура1, Характеристика1.

В ТЧ
Номенклатура1, Характеристика1
Номенклатура1, Характеристика2

При поиске по остаткам По характеристике через В() - Будет дан
положительный результат, т.к. Характеристика1 присутствует в списке из характеристика1, характеристика2
11 Maxus43
 
08.08.13
12:43
как то так

ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        ПО ТоварыНаСкладахОстатки.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры
ГДЕ
    ПоступлениеТоваровУслугТовары.Номенклатура ЕСТЬ NULL
    И ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка
12 ИсчадиеADO
 
08.08.13
12:45
(11) сразу внутренним
13 sv201
 
08.08.13
12:46
вот запрос который я составил по вашим рекомендациям

ВЫБРАТЬ
|    ИнвентаризацияТоваровТовары.Номенклатура,
|    ИнвентаризацияТоваровТовары.ХарактеристикаНоменклатуры
|ПОМЕСТИТЬ ТабТоваров
|ИЗ
|    Документ.ИнвентаризацияТоваров.Товары КАК ИнвентаризацияТоваровТовары
|ГДЕ
|    ИнвентаризацияТоваровТовары.Ссылка.Ссылка = &Ссылка
|    И ИнвентаризацияТоваровТовары.Ссылка.Склад = &Склад
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ТоварыНаСкладахОстатки.Номенклатура,
|    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
|    ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
|    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|        ЛЕВОЕ СОЕДИНЕНИЕ ТабТоваров КАК ТабТоваров
|        ПО (ТабТоваров.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура)
|            И (ТабТоваров.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры)
|ГДЕ
|    ТабТоваров.Номенклатура ЕСТЬ NULL
14 ИсчадиеADO
 
08.08.13
12:46
а пардон, надо же исключить...
15 ИсчадиеADO
 
08.08.13
12:47
(13) ты ссылку на док посеял
16 cw014
 
08.08.13
12:47
(10) Да все верно. И потому ничего не заполнит, так как на остатках нет тех позиций, которые НЕ присутствуют в ТЧ
17 Maxus43
 
08.08.13
12:49
(16) результаты запросов (0) и (13) разные, и именно (13) надо автору
18 sv201
 
08.08.13
12:49
но этот запрос выдает результат


Номенклатура   характеристика    кол-во    цена      Сумма
****************************************************************
Товар1          Характеристика15   5 шт.    40 руб    200 руб (0)

а должен был выдать результат

Номенклатура   характеристика    кол-во    цена      Сумма
****************************************************************
Товар1          Характеристика15   5 шт.    40 руб    200 руб
Товар3          Характеристика31   4 шт.    40 руб    160 руб

Ссылка на документ находиться во временной таблице |    ИнвентаризацияТоваровТовары.Ссылка.Ссылка = &Ссылка
19 Maxus43
 
08.08.13
12:50
(13) З.ы. .Ссылка.Ссылка убери, оставь одну
20 sv201
 
08.08.13
12:52
убрать я убрал но всеравно на результат не повлиял
21 Maxus43
 
08.08.13
12:53
убери
|ГДЕ
|    ТабТоваров.Номенклатура ЕСТЬ NULL

Увидишь таблицу остатки, и то что в остатках нет
Товар3          Характеристика31
22 sv201
 
08.08.13
12:56
вот именно что в остатках присутсвует
23 cw014
 
08.08.13
13:05
|ГДЕ
|    ИнвентаризацияТоваровТовары.Ссылка.Ссылка = &Ссылка
|    И ИнвентаризацияТоваровТовары.Ссылка.Склад = &Склад

Зачем тут склад?
24 Maxus43
 
08.08.13
13:25
(22) добавь

|ВЫБРАТЬ
|    ТоварыНаСкладахОстатки.Номенклатура,
|    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
|    ТоварыНаСкладахОстатки.КоличествоОстаток,
|    ТабТоваров.Номенклатура,
|    ТабТоваров.ХарактеристикаНоменклатуры

опять же без ГДЕ, увидишь резкльтирующую, тогда должно стать понятно почему
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн