Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проверка на пустую ссылку в запросе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Agapov_Stas
Не спишите писать Значение(Справочник.Номенклатура.ПустаяССылка) smile.gif
Вопрос вот в чем. Есть реквизит с составным типом данных.
Он может принимать как значение пустой ссылки одного из типов данных (которые ему доступен) так и значение НЕОПРЕДЕЛЕННО
Как в запросе проверить заполнен ли этот реквизит?

Выражение типа:

ВЫБОР КОГДА Реквизит  = Значение(Справочник.Номенклатура.ПустаяССылка) Тогда 
      "Пустой"
Иначе
      "Не пустой"
Конец

Не подходит - т.к. реквизит имеет составной тип данных
И не всегда принимает значение НЕОПРЕДЕЛЕННО (пользователь мог выбрать тип данных - но не выбрать сами данные и сохранить)
Спасибо.
Vofka
ВЫБОР КОГДА Реквизит  = Значение(Справочник.Номенклатура.ПустаяССылка) ИЛИ 
               Реквизит = Значение(Справочник.Номенклатура1.ПустаяССылка) ИЛИ
               Реквизит = Значение(Справочник.Номенклатура2.ПустаяССылка) ИЛИ
               Реквизит = Неопределено Тогда
      "Пустой"
Иначе
      "Не пустой"
Конец
Agapov_Stas
Не годится - нужен универсальный метод - Вы не знаешь состав
Acid
NULL
Agapov_Stas
А причем тут NULL если я говорю про не заполненное значение?
Значение ЕСТЬ - как его проверить на заполненность ?
Rayne
А что, если попробовать выразить значение в строку и проверять на пустую строку?
Agapov_Stas
Цитата(Rayne @ 07.07.14, 15:10) необходимо зарегистрироваться для просмотра ссылки
А что, если попробовать выразить значение в строку и проверять на пустую строку?

Не работает: пишет ошибку "Несовместимые типы"
Еще есть варианты ?
Vofka
Цитата(Agapov_Stas @ 07.07.14, 14:38) необходимо зарегистрироваться для просмотра ссылки
Не годится - нужен универсальный метод

Сообщите мне, когда найдете универсальный метод.
Rayne
Цитата(Agapov_Stas @ 07.07.14, 15:22) необходимо зарегистрироваться для просмотра ссылки
Не работает: пишет ошибку "Несовместимые типы"
Еще есть варианты ?


А через функцию ПРЕДСТАВЛЕНИЕ?
Agapov_Stas
В общем методом проб и ошибок нашел универсальный метод (как мне кажется) проверить на заполненность значения в запросе

ВЫБОР КОГДА ПРЕДСТАВЛЕНИЕССЫЛКИ(Реквизит1) = "" Тогда   // Пустая ссылка будет возвращать пустую строку 
    "Пустое значение"
КОГДА ПРЕДСТАВЛЕНИЕССЫЛКИ(Реквизит1) = НЕОПРЕДЕЛЕННО ТОГДА  // Не выбранное значение будет возвращать НЕОПРЕДЕЛЕННО
    "Пустое значение"
КОГДА Реквизит1 ЕСТЬ NULL Тогда  // В Случае если вы присоединяете таблицы  
    "Пустое значение"
Иначе
    "Заполненное значение"
Конец


Также - если у вас составное поле не ссылочного типа, то можно добавить проверку на заполненность примитивных типов данных (в зависимости от задачи и потребностей)

sava1
По-идее: Неопределено - будет NULL, Пустая ссылка - ИД=00000000....; если что-то выбрано - не НУЛЛ и не 00000...

Это если только ссылочный тип
Agapov_Stas
Цитата(sava1 @ 07.07.14, 16:20) необходимо зарегистрироваться для просмотра ссылки
По-идее: Неопределено - будет NULL, Пустая ссылка - ИД=00000000....; если что-то выбрано - не НУЛЛ и не 00000...

Это если только ссылочный тип


Вообще не по идее
Неопределенно и NULL совершенно разное(!)
Как можно сравнивать два этих значения?
sava1
И чем это они отличаются?
Agapov_Stas
Цитата(sava1 @ 07.07.14, 16:25) необходимо зарегистрироваться для просмотра ссылки
И чем это они отличаются?

Есть немного отличий ))

я в решении написал ответ - там кстати написано чем они отличаются
alex040269
Цитата(sava1 @ 07.07.14, 16:25) необходимо зарегистрироваться для просмотра ссылки
И чем это они отличаются?

NULL - когда в соединении не найдена соответсвующая строка
Неопределено - когда строка найдено, но в колонке неопределен тип.


неопределно - тип 1с
NULL - результат выбора sql.

ну в общем одна дает, другая дразнится. Вот и вся разница.smile.gif
Vofka
По-моему так надо:

ВЫБОР КОГДА ПРЕДСТАВЛЕНИЕССЫЛКИ(Реквизит1) = "" Тогда   // Пустая ссылка будет возвращать пустую строку 
    "Пустое значение"
КОГДА Реквизит1 = НЕОПРЕДЕЛЕННО ТОГДА  // Не выбранное значение будет возвращать НЕОПРЕДЕЛЕННО
    "Пустое значение"
КОГДА Реквизит1 ЕСТЬ NULL Тогда  // В Случае если вы присоединяете таблицы  
    "Пустое значение"
Иначе
    "Заполненное значение"
Конец


Потому что Представление(Неопределено) возвращает пустую строку. А так жму палец. smile.gif
Agapov_Stas
не ПРЕДСТАВЛЕНИЕ, а ПРЕДСТАВЛЕНИЕССЫЛКИ

Функция ПРЕДСТАВЛЕНИЕССЫЛКИ
Позволяет получать представление ссылочного значения.
В качестве параметра функции передается выражение, представление результата которого нужно получить. В случае, если результатом выражения является ссылка, результатом функции будет строка – представление данной функции. В остальных случаях результатом функции будет значение переданного параметра.
я даже перепроверил :-) если НЕОПРЕДЕЛЕННО, то возвращает НЕОПРЕДЕЛЕННО, а не пустую строку.
sava1
Цитата(alex040269 @ 07.07.14, 16:53) необходимо зарегистрироваться для просмотра ссылки
ну в общем одна дает, другая дразнится. Вот и вся разница

Когда-то писали - очередной костыль от 1С - для СКЛ сервера (прямого запроса) - никакой разницы.
А костыль обусловлен методой хранения типизированых значений в базе.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.