Не находит записи в левом соединении. Что не так в этом коде?

1. user1909662 30.01.25 16:25 Сейчас в теме
Не находит записи в левом соединении (точнее в условии ГДЕ). Что не так в этом коде:

Запрос.Текст = 
		"ВЫБРАТЬ
		|	НоменклатураДоп.Ссылка,
		|	НоменклатураДоп.Остатки,
		|	НоменклатураДоп.Резервы,
		|	НоменклатураДоп.МинОстаток,
		|	НоменклатураДоп.Цена,
		|	НоменклатураДоп.Ячейка
		|ИЗ
		|	Справочник.Номенклатура КАК НоменклатураДоп
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК ОстаткиТоваровКомпанииОстатки
		|		ПО НоменклатураДоп.Ссылка = ОстаткиТоваровКомпанииОстатки.Номенклатура
		|ГДЕ
		|	НоменклатураДоп.Остатки <> ЕстьNULL(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток,0)
		|	ИЛИ НоменклатураДоп.Резервы <> ЕстьNULL(ОстаткиТоваровКомпанииОстатки.РезервОстаток,0)";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Показать


В регистре и справочнике есть отличающиеся остатки и резервы. Как нужно правильно переписать код выше?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 30.01.25 16:57 Сейчас в теме
(1) Нет тут ошибок в самом запросе. Ошибка в хранении остатков в карточке номенклатуры. За такое надо увольнять из профессии.
5. user1909662 31.01.25 07:50 Сейчас в теме
(2) это единственное решение для штатной сортировки в форме списка (с помощью реквизита).
В справочнике НоменклатураДоп.Остатки = 2, в регистре накопления ОстаткиТоваровКомпанииОстатки.КоличествоОстаток = 3, но все равно не находит по условию:
НоменклатураДоп.Остатки <> ЕстьNULL(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток,0) 
6. user2107191 31.01.25 07:56 Сейчас в теме
(5)
это единственное решение
Ой...
13. user1909662 31.01.25 11:07 Сейчас в теме
(6) В обычной форме, колонка справочника без привязки реквизита, который получает данные регистра накопления с помощью свойства Текст. Пример:
ОформлениеСтроки.Ячейки.Остаток.Текст=Формат(Остаток,"ЧЦ=15; ЧДЦ=2; ЧН=0.00");

Вот его нажатием заголовка поля не сортируешь (по крайнем мере не увидел решений)
9. Kernelbug 54 31.01.25 10:47 Сейчас в теме
(5) Это не единственное решение. Изучайте динамический список с произвольным запросом -- раз, произвольный реквизит списка на форме -- два.

Левое соединение с таблицей остатков -- отдельное преступление. Засуньте свой запрос в консоль, а потом попробуйте переписать: остатки -- во временную таблицу, и потом соединяться уже с ней. Если база живая на тыщи записей, узрите разницу в скорости.

А то пишут всякую хрень, что потом у пользователя товарный чек на 2 строчки 5 минут формируются, и валят всё, мол, это 1С плохая-кривая-тормозная.

Хотя тут проблемы этой задачи, очевидно, генетические. Вы не осилили вывести на форму списка номенклатуры остатки нормальным образом (или постановщик не осилил сделать по-другому нормальную постановку), начали городить хранение остатков в справочнике, написали кривой и непродуманный код, не завязанный на архитектуру конфигурации, и пытаетесь наклепать какой-то отчёт для сверки данных. А его не надо клепать, это всё следствия и последствия хреново поставленной задачи. Тут саму методологию, начиная от работы с пользователем, фтопку.
user2107191; +1 Ответить
11. user1909662 31.01.25 11:00 Сейчас в теме
(9) Это обычная форма, там нужно было именно при нажатии на заголовок поля срабатывала сортировка (убыв/возр), например сортировка остатков в справочнике номенклатура (получает из регистра накопления).

P.S. Я это понимаю, что остатки хранятся в регистрах, редко изменяемая информация в справочниках.
14. Kernelbug 54 31.01.25 11:48 Сейчас в теме
(11) Зачем нужны остатки таблицей непосредственно в справочниках? Почему нельзя заменить обработкой какого-то АРМ или отчётом?
15. user1909662 31.01.25 15:00 Сейчас в теме
(14) Вот именно. Я предлагал отчет клиенту, не захотели (по мне отчет удобнее)
17. user2107191 31.01.25 15:37 Сейчас в теме
(15) Представляю себе зубного врача, у которого пациент захотел вместо коронки вставить камешек с пляжа.
И врач такой: я предлагал ему нормальную коронку, он не захотел, что я могу сделать?
DirecTwiX; +1 Ответить
19. SlavaKron 31.01.25 16:00 Сейчас в теме
(14) В типовой КА, например, в подборе номенклатуры использовался список номенклатуры с колонками остатков. Их конечно там рисовали при получении данных, но тем не менее - этот всё тот же СправочникСписок.Номенклатура с остатками.
3. Salimbek 13 30.01.25 17:01 Сейчас в теме
Как минимум это:

РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК ОстаткиТоваровКомпанииОстатки


должно выглядеть так:

РегистрНакопления.ОстаткиТоваровКомпании.Остатки(,) КАК ОстаткиТоваровКомпанииОстатки
4. RustamZz 30.01.25 17:16 Сейчас в теме
(3) Ну что вы! Это аксиома Эскобара.
7. starjevschik 31.01.25 08:35 Сейчас в теме
Консоль запросов возьми, там понятно будет. Сначала без условий, сделай таблицу со всеми полями выборки и сравнения и сравни глазами.
Идея записывать остатки в справочник действительно не так часто встречается, не глядя в данные трудно понять, что там на самом деле происходит.
user1909662; +1 Ответить
8. user1909662 31.01.25 09:49 Сейчас в теме
(7) да, как раз так и сделал. Оказывается одновременно обе поля меняются при проведении, поэтому и условие не срабатывает
10. user2107191 31.01.25 10:51 Сейчас в теме
(8)
Оказывается одновременно обе поля меняются при проведении
Ой, с чего бы это? Неужто кто-то грамотно реализовал поддержку актуальности остатков? Вот же редиска! Из за него теперь условие не срабатывает!!!
16. user1936660 31.01.25 15:36 Сейчас в теме
(8)
Оказывается одновременно обе поля меняются при проведении
Я боюсь спросить, но попробую. А при отмене проведения там у вас что?
user2107191; +1 Ответить
12. user2107191 31.01.25 11:06 Сейчас в теме
Жаль, что это не типовая конфа с БСП. С каким бы удовольствием я посоветовал включить версионность на номенклатуре...
18. karpik666 3939 31.01.25 15:38 Сейчас в теме
на обычных формах также можно использовать динамические списки, в управляемых формах.
Оставьте свое сообщение

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