Имя: Пароль:
1C
1С v8
Запрос к БД
,
0 MaxKor
 
17.02.18
17:59
Здравствуйте! Подскажите пожалуйста, как правильнее написать такой запрос. Есть ТаблицаЗначений, в ней колонки Наименование и Артикул (обе строковые). Нужно сравнить эти значения с номенклатурой в БД, также по Наименованию и Артикулу, и в выборку вывести те значения, для которых не нашлось совпадений в БД.
1 PuhUfa
 
17.02.18
18:01
(0) передай свою таблицу через параметр в запрос и соединением сравни
2 MaxKor
 
17.02.18
18:16
а как конкретно сравнить? в базе 250 тыс элементов, у меня виснет пк и выдает ошибку о нехватке памяти
3 nordbox
 
17.02.18
18:20
Тут вариантов много разных )))
Как делаешь? в какой момент виснет, что читаешь из справочника?
4 nordbox
 
17.02.18
18:22
Кроме того
>>и в выборку вывести те значения, для которых не нашлось совпадений в БД.
Пусть у тебя в ТЗ 10 тыс элементов, значит ты в выборку собираешь засунуть 240 тыс элементов/ссылок
Задачу измени
5 Рэйв
 
17.02.18
18:34
(0)Почитай про типизацию колонок тз, про запихание ее в запрос.Про типы соединений в запросе. Ну и хватит навреное, чтобы посчитать себя ущербным в открытии сабжа.
6 Георгиос
 
17.02.18
18:45
(0) https://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/SQL_Joins.svg/1024px-SQL_Joins.svg.png

Для SQL создали картинку, где понятно как делать разные пересечения таблиц.
На 1С аналогично, но по-русски
ВЫБРАТЬ вместо SELECT и т.д.
7 nordbox
 
17.02.18
18:52
(6) Это все понятно, у (0) подход не правильный
8 Георгиос
 
17.02.18
21:52
(2) Поскольку у тебя выдает ошибку, значит что-то ты написал.
В запросе можно ограничить число выводимых строк.
Синтаксис для 1С не подскажу, а в SQL "SELECT TOP 1000 дальше текст запроса продолжается" - первые 1000 строк результата.
Или сделать ограничение по номеру или наименованию. Не все проверять, а что-то явное, потом это ограничение в запросе убрать.
Так быстрее будет работать, хватит памяти и можно разобраться что к чему.
Ограничь число выводимых строк в своем запросе, посмотри результат, пойми, что не так. Возможно идет связь все ко всем, а это много при 250 тыс. записей.

Научиться писать запросы вполне возможно.
9 mikecool
 
17.02.18
22:14
(0) при сравнении используй выразить(АртикулИзТЗ как строка(ДлинаАртикулаВКонфигурации)) - так будет попадать
10 rsv
 
17.02.18
22:36
(0)

На полное совпадение Артикула И Наименование

Выбрать
Различные
ТЗ.Артикул,
ТЗ.Наименование,
Из
ТЗ
LEFT JOIN
Номенклатура
ON
ТЗ.Артикул = Номенклатура.Артикул  И
ТЗ.Наименование = Номенклатура.Наименование
Где
Номенклатура.Артикул IS NULL
11 tndr
 
17.02.18
22:45
(0) Поищи в книге знаний, Осипов оченна неплохую функцию сравнения таблиц значений написал.
12 rsv
 
17.02.18
22:51
+(10) а еще лучше почитать ANSI SQL.  И всегда рассматривать  ТЗ  как обычную таблицу  и джойнить ее с  другой (другими) по простым правилам .