Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Проверка на пустую ссылку в запросе          
Agapov_Stas Подменю пользователя
сообщение 07.07.14, 13:20
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Днепропетровск
Спасибо сказали: 18 раз
Рейтинг: 0

Не спишите писать Значение(Справочник.Номенклатура.ПустаяССылка) smile.gif
Вопрос вот в чем. Есть реквизит с составным типом данных.
Он может принимать как значение пустой ссылки одного из типов данных (которые ему доступен) так и значение НЕОПРЕДЕЛЕННО
Как в запросе проверить заполнен ли этот реквизит?

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

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

Не подходит - т.к. реквизит имеет составной тип данных
И не всегда принимает значение НЕОПРЕДЕЛЕННО (пользователь мог выбрать тип данных - но не выбрать сами данные и сохранить)
Спасибо.

Vofka Подменю пользователя
сообщение 07.07.14, 13:27
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13988
Из: Киев
Спасибо сказали: 4562 раз
Рейтинг: 3690.8

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

Agapov_Stas Подменю пользователя
сообщение 07.07.14, 13:38
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Днепропетровск
Спасибо сказали: 18 раз
Рейтинг: 0

Не годится - нужен универсальный метод - Вы не знаешь состав

Acid Подменю пользователя
сообщение 07.07.14, 14:00
Сообщение #4

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 378 раз
Рейтинг: 0

NULL


Signature

Документируйте Код! мать вашу...


Agapov_Stas Подменю пользователя
сообщение 07.07.14, 14:07
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Днепропетровск
Спасибо сказали: 18 раз
Рейтинг: 0

А причем тут NULL если я говорю про не заполненное значение?
Значение ЕСТЬ - как его проверить на заполненность ?

Rayne Подменю пользователя
сообщение 07.07.14, 14:10
Сообщение #6

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 17 раз
Рейтинг: 0

А что, если попробовать выразить значение в строку и проверять на пустую строку?


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

Agapov_Stas Подменю пользователя
сообщение 07.07.14, 14:22
Сообщение #7

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Днепропетровск
Спасибо сказали: 18 раз
Рейтинг: 0

Цитата(Rayne @ 07.07.14, 15:10) *
А что, если попробовать выразить значение в строку и проверять на пустую строку?

Не работает: пишет ошибку "Несовместимые типы"
Еще есть варианты ?

Vofka Подменю пользователя
сообщение 07.07.14, 15:01
Сообщение #8

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13988
Из: Киев
Спасибо сказали: 4562 раз
Рейтинг: 3690.8

Цитата(Agapov_Stas @ 07.07.14, 14:38) *
Не годится - нужен универсальный метод

Сообщите мне, когда найдете универсальный метод.

Rayne Подменю пользователя
сообщение 07.07.14, 15:10
Сообщение #9

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 17 раз
Рейтинг: 0

Цитата(Agapov_Stas @ 07.07.14, 15:22) *
Не работает: пишет ошибку "Несовместимые типы"
Еще есть варианты ?


А через функцию ПРЕДСТАВЛЕНИЕ?


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

Agapov_Stas Подменю пользователя
сообщение 07.07.14, 15:19
Сообщение #10

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Днепропетровск
Спасибо сказали: 18 раз
Рейтинг: 0

В общем методом проб и ошибок нашел универсальный метод (как мне кажется) проверить на заполненность значения в запросе

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


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


Спасибо сказали: Ardi, Vofka,

sava1 Подменю пользователя
сообщение 07.07.14, 15:20
Сообщение #11

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

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

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

Спасибо сказали: Ardi,

Agapov_Stas Подменю пользователя
сообщение 07.07.14, 15:21
Сообщение #12

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Днепропетровск
Спасибо сказали: 18 раз
Рейтинг: 0

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

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


Вообще не по идее
Неопределенно и NULL совершенно разное(!)
Как можно сравнивать два этих значения?

sava1 Подменю пользователя
сообщение 07.07.14, 15:25
Сообщение #13

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

И чем это они отличаются?

Agapov_Stas Подменю пользователя
сообщение 07.07.14, 15:34
Сообщение #14

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Днепропетровск
Спасибо сказали: 18 раз
Рейтинг: 0

Цитата(sava1 @ 07.07.14, 16:25) *
И чем это они отличаются?

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

я в решении написал ответ - там кстати написано чем они отличаются

alex040269 Подменю пользователя
сообщение 07.07.14, 15:53
Сообщение #15

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(sava1 @ 07.07.14, 16:25) *
И чем это они отличаются?

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


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

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


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Vofka Подменю пользователя
сообщение 07.07.14, 16:20
Сообщение #16

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13988
Из: Киев
Спасибо сказали: 4562 раз
Рейтинг: 3690.8

По-моему так надо:

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


Потому что Представление(Неопределено) возвращает пустую строку. А так жму палец. smile.gif

Agapov_Stas Подменю пользователя
сообщение 07.07.14, 16:48
Сообщение #17

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Днепропетровск
Спасибо сказали: 18 раз
Рейтинг: 0

не ПРЕДСТАВЛЕНИЕ, а ПРЕДСТАВЛЕНИЕССЫЛКИ

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

sava1 Подменю пользователя
сообщение 08.07.14, 6:48
Сообщение #18

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

Цитата(alex040269 @ 07.07.14, 16:53) *
ну в общем одна дает, другая дразнится. Вот и вся разница

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

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 01.11.24, 2:07
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!