Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Неправильный вывод остатков по номеклатуре с характеристиками

Неправильный вывод остатков по номеклатуре с характеристиками
Я
   hsmran
 
06.02.21 - 14:46
Доброго времени. Существует обработка, которая выгружает номенклатуру в наличии в CSV файл для последующей загрузки на сайт.
Одежде с характеристиками по размерам почему-то устанавливает количество по 100, хотя по факту на складе их по 4.

Часть кода:
&НаСервере
Процедура ЗаполнитьНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТоварыВЯчейкахОстатки.Номенклатура КАК Номенклатура,
    |    ТоварыВЯчейкахОстатки.Номенклатура.Артикул КАК Артикул,
    |    ТоварыВЯчейкахОстатки.Номенклатура.Описание КАК Описание,
    |    СУММА(ТоварыВЯчейкахОстатки.ВНаличииОстаток) КАК Остаток,
    |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
    |    ТоварыВЯчейкахОстатки.Ячейка.Владелец КАК Склад,
    |    ВложенныйЗапрос.Поле1 КАК ЦенаЗак
    |ИЗ
    |    РегистрНакопления.ТоварыВЯчейках.Остатки(&НаДату, ) КАК ТоварыВЯчейкахОстатки
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
    |        ПО ТоварыВЯчейкахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Поле1,
    |            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура
    |        ИЗ
    |            РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
    |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    |                ПО ТоварыВЯчейкахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |        ГДЕ
    |            ЦеныНоменклатурыСрезПоследних.ВидЦены = &Зак) КАК ВложенныйЗапрос
    |        ПО ТоварыВЯчейкахОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура
    |ГДЕ
    |    ТоварыВЯчейкахОстатки.Ячейка <> &Ячейка
    |    И ТоварыВЯчейкахОстатки.Ячейка <> &Ячейка2
    |    И ТоварыВЯчейкахОстатки.Ячейка <> &Ячейка3
    |    И ТоварыВЯчейкахОстатки.Ячейка.Владелец = &ОснСклад
    |
    |СГРУППИРОВАТЬ ПО
    |    ТоварыВЯчейкахОстатки.Номенклатура,
    |    ТоварыВЯчейкахОстатки.Номенклатура.Артикул,
    |    ТоварыВЯчейкахОстатки.Номенклатура.Описание,
    |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0),
    |    ТоварыВЯчейкахОстатки.Ячейка.Владелец,
    |    ВложенныйЗапрос.Поле1
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    ТоварыНаСкладахОстатки.Номенклатура.Артикул,
    |    ТоварыНаСкладахОстатки.Номенклатура.Описание,
    |    СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток),
    |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0),
    |    ТоварыНаСкладахОстатки.Склад,
    |    ВложенныйЗапрос.Поле1
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(&НаДату, ) КАК ТоварыНаСкладахОстатки
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
    |        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    |            ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Поле1
    |        ИЗ
    |            РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    |                ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |        ГДЕ
    |            ЦеныНоменклатурыСрезПоследних.ВидЦены = &Зак) КАК ВложенныйЗапрос
    |        ПО ТоварыНаСкладахОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура
    |ГДЕ
    |    ТоварыНаСкладахОстатки.Склад <> &ОснСклад
    |
    |СГРУППИРОВАТЬ ПО
    |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0),
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    ТоварыНаСкладахОстатки.Номенклатура.Артикул,
    |    ТоварыНаСкладахОстатки.Номенклатура.Описание,
    |    ТоварыНаСкладахОстатки.Склад,
    |    ВложенныйЗапрос.Поле1";
    
    Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
    Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
    Запрос.УстановитьПараметр("Ячейка", Справочники.СкладскиеЯчейки.НайтиПоНаименованию("БРАК"));
    Запрос.УстановитьПараметр("Ячейка2", Справочники.СкладскиеЯчейки.НайтиПоНаименованию("Недовоз"));
    Запрос.УстановитьПараметр("Ячейка3", Справочники.СкладскиеЯчейки.НайтиПоНаименованию("ПЕРЕМЕЩЕНИЕ"));
    Запрос.УстановитьПараметр("ОснСклад", Справочники.Склады.НайтиПоНаименованию("Основной"));

    Запрос.УстановитьПараметр("Зак", Справочники.ВидыЦен.НайтиПоНаименованию("Закупочная"));

    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        НовСтр = ТоварыКВыгрузке.Добавить();
        НовСтр.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
        НовСтр.Остаток = ВыборкаДетальныеЗаписи.Остаток;
        НовСтр.Цена = ВыборкаДетальныеЗаписи.Цена;
        НовСтр.Склад = ВыборкаДетальныеЗаписи.Склад;
        НовСтр.ЦенаЗак = ВыборкаДетальныеЗаписи.ЦенаЗак;
    КонецЦикла;
    
КонецПроцедуры
   Ёпрст
 
1 - 06.02.21 - 15:44
(0) вот эту ересь выкинь, для начала:

   ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    |            ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Поле1
    |        ИЗ
    |            РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    |                ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |        ГДЕ
    |            ЦеныНоменклатурыСрезПоследних.ВидЦены = &Зак) КАК ВложенныйЗапрос
    |        ПО ТоварыНаСкладахОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура
   Ёпрст
 
2 - 06.02.21 - 15:46
Ну и вот эту гадость, тоже:

ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Поле1,
    |            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура
    |        ИЗ
    |            РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
    |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    |                ПО ТоварыВЯчейкахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |        ГДЕ
    |            ЦеныНоменклатурыСрезПоследних.ВидЦены = &Зак) КАК ВложенныйЗапрос
    |        ПО ТоварыВЯчейкахОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура
   Ёпрст
 
3 - 06.02.21 - 15:46
Вымой руки, подумай, и перепиши запрос с нуля.
   hsmran
 
4 - 06.02.21 - 21:49
Благодарен вам за критику, но суть том, что обработку писал не я, и тем более, я практически ничего не понимаю в особенностях 1С. Я надеялся, что проблема кроется в какой-либо мелкой детали, которую мне, возможно, помогут обнаружить. Необходимо хотя бы каким-либо "колхозным" методом решить проблему на первое время, пока всё не начнёт переписываться для нового сайта.
   Garykom
 
5 - 06.02.21 - 21:54
(4) метод очень колхозный - наймите программиста, за деньги
учтите что сча очень много "разработчиков" маскирующихся под них, до этого вам как раз такой "разработчик" и попался судя по кривому запросу
   acht
 
6 - 06.02.21 - 21:55
(4) >  тем более, я практически ничего не понимаю в особенностях 1С
Да мы тоже, не переживай.

> каким-либо "колхозным" методом решить проблему
Отлично. За работу!
   H A D G E H O G s
 
7 - 06.02.21 - 22:07

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.