Вход | Регистрация

1С:Предприятие ::

Метки: 

УТ 10. Разница между количеством товара

Я
   AlexKulikov
 
20.06.18 - 17:57
Добрый день уважаемые форумчане, подскажите пожалуйста, в запросом:

<code>
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокПоТоварам,
    ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК ОстатокПоПартиям,
    ТоварыНаСкладахОстатки.КоличествоОстаток - ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК РазницаОстатков,
    ПартииТоваровНаСкладахОстатки.Номенклатура КАК НоменклатураПартии,
    ТоварыНаСкладахОстатки.Номенклатура КАК НоменклатураТовара
ПОМЕСТИТЬ ТаблицаОстатков
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаКон, ) КАК ПартииТоваровНаСкладахОстатки
        ПО ТоварыНаСкладахОстатки.Номенклатура = ПартииТоваровНаСкладахОстатки.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры
            И ТоварыНаСкладахОстатки.СерияНоменклатуры = ПартииТоваровНаСкладахОстатки.СерияНоменклатуры
            И ТоварыНаСкладахОстатки.Склад = ПартииТоваровНаСкладахОстатки.Склад
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаОстатков.ОстатокПоТоварам КАК ОстатокПоТоварам,
    ТаблицаОстатков.ОстатокПоПартиям КАК ОстатокПоПартиям,
    ТаблицаОстатков.РазницаОстатков КАК РазницаОстатков,
    ТаблицаОстатков.НоменклатураПартии,
    ТаблицаОстатков.НоменклатураТовара,
    ВЫБОР
        КОГДА ТаблицаОстатков.НоменклатураПартии = NULL
            ТОГДА ТаблицаОстатков.НоменклатураТовара.Ссылка
        ИНАЧЕ ТаблицаОстатков.НоменклатураПартии.Ссылка
    КОНЕЦ КАК НоменклатураИтоговая
{ВЫБРАТЬ
    НоменклатураИтоговая,
    ОстатокПоТоварам,
    ОстатокПоПартиям,
    РазницаОстатков}
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОстатков КАК ТаблицаОстатков
        ПО (ТаблицаОстатков.НоменклатураПартии = Номенклатура.Ссылка)
            И (ТаблицаОстатков.НоменклатураТовара = Номенклатура.Ссылка)
{ГДЕ
    (ВЫБОР
            КОГДА ТаблицаОстатков.НоменклатураПартии = NULL
                ТОГДА ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) = ТаблицаОстатков.ОстатокПоТоварам
            ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) = ТаблицаОстатков.НоменклатураПартии
        КОНЕЦ) КАК НоменклатураИтоговая}
{УПОРЯДОЧИТЬ ПО
    НоменклатураИтоговая}
ИТОГИ
    СУММА(ОстатокПоТоварам),
    СУММА(ОстатокПоПартиям),
    СУММА(РазницаОстатков)
ПО
    ОБЩИЕ
{ИТОГИ ПО
    НоменклатураИтоговая}
</code>

Есть задача, нужно получить отклонение по номенклатуре между двумя регистрами "Товары на складах" и "Товары по партиям", и вывести данные в отчет. Но, в данный момент, у меня отчет выводит некорректные данные.
У меня два вопроса, первый касаемо строчки номенклатуры, почему то он не выполняет данные условие, колонка итоговая номенклатура все равно остается пустой и соответственно в отчет не попадает;
Вторая проблема связана с остатком(партии или товара) если в одном из этих полей есть NULL, то разница не высчитывается, как бы я не игрался с конструкцией "ВЫБОР".

Очень надеюсь на вашу помощь, с уважением Алексей.
 
 
   shuhard
 
1 - 20.06.18 - 17:59
(0)[Очень надеюсь на вашу помощь]
а зря
   AlexKulikov
 
2 - 20.06.18 - 17:59
Делаю через построитель отчета, если это важно
   AlexKulikov
 
3 - 20.06.18 - 18:00
(1) мда, видимо я впал в немилость, где же я так провинился((
   AlexKulikov
 
4 - 20.06.18 - 18:01
Тьфу ты, запрос корявый отправил

<code>
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокПоТоварам,
    ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК ОстатокПоПартиям,
    ТоварыНаСкладахОстатки.КоличествоОстаток - ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК РазницаОстатков,
    ПартииТоваровНаСкладахОстатки.Номенклатура КАК НоменклатураПартии,
    ТоварыНаСкладахОстатки.Номенклатура КАК НоменклатураТовара
ПОМЕСТИТЬ ТаблицаОстатков
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаКон, ) КАК ПартииТоваровНаСкладахОстатки
        ПО ТоварыНаСкладахОстатки.Номенклатура = ПартииТоваровНаСкладахОстатки.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры
            И ТоварыНаСкладахОстатки.СерияНоменклатуры = ПартииТоваровНаСкладахОстатки.СерияНоменклатуры
            И ТоварыНаСкладахОстатки.Склад = ПартииТоваровНаСкладахОстатки.Склад
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаОстатков.ОстатокПоТоварам КАК ОстатокПоТоварам,
    ТаблицаОстатков.ОстатокПоПартиям КАК ОстатокПоПартиям,
    ТаблицаОстатков.РазницаОстатков КАК РазницаОстатков,
    ТаблицаОстатков.НоменклатураПартии,
    ТаблицаОстатков.НоменклатураТовара,
    ВЫБОР
        КОГДА ТаблицаОстатков.НоменклатураПартии = NULL
            ТОГДА ТаблицаОстатков.НоменклатураТовара.Ссылка
        ИНАЧЕ ТаблицаОстатков.НоменклатураПартии.Ссылка
    КОНЕЦ КАК НоменклатураИтоговая
{ВЫБРАТЬ
    НоменклатураИтоговая,
    ОстатокПоТоварам,
    ОстатокПоПартиям,
    РазницаОстатков}
ИЗ
    ТаблицаОстатков КАК ТаблицаОстатков
{ГДЕ
    (ВЫБОР
            КОГДА ТаблицаОстатков.НоменклатураПартии = NULL
                ТОГДА ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) = ТаблицаОстатков.ОстатокПоТоварам
            ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) = ТаблицаОстатков.НоменклатураПартии
        КОНЕЦ) КАК НоменклатураИтоговая}
{УПОРЯДОЧИТЬ ПО
    НоменклатураИтоговая}
ИТОГИ
    СУММА(ОстатокПоТоварам),
    СУММА(ОстатокПоПартиям),
    СУММА(РазницаОстатков)
ПО
    ОБЩИЕ
{ИТОГИ ПО
    НоменклатураИтоговая}
</code>
   shuhard
 
5 - 20.06.18 - 18:03
(3) Стаж: 1 год 9 месяцев 28 дней
за это время ты не помог ни кому и ни разу
   AlexKulikov
 
6 - 20.06.18 - 18:05
(5) Я конечно дико извняюсь за такое громадное допущение, но мне делать как некоторые пользователи, высказывать предположения и тем самым набивать себе очки?
   AlexKulikov
 
7 - 20.06.18 - 18:06
Или вместо работы сидеть и искать темы, где я точно знаю ответ на вопрос?
   AlexKulikov
 
8 - 20.06.18 - 19:07
<code>
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокПоТоварам,
    ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК ОстатокПоПартиям,
    ТоварыНаСкладахОстатки.КоличествоОстаток - ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК РазницаОстатков,
    ПартииТоваровНаСкладахОстатки.Номенклатура КАК НоменклатураПартии,
    ТоварыНаСкладахОстатки.Номенклатура КАК НоменклатураТовара,
    ПартииТоваровНаСкладахОстатки.Склад
ПОМЕСТИТЬ ТаблицаОстатков
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаКон, ) КАК ПартииТоваровНаСкладахОстатки
        ПО ТоварыНаСкладахОстатки.Номенклатура = ПартииТоваровНаСкладахОстатки.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры
            И ТоварыНаСкладахОстатки.СерияНоменклатуры = ПартииТоваровНаСкладахОстатки.СерияНоменклатуры
            И ТоварыНаСкладахОстатки.Склад = ПартииТоваровНаСкладахОстатки.Склад
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ЕСТЬNULL(ТаблицаОстатков.ОстатокПоТоварам, 0) КАК ОстатокПоТоварам,
    ЕСТЬNULL(ТаблицаОстатков.ОстатокПоПартиям, 0) КАК ОстатокПоПартиям,
    ТаблицаОстатков.НоменклатураПартии,
    ТаблицаОстатков.НоменклатураТовара,
    ВЫБОР
        КОГДА ТаблицаОстатков.НоменклатураПартии = NULL
            ТОГДА ТаблицаОстатков.НоменклатураТовара.Ссылка
        ИНАЧЕ ТаблицаОстатков.НоменклатураПартии.Ссылка
    КОНЕЦ КАК НоменклатураИтоговая,
    ЕСТЬNULL(ТаблицаОстатков.ОстатокПоТоварам, 0) - ЕСТЬNULL(ТаблицаОстатков.ОстатокПоПартиям, 0) КАК РазницаОстатков,
    ТаблицаОстатков.Склад
ПОМЕСТИТЬ ТаблицаИтоговая
ИЗ
    ТаблицаОстатков КАК ТаблицаОстатков
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаИтоговая.ОстатокПоТоварам КАК ОстатокПоТоварам,
    ТаблицаИтоговая.ОстатокПоПартиям КАК ОстатокПоПартиям,
    ТаблицаИтоговая.НоменклатураПартии,
    ТаблицаИтоговая.НоменклатураТовара,
    ТаблицаИтоговая.НоменклатураИтоговая,
    ТаблицаИтоговая.РазницаОстатков КАК РазницаОстатков,
    ТаблицаИтоговая.Склад
{ВЫБРАТЬ
    Склад.*,
    НоменклатураИтоговая.*,
    ОстатокПоТоварам,
    ОстатокПоПартиям,
    РазницаОстатков,
    НоменклатураПартии.*,
    НоменклатураТовара.*}
ИЗ
    ТаблицаИтоговая КАК ТаблицаИтоговая
ГДЕ
    ТаблицаИтоговая.РазницаОстатков <> 0
{ГДЕ
    ТаблицаИтоговая.НоменклатураИтоговая.*,
    ТаблицаИтоговая.Склад.*}
{УПОРЯДОЧИТЬ ПО
    Склад.*,
    НоменклатураИтоговая.*}
ИТОГИ
    СУММА(ОстатокПоТоварам),
    СУММА(ОстатокПоПартиям),
    СУММА(РазницаОстатков)
ПО
    ОБЩИЕ
{ИТОГИ ПО
    Склад.*,
    НоменклатураИтоговая.*}
</code>
   AlexKulikov
 
9 - 20.06.18 - 19:11
Решил задачу, вообщем проблема была с NULL значениями в числовых полях, просле использования стандартной функции 1с, заменил NULL на 0, в результате чего нормально разница получилась верно.
Потом как дополнительно, нужно было удалить из запроса ненужные строки, где разница равна 0, пришлось городить еще одну таблицу, для того, чтобы условие легло верно, всем спасибо.


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