Всем добрый вечер, необходимо сделать выведение ошибки в случае ввода суммы списания если она превышает конечный остаток. Если в регистре накопления что-то есть, работает все отлично, а вот когда он имеет нулевое значение (NULL), то не работает.
Прописал в запросе функцию ЕСТЬNULL в надежде получаения значения 0, но не помогло.

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

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

ЗЫ: если что, в (0) null не будет никогда, и писать нелепые проверки на ЕСТЬNULL не надо.
---
на вот, занимайся

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

ЗЫ: если что, в (0) null не будет никогда, и писать нелепые проверки на ЕСТЬNULL не надо.
---
Сейчас изучу ваш ответ, а так я написал еще решение, не знаю, насколько оно правильное, просто NULL это не нуль вообще это ПУСТО.

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

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

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

(2) Если Выборка.Следующий() Тогда
    Если Выборка.СуммаОстаток= 0 Тогда
        Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось 0");
    ИначеЕсли Выборка.СуммаОстаток< СуммаСписания Тогда
        Сообщить("Значение суммы слишком велико! На счету "+СчетКонтрагента+" осталось "+Выборка.СуммаКонечныйОстаток);
Иначе
        Сообщить("всё будет хорошо ");
    КонецЕсли;
---
Не подскажите какое-нибудь чтиво для улучшения профессиональных навыков?
Научитесь пользоваться поиском. Этот навык позволит получить ответы на 99% вопросов.
Книги
Под фильтр не попала книга по Язык запросов «1С:Предприятия 8», а также другие
Курсы и много других
Система стандартов и методик