Добрый день!
Возникла проблема. Необходимо вывести в отчете записи в соответствии с условиями:
1. Если заполнен документ-основание;
2. Если не заполнен документ-основание;
3. Не учитывать заполненность.
Написала запрос:
На форме создала реквизит ПолеВыбора, для него сделала следующее:
При формировании отчета в режиме предприятия выскакивает ошибка (см. прикрепленный файл).
Полагаю, что ошибка из-за того, что я сравниваю значение с нулем вот здесь:
Если мое предположение верно, как сделать проверку иначе? Если нет, то где могла ошибиться?
Возникла проблема. Необходимо вывести в отчете записи в соответствии с условиями:
1. Если заполнен документ-основание;
2. Если не заполнен документ-основание;
3. Не учитывать заполненность.
Написала запрос:
ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура,
ПеремещениеТоваровТовары.Количество,
ПеремещениеТоваров.Ссылка КАК Перемещение,
ПеремещениеТоваров.Комментарий,
ПеремещениеТоваров.ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокНеЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОГДА &ДокЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка > 0
КОГДА &НеУчитывать ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка > 0
ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОНЕЦ
{ГДЕ
(ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель),
(ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель)}
ПоказатьНа форме создала реквизит ПолеВыбора, для него сделала следующее:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ЭлементыФормы.ПолеВыбора.СписокВыбора.Добавить(1, "Не учитывать");
ЭлементыФормы.ПолеВыбора.СписокВыбора.Добавить(2, "Заполнен");
ЭлементыФормы.ПолеВыбора.СписокВыбора.Добавить(3, "Не заполнен");
КонецПроцедуры
Процедура ПолеВыбораПриИзменении(Элемент)
Если ПолеВыбора = 1 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = ПолеВыбора;
ИначеЕсли ПолеВыбора = 2 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = ПолеВыбора;
ИначеЕсли ПолеВыбора = 3 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = ПолеВыбора;
КонецЕсли;
КонецПроцедуры
ПоказатьПри формировании отчета в режиме предприятия выскакивает ошибка (см. прикрепленный файл).
Полагаю, что ошибка из-за того, что я сравниваю значение с нулем вот здесь:
ВЫБОР
КОГДА &ДокНеЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОГДА &ДокЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка > 0
КОГДА &НеУчитывать ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка > 0
ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОНЕЦ
ПоказатьЕсли мое предположение верно, как сделать проверку иначе? Если нет, то где могла ошибиться?
Прикрепленные файлы:
По теме из базы знаний
- Внешний отчет на СКД "Ошибки и предупреждения журнала регистрации". Для любой типовой конфигурации 1С: Предприятие 8.3
- Внешний отчет на СКД "Ошибки технологического журнала". Для любой типовой конфигурации 1С: Предприятие 8.3
- Доработка типового отчета на СКД с помощью расширения
- По-настоящему свои макеты в отчетах СКД. Исследование процесса компоновки и генерация кода отчета
- Отчет на СКД с использованием форм из БСП. Варианты передачи списка значений в параметр СКД
Найденные решения
(14)
Как ж я не заметил...Остальные параметры тоже нужно установить
Процедура ПолеВыбораПриИзменении(Элемент)
Если ПолеВыбора = 1 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = истина;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ИначеЕсли ПолеВыбора = 2 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Истина;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ИначеЕсли ПолеВыбора = 3 Тогда
.............................
КонецЕсли;
КонецПроцедуры
Как ж я не заметил...Остальные параметры тоже нужно установить
Процедура ПолеВыбораПриИзменении(Элемент)
Если ПолеВыбора = 1 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = истина;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ИначеЕсли ПолеВыбора = 2 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Истина;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ИначеЕсли ПолеВыбора = 3 Тогда
.............................
КонецЕсли;
КонецПроцедуры
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура,
ПеремещениеТоваровТовары.Количество,
ПеремещениеТоваров.Ссылка КАК Перемещение,
ПеремещениеТоваров.Комментарий,
ПеремещениеТоваров.ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокНеЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОГДА &ДокЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
КОГДА &НеУчитывать ТОГДА //нужно ли какое-то условие, если требуется не учитывать. Может стоит вообще отказаться от этого условия?
// ПеремещениеТоваров.ДокументОснование.Ссылка > 0
// ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОНЕЦ
{ГДЕ
(ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель),
(ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель)}
Показать
(6) как нужно фильтровать исходные данные при условии 3 - "Неучитывать". Какое условие отбора документов?
Допустим есть 100 документов. Какие из них нужно выбрать и по какому принципу?
Допустим есть 100 документов. Какие из них нужно выбрать и по какому принципу?
Я поправило на IS NOT NULL -- ошибка не исчезла
- а 3 условие закоментировано?
(7) Условие 3 закоментировала
1. Выводит документы, у которых есть документ-основание (к примеру, 20 шт).
2. Выводит документы, у которых нет документа-основания (их, получается, 80 шт).
3. Выводит все 100 документов вне зависимости от наличия документа-основания.
1. Выводит документы, у которых есть документ-основание (к примеру, 20 шт).
2. Выводит документы, у которых нет документа-основания (их, получается, 80 шт).
3. Выводит все 100 документов вне зависимости от наличия документа-основания.
(8) Хорошо. Сделайте так.
ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура КАК Номенклатура,
ПеремещениеТоваровТовары.Количество КАК Количество,
ПеремещениеТоваров.Ссылка КАК Перемещение,
ПеремещениеТоваров.Комментарий КАК Комментарий,
ПеремещениеТоваров.ДокументОснование КАК ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И &НеУчитывать = ИСТИНА
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура,
ПеремещениеТоваровТовары.Количество,
ПеремещениеТоваров.Ссылка,
ПеремещениеТоваров.Комментарий,
ПеремещениеТоваров.ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО (ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка)
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокНеЗаполнен
ТОГДА ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
ИНАЧЕ ЛОЖЬ
КОНЕЦ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура,
ПеремещениеТоваровТовары.Количество,
ПеремещениеТоваров.Ссылка,
ПеремещениеТоваров.Комментарий,
ПеремещениеТоваров.ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокЗаполнен
ТОГДА ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ НЕ NULL
ИНАЧЕ ЛОЖЬ
КОНЕЦ
ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура КАК Номенклатура,
ПеремещениеТоваровТовары.Количество КАК Количество,
ПеремещениеТоваров.Ссылка КАК Перемещение,
ПеремещениеТоваров.Комментарий КАК Комментарий,
ПеремещениеТоваров.ДокументОснование КАК ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И &НеУчитывать = ИСТИНА
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура,
ПеремещениеТоваровТовары.Количество,
ПеремещениеТоваров.Ссылка,
ПеремещениеТоваров.Комментарий,
ПеремещениеТоваров.ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО (ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка)
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокНеЗаполнен
ТОГДА ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
ИНАЧЕ ЛОЖЬ
КОНЕЦ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура,
ПеремещениеТоваровТовары.Количество,
ПеремещениеТоваров.Ссылка,
ПеремещениеТоваров.Комментарий,
ПеремещениеТоваров.ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокЗаполнен
ТОГДА ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ НЕ NULL
ИНАЧЕ ЛОЖЬ
КОНЕЦ
(14)
Как ж я не заметил...Остальные параметры тоже нужно установить
Процедура ПолеВыбораПриИзменении(Элемент)
Если ПолеВыбора = 1 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = истина;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ИначеЕсли ПолеВыбора = 2 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Истина;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ИначеЕсли ПолеВыбора = 3 Тогда
.............................
КонецЕсли;
КонецПроцедуры
Как ж я не заметил...Остальные параметры тоже нужно установить
Процедура ПолеВыбораПриИзменении(Элемент)
Если ПолеВыбора = 1 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = истина;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ИначеЕсли ПолеВыбора = 2 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Истина;
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;
ИначеЕсли ПолеВыбора = 3 Тогда
.............................
КонецЕсли;
КонецПроцедуры
(17) Если не установить параметры, то они Неопределено.
Если в запросе написать КОГДА &ДокЗаполнен = ИСТИНА ТОГДА т.е явно указать что мы ожидаем, то все будет хорошо (ну условие будет ложным т.к. неопределено <> ИСТИНА )
В случае, если просто указать КОГДА &ДокЗаполнен ТОГДА, то платформа ожидает тип булево т.е ДокЗаполнен = или истина или ложь, а у него неопределено. Вот и ошибка
Если в запросе написать КОГДА &ДокЗаполнен = ИСТИНА ТОГДА т.е явно указать что мы ожидаем, то все будет хорошо (ну условие будет ложным т.к. неопределено <> ИСТИНА )
В случае, если просто указать КОГДА &ДокЗаполнен ТОГДА, то платформа ожидает тип булево т.е ДокЗаполнен = или истина или ложь, а у него неопределено. Вот и ошибка
(10) Пробовала в консоли проверить без третьего условия, не сработало, поэтому оставила его.
Получилось вот так, в итоге:
Получилось вот так, в итоге:
ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура,
ПеремещениеТоваровТовары.Количество,
ПеремещениеТоваров.Ссылка КАК Перемещение,
ПеремещениеТоваров.Комментарий,
ПеремещениеТоваров.ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокНеЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОГДА &ДокЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
КОГДА &НеУчитывать ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОНЕЦ
{ГДЕ
(ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель),
(ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель)}
Показать
Если я правильно понял, то напишите проще, если Вы хотите чтобы при &НеУчитывать выводились все записи (то есть как бы игнорировать данное условие) тогда напишите так
...
...
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокНеЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОГДА &ДокЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
КОГДА &НеУчитывать ТОГДА
ИСТИНА
КОНЕЦ
И все у вас третье условие будет всегда в ИСТИНА то есть выводится данные
...
...
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокНеЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОГДА &ДокЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
КОГДА &НеУчитывать ТОГДА
ИСТИНА
КОНЕЦ
И все у вас третье условие будет всегда в ИСТИНА то есть выводится данные
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот