[РЕШЕНО] ТОРГ 29. Расходятся суммы в зависимости от периода

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Достоевский, 13 мар 2015.

  1. TopicStarter Overlay
    Достоевский
    Offline

    Достоевский

    Регистрация:
    2 фев 2015
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток.

    УТ 10.3. Написал внешний отчет ТОРГ29. Информация берется из регистров накопления Партии товаров на складах и Продажи. Стоимость партий в отчете формируется не по ценам номенклатуры, а по суммам документов. Документы и их суммы в списках отражаются корректно, а вот итоговые остатки на конец периода различаются в зависимости от размера периода. Например:

    При формировании отчета за 2014 год, остаток на 31.12.14 23.59.59 составляет 71 881 330
    При формировании отчета за декабрь 2014, остаток на 31.12.14 23.59.59 составляет 86 395 347

    Подобная ситуация складывается при любой паре совпадающих периодов, а так же с началом следом идущего периода. При этом, чем меньше период тем больше сумма.

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

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    В одном документе одна позиция номенклатуры или стоимость партии в разрезе номенклатуры не интересует?
    Скорость работы отчета не важна?
  3. TopicStarter Overlay
    Достоевский
    Offline

    Достоевский

    Регистрация:
    2 фев 2015
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    В каждом документе несколько позиций номенклатуры, но это не имеет значения. Интересны только суммовые остатки на складах и суммы документов которые их формируют.

    Я понимаю, что на большой серверной базе, такой алгоритм может работать долго. Однако, со скоростью работы отчета проблем пока не возникало, так как база файловая и учет ведется чуть больше года.
    Последнее редактирование: 13 мар 2015
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Я бы начал с того, что проверил бы пошагово выполнение кода.
    В первом приближении, в данном куске кода ошибок быть не должно.
  5. TopicStarter Overlay
    Достоевский
    Offline

    Достоевский

    Регистрация:
    2 фев 2015
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Вопрос решил. Разница в суммах была обусловлена тем, что документы реализации брались из регистра накопления Продажи продажи, в то время как другие суммы из регистра Партии товаров на складах. В конечном варианте, после внесения корректировок заказчиком, все суммы брались напрямую из документов из-за необходимости вычета НДС. При таком изменении проблема решилась сама собой.
Похожие темы
  1. natafffffka90
    Ответов:
    5
    Просмотров:
    1.155
  2. kotlovD
    Ответов:
    13
    Просмотров:
    1.243
  3. tanr
    Ответов:
    5
    Просмотров:
    1.530
Загрузка...

Поделиться этой страницей