|
Запрос по НоменклатураГТД | ☑ | ||
---|---|---|---|---|
0
The_ka6a4ok
13.11.20
✎
10:23
|
добрых дней. задача: взять названия номенклатура из Справочники.НомеклатураГТД.Владелец и сравнить их с названиями Справочники.Номенклатура.Наименование, то есть, они должны совпадать, при этом у второго справочника, в поле НоменклатураГТД должна быть пустая ссылка на первый справочник. Есть два моих "решения", которые не работают как задумано, вот я и пытаюсь узнать, что делаю не так, вот код из консоли запросов:
Выбрать Номенклатура.Наименование КАК Имя, Номенклатура.НоменклатураГТД КАК КодУКТВЭД, НоменклатураГТД.Владелец КАК Владелец ИЗ Справочник.Номенклатура как Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатураГТД ПО НоменклатураГТД.Владелец = Номенклатура.Наименование ГДЕ Номенклатура.НоменклатураГТД = Значение(Справочник.НоменклатураГТД.ПустаяСсылка) Если убрать условие, все равно не тот результат, но скорее всего из-за того, что я связываю именно вторую таблицу с первой, а не наоборот, увы но Правое Соединение вовсе крашит консоль, не понимаю почему. Есть и второе решение, оно подразумевает выборку в цикле, я реализовал это уже в конфигураторе: ЗапросГТД = новый Запрос(); ЗапросГТД.Текст = "Выбрать | НоменклатураГТД.Владелец как Имя, | НоменклатураГТД.КодУКТВЭД как Код | ИЗ Справочник.НоменклатураГТД как НоменклатураГТД"; ВыборкаГТД = ЗапросГТД.Выполнить().Выбрать(); Пока ВыборкаГТД.Следующий() Цикл Запрос = Новый Запрос(); Запрос.Текст = "Выбрать | Номенклатура.Наименование КАК Имя, | Номенклатура.НоменклатураГТД КАК КодУКТВЭД | ИЗ Справочник.Номенклатура как Номенклатура | ГДЕ Номенклатура.Наименование = &Наименование И Номенклатура.НоменклатураГТД = Значение(Справочник.НоменклатураГТД.ПустаяСсылка)"; Запрос.УстановитьПараметр("Наименование", ВыборкаГТД.Имя); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Имя); Если Выборка.КодУКТВЭД = "" Тогда Сообщить("Основа - " + Выборка.Имя + ", ГТД - " + ВыборкаГТД.Имя + ", Код - " + ВыборкаГТД.Код); Прервать; Иначе Прервать; КонецЕсли; КонецЦикла; КонецЦикла; Сдается мне что это тут так не работает, но оно действительно не работает. |
|||
1
НЕА123
13.11.20
✎
10:49
|
>ПО НоменклатураГТД.Владелец = Номенклатура.Наименование
ПО НоменклатураГТД.Владелец.НАИМЕНОВАНИЕ = Номенклатура.Наименование |
|||
2
Волшебник
13.11.20
✎
10:50
|
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатураГТД
ПО НоменклатураГТД.Владелец = Номенклатура.Ссылка |
|||
3
The_ka6a4ok
13.11.20
✎
11:05
|
(1) (2) хм, в обоих случаях ошибка "недостаточно памяти"
|
|||
4
Волшебник
13.11.20
✎
11:06
|
(3) Поставь 64-битный клиент
|
|||
5
vicof
13.11.20
✎
11:21
|
И сервер нормальный купи
|
|||
6
The_ka6a4ok
13.11.20
✎
11:24
|
(5) действительно дельный совет
|
|||
7
The_ka6a4ok
13.11.20
✎
11:38
|
я не понимаю почему когда я соединяю таблицы по условию, это условие не соблюдается, что в конфигураторе так, что в консоли
|
|||
8
The_ka6a4ok
13.11.20
✎
11:40
|
и почему правое соединение не работает
|
|||
9
NeiTRoN4ik
13.11.20
✎
11:56
|
(8) У тебя владелец - это ссылка же. А ты ее соединяешь со строкой
|
|||
10
Жан Пердежон
13.11.20
✎
12:00
|
(7) всё соблюдается - как написал так и работает
|
|||
11
The_ka6a4ok
13.11.20
✎
12:23
|
(9) если изменить "владелец" на "наименование" ничего не изменится, правое соединений все ещё дает пустой результат
|
|||
12
The_ka6a4ok
13.11.20
✎
12:23
|
(10) неужели дело в 32-битной платформе?
|
|||
13
SleepyHead
гуру
13.11.20
✎
12:28
|
(0) А регистр надо учитывать?
"Сапоги" = "САПОГИ" или нет? |
|||
14
The_ka6a4ok
13.11.20
✎
12:30
|
(13) регистр не учитываются, наименования полностью идентичны, но почему-то ни одно не находится
|
|||
15
SleepyHead
гуру
13.11.20
✎
12:32
|
(14) Длина наименований в справочниках разная или одинаковая? Как выглядят в выборке наименования? Посмотри в консоли, есть ли пробелы справа.
|
|||
16
The_ka6a4ok
13.11.20
✎
12:36
|
(15) длина тоже одинаковая, изначально, все что находится в Справочник.НоменклатураГТД(первый) это ссылки на второй справочник, соответственно, они должны быть идентичны, разве нет?
|
|||
17
NeiTRoN4ik
13.11.20
✎
12:40
|
(11) Что значит изменить? У тебя НоменклатураГТД это подчиненный справочник Номенклатуры?
|
|||
18
Волшебник
13.11.20
✎
12:41
|
Давайте назовём Справочник.НоменклатураГТД вторым, а Справочник.Номенклатура первым
|
|||
19
The_ka6a4ok
13.11.20
✎
12:50
|
(17) нет, мне их просто нужно сравнить 2 справочника и выбрать из первого все, что есть во втором, потом, если строка кода у первого пуста, заполнить её из второго
|
|||
20
NeiTRoN4ik
13.11.20
✎
13:30
|
Думаю надо вернуться в начало. В самом первом запросе почему такое соедиенение?
ПО НоменклатураГТД.Владелец = Номенклатура.Наименование Какой у тебя тип реквизита "Владелец"? Что с чем соединяешь то? |
|||
21
The_ka6a4ok
13.11.20
✎
13:46
|
(20) это стандартный реквизит, тип: справочник.номенклатура
|
|||
22
The_ka6a4ok
13.11.20
✎
13:48
|
парни, а если у одного справочника тип ссылка, а у другого строка, но значения у них одинаковые, то можно ли считать, что значения одинаковы?
|
|||
23
The_ka6a4ok
13.11.20
✎
13:52
|
(22) не, все равно не
|
|||
24
hhhh
13.11.20
✎
14:00
|
(22) не,нельзя так считать.
|
|||
25
Волшебник
13.11.20
✎
14:12
|
(22) Если типы разные, то значения не будут равны, даже если равны их строковые представления.
|
|||
26
NeiTRoN4ik
13.11.20
✎
14:14
|
(21) Ну вот я тебе и говорю. Как ты соединяешь ссылку со строкой? конечно не будет работать.
" а если у одного справочника тип ссылка, а у другого строка, но значения у них одинаковые" - у разных типов не бывает одинаковых значений. |
|||
27
NeiTRoN4ik
13.11.20
✎
14:22
|
У тебя и во втором твоем варианте та же самая ошибка.
Запрос.УстановитьПараметр("Наименование", ВыборкаГТД.Имя); ВыборкаГТД.Имя - у тебя ссылка |
|||
28
The_ka6a4ok
13.11.20
✎
14:30
|
кажется, работает, но долго
|
|||
29
The_ka6a4ok
13.11.20
✎
14:30
|
даже что-то записывает в справочник, в поле, по условию, не знаю, сейчас дождусь конца работы и проверю, все ли так, как задумано изначально
|
|||
30
The_ka6a4ok
13.11.20
✎
14:31
|
(27) да, теперь я знаю, что у разных типов значения тоже разные, что если спихнуть туда ссылку - скоро узнаю
|
|||
31
The_ka6a4ok
13.11.20
✎
16:38
|
парни, я сделал, вот код:
Запрос = Новый Запрос(); Запрос.Текст = "Выбрать | Номенклатура.Ссылка КАК Ссылка | ИЗ Справочник.Номенклатура как Номенклатура | ГДЕ Номенклатура.НоменклатураГТД = Значение(Справочник.НоменклатураГТД.ПустаяСсылка)"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ЗапросГТД = новый Запрос(); ЗапросГТД.Текст = "Выбрать | НоменклатураГТД.Владелец как Имя, | НоменклатураГТД.Ссылка как Ссылка | ИЗ Справочник.НоменклатураГТД как НоменклатураГТД | ГДЕ НоменклатураГТД.Владелец = &Наименование"; ЗапросГТД.УстановитьПараметр("Наименование", Выборка.Ссылка); ВыборкаГТД = ЗапросГТД.Выполнить().Выбрать(); Пока ВыборкаГТД.Следующий() Цикл Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.НоменклатураГТД = ВыборкаГТД.Ссылка; Объект.ОбменДанными.Загрузка = истина; Объект.Записать(); КонецЦикла; КонецЦикла; |
|||
32
NeiTRoN4ik
13.11.20
✎
17:01
|
(31) ай молодец! xD
А теперь все-таки через 1 запрос давай ) Вообще конечная интересная ситуация, писать запросы и не знать что ссылка и строка разные вещи) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |