|   |   | 
| 
 | Запрос по НоменклатураГТД | ☑ | ||
|---|---|---|---|---|
| 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 запрос давай ) Вообще конечная интересная ситуация, писать запросы и не знать что ссылка и строка разные вещи) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |