При выполнении запроса все равно выдает NULL

1. TheOldGuard 11 15.02.22 23:14 Сейчас в теме
Всем добрый вечер, необходимо сделать выведение ошибки в случае ввода суммы списания если она превышает конечный остаток. Если в регистре накопления что-то есть, работает все отлично, а вот когда он имеет нулевое значение (NULL), то не работает.
Прописал в запросе функцию ЕСТЬNULL в надежде получаения значения 0, но не помогло.
Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |	ЕСТЬNULL(ОстаткиДенежныхСредствОстаткиИОбороты.СуммаКонечныйОстаток, 0) КАК СуммаКонечныйОстаток,
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СчетКонтрагента КАК СчетКонтрагента
             |ИЗ
             |	РегистрНакопления.ОстаткиДенежныхСредств.ОстаткиИОбороты КАК ОстаткиДенежныхСредствОстаткиИОбороты
             |ГДЕ
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СчетКонтрагента = &СчетКонтрагента";
Запрос.УстановитьПараметр("СчетКонтрагента",СчетКонтрагента);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
	Если Выборка.СуммаКонечныйОстаток = NULL Тогда
		Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось 0");
	ИначеЕсли Выборка.СуммаКонечныйОстаток < СуммаСписания Тогда
	    Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось "+Выборка.СуммаКонечныйОстаток);
	КонецЕсли;
КонецЦикла;
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
2. user1203706 13 16.02.22 00:04 Сейчас в теме
(1) на вот, занимайся

Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |    ОстаткиДенежныхСредствОстатки.СуммаОстаток КАК СуммаОстаток
             |ИЗ
             |    РегистрНакопления.ОстаткиДенежныхСредств.Остатки(,СчетКонтрагента = &СчетКонтрагента) КАК ОстаткиДенежныхСредствОстатки";
Запрос.УстановитьПараметр("СчетКонтрагента",СчетКонтрагента);
Выборка = Запрос.Выполнить.Выбрать();
Если Выборка.Следующий() Тогда
    Если Выборка.СуммаОстаток= 0 Тогда
        Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось 0");
    ИначеЕсли Выборка.СуммаОстаток< СуммаСписания Тогда
        Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось "+Выборка.СуммаКонечныйОстаток);
Иначе
        Сообщить("всё будет хорошо ");
    КонецЕсли;
Иначе
      Сообщить("биомать а ? запрос пустой!, хотя, это сообщение автор не увидит...никогда, ну разве что нелепое условие влепит, типа ГДЕ Ложь  в текст запроса");
КонецЕсли;
Показать


ЗЫ: если что, в (0) null не будет никогда, и писать нелепые проверки на ЕСТЬNULL не надо.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1203706 13 16.02.22 00:04 Сейчас в теме
(1) на вот, занимайся

Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |    ОстаткиДенежныхСредствОстатки.СуммаОстаток КАК СуммаОстаток
             |ИЗ
             |    РегистрНакопления.ОстаткиДенежныхСредств.Остатки(,СчетКонтрагента = &СчетКонтрагента) КАК ОстаткиДенежныхСредствОстатки";
Запрос.УстановитьПараметр("СчетКонтрагента",СчетКонтрагента);
Выборка = Запрос.Выполнить.Выбрать();
Если Выборка.Следующий() Тогда
    Если Выборка.СуммаОстаток= 0 Тогда
        Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось 0");
    ИначеЕсли Выборка.СуммаОстаток< СуммаСписания Тогда
        Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось "+Выборка.СуммаКонечныйОстаток);
Иначе
        Сообщить("всё будет хорошо ");
    КонецЕсли;
Иначе
      Сообщить("биомать а ? запрос пустой!, хотя, это сообщение автор не увидит...никогда, ну разве что нелепое условие влепит, типа ГДЕ Ложь  в текст запроса");
КонецЕсли;
Показать


ЗЫ: если что, в (0) null не будет никогда, и писать нелепые проверки на ЕСТЬNULL не надо.
3. TheOldGuard 11 16.02.22 00:16 Сейчас в теме
(2) Сейчас изучу ваш ответ, а так я написал еще решение, не знаю, насколько оно правильное, просто NULL это не нуль вообще это ПУСТО.
&НаСервереБезКонтекста
Процедура СписаниеСуммаСписанийПриИзмененииНаСервере(СуммаСписания,СчетКонтрагента)
Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СчетКонтрагента КАК СчетКонтрагента
             |ИЗ
             |	РегистрНакопления.ОстаткиДенежныхСредств.ОстаткиИОбороты КАК ОстаткиДенежныхСредствОстаткиИОбороты
             |ГДЕ
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СчетКонтрагента = &СчетКонтрагента";
Запрос.УстановитьПараметр("СчетКонтрагента",СчетКонтрагента);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Результат.Пустой() Тогда
	Сообщить("Значение суммы списаний слишком велико! На счету "+СчетКонтрагента+" осталось 0");
Иначе
	Пока Выборка.Следующий() Цикл
		Если Выборка.СуммаКонечныйОстаток < СуммаСписания Тогда
			Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось "+Выборка.СуммаКонечныйОстаток);	
		КонецЕсли;
	КонецЦикла;
КонецЕсли;
КонецПроцедуры
Показать
4. TheOldGuard 11 16.02.22 00:22 Сейчас в теме
(2) Сейчас изучу ваш ответ, а так я написал еще решение, не знаю, насколько оно правильное, просто NULL это не нуль вообще это ПУСТО.
Хочу заметить, что у вас очень лаконичный код, из ошибок хочу выделить, что ОстаткиИОбороты мне использовать было не надо, так как нужны только остатки, также значение контрагента можно было передать через виртуальную таблицу.
Вывод выборки буду делать, также как и у вас.
Не подскажите какое-нибудь чтиво для улучшения профессиональных навыков?
&НаСервереБезКонтекста
Процедура СписаниеСуммаСписанийПриИзмененииНаСервере(СуммаСписания,СчетКонтрагента)
Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СчетКонтрагента КАК СчетКонтрагента
             |ИЗ
             |	РегистрНакопления.ОстаткиДенежныхСредств.ОстаткиИОбороты КАК ОстаткиДенежныхСредствОстаткиИОбороты
             |ГДЕ
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СчетКонтрагента = &СчетКонтрагента";
Запрос.УстановитьПараметр("СчетКонтрагента",СчетКонтрагента);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Результат.Пустой() Тогда
	Сообщить("Значение суммы списаний слишком велико! На счету "+СчетКонтрагента+" осталось 0");
Иначе
	Пока Выборка.Следующий() Цикл
		Если Выборка.СуммаКонечныйОстаток < СуммаСписания Тогда
			Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось "+Выборка.СуммаКонечныйОстаток);	
		КонецЕсли;
	КонецЦикла;
КонецЕсли;
КонецПроцедуры
Показать
5. TheOldGuard 11 16.02.22 00:25 Сейчас в теме
(2) Сейчас изучу ваш ответ, а так я написал еще решение, не знаю, насколько оно правильное, просто NULL это не нуль вообще это ПУСТО.
Хочу заметить, что у вас очень лаконичный код, из ошибок хочу выделить, что ОстаткиИОбороты мне использовать было не надо, так как нужны только остатки, также значение контрагента можно было передать через виртуальную таблицу.
Вывод выборки буду делать, также как и у вас.
Не подскажите какое-нибудь чтиво для улучшения профессиональных навыков?
&НаСервереБезКонтекста
Процедура СписаниеСуммаСписанийПриИзмененииНаСервере(СуммаСписания,СчетКонтрагента)
Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СчетКонтрагента КАК СчетКонтрагента
             |ИЗ
             |	РегистрНакопления.ОстаткиДенежныхСредств.ОстаткиИОбороты КАК ОстаткиДенежныхСредствОстаткиИОбороты
             |ГДЕ
             |	ОстаткиДенежныхСредствОстаткиИОбороты.СчетКонтрагента = &СчетКонтрагента";
Запрос.УстановитьПараметр("СчетКонтрагента",СчетКонтрагента);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Результат.Пустой() Тогда
	Сообщить("Значение суммы списаний слишком велико! На счету "+СчетКонтрагента+" осталось 0");
Иначе
	Пока Выборка.Следующий() Цикл
		Если Выборка.СуммаКонечныйОстаток < СуммаСписания Тогда
			Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось "+Выборка.СуммаКонечныйОстаток);	
		КонецЕсли;
	КонецЦикла;
КонецЕсли;
КонецПроцедуры
Показать

(2)
Если Выборка.Следующий() Тогда
Если Выборка.СуммаОстаток= 0 Тогда
Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось 0");
ИначеЕсли Выборка.СуммаОстаток< СуммаСписания Тогда
Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось "+Выборка.СуммаКонечныйОстаток);
Иначе
Сообщить("всё будет хорошо ");
КонецЕсли;
6. a30v 16.02.22 00:50 Сейчас в теме
(5)
Не подскажите какое-нибудь чтиво для улучшения профессиональных навыков?

Научитесь пользоваться поиском. Этот навык позволит получить ответы на 99% вопросов.
Книги
Под фильтр не попала книга по Язык запросов «1С:Предприятия 8», а также другие
Курсы и много других
Система стандартов и методик
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот