1. user1030103 09.01.19 07:15 Сейчас в теме

Отчет СКД

Добрый день!

Возникла проблема. Необходимо вывести в отчете записи в соответствии с условиями:
1. Если заполнен документ-основание;
2. Если не заполнен документ-основание;
3. Не учитывать заполненность.

Написала запрос:

ВЫБРАТЬ
	ПеремещениеТоваровТовары.Номенклатура,
	ПеремещениеТоваровТовары.Количество,
	ПеремещениеТоваров.Ссылка КАК Перемещение,
	ПеремещениеТоваров.Комментарий,
	ПеремещениеТоваров.ДокументОснование
ИЗ
	Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
		ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
	ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
	И ВЫБОР 
		КОГДА &ДокНеЗаполнен ТОГДА
	      	ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
   		КОГДА &ДокЗаполнен ТОГДА 
      		ПеремещениеТоваров.ДокументОснование.Ссылка > 0
       	КОГДА &НеУчитывать ТОГДА 
      		ПеремещениеТоваров.ДокументОснование.Ссылка > 0
      		ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОНЕЦ  
{ГДЕ
	(ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель),
	(ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель)}
Показать


На форме создала реквизит ПолеВыбора, для него сделала следующее:

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	ЭлементыФормы.ПолеВыбора.СписокВыбора.Добавить(1, "Не учитывать");
	ЭлементыФормы.ПолеВыбора.СписокВыбора.Добавить(2, "Заполнен");
	ЭлементыФормы.ПолеВыбора.СписокВыбора.Добавить(3, "Не заполнен");
КонецПроцедуры

Процедура ПолеВыбораПриИзменении(Элемент)
	Если ПолеВыбора = 1 Тогда 
		ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
		ПараметрДок.Использование = Истина;
		ПараметрДок.Значение = ПолеВыбора;
	ИначеЕсли ПолеВыбора = 2 Тогда 
		ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
		ПараметрДок.Использование = Истина;
		ПараметрДок.Значение = ПолеВыбора;
	ИначеЕсли ПолеВыбора = 3 Тогда
		ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
		ПараметрДок.Использование = Истина;
		ПараметрДок.Значение = ПолеВыбора;
	КонецЕсли;
КонецПроцедуры
Показать


При формировании отчета в режиме предприятия выскакивает ошибка (см. прикрепленный файл).
Полагаю, что ошибка из-за того, что я сравниваю значение с нулем вот здесь:

    ВЫБОР 
		КОГДА &ДокНеЗаполнен ТОГДА
	      	ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
   		КОГДА &ДокЗаполнен ТОГДА 
      		ПеремещениеТоваров.ДокументОснование.Ссылка > 0
       	КОГДА &НеУчитывать ТОГДА 
      		ПеремещениеТоваров.ДокументОснование.Ссылка > 0
      		ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОНЕЦ  
Показать


Если мое предположение верно, как сделать проверку иначе? Если нет, то где могла ошибиться?
Прикрепленные файлы:
Найденные решения
16. dandykry 3 09.01.19 10:35 Сейчас в теме
(14)
Как ж я не заметил...Остальные параметры тоже нужно установить

Процедура ПолеВыбораПриИзменении(Элемент)
Если ПолеВыбора = 1 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = истина;

ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;

ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;

ИначеЕсли ПолеВыбора = 2 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;

ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Истина;

ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;

ИначеЕсли ПолеВыбора = 3 Тогда
.............................
КонецЕсли;
КонецПроцедуры
Остальные ответы
Избранное Подписка Сортировка: Древо
2. dandykry 3 09.01.19 07:46 Сейчас в теме
(1)
ВЫБРАТЬ
    ПеремещениеТоваровТовары.Номенклатура,
    ПеремещениеТоваровТовары.Количество,
    ПеремещениеТоваров.Ссылка КАК Перемещение,
    ПеремещениеТоваров.Комментарий,
    ПеремещениеТоваров.ДокументОснование
ИЗ
    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
        ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
    ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
    И ВЫБОР 
        КОГДА &ДокНеЗаполнен ТОГДА
              ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
           КОГДА &ДокЗаполнен ТОГДА 
              ПеремещениеТоваров.ДокументОснование.Ссылка  IS NOT NULL 
           КОГДА &НеУчитывать ТОГДА //нужно ли какое-то условие, если требуется не учитывать. Может стоит вообще отказаться от этого условия?
             // ПеремещениеТоваров.ДокументОснование.Ссылка > 0
             // ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОНЕЦ  
{ГДЕ
    (ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель),
    (ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель)}
Показать
AsPin123; +1 Ответить
3. user1030103 09.01.19 08:41 Сейчас в теме
(2) Если заполненность документа не учитывается, необходимо вывести все записи
5. dandykry 3 09.01.19 08:52 Сейчас в теме
(3) значит убери условие, если не нужно фильтровать)
6. user1030103 09.01.19 08:56 Сейчас в теме
(5) Но у меня три условия. Как выполнится третье, если совсем не задавать?

Я поправило на IS NOT NULL -- ошибка не исчезла
7. dandykry 3 09.01.19 09:01 Сейчас в теме
(6) как нужно фильтровать исходные данные при условии 3 - "Неучитывать". Какое условие отбора документов?
Допустим есть 100 документов. Какие из них нужно выбрать и по какому принципу?

Я поправило на IS NOT NULL -- ошибка не исчезла
- а 3 условие закоментировано?
8. user1030103 09.01.19 09:08 Сейчас в теме
(7) Условие 3 закоментировала

1. Выводит документы, у которых есть документ-основание (к примеру, 20 шт).
2. Выводит документы, у которых нет документа-основания (их, получается, 80 шт).
3. Выводит все 100 документов вне зависимости от наличия документа-основания.
11. dandykry 3 09.01.19 10:08 Сейчас в теме
(8) Хорошо. Сделайте так.

ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура КАК Номенклатура,
ПеремещениеТоваровТовары.Количество КАК Количество,
ПеремещениеТоваров.Ссылка КАК Перемещение,
ПеремещениеТоваров.Комментарий КАК Комментарий,
ПеремещениеТоваров.ДокументОснование КАК ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И &НеУчитывать = ИСТИНА

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура,
ПеремещениеТоваровТовары.Количество,
ПеремещениеТоваров.Ссылка,
ПеремещениеТоваров.Комментарий,
ПеремещениеТоваров.ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО (ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка)
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокНеЗаполнен
ТОГДА ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
ИНАЧЕ ЛОЖЬ
КОНЕЦ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ПеремещениеТоваровТовары.Номенклатура,
ПеремещениеТоваровТовары.Количество,
ПеремещениеТоваров.Ссылка,
ПеремещениеТоваров.Комментарий,
ПеремещениеТоваров.ДокументОснование
ИЗ
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокЗаполнен
ТОГДА ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ НЕ NULL
ИНАЧЕ ЛОЖЬ

КОНЕЦ
13. user1030103 09.01.19 10:15 Сейчас в теме
14. user1030103 09.01.19 10:21 Сейчас в теме
16. dandykry 3 09.01.19 10:35 Сейчас в теме
(14)
Как ж я не заметил...Остальные параметры тоже нужно установить

Процедура ПолеВыбораПриИзменении(Элемент)
Если ПолеВыбора = 1 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = истина;

ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;

ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;

ИначеЕсли ПолеВыбора = 2 Тогда
ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;

ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Истина;

ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
ПараметрДок.Использование = Истина;
ПараметрДок.Значение = Ложь;

ИначеЕсли ПолеВыбора = 3 Тогда
.............................
КонецЕсли;
КонецПроцедуры
17. user1030103 09.01.19 11:07 Сейчас в теме
(16) ОГО! Сработало!!! Большое спасибо!
А почему нужно расписывать параметры так подробно, так и не поняла... Почему не работало так, как написала я?
19. dandykry 3 09.01.19 12:37 Сейчас в теме
(17) Если не установить параметры, то они Неопределено.

Если в запросе написать КОГДА &ДокЗаполнен = ИСТИНА ТОГДА т.е явно указать что мы ожидаем, то все будет хорошо (ну условие будет ложным т.к. неопределено <> ИСТИНА )
В случае, если просто указать КОГДА &ДокЗаполнен ТОГДА, то платформа ожидает тип булево т.е ДокЗаполнен = или истина или ложь, а у него неопределено. Вот и ошибка
20. user1030103 10.01.19 04:49 Сейчас в теме
22. user619273_alevtina 11.01.19 23:15 Сейчас в теме
4. Akuji 10 09.01.19 08:48 Сейчас в теме
Попробуй так второе условие:
НЕ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL

Третье по идее не нужно вовсе.
9. user1030103 09.01.19 09:09 Сейчас в теме
(4) Ошибка все равно выскакивает
10. dandykry 3 09.01.19 09:56 Сейчас в теме
(9) Покажите, что получилось
12. user1030103 09.01.19 10:11 Сейчас в теме
(10) Пробовала в консоли проверить без третьего условия, не сработало, поэтому оставила его.

Получилось вот так, в итоге:

ВЫБРАТЬ
	ПеремещениеТоваровТовары.Номенклатура,
	ПеремещениеТоваровТовары.Количество,
	ПеремещениеТоваров.Ссылка КАК Перемещение,
	ПеремещениеТоваров.Комментарий,
	ПеремещениеТоваров.ДокументОснование
ИЗ
	Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
		ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
	ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
	И ВЫБОР 
		КОГДА &ДокНеЗаполнен ТОГДА
	      	ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
   		КОГДА &ДокЗаполнен ТОГДА 
      		ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
        КОГДА &НеУчитывать ТОГДА 
      		ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
      		ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОНЕЦ  
{ГДЕ
	(ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель),
	(ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель)}
Показать
15. SedovSU@mail.ru 292 09.01.19 10:32 Сейчас в теме
Если я правильно понял, то напишите проще, если Вы хотите чтобы при &НеУчитывать выводились все записи (то есть как бы игнорировать данное условие) тогда напишите так

...
...
ГДЕ
ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
И ВЫБОР
КОГДА &ДокНеЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
КОГДА &ДокЗаполнен ТОГДА
ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
КОГДА &НеУчитывать ТОГДА
ИСТИНА

КОНЕЦ

И все у вас третье условие будет всегда в ИСТИНА то есть выводится данные
18. user1030103 09.01.19 11:07 Сейчас в теме
21. user774630 10.01.19 21:04 Сейчас в теме
ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL


Зачем эта .Ссылка?
ПеремещениеТоваров.ДокументОснование.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка ЕСТЬ NULL
так тоже можно.

достаточно
ПеремещениеТоваров.ДокументОснование ЕСТЬ NULL
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 120 000 руб.
Полный день

Аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

Программист 1С
Самара
зарплата от 50 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день