Дополнительный реквизит документа. Тип Булево

1. BARDER 40 17.08.20 21:36 Сейчас в теме
Привет всем.
Есть небольшая загвостка.

Есть документ "Отчет комиссионера"
Добавил Доп реквизит "Возвраты"
Тоесть если это возвраты то ставиться галочка тоесть принимает реквизит "Истина", если продажи соответственно "Ложь"

Начинаю Запросом выбирать документы:

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

Если Возвраты = Истина, то возвраты показывает, а если Ложь Ни одного документа не показывает.
Я так понимаю, когда галка не стоит, то доп реквизит отсутствует, так как если из запроса убираю условия по планам харрактеристик, то все доки показываются.

Как выйти из этой ситуации?

КА 2.4 УФ
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. -AI- 18.08.20 00:12 Сейчас в теме
(1) перечитал проблему ещё раз....
а если Ложь Ни одного документа не показывает

есть вероятность, что Ложь вообще не записывается, или записывается но не всегда
(не создаётся соответствующая строка в табличной части Доп.Рек)

тогда отсутствие такой записи надо трактовать как Ложь:
Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОтчетКомиссионера.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ОтчетКомиссионера КАК ОтчетКомиссионера
        |        ЛЕВОЕ СОЕДИНЕНИЕ
        |    Документ.ОтчетКомиссионера.ДополнительныеРеквизиты КАК ДопРек
        |        ПО ДопРек.Ссылка=ОтчетКомиссионера.Ссылка
        |         И ДопРек.Свойство = &Возвраты
        |ГДЕ
        |    ОтчетКомиссионера.НомерВходящегоДокумента = &Накладная
        |    И ЕстьNull(ДопРек.Значение,Ложь) = &Булево";
Показать
Date; vindsor; yaroslav.artem; Sergex; M_A_D; +5 Ответить
6. Sergex 59 18.08.20 00:19 Сейчас в теме
(1) Значение ложь для доп реквизита не записывается в таблицу доп реквизитов объекта, так как считается не установленным. А не заполненные значения не записываются в таблицу доп реквизитов объекта!
Совет (5) как и запрос в (5) - правильный ответ на ваш вопрос.
2. _Vanda_ 17.08.20 22:04 Сейчас в теме
В первом пакете получить все документы у которых возвраты истина, а во втором пакете получить все документы, у которых ссылка не входит в первый пакет.
Не ВторойПакет.Ссылка В (ВЫБРАТЬ ПервыйПакет.Ссылка Из ПервыйПакет как ПервыйПакет)
3. BARDER 40 17.08.20 23:40 Сейчас в теме
(2) если честно, не понял.
Мой запрос:
Функция ПроверитьНакладную(Накладная, Возвраты)
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОтчетКомиссионера.Ссылка КАК Ссылка
		|ИЗ
		|	Документ.ОтчетКомиссионера КАК ОтчетКомиссионера
		|ГДЕ
		|	ОтчетКомиссионера.НомерВходящегоДокумента = &Накладная
		|	И ОтчетКомиссионера.ДополнительныеРеквизиты.Свойство = &Возвраты
		|	И ОтчетКомиссионера.ДополнительныеРеквизиты.Значение = &Булево";
	
	Запрос.УстановитьПараметр("Накладная", Накладная);
	Запрос.УстановитьПараметр("Возвраты", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Возвраты"));
	Запрос.УстановитьПараметр("Булево", Возвраты);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Возврат ВыборкаДетальныеЗаписи.ссылка;
	КонецЦикла;
КонецФункции
Показать
4. -AI- 17.08.20 23:57 Сейчас в теме
Если фильтруется по условию, должно быть так:
Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОтчетКомиссионера.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ОтчетКомиссионера КАК ОтчетКомиссионера
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        |    Документ.ОтчетКомиссионера.ДополнительныеРеквизиты КАК ДопРек
        |        ПО ДопРек.Ссылка=ОтчетКомиссионера.Ссылка
        |         И ДопРек.Свойство = &Возвраты
        |         И ДопРек.Значение = &Булево
        |ГДЕ
        |    ОтчетКомиссионера.НомерВходящегоДокумента = &Накладная";
Показать

а если нужно значение дополнительного реквизита то так:
Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОтчетКомиссионера.Ссылка КАК Ссылка,
        |    ДопРек.Значение КАК Возвраты
        |ИЗ
        |    Документ.ОтчетКомиссионера КАК ОтчетКомиссионера
        |        ЛЕВОЕ СОЕДИНЕНИЕ
        |    Документ.ОтчетКомиссионера.ДополнительныеРеквизиты КАК ДопРек
        |        ПО ДопРек.Ссылка=ОтчетКомиссионера.Ссылка
        |         И ДопРек.Свойство = &Возвраты
        |ГДЕ
        |    ОтчетКомиссионера.НомерВходящегоДокумента = &Накладная";
Показать

PS "Возвраты" лучше сделать предопределённым значением и сразу в теле запроса писать
        |         И ДопРек.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Возвраты)
7. BARDER 40 18.08.20 09:43 Сейчас в теме
(4)
ДопРек.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Возвраты)


Неверные параметры ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Возвраты
И ДопРек.Свойство = ДопРек.Свойство = ЗНАЧЕНИЕ(<<?>>ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Возвраты)
8. BARDER 40 18.08.20 09:49 Сейчас в теме
(4)
Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОтчетКомиссионера.Ссылка КАК Ссылка,
        |    ДопРек.Значение КАК Возвраты
        |ИЗ
        |    Документ.ОтчетКомиссионера КАК ОтчетКомиссионера
        |        ЛЕВОЕ СОЕДИНЕНИЕ
        |    Документ.ОтчетКомиссионера.ДополнительныеРеквизиты КАК ДопРек
        |        ПО ДопРек.Ссылка=ОтчетКомиссионера.Ссылка
        |         И ДопРек.Свойство = &Возвраты
        |ГДЕ
        |    ОтчетКомиссионера.НомерВходящегоДокумента = &Накладная";
Показать

Так же с булево ложь не показывает
10. -AI- 18.08.20 20:50 Сейчас в теме
(8)
Так же с булево ложь не показывает

Вы не внимательно смотрите...
уже есть сообщение (5), где правильный вариант, с учётом этого и (9) комментария
9. BARDER 40 18.08.20 10:36 Сейчас в теме
если смотреть в отладчике:
если ставить галку Возвраты, то при запросе к Объект.ДополнительныеРеквизиты.Количество() - 1
Тоесть реквизит Возвраты присутствует.
Если галка снята то Объект.ДополнительныеРеквизиты.Количество() показывает 0
yaroslav.artem; +1 Ответить
11. yaroslav.artem 10.01.22 14:27 Сейчас в теме
Столкнулся в подобной проблемой. Сначала подумал, либо шизуха, либо такое поведение платформы. Решение в 5 комментарии.
Я сначала не врубился, как это в моей задаче реализовать.. но при ОБЪЕДЕНИТЬ ВСЕ со второй таблицы этот NULL в поле появился. Завернул во временную таблицу и там уже NULL в Ложь преобразовал в итоговом запросе.
Оставьте свое сообщение

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