8.х Проверка на пустую ссылку в запросе

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем LizaVETTA, 19 фев 2016.

  1. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Добрый день!
    Делаю запрос, к справочнику Корреспонденты, на проверку наличия контактной информации. Если контактная инфа есть, т.е. есть строка в таб. части справочника с нужным значением реквизита Вид, то количество получаю 1, если же в табличной части отсутствует строка с нужным значением реквизита Вид (например: Юр.адрес), то запрос по сути не выполняется, ошибку не выдает, а просто перескакивает "Результат.Следующий()". Как можно получить значение 0,и что бы программа не перескакивала Пока Результат.Следующий() Цикл ?
    Пример запроса:
    ВЫБРАТЬ
    Корреспонденты.Код,
    Корреспонденты.Наименование,
    КорреспондентыКонтактнаяИнформация.Тип,
    КорреспондентыКонтактнаяИнформация.Вид КАК вид,
    КОЛИЧЕСТВО(КорреспондентыКонтактнаяИнформация.Представление) КАК Представление
    ИЗ
    Справочник.Корреспонденты.КонтактнаяИнформация КАК КорреспондентыКонтактнаяИнформация
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Корреспонденты КАК Корреспонденты
    ПО КорреспондентыКонтактнаяИнформация.Ссылка = Корреспонденты.Ссылка
    ГДЕ
    Корреспонденты.Код = &Код
    И КорреспондентыКонтактнаяИнформация.Вид = &Вид

    СГРУППИРОВАТЬ ПО
    Корреспонденты.Код,
    Корреспонденты.Наименование,
    КорреспондентыКонтактнаяИнформация.Тип,
    КорреспондентыКонтактнаяИнформация.Вид

    Пример выполнения запроса в скриншоте.

    Вложения:

  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    На ЕСТЬNULL проверять у Вас же левое содеинение или просто на NULL
    Ну например
    вместо
    КОЛИЧЕСТВО(КорреспондентыКонтактнаяИнформация.Представление) КАК Представление

    ВыБОР КОГДА КорреспондентыКонтактнаяИнформация.Представление ЕСТЬ NULL Тогда 0
    Иначе КОЛИЧЕСТВО(КорреспондентыКонтактнаяИнформация.Представление)
    Конец КАК Представление
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    не сработает т.к. КорреспондентыКонтактнаяИнформация.Представление это поле основной таблицы запроса, оно всегда будет НЕ NULL, если нет ошибок в БД.
  4. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    А что же делать?((((
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Лично мое мнение, полностью переписать запрос, но прежде четко понять, что он должен вернуть.
  6. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Он должен вернуть 0- если нет такой строки в таб.части контактной информации, и 1- есть есть строка с такой информацией.
    Я просто не знаю,как можно его ещё переписать....
  7. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну да, в названиях запустался.Ну просто я исходил из этого

    "Делаю запрос, к справочнику Корреспонденты, на проверку наличия контактной информации."

    Тогда по идее должен быть запрос к справочнику Корреспонденты и уже левым подтаскивать контактную информацию

    Если же вы изначально делает запрос к Контактной информации то зачем Вам левое соединение с Кореспондентами если в КонтактнойИнформации есть ссылка на кореспондента
    --- Объединение сообщений, 19 фев 2016 ---
    Все таки мое мнение что Вы не поняли что с чем Вам соединять надо
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Делайте просто:

  9. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Я начинающий программист, и может делаю что не так.
    Формирую запрос к Справочнику Корреспонденты, у которого есть табличная часть Контактная информация. По коду нахожу нужного корреспондента, а потом у него уже в таб.части выбираю контактную информацию, по полю Вид, если запрос находит строчку в таб.части, то возвращает 1, если не находит, то просто далее то тексту программы перескакивает Пока Результат.Следующий() Цикл
    --- Объединение сообщений, 19 фев 2016 ---
    Большое спасибо, сейчас попробую
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Да видно, что начинающий даже по тому как Вы описали Ваш запрос не так работает
    Т.к ГДЕ отработает уже после того как он все левым соединением соединит
  11. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Не получается(((
    Выдает ошибку:
    Произошла исключительная ситуация (1C:Enterprise 8.3.7.1845): {(4, 12)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
    неограниченной длины и поля несовместимых типов.
    где Ссылка <<?>>= &Корреспондент и Вид = &Вид
    --- Объединение сообщений, 19 фев 2016 ---
    А какой выход предложите вы?
    Последнее редактирование: 19 фев 2016
  12. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Я предлагаю Взять кореспондентов с отбором поместить их в ВТ, взять контактную информацию с отбором - посетить в ВТ
    Затем Кореспондентов с Информацией соеденить левым
  13. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    &Корреспондент какой тип значения имеет?
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну или если Вам тупо проверить по одному контрагенту есть у него адрес или нет то как выше написали Вам
  15. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Прошу прощения, нашла свою ошибку)))) Большое спасибо, все идет))))
    --- Объединение сообщений, 19 фев 2016 ---
    Если указываю: Запрос1.УстановитьПараметр("Корреспондент",Результат.Ссылка); - то дает ошибку (((
    а если Код - тогда не ищет, всем дает 0((
    Последнее редактирование: 19 фев 2016
  16. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    В консоли запросов все пошло, а в коде программы не получается правильно установить параметр Корреспондент...
  17. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Зачем возвращать 0 и 1 если есть что то в результате?
    Код:
    Если НЕ Результат.Пустой() Тогда
    Выборка = Результат.Выбрать();
    Пока Выборка.Следущий();
    //Делаем что то
    КонецЦикла;
    Иначе
    //Что то делаем если результат пустой
    КонецЕсли;
  18. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Из представленной
    Результат.Ссылка - какой тип значения имеет при Запрос1.УстановитьПараметр("Корреспондент",Результат.Ссылка)?
  19. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Если устанавливаю параметр Объект.Ссылка - ComОбъект, а для Результат.Ссылка - СправочникСсылка.нсиКонтрагенты
  20. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Необходимо значение типа СправочникСсылка.Корреспонденты.

    Каким образом оно связано с СправочникСсылка.нсиКонтрагенты известно только вам.

Поделиться этой страницей