Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
02 июл 2024, 13:26

Подсчет продаж за период

Автор Алекс Витальевич, 25 ноя 2016, 03:37

0 Пользователей и 1 гость просматривают эту тему.

alex0402

Цитата: Алекс Витальевич от 06 дек 2016, 09:46И почему-то запрос у меня в ТЗ не выгружает код товара,хотя в запросе я его указываю

а текст запроса?
Спасибо за Сказать спасибо

Алекс Витальевич

Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|Код = Документ.ОтчетККМ.Номенклатура.Код;
|Товар = Документ.ОтчетККМ.Номенклатура.ТекущийЭлемент;
|Наименование = Документ.ОтчетККМ.Номенклатура.Наименование;
|Количество = Документ.ОтчетККМ.Количество;
|ТТ = Документ.ОтчетККМ.Склад;
|Функция КоличествоСумма = Сумма(Количество);
|Группировка Товар упорядочить по Товар.Наименование;
|Группировка Месяц;
|Условие(Товар в СписокЭлементовМФ);
|Условие(ТТ в ВыбТТ);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
    Запрос.Выгрузить(ТабВыгр);

alex0402

Цитата: Алекс Витальевич от 07 дек 2016, 02:23Запрос.Выгрузить(ТабВыгр);

У выгрузить есть еще параметры, которые управляют выгрузкой итогов и доп.реквизитов.
по умолчанию выгружаются только группировки и итоги.
Спасибо за Сказать спасибо

Алекс Витальевич

Так,с кодом разобрался и с выводом помесячно тоже... надо теперь просуммировать колонки,которые я так долго мучал :mellow:

Алекс Витальевич

помогите,пожалуйста,что-то не понимаю,что происходит...
в таблице значений продажи первой позиции есть в периоде 2 и 3 (1.png), но при формировании печатной формы эти значения съезжают,будто продажи были в периодах 1 и 2 (2.png).. если я указываю группировку "Товар упорядочить по Товар.Наименование без групп все" то начинается вывод нулевых продаж с каким-то задвоением, причем коды многих позиций начинают повторяться, хотя этого быть не должно,да еще и код этой позиции не соответствует коду в справочнике (3.png)
вот код:
Перем ТекСтрокаВТаблице; // текущая строка в таблице значений  МФ
//*******************************************
Процедура Сформировать()
   
    ТЗПериод.ВыбратьСтроки();
    КолПериодов = ТЗПериод.КоличествоСтрок();

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    //Таб.ВывестиСекцию("Заголовок");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Таб.ВывестиСекцию("Заголовок1");
    Таб.ВывестиСекцию("Заголовок|Код");
    Таб.ПрисоединитьСекцию("Заголовок|Лев");   
   
    Для к=1 По КолПериодов Цикл
        НачДата = ТЗПериод.ПолучитьЗначение(к,"Период_С");
           КонДата  =  ТЗПериод.ПолучитьЗначение(к,"Период_По");
           Периодтек = "С "+НачДата+" по "+КонДата;
           Таб.ПрисоединитьСекцию("Заголовок|Мес");
    КонецЦикла;
     
    Таб.ПрисоединитьСекцию("Заголовок|Период");
   
    //ТЗВспом = СоздатьОбъект("ТаблицаЗначений");
    ТЗВспом.Очистить();
    ТЗВспом.НоваяКолонка("Код",,,,"Код",4);
    ТЗВспом.НоваяКолонка("Товар",,,,"Товар",10);
    ТЗВспом.НоваяКолонка("Количество",,,,"Количество",4);
    ТЗВспом.НоваяКолонка("Период",,,,"Период",2);
   
    Для й=1 По КолПериодов Цикл
           НачДата = ТЗПериод.ПолучитьЗначение(й,"Период_С");
           КонДата = ТЗПериод.ПолучитьЗначение(й,"Период_По");
        //Перем Запрос, ТекстЗапроса, Таб;
        //Создание объекта типа Запрос
        //ТабВыгр = СоздатьОбъект("ТаблицаЗначений");
        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса =
        "//{{ЗАПРОС(Сформировать)
        |Период с НачДата по КонДата;
        |Обрабатывать НеПомеченныеНаУдаление;
        |Без итогов;
        |Товар = Документ.ОтчетККМ.Номенклатура.ТекущийЭлемент;
        |Код = Документ.ОтчетККМ.Номенклатура.Код;
        |Наименование = Документ.ОтчетККМ.Номенклатура.Наименование;
        |Количество = Документ.ОтчетККМ.Количество;
        |ТТ = Документ.ОтчетККМ.Склад;
        |Функция КоличествоСумма = Сумма(Количество);           
        |Группировка Товар упорядочить по Товар.Наименование без групп все;
        |Группировка Месяц все;
        |Группировка Код;   
        |Условие(Товар в СписокЭлементовМФ);
        |Условие(ТТ в ВыбТТ);
        |"//}}ЗАПРОС
        ;
        // Если ошибка в запросе, то выход из процедуры
        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат;
        КонецЕсли;
       
        Запрос.Выгрузить(ТабВыгр);
        ТабВыгр.ВыбратьСтроки();
        Номен="" ;
        Итог=0;
        Прирост = 0;
       
        Пока ТабВыгр.ПолучитьСтроку()=1 Цикл                 
                ТЗВспом.НоваяСтрока();
                ТЗВспом.Код           = ТабВыгр.Код;
                ТЗВспом.Товар        = ТабВыгр.Товар;
                Если ПустоеЗначение(ТабВыгр.КоличествоСумма)=1 тогда
                    ТЗВспом.Количество  = 0;
                иначе
                    ТЗВспом.Количество  = ТабВыгр.КоличествоСумма;
                конецесли;
                ТЗВспом.Период       = й;
        КонецЦикла;
    КонецЦикла;
//
//    Итог=0;
//    Прирост = 0;
    ТЗВспом.Сортировать("Товар,Период +");
    Номен="";
    Для N = 1 По ТЗВспом.КоличествоСтрок() Цикл
        Код             = "( "+ТЗВспом.ПолучитьЗначение(N,"Код")+" )";
        Номенклатура    = ТЗВспом.ПолучитьЗначение(N,"Товар");
        //Месяц            = ТЗВспом.ПолучитьЗначение(N,"Месяц");
        Количество         = ТЗВспом.ПолучитьЗначение(N,"Количество");
        Если Номен <> Номенклатура тогда               
            Если N =1
                тогда
                иначе
                    Таб.ПрисоединитьСекцию("Сформировать|Период");
                    Итог =0;
            конецесли;

            Таб.ВывестиСекцию("Сформировать|Код");
            Таб.ПрисоединитьСекцию("Сформировать|Лев");
            Таб.ПрисоединитьСекцию("Сформировать|Мес");
            Кол = Количество;
            Итог = Итог+Количество;
            Номен = Номенклатура;
           иначе
            Таб.ПрисоединитьСекцию("Сформировать|Мес");
            Кол = Количество;
            Итог = Итог+Количество;
        КонецЕсли;
    КонецЦикла;
         // Подготовка к заполнению выходных форм данными запроса
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск