7.7 Как сгруппировать по наименованию элементы справочника при формировании отчета?

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

  1. TopicStarter Overlay
    Farhad
    Offline

    Farhad

    Регистрация:
    29 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    пример: элементы справочника "Товары" -

    1. Сапоги - цена 1,2 - ГТД 30015
    2. Сапоги - цена 1,3 - ГТД 30050
    3. Сапоги - цена 1,1 - ГТД 30053
    4. Туфли - цена 2,5 - ГТД 30013
    5. Туфли - цена 4,5 - ГТД 30153

    у меня отчет по остаткам формируется так:

    1. Сапоги - цена 1,2 - колво 100 - сумма 120
    2. Сапоги - цена 1,3 - колво 10 - сумма 13
    3. Сапоги - цена 1,1 - колво 50 - сумма 55
    4. Туфли - цена 2,5 - колво 10 - сумма 25
    5. Туфли - цена 4,5 - колво 100 - сумма 450

    а хочу вот так:
    1. Сапоги - средняя цена - колво 160 - сумма 188
    2. Туфли - средняя цена - колво 110 - сумма 475

    помогите пожалуйста

    привожу модуль существующего отчета:

    Код:
    Процедура ОтчетПоОстаткам()
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("ОтчетПоОстаткам");  
    Таб.ПараметрыСтраницы(2,100,,2,2,2,2,2,2,,,);
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.Рассчитать(ВыбНачПериода,ВыбКонПериода);
    
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,0,0);
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьСубконто(ВидыСубконто.Товары2,,1);   
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,выбсклад,2);   
    Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода,);
    Ит.ВыбратьСубконто();
    
    ИтКолСН=0;
    ИтКолДо=0;
    ИтКолКО=0;
    ИтКолСК=0;
    
    Пока Ит.ПолучитьСубконто() = 1 Цикл
    
    ОС = Ит.Субконто();          // получаем наименование ТН
    
    nom=ос.код;
    d2=Ит.СКД("К");  // Всего
    
    вид=Ос.Вид;             //получаем атрибуты ТН
    фасовка=ос.фасовка2;   
    ЦенаОпт=ОС.ЦенаОпт;
    ЦенаСС=Ос.Расход+Ос.ЦенаИнвойс;
    ЦенаИнвойс=Ос.ЦенаИнвойс;
    едизм=ОС.Едизм;
    Курс=ОС.Курс;  
    расход=ОС.расход;
    
    КолСН=Ит.СНД("К");
    КолДО=Ит.ДО("К");
    КолКО=Ит.КО("К"); 
    КолСК=Ит.СКД("К");
    
    //рассчитываем суммы
    
    ИтКолКорСН=ИтКолКорСН+КолСН/Фасовка;      // сальдо на начало
    ИтКолСН=ИтКолСН+КолСН;
    ИтСумИнвСН=ИтСумИнвСН+(КолСН*ценаИнвойс);
    ИтСумСССН=ИтСумСССН+(КолСН*ценаСС);
    ИтСумОптСН=ИтСумОптСН+(КолСН*ценаОпт);
    
    ИтКолКорДО=ИтКолКорДО+КолДО/Фасовка;      // приход товаров
    ИтКолДО=ИтКолДО+КолДО;
    ИтСумИнвДО=ИтСумИнвДО+(КолДО*ценаИнвойс);
    ИтСумССДО=ИтСумССДО+(КолДО*ценаСС);
    ИтСумОптДО=ИтСумОптДО+(КолДО*ценаОпт);
    
    ИтКолКорКО=ИтКолКорКО+КолКО/Фасовка;      // расход товаров
    ИтКолКО=ИтКолКО+КолКО;
    ИтСумИнвКО=ИтСумИнвКО+(КолКО*ценаИнвойс);
    ИтСумССКО=ИтСумССКО+(КолКО*ценаСС);
    ИтСумОптКО=ИтСумОптКО+(КолКО*ценаОпт);
    
    ИтКолКорСК=ИтКолКорСК+КолСК/Фасовка;      // сальдо на конец
    ИтКолСК=ИтКолСК+КолСК;
    ИтСумИнвСК=ИтСумИнвСК+(КолСК*ценаИнвойс);
    ИтСумСССК=ИтСумСССК+(КолСК*ценаСС);
    ИтСумОптСК=ИтСумОптСК+(КолСК*ценаОпт);
    
    
    Таб.ВывестиСекцию("Секция_2");         
    
    КонецЦикла;
    
    Таб.ВывестиСекцию("Секция_3");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("ОтчетПоОстаткам ","");
    
    КонецПроцедуры
    
    
    можно ли внести в данный модуль некие изменения, чтобы получить вышеуказанный желаемый результат?
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    При получении итогов заполняйте таблицу значений. Затем сверните по ТМЦ. Сумма/Количество=СредняяЦена
  3. TopicStarter Overlay
    Farhad
    Offline

    Farhad

    Регистрация:
    29 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Я новичок в программировании. Пожалуйста покажите пример или впишите код в мой модуль.
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("ТМЦ");
    ТЗ.НоваяКолонка("Количество");
    ТЗ.НоваяКолонка("Сумма");
    
    //здесь в цикле заполняем ТЗ
    
    ТЗ.Свернуть("ТМЦ","Количество,Сумма");
    //таблица имеет суммарные значения по номенклатуре
    //выводите строки в отчет
    
    
    С методами объектов думаю разберетесь сами
  5. TopicStarter Overlay
    Farhad
    Offline

    Farhad

    Регистрация:
    29 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Попробую...
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Возникнут трудности - стучите
  7. TopicStarter Overlay
    Farhad
    Offline

    Farhad

    Регистрация:
    29 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Я тут почитал про работу с Таблицей Значений. Вопрос: если разработать и вписать ТЗ в мой модуль и проблема решена?
  8. TopicStarter Overlay
    Farhad
    Offline

    Farhad

    Регистрация:
    29 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Сделал так:

    1. Создаю бухгалтерский запрос.
    2. Создаю ТЗ.
    3. Объявляю переменные ТЗ.
    4. Новый цикл:
    4.1. Присваиваю переменным ТЗ конкретные значения
    4.2. Сворачиваю ТЗ по Наименованию
    4.3. Вывожу данные в таблицу.
    5. КонецЦикла.

    Итог: пустая таблица :angry:
  9. TopicStarter Overlay
    Farhad
    Offline

    Farhad

    Регистрация:
    29 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    помогите пожалуйста!!!
  10. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    у тз нет переменных, есть поля. показывай код
  11. TopicStarter Overlay
    Farhad
    Offline

    Farhad

    Регистрация:
    29 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Код:
    Процедура Отчет()
    Таб = СоздатьОбъект("Таблица");                          //СОЗДАЮ ТАБЛИЦУ
    Таб.ИсходнаяТаблица("Отчет");  
    Таб.ПараметрыСтраницы(2,100,,2,2,2,2,2,2,,,);
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.Рассчитать(ВыбНачПериода,ВыбКонПериода);
    
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,0,0);
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");               //СОЗДАЮ БУХ ЗАПРОС
    Ит.ИспользоватьСубконто(ВидыСубконто.Товары2,,1);   
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,выбсклад,2);   
    
    Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода,);
    
    Ит.ВыбратьСубконто();
    
    ИтКолСН=0;
    ИтКолДо=0;
    ИтКолКО=0;
    ИтКолСК=0;           
    
    ТЗ=СоздатьОбъект("ТаблицаЗначений");                            // СОЗДАЮ ТЗ
    ТЗ.НоваяКолонка("Наименование");                                   //СОЗДАЮ ПЕРЕМЕННЫЕ ТЗ
    ТЗ.НоваяКолонка("Колво");
    ТЗ.НоваяКолонка("СуммаОпт");
    
    
    Пока Ит.ПолучитьСубконто() = 1 Цикл                                  //СОЗДАЮ ЦИКЛ
    ТЗ.Новаястрока();
    ОС = Ит.Субконто(); 
    ЦенаОпт=ОС.ЦенаОпт;
    ЦенаИнвойс=Ос.ЦенаИнвойс;
    едизм=ОС.Едизм;
    
    КолСН=Ит.СНД("К");
    КолДО=Ит.ДО("К");
    КолКО=Ит.КО("К"); 
    КолСК=Ит.СКД("К");
    
    
    ИтКолСН=ИтКолСН+КолСН;
    ИтСумИнвСН=ИтСумИнвСН+(КолСН*ценаИнвойс);
    ИтСумОптСН=ИтСумОптСН+(КолСН*ценаОпт);
    
    
    ТЗ.Наименование=ОС;                                      // ПРИСВАИВАЮ ТЗ КОНКР.ЗНАЧЕНИЯ
    ТЗ.Колво=ИтКолСН;
    ТЗ.СуммаОпт=ИтСумОптСН;
    
    ТЗ.Свернуть("Наименование","Колво,СуммаОпт"); // СВОРАЧИВАЮ ТЗ ПО НАИМЕНОВАНИЮ        
    Таб.ВывестиСекцию("Секция_2"); // ВЫВОЖУ НА ПЕЧАТЬ
    
    КонецЦикла;                                                                                  // КОНЕЦ ЦИКЛА
    
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Отчет","");
    
    КонецПроцедуры
    
    

    Результат: нечто непонятное
  12. TopicStarter Overlay
    Farhad
    Offline

    Farhad

    Регистрация:
    29 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Я никогда раньше не работал с Таблицей Значений.
    Нашел видеоурок по этой теме.
    Для интересующихся - линк: _]http://www.lessons1c.ru/vlessons77/28-tabzn.html
    Сейчас качаю. Изучу тему, попробую и отпишусь о результатах.
    А пока, если у кого-нибудь есть время помочь мне - укажите мне где моя ошибка. Заранее благодарю.
  13. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Сворачивание ТЗ и вывод результата выносите за цикл:
    Код:
    // ...
    КонецЦикла; // КОНЕЦ ЦИКЛА
    
    ТЗ.Свернуть("Наименование","Колво,СуммаОпт"); // СВОРАЧИВАЮ ТЗ ПО НАИМЕНОВАНИЮ        
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    Таб.ВывестиСекцию("Секция_2"); // ВЫВОЖУ НА ПЕЧАТЬ
    КонецЦикла;
    
    
    
  14. TopicStarter Overlay
    Farhad
    Offline

    Farhad

    Регистрация:
    29 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1

    УРА! РАБОТАЕТ!!! :angry:
    СПАСИБО ВСЕМ!!!

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