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

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем aleksandrvolkov, 23 ноя 2016.

  1. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    466
    Симпатии:
    80
    Баллы:
    54
    Как-то у Вас все сложно, я даже боюсь разбираться. )
    Есть же таблица, как Вы приводили на первой картинке. Там все есть. Только добавить пустые ячейки при формировании печатной формы.
  2. TopicStarter Overlay
    aleksandrvolkov
    Offline

    aleksandrvolkov

    Регистрация:
    23 ноя 2016
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    вот смотрите,в таблице значений продажи первой позиции есть в периоде 2 и 3 (1.png), но при формировании печатной формы эти значения съезжают,будто продажи были в периодах 1 и 2 (2.png).. если я указываю группировку "Товар упорядочить по Товар.Наименование без групп все" то начинается вывод нулевых продаж с каким-то задвоением, причем коды многих позиций начинают повторяться, хотя этого быть не должно,да еще и код этой позиции не соответствует коду в справочнике (3.png)

    Вложения:

    • 1.PNG
      1.PNG
      Размер файла:
      5 КБ
      Просмотров:
      7
    • 2.PNG
      2.PNG
      Размер файла:
      2,5 КБ
      Просмотров:
      7
    • 3.PNG
      3.PNG
      Размер файла:
      1,3 КБ
      Просмотров:
      7
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.756
    Симпатии:
    438
    Баллы:
    104
    Без обид... ересь какая-то.. Зачем запрос в цикле??? Это крайне не профессионально. Уберите группировку по коду и будет вам счастье.
  4. TopicStarter Overlay
    aleksandrvolkov
    Offline

    aleksandrvolkov

    Регистрация:
    23 ноя 2016
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    убрал,все заработало,спасибо большое) запрос в цикле выполняется по нескольким периодам, по-другому не знаю как...
  5. TopicStarter Overlay
    aleksandrvolkov
    Offline

    aleksandrvolkov

    Регистрация:
    23 ноя 2016
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    Код:
        Для N = 1 По ТЗВспом.КоличествоСтрок() Цикл
            Код             = "( "+ТЗВспом.ПолучитьЗначение(N,"Код")+" )";
            Номенклатура    = ТЗВспом.ПолучитьЗначение(N,"Товар");
            //Месяц            = ТЗВспом.ПолучитьЗначение(N,"Месяц");
            Количество         = ТЗВспом.ПолучитьЗначение(N,"Количество");
            Если Номен <> Номенклатура тогда               
                Если N =1
                    тогда
                    иначе
                        Таб.ПрисоединитьСекцию("Сформировать|Период");
                        Таб.ПрисоединитьСекцию("Сформировать|Прирост");
                        Таб.ПрисоединитьСекцию("Сформировать|Коэфф");
                        Итог =0;
                        Прирост = 0;
                конецесли;
    
                Таб.ВывестиСекцию("Сформировать|Код");
                Таб.ПрисоединитьСекцию("Сформировать|Лев");
                Таб.ПрисоединитьСекцию("Сформировать|Мес");
                Кол = Количество;
                Итог = Итог+Количество;
                Номен = Номенклатура;
                Если Итог<>0 тогда
                    Прирост = Окр(Кол/Итог,4);
                Иначе
                    Прирост = 0;
                КонецЕсли;
            иначе
                Таб.ПрисоединитьСекцию("Сформировать|Мес");
                Кол = Количество;
                Итог = Итог+Количество;
                Если Итог<>0 тогда
                    Прирост = Окр(Кол/Итог,4);
                Иначе
                    Прирост = 0;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    
    начинаю вывод в печатную форму, последняя строка недопечатывается почему-то... помогите((
  6. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    466
    Симпатии:
    80
    Баллы:
    54
    Что значит "недопечатывается"? Пустые колонки не присоединяет?
  7. TopicStarter Overlay
    aleksandrvolkov
    Offline

    aleksandrvolkov

    Регистрация:
    23 ноя 2016
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    не присоединяет колонки "Весь период" и далее...причем именно в последней строке(((

    Вложения:

  8. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    466
    Симпатии:
    80
    Баллы:
    54
    Так добавьте после цикла:
    Код:
    Если ТЗВспом.КоличествоСтрок() > 0 Тогда
    Таб.ПрисоединитьСекцию("Сформировать|Период");
                        Таб.ПрисоединитьСекцию("Сформировать|Прирост");
                        Таб.ПрисоединитьСекцию("Сформировать|Коэфф");
    КонецЕсли;
  9. TopicStarter Overlay
    aleksandrvolkov
    Offline

    aleksandrvolkov

    Регистрация:
    23 ноя 2016
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    да,это помогло,спасибо огромное!! Только почему так? Все строки нормально выводятся, а именно последняя не до конца...
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.756
    Симпатии:
    438
    Баллы:
    104
    потому что цикл заканчивается...
    Если хочешь чтобы вывелось все.. Перед циклом добавь в ТЗ пустую строку и соответствующее условие
  11. TopicStarter Overlay
    aleksandrvolkov
    Offline

    aleksandrvolkov

    Регистрация:
    23 ноя 2016
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    а как мне теперь убрать все строки, где продажи за все месяца нулевые? после того,как ТЗ сформировалась, из нее надо удалить строки, где количество = 0 во всех периодах...
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.756
    Симпатии:
    438
    Баллы:
    104
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    Если ТЗ.Количество=0 Тогда
    ТЗ.УдалитьСтроку();
    ТЗ.ВыбратьСтроки();
    КонецЕсли;
    КонецЦикла;
  13. TopicStarter Overlay
    aleksandrvolkov
    Offline

    aleksandrvolkov

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

    Вложения:

    • 1.PNG
      1.PNG
      Размер файла:
      2 КБ
      Просмотров:
      1
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.756
    Симпатии:
    438
    Баллы:
    104
    я вам показал как в цикле убрать строки с нулевым количеством...
  15. TopicStarter Overlay
    aleksandrvolkov
    Offline

    aleksandrvolkov

    Регистрация:
    23 ноя 2016
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    если убирать их таким образом, тогда у меня уйдут и те позиции,в которых в других месяцах продажи были.. объясните,почему не суммируются строки при сворачивании таблицы?
    Последнее редактирование: 26 дек 2016
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.756
    Симпатии:
    438
    Баллы:
    104
    не уйдет.. А проблема у вас тут

    ТЗ.Свернуть("Код,Количество","Количество")

    Как вы сворачиваете и суммируете по одной и той же колонке....
  17. TopicStarter Overlay
    aleksandrvolkov
    Offline

    aleksandrvolkov

    Регистрация:
    23 ноя 2016
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    ой блин...я то думаю,что не так было... спасибо большое всем за помощь, я все сделал)
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.756
    Симпатии:
    438
    Баллы:
    104

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