День добрый. Возникла такая ситуация: при заполнении документа появляется ошибка:
Вот текст запроса :
Думаю что в полях "СтоимостьОстаток" и "КоличествоОстаток" есть нули, но можно ли сделать с помощью условия в запросе так, что бы если в полях нули то запрос всё равно выполнился?
по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Microsoft SQL Server Native Client 10.0: Обнаружена ошибка: деление на ноль.
HRESULT=80004005, SQLSrvr: SQLSTATE=22012, state=1, Severity=10, native=8134, line=1
Вот текст запроса :
ВЫБРАТЬ
ТоварыВЭксплуатацииОстатки.ФизЛицо,
Товары.Номенклатура,
Товары.Организация,
Товары.СтруктурнаяЕдиница,
Товары.КоличествоОстаток КАК КоличествоУчет,
Товары.КоличествоОстаток КАК Количество,
Товары.СтоимостьОстаток КАК СуммаУчет,
Товары.СтоимостьОстаток КАК Сумма,
Товары.СтоимостьОстаток / ЕСТЬNULL(Товары.КоличествоОстаток, 0) КАК Цена
ИЗ
РегистрНакопления.Товары.Остатки(&Дата, ФизЛицо = &Склад) КАК Товары
ПоказатьДумаю что в полях "СтоимостьОстаток" и "КоличествоОстаток" есть нули, но можно ли сделать с помощью условия в запросе так, что бы если в полях нули то запрос всё равно выполнился?
По теме из базы знаний
- Универсальный конструктор отчетов (Новейший отчет) для 1C 7.7
- Типичные ошибки, некоторые вопросы качества и эффективности работы при разработке в 1С
- Разные хм... неожиданности при работе с УТ 11 и платформой
- Как сдать экзамен 1С:Специалист по платформе?
- Интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Ну очевидно же. Что ошибка тут
Нужно сделать так
Товары.СтоимостьОстаток / ЕСТЬNULL(Товары.КоличествоОстаток, 0) КАК Цена
Ну очевидно же. Что ошибка тут
Товары.СтоимостьОстаток / ЕСТЬNULL(Товары.КоличествоОстаток, 0) КАК Цена
Нужно сделать так
ВЫБРАТЬ
ТоварыВЭксплуатацииОстатки.ФизЛицо,
Товары.Номенклатура,
Товары.Организация,
Товары.СтруктурнаяЕдиница,
Товары.КоличествоОстаток КАК КоличествоУчет,
Товары.КоличествоОстаток КАК Количество,
Товары.СтоимостьОстаток КАК СуммаУчет,
Товары.СтоимостьОстаток КАК Сумма,
ВЫБОР
КОГДА ЕстьNULL(Товары.КоличествоОстаток, 0) = 0
ТОГДА 0
ИНАЧЕ Товары.СтоимостьОстаток / Товары.КоличествоОстаток
КОНЕЦ КАК Цена
РегистрНакопления.Товары.Остатки(&Дата, ФизЛицо = &Склад) КАК Товары
Показать
Помимо математической проверки ошибки деления на ноль (ЕСЛИ Сумма(Знаменатель) <> 0 ТОГДА), в Вашей задаче нужно делать проверку на ошибки учета, где и количество и стоимость может быть <= 0.
Иными словами, если КоличествоУчет <0, то Количество = 0; если СуммаУчет <0, то Сумма =0.
В расчете цены нужно исключить не только НОЛЬ в знаменателе, но и отрицательное значение СтоимостьОстаток и КоличествоОстаток.
Я порекомендовала бы ставить два условия
Иными словами, если КоличествоУчет <0, то Количество = 0; если СуммаУчет <0, то Сумма =0.
В расчете цены нужно исключить не только НОЛЬ в знаменателе, но и отрицательное значение СтоимостьОстаток и КоличествоОстаток.
Я порекомендовала бы ставить два условия
ВЫБОР
КОГДА ЕСТЬNULL(Товары.КоличествоОстаток , 0) > 0
ТОГДА ВЫБОР КОГДА
ЕСТЬNULL(Товары.СтоимостьОстаток , 0) > 0
ТОГДА Товары.СтоимостьОстаток / Товары.КоличествоОстаток
ИНАЧЕ 0
Конец
ИНАЧЕ 0
КОНЕЦ КАК Цена
Показать
(13) Мне кажется, достаточно проверить, что количество не равно нулю. Всё остальное - следствие проблем в учёте, и вместо того, чтобы вытащить ошибку на свет, вы будете её дальше хоронить. Ну выйдет там -10, а не 0, что изменится? И так и так косяк, но -10 вам хоть покажет, что где-то что-то у вас в учёте пошло явно не так.
(14) Автор выводит проверочные параметры учета (КоличествоУчет, СуммаУчет) в запросе, смотрите внимательно. И параллельно берет расчетные (Количество, Сумма) Какой смысл их дублировать? Расчетные помогают увидеть объективность расчета цены и физическую возможность работы с товаром, учетные показывают отклонение от норм (если минус). Вы предлагаете учетные не использовать, я же предлагаю учетные и расчетные наделить смыслом.
(15) Я не предлагаю не использовать какие-то данные, я предлагаю не скрывать отрицательные числа, если они есть.
И -10 и 0 отражают физическую невозможность работы в позицией, только -10 может в большей степени стать толчком что-то проверить и исправить, на мой взгляд.
Расчетные помогают увидеть объективность расчета цены и физическую возможность работы с товаром
И -10 и 0 отражают физическую невозможность работы в позицией, только -10 может в большей степени стать толчком что-то проверить и исправить, на мой взгляд.
(16)
Было:
Стало:
Теперь Вам понятно?
Было:
Товары.КоличествоОстаток КАК КоличествоУчет,
Товары.КоличествоОстаток КАК Количество,
Товары.СтоимостьОстаток КАК СуммаУчет,
Товары.СтоимостьОстаток КАК Сумма,
Стало:
Товары.КоличествоОстаток КАК КоличествоУчет,
ВЫБОР КОГДА ЕСТЬNNULL (Товары.КоличествоОстаток,0) >0
ТОГДА Товары.КоличествоОстаток
Иначе 0
Конец КАК Количество,
Товары.СтоимостьОстаток КАК СуммаУчет,
ВЫБОР КОГДА ЕСТЬNULL (Товары.СтоимостьОстаток,0)>0
ТОГДА Товары.СтоимостьОстаток
Иначе 0
Конец КАК Сумма,
ПоказатьТеперь Вам понятно?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот