Как засекать отсутствие табличной части документа

1. pavel06 2 06.01.23 02:51 Сейчас в теме
В БП3.0 в документе РозничнаяПродажа фиксируются пробитые на кассе чеки, причем если чек пробит по безналу то есть табличная часть Оплата с одной строкой, а если за нал, то этой табличной части вообще нет.
Для составления реестра чеков и подсчета нала/безнала я составил запрос:
"ВЫБРАТЬ
	|	РозничнаяПродажа.Ссылка КАК Ссылка,
	|	РозничнаяПродажа.Номер КАК Номер,
	|	РозничнаяПродажа.Дата КАК Дата,
	|	РозничнаяПродажа.СуммаДокумента КАК Сумма,
	|    КОЛИЧЕСТВО(РозничнаяПродажа.Оплата.НомерСтроки) КАК НомерСтроки
	|ИЗ
	|	Документ.РозничнаяПродажа КАК РозничнаяПродажа
	|ГДЕ
	|	РозничнаяПродажа.Дата МЕЖДУ &НачДата И &КонДата
	|УПОРЯДОЧИТЬ ПО
     |	 РозничнаяПродажа.Дата"
Показать

согласно которого считал, что при НомерСтроки равном 0 будут чеки за нал, а при НомерСтроки не равном 0, а равном 1 - безнал.
Так советовали в https://forum.infostart.ru/forum9/topic127660/
Этот НомерСтроки я для теста вывожу через Сообщить.
но почему-то у всех чеков Строка(КодСимвола(ВыборкаДокументов.НомерСтроки)) равен -1 Т.е. минус один. Т.е.НомерСтроки не принимает числовых значений.

Может ли кто-то объяснить, почему так получается, и как тогда засечь отсутствие табличной части Оплата у чека?
По теме из базы знаний
Найденные решения
3. spacecraft 06.01.23 06:39 Сейчас в теме
(1)
но почему-то у всех чеков Строка(КодСимвола(ВыборкаДокументов.НомерСтроки)) равен -1 Т.е. минус один.

Строка(КодСимвола(ВыборкаДокументов.НомерСтроки)) это очень смело, только зачем?

А -1 в данном случае получается в этой формуле из null.
В запросе поле
КОЛИЧЕСТВО(РозничнаяПродажа.Оплата.НомерСтроки) КАК НомерСтроки
пристыковывает табличную часть (как данные отдельного результата запроса), как внутренний результат запроса.
Соответственной в основном результата запроса там всегда будет null. Чтобы получить данные, нужно получить выборку из внутреннего результата запроса.

Но все можно в запросе получить:
"ВЫБРАТЬ
    |    РозничнаяПродажа.Ссылка КАК Ссылка,
    |    РозничнаяПродажа.Номер КАК Номер,
    |    РозничнаяПродажа.Дата КАК Дата,
    |    РозничнаяПродажа.СуммаДокумента КАК Сумма,
    |    НЕ РозничнаяПродажаОплата.Ссылка ЕСТЬ NULL КАК ЕстьОплата
    |ИЗ
    |    Документ.РозничнаяПродажа КАК РозничнаяПродажа
    |    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РозничнаяПродажа.Оплата КАК РозничнаяПродажаОплата
    |    		ПО (РозничнаяПродажа.Ссылка = РозничнаяПродажаОплата.Ссылка)
    |ГДЕ
    |    РозничнаяПродажа.Дата МЕЖДУ &НачДата И &КонДата
    |УПОРЯДОЧИТЬ ПО
     |     РозничнаяПродажа.Дата"
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 06.01.23 06:39 Сейчас в теме
(1)
но почему-то у всех чеков Строка(КодСимвола(ВыборкаДокументов.НомерСтроки)) равен -1 Т.е. минус один.

Строка(КодСимвола(ВыборкаДокументов.НомерСтроки)) это очень смело, только зачем?

А -1 в данном случае получается в этой формуле из null.
В запросе поле
КОЛИЧЕСТВО(РозничнаяПродажа.Оплата.НомерСтроки) КАК НомерСтроки
пристыковывает табличную часть (как данные отдельного результата запроса), как внутренний результат запроса.
Соответственной в основном результата запроса там всегда будет null. Чтобы получить данные, нужно получить выборку из внутреннего результата запроса.

Но все можно в запросе получить:
"ВЫБРАТЬ
    |    РозничнаяПродажа.Ссылка КАК Ссылка,
    |    РозничнаяПродажа.Номер КАК Номер,
    |    РозничнаяПродажа.Дата КАК Дата,
    |    РозничнаяПродажа.СуммаДокумента КАК Сумма,
    |    НЕ РозничнаяПродажаОплата.Ссылка ЕСТЬ NULL КАК ЕстьОплата
    |ИЗ
    |    Документ.РозничнаяПродажа КАК РозничнаяПродажа
    |    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РозничнаяПродажа.Оплата КАК РозничнаяПродажаОплата
    |    		ПО (РозничнаяПродажа.Ссылка = РозничнаяПродажаОплата.Ссылка)
    |ГДЕ
    |    РозничнаяПродажа.Дата МЕЖДУ &НачДата И &КонДата
    |УПОРЯДОЧИТЬ ПО
     |     РозничнаяПродажа.Дата"
Показать
4. -AI- 06.01.23 06:47 Сейчас в теме
(3) а дубли не появятся, если строк Оплата несколько?
если на выходе запроса нужны все документы, тогда предлагаю заменить строку
НЕ РозничнаяПродажаОплата.Ссылка ЕСТЬ NULL КАК ЕстьОплата
на
 РозничнаяПродажа.Ссылка в (ВЫБРАТЬ различные Ссылка ИЗ Документ.РозничнаяПродажа.Оплата) КАК ЕстьОплата
5. spacecraft 06.01.23 06:52 Сейчас в теме
(4)
а дубли не появятся, если строк Оплата несколько?

Появятся. Можно просто сгруппировать по всем полям.
6. -AI- 06.01.23 06:54 Сейчас в теме
(5) а если, то что написал, человек - это заготовка для более сложного запроса?
7. spacecraft 06.01.23 06:58 Сейчас в теме
(6) а может это вообще будет не запрос.... и т.д. и т.п.
Будет нужно что-то другое, будет и ответ другим.
2. -AI- 06.01.23 06:35 Сейчас в теме
сделать левое соединение с
Документ.РозничнаяПродажа.Оплата КАК Оплата
ПО Оплата.Ссылка = РозничнаяПродажа.Ссылка
и в условие ГДЕ добавить
Оплата.Ссылка Есть Null
Оставьте свое сообщение

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