Имя: Пароль:
1C
1С v8
Проверка на наличие значения в РС
, ,
0 Валидатор
 
03.12.13
13:50
1с 8.2. Такой вопрос, есть Таблица Значений заполненная из файла, теперь хочу проверить, совпадают ли значения из моей таблицы с значениями РС, написал запрос:
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТЗ.КодНоменклатуры,
                   |    ТЗ.НаименованиеНоменклатуры,
                   |    ТЗ.ИдентификаторНоменклатуры,
                   |    ТЗ.НомерГТД,
                   |    ТЗ.Страна,
                   |    ТЗ.Количество,
                   |    ТЗ.Цена
                   |ИЗ
                   |    ТаблицаЗначений КАК ТЗ
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ТЗ.КодНоменклатуры,
                   |    ТЗ.НаименованиеНоменклатуры,
                   |    ТЗ.ИдентификаторНоменклатуры,
                   |    ТЗ.НомерГТД,
                   |    ТЗ.Страна,
                   |    ТЗ.Количество,
                   |    ТЗ.Цена
                   |ИЗ
                   |    &ТЗ КАК ТЗ
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ттСоответствиеОбъектов КАК ттСоответствиеОбъектов
                   |        ПО ТЗ.ИдентификаторНоменклатуры = ттСоответствиеОбъектов.Идентификатор";
                   Запрос.УстановитьПараметр("ТЗ", ТаблицаЗначений);
     Результат = Запрос.Выполнить();
     ДанныеПоНоменклатуре = Результат.Выгрузить();
летит ошибка, что не так?
1 Валидатор
 
03.12.13
13:53
и в результате запроса мы ведь получим только те строки, которые удовлятворять условию будут так? а как быть с теми строками, которые не совпадают с РС? мне их нужно создавать, но запрос же их не вернет
2 Галахад
 
гуру
03.12.13
13:54
А где менеджер?
3 Бешеная Нога
 
03.12.13
13:54
а че текст ошибки стыдно показать?
4 Бешеная Нога
 
03.12.13
13:54
и что такое "ТаблицаЗначений" в первом запросе
5 Валидатор
 
03.12.13
13:55
{Форма.Форма.Форма(88)}: Ошибка при вызове метода контекста (Выполнить)
     Результат = Запрос.Выполнить();
по причине:
Содержимое объекта данных может быть выбрано только во временную таблицу
6 Валидатор
 
03.12.13
13:55
(4) Таблица значений - таблица которая заполняется данными из загружаемого файла, я же написал
7 Бешеная Нога
 
03.12.13
13:55
(6) это твой первый запрос к таблице значений?
8 Валидатор
 
03.12.13
13:56
(7) да
9 Бешеная Нога
 
03.12.13
13:57
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТЗ.КодНоменклатуры,
                   |    ТЗ.НаименованиеНоменклатуры,
                   |    ТЗ.ИдентификаторНоменклатуры,
                   |    ТЗ.НомерГТД,
                   |    ТЗ.Страна,
                   |    ТЗ.Количество,
                   |    ТЗ.Цена
                   |Поместить ТЗ
                   |ИЗ
                   |    &ТЗ КАК ТЗ
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////

                   |ВЫБРАТЬ
                   |    ТЗ.КодНоменклатуры,
                   |    ТЗ.НаименованиеНоменклатуры,
                   |    ТЗ.ИдентификаторНоменклатуры,
                   |    ТЗ.НомерГТД,
                   |    ТЗ.Страна,
                   |    ТЗ.Количество,
                   |    ТЗ.Цена
                   |ИЗ
                   |    ТЗ КАК ТЗ
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ттСоответствиеОбъектов КАК ттСоответствиеОбъектов
                   |        ПО ТЗ.ИдентификаторНоменклатуры = ттСоответствиеОбъектов.Идентификатор";
                   Запрос.УстановитьПараметр("ТЗ", ТаблицаЗначений);
     Результат = Запрос.Выполнить();
     ДанныеПоНоменклатуре = Результат.Выгрузить();
10 Бешеная Нога
 
03.12.13
13:57
и колонки ТЗ должны быть типизированы
11 Валидатор
 
03.12.13
13:57
с поместить тоже делал, там запрос возвращал потом пустое значение
12 Бешеная Нога
 
03.12.13
13:58
(11) сделай как написано
13 Валидатор
 
03.12.13
13:58
(10) это то понятно
14 Валидатор
 
03.12.13
14:01
(12) теперь он мне выдал совпадения с РС, но только в РС 2 совпадения, а в результате запроса 3 совпадения, как так?
15 Галахад
 
гуру
03.12.13
14:03
(14) Какие нафиг совпадения. Запрос тупо выдает исходную таблицу.
16 Валидатор
 
03.12.13
14:03
И так же, я удалил из РС записи совпадающие, теперь смотрю результат запроса, у меня в нем 2 позиции, те же, которые грузятся из файла, но этих позиций НЕТ в РС, почему они тогда отображаются?
17 Валидатор
 
03.12.13
14:03
так а толку мне от запроса, когда я и так ТЗ мог получить
18 Enders
 
03.12.13
14:03
(14)Ну наверное потому что там Левое соединение...
И надо либо ставить проверку на NULL, либо делать внутреннее
19 Бешеная Нога
 
03.12.13
14:04
у тебя левое соединие. на выходе по любому будут все записи из таблицы значений. как ни крути. или ставь условие или делай внутреннее
20 Валидатор
 
03.12.13
14:04
(18) вот тут то и проблема, если мы сделаем соединение, у нас отобразятся только те позиции, которые одинаковы и в моей ТЗ,  которая в 1 запросе, и в РС, а остальные то данные мы не получим? на которых нет совпадений?
21 Enders
 
03.12.13
14:06
(20) Да, именно так.
Если тебя это не устраивает, тогда чего ты жаловался в (14) что получаешь все данные?)))
22 Enders
 
03.12.13
14:06
и что мешает выбрать какой-то реквизит из РС, что б при обходе результата запроса понимать, эта позиция совпадает или нет?
23 Валидатор
 
03.12.13
14:08
(22) у меня есть измерение в РС, идентификатор, вот по нему как то нужно смотреть, типа если идентификатор из РС совпадает с идентификатором из ТЗ, то берем номенклатуру, если нет, то создаем номенклатуру
24 Галахад
 
гуру
03.12.13
14:09
(20) Нет не так. При левом соединение будут и совпадения и не совпадения.
25 Enders
 
03.12.13
14:10
Блин, вариантов масса как это сделать. Некоторые приведены выше. Ещё есть вариант получить всё это двумя запросами:
Первым - только совпадающие
Вторым - не совпадающие
Ещё есть вариант в запросе написать
Выбор
Когда ттСоответствиеОбъектов.Идентификатор ЕСТЬ NULL
Тогда Истина
Иначе
Ложь
Конец как ЕстьСовпадение
26 Enders
 
03.12.13
14:11
*немного напутал
Тогда ложь
Иначе Истина
27 Валидатор
 
03.12.13
14:12
(25) в каждом из двух запросов?
28 Enders
 
03.12.13
14:34
(27) нет, это различные варианты решения задачи
Или два запроса, или через выбор, или просто через реквизит.
29 Валидатор
 
03.12.13
14:51
(25) если делать условие на есть нул, все равно с 2мя запросами ведь? один по РС другой по ТЗ?