(1)Выберите сначала из регистра не остаточного всю номенклатуру и склады, потом во временную таблицу это , а после соедините с остаточным регистром..по номенклатуре и складу,
(1) так правильно данных в таблице нет.
Как уже написали получаешь данные, затем левым соединением добавляешь недоставющее. Далее чего нет обрабатываешь как есть нуль.
(3) Круто, а ничего что Остатки будут показаны только по тем номенклатурам у которых остаток больше 0 в данном регистре, если остатка нет по номенклатуре...он его и не выведет
ВЫБРАТЬ
Ном.Ссылка КАК Номенклатура,
ТоварыНаСкладахОстатки.Склад КАК Склад,
ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Остаток
ИЗ
Справочник.Номенклатура КАК Ном
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатка, ) КАК ТоварыНаСкладахОстатки
ПО Ном.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
ВЫБРАТЬ
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
Ном.Ссылка
ИЗ
Справочник.Номенклатура КАК Ном
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ПО Ном.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
И (ТоварыНаСкладахОстатки.КоличествоОстаток = 0)
ГДЕ
НЕ Ном.ЭтоГруппа
согласно постановке задачи.
ну чё нести дневник, питёрка с плюсом?
или родителей в школу?
Короче вы болтовней занимаетесь..нихрена не знаете...
Постановка задачи получить номенклатуру на складе в т.ч. и той которой там уже нет...
Теперь если мы снимем остаточный регистр, то не увидим номенклатуру у которой был приход и расход на данном складе но сейчас там нулевой остаток..т.е здесь мы получим номенклатуру которая имеется в наличии на дату остатка...
Вот для УНФ я так сделал - вроде как то что нужно
ВЫБРАТЬ// остатки
Остатки.Номенклатура КАК Наименование,
Цены.Цена,
Цены2.Цена КАК Цена2,
Остатки.КоличествоОстаток КАК Остаток
ПОМЕСТИТЬ ОстаткиСценами
ИЗ
РегистрНакопления.ЗапасыНаСкладах.Остатки() КАК Остатки
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ВидЦен = &ВидЦены) КАК Цены
ПО
Остатки.Номенклатура = Цены.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ВидЦен = &ВидЦены2) КАК Цены2
ПО
Остатки.Номенклатура = Цены2.Номенклатура ;
ВЫБРАТЬ //Номенклатуру
//Ном.Наименование,
Ном.Артикул,
Цены.Цена,
Цены.Цена2,
Остаток
ИЗ
Справочник.Номенклатура КАК Ном
ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиСценами Как Цены
ПО Ном.Ссылка = Цены.Наименование
ГДЕ Ном.ЭтоГруппа = ЛОЖЬ
//Ном.Ссылка В ИЕРАРХИИ(&Номенклатура)
УПОРЯДОЧИТЬ ПО
// Ном.Ссылка.ЭтоГруппа ИЕРАРХИЯ,
Ном.Ссылка.РеквизитДопУпорядочиванияУНФ
(28) 1. В первом запросе сделай одно соединение с ценами (условие ИЛИ), а в полях запроса проверяй тип цены через ВЫБОР КОГДА...
2. Индекс добавь по номенклатуре.
(28)Этот код работает - но есть у него недостаток - если остатков нет то ты с ними ничего сделать не можешь. Ну как то получить для дальнейшей работы с остатком нулевым. Для общего образования кодик норм.
В общем даю полностью рабочий ответ на поставленную задачу, как это решил я.
1)Я это всё выгружаю для синхронизацией с MySQL сайта, дабы актуализировать остатки ну и цены тоже.
2)Я не специалист и не профи, так что просьба строго не судить, и терминами не запинывать.
3)Весь код честно взят из интернета и запилен под себя, в частности под УНФ. Под любую другую платформу подойдет только чутка подправить регистров названия и в целом будет норм.
Комментарий под номером (29) спасибо тебе милый человек, но я так не особо понимаю, примерчик бы конкретный и рабочий сразу чтоб, а то опять же терминами закидал, а я иди ищи как твои термины в жизнь воплощать.
Короче. Код запроса. Всё тестировалось в отдельной обработке под названием консоль запросов (кто ею не пользуется тот тратит время зря).
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Ссылка,
СправочникНоменклатура.Артикул КАК Артикул,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, "0.00") КАК Цена,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних2.Цена, "0.00") КАК Цена2,
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, "0.00") КАК КоличествоОстаток //представление ноля в виде строки
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки
ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ВидЦен = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СправочникНоменклатура.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ВидЦен = &ВидЦены2) КАК ЦеныНоменклатурыСрезПоследних2
ПО (ЦеныНоменклатурыСрезПоследних2.Номенклатура = СправочникНоменклатура.Ссылка)
ГДЕ СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ
Показать
На выходе я получаю Артикул ЦенуРозницу ЦенуОпт и Остаток - ну а дальше уже дело фантазии.
"|ВЫБРАТЬ
| СправочникНоменклатура.Ссылка КАК Ссылка,
| СправочникНоменклатура.Артикул КАК Артикул,
| ВЫБОР
| КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
| ИНАЧЕ 0
| КОНЕЦ КАК Цена,
| ВЫБОР
| КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены2
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
| ИНАЧЕ 0
| КОНЕЦ КАК Цена2,
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
|
|ИЗ
| Справочник.Номенклатура КАК СправочникНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки
| ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ВидЦен = &ВидЦены ИЛИ ВидЦен = &ВидЦены2) КАК ЦеныНоменклатурыСрезПоследних
| ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СправочникНоменклатура.Ссылка)
|ГДЕ СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ"
(32) Твой код выводит что нужно, но .... товар задвоился - то есть отдельная строка с ценой 1 и отдельная с ценой 2 получается (думаю это связано с одним левым соединением по ценам, две левых соединения дадут отдельные колонки)
По моему запросу выше 1С УНФ у меня не захотела работать, хотя в консоли всё работало отлично. Методом проб и ошибок выяснил что проблема в кавычках !!!! Не знаю почему но не захотело работать на реальной 1С.
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, "0.00") КАК Цена,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних2.Цена, "0.00") КАК Цена2,
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, "0.00") КАК КоличествоОстаток
В итоге заработало только вот так
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|СправочникНоменклатура.Ссылка КАК Ссылка,
|СправочникНоменклатура.Артикул КАК Артикул,
|ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена,0) КАК Цена,
|ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних2.Цена,0) КАК Цена2,
|ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток,0) КАК Остаток
|ИЗ
|Справочник.Номенклатура КАК СправочникНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки
| ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ВидЦен = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
| ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СправочникНоменклатура.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ВидЦен = &ВидЦены2) КАК ЦеныНоменклатурыСрезПоследних2
| ПО (ЦеныНоменклатурыСрезПоследних2.Номенклатура = СправочникНоменклатура.Ссылка)
|ГДЕ СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ";
Цена = Справочники.ВидыЦен.НайтиПоНаименованию("Продажа_Розница");
Цена2 = Справочники.ВидыЦен.НайтиПоНаименованию("Продажа_ОПТ_1");
Запрос.УстановитьПараметр("ВидЦены", Цена);
Запрос.УстановитьПараметр("ВидЦены2", Цена2);
Результат = Запрос.Выполнить();
Показать
Ну и отсутствие цены или остатка проверяем на 0 - что то типа такого
Пока Выборка.Следующий() Цикл
Если Выборка.Цена = 0 ИЛИ Выборка.Цена2 = 0 ИЛИ Выборка.Остаток = 0 Тогда
Сообщить(Выборка.Артикул);
КонецЕсли;
То есть сообщить мне все артикулы товара у которого нет хоть одной из цен или остатка.
В общем и в целом вопрос мой решен, спасибо FatPanzer за поддержку !