Имя: Пароль:
1C
1С v8
Получить номенклатуру не входящую в ТЗ
0 Emilio
 
03.10.15
08:05
Доброго всем утра!
Я как всегда сюда за подсказкой мозг совсем уж не желает работать(
Ситуация следующая: есть ТЗ а в ней номенклатура и характеристика. Нужно выбрать номенклатуру с характеристикой из базы, которых нет в это ТЗ. Проблема заключается в том, что в ТЗ может быть порядка 10000 строк, а характеристик в базе больше 15000, потому любой запрос с временной таблицей отлетает за невозможностью использования. Может кто-то когда-то где-то сталкивался с ситуацией. Я делал через запрос с временной таблицей одинесина падала в ошибку о недостаточности памяти.
1 Emilio
 
03.10.15
08:06
вот так у меня не получилось:

    Запрос = Новый Запрос;
    Запрос.Текст = ("ВЫБРАТЬ
                    |    тзСписать.Номенклатура,
                    |    тзСписать.Характеристика
                    |ПОМЕСТИТЬ тзСписать
                    |ИЗ
                    |    &тзСписать КАК тзСписать
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    ХарактеристикиНоменклатуры.Владелец.Ссылка,
                    |    ХарактеристикиНоменклатуры.Ссылка КАК ХарактеристикиНоменклатуры
                    |ИЗ
                    |    тзСписать КАК тзСписать
                    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
                    |        ПО тзСписать.Характеристика <> ХарактеристикиНоменклатуры.Ссылка
                    |ГДЕ
                    |    ТИПЗНАЧЕНИЯ(ХарактеристикиНоменклатуры.Владелец) = ТИП(Справочник.Номенклатура)");
                          
    Запрос.УстановитьПараметр("тзСписать", тзДляСписания);
2 jsmith82
 
03.10.15
08:10
Я бы вторую ВТ добавил по условию
ГДЕ ТИПЗНАЧЕНИЯ(ХарактеристикиНоменклатуры.Владелец) = ТИП(Справочник.Номенклатура)
3 jsmith82
 
03.10.15
08:12
У тебя условие неправильное
4 jsmith82
 
03.10.15
08:12
ТЗСписать ЛЕВОЕ ПО <> как раз и будет множить строки
В итоге у тебя таблица разрастается до астрономических масштабов
5 jsmith82
 
03.10.15
08:17
ВЫБРАТЬ
тзСписать.Номенклатура,
тзСписать.Характеристика
ПОМЕСТИТЬ тзСписать
ИЗ
&тзСписать КАК тзСписать
;
////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ПОМЕСТИТЬ тзХарактеристики
ГДЕ
ТИПЗНАЧЕНИЯ(ХарактеристикиНоменклатуры.Владелец) = ТИП(Справочник.Номенклатура)
;
////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
Характеристики.Характеристика.Владелец КАК Номенклатура,
Характеристики.Характеристика КАК Характеристика
ИЗ
тзХарактеристики КАК тзХарактеристики
ЛЕВОЕ СОЕДИНЕНИЕ тзСписать КАК тзСписать
ПО тзХарактеристики.Характеристика = тзСписать.Характеристика
ГДЕ тзСписать.Характеристика = NULL
6 PuhUfa
 
03.10.15
08:43
Почему не просто?

ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Ссылка,
    ХарактеристикиНоменклатуры.Владелец
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    НЕ ХарактеристикиНоменклатуры.Ссылка В (&тзСписать)
7 PuhUfa
 
03.10.15
08:44
в тзСписать характиристики
8 Emilio
 
03.10.15
11:09
(7) что-то не получилось. А вы уверены что "В" будет работать по отношению в таблице значений?
9 jsmith82
 
03.10.15
11:11
(8) Ты слушай умных дяденек 2-5
А будешь тупить, ничего не выйдет
У тебя в тзСписать 2 колонки
10 RomanYS
 
03.10.15
11:14
(8) так передай массив/список
ВыгрузитьКолонку тебе поможет
11 Emilio
 
03.10.15
11:25
(9) (10) проверяю оба варианта. отпишусь сюда по результату с данными замера.
12 PuhUfa
 
03.10.15
12:05
(11) зачем ты в ТЗ изначально загоняешь номенклатуру и характеристику? Характеристика подчинённый справочник. Работай только с ней и используйте владельца для получения номенклатуры
13 Emilio
 
03.10.15
12:25
(9) сделал так:
Запрос.Текст = ("ВЫБРАТЬ
                    |    тзСписать.Номенклатура,
                    |    тзСписать.Характеристика
                    |ПОМЕСТИТЬ тзСписать
                    |ИЗ
                    |    &тзСписать КАК тзСписать
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
                    |ПОМЕСТИТЬ тзХарактеристики
                    |ИЗ
                    |    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
                    |ГДЕ
                    |    ТИПЗНАЧЕНИЯ(ХарактеристикиНоменклатуры.Владелец) = ТИП(Справочник.Номенклатура)
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    тзХарактеристики.Характеристика.Владелец КАК Номенклатура,
                    |    тзХарактеристики.Характеристика
                    |ИЗ
                    |    тзХарактеристики КАК тзХарактеристики
                    |        ЛЕВОЕ СОЕДИНЕНИЕ тзСписать КАК тзСписать
                    |        ПО тзХарактеристики.Характеристика = тзСписать.Характеристика
                    |ГДЕ
                    |    тзСписать.Характеристика = NULL");

собственно как ты советовал, результат пустой получается.
14 Emilio
 
03.10.15
12:28
(12) в ТЗ хранится результат чтения файла. вот все чего нет в этой ТЗ мне надо списать
15 jsmith82
 
03.10.15
12:31
(13) Напиши ЕСТЬ NULL
16 PuhUfa
 
03.10.15
14:06
(14) не важно результат чего у тебя тзСписать. Главное что бы там были ссылки на характеристики (у тебя же там ссылки а не текст?). Колонка Номенклатура в тзСписать лишняя.
17 Emilio
 
03.10.15
14:50
(15) (16) Спасибо за помощь! :) вроде заработало в обоих вариантах, теперь буду по замерам проверять, что отработает быстрее. Премного вам благодарен)
18 Лефмихалыч
 
03.10.15
16:34
сегодня день решительного отказа от запятых что ли?