Имя: Пароль:
1C
1C 7.7
v7: Свернуть по одному наименованию
,
0 Pechka
 
17.09.12
14:16
При формировании отчета у меня выходят столбцы- подразделение,заказчик,продукция,сумма. подразделений несколько (АТЦ,ЖДЦ,Электроцех,инструментальный участок),а мне нужно сгруппировать элементы именно только из подразделения "инструментальный участок"(это столбец Заказчик,чтоб в одну строку выходили стан 10-65,стан 102-220 и т.д)и столбец Сумма..
Так примерно выглядит таблица:

Подразделение    Заказчик     Продукция                Сумма
Инстр.участок     СГМ          Металлоизделия().СГМ         5
Инстр.участок   стан 10-65    Валки 25х25 стан 10-65       6
Инстр.участок   стан 10-65    Валки 20х20 стан 10-65       7
Инстр.участок   стан 10-65    Валки 40х20 стан 10-65       12
Инстр.участок   стан 102-220  Валки Ф219 стан 102-220      72
Инстр.участок   стан 102-220  Валки 40х40 стан 102-220     35
Инстр.участок     СГМ          Нож дисковой                 10

после запроса создала ТЗ,но ничего не выходит.помогите пожалуйста разобраться..Я неуч в этом((((
Вот мой код:

//******************************************************************************
//
Перем ТабЗн;


Функция ПроверкаДат()
   Если ДатаНач > ПолучитьДатуТА() Тогда
       ДатаНач = ПолучитьДатуТА();
       Предупреждение("Начальная дата не может быть
                      |больше даты точки актуальности!");
       Возврат 0;
   ИначеЕсли ДатаНач > ДатаКон Тогда
       ДатаНач = ДатаКон;
       Предупреждение("Начальная дата не может быть больше
                      |конечной даты формирования отчета!");
       Возврат 0;
   КонецЕсли;
   Возврат 1;
КонецФункции // ПроверкаДат()

//*******************************************
//{{БУХГАЛТЕРСКИЙ ЗАПРОС(Сформировать)

Процедура Сформировать()
   
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   
   Таб.ВывестиСекцию("Заголовок");
   Таб.ВывестиСекцию("Шапка");
   
   ПериодПо = "";
   Если ПроверкаДат() = 0 Тогда
       Возврат;
   ИначеЕсли ДатаКон >= ПолучитьДатуТА() Тогда
       ПериодПо = "";
       ПериодДляШапкиОтчета = Формат(ДатаНач, "Д ДДММГГГГ") + " - " + Формат(ПолучитьДатуТА(), "Д ДДММГГГГ") + " " + ПолучитьВремяТА(,,);
   Иначе
       ПериодДляШапкиОтчета = ПериодСтр(ДатаНач, ДатаКон);
       ПериодПо = " по ДатаКон";
   КонецЕсли;
             

       ТекстЗапроса = "//{{ЗАПРОС(ПолучитьСум)
   |Период с ДатаНач" + ПериодПо + ";
   |Продукция       = Регистр.ПроизводственныеЗатраты.Продукция,Документ.КМ_КорректировкаИзмерителей.Номенклатура;
   |Подразделение   = Регистр.ПроизводственныеЗатраты.Подразделение,Документ.КМ_КорректировкаИзмерителей.Подразделение;
   |ВидЗатрат       = Регистр.ПроизводственныеЗатраты.ВидЗатрат;
   |Затрата         = Регистр.ПроизводственныеЗатраты.Затрата;
   
   |Заказчик        = Регистр.ПроизводственныеЗатраты.Продукция.КМ_ПодразделениеЗаказчик,Документ.КМ_КорректировкаИзмерителей.Номенклатура.КМ_ПодразделениеЗаказчик;
   |Сумма           = Регистр.ПроизводственныеЗатраты.Сумма;
   |Количество = Документ.КМ_КорректировкаИзмерителей.Количество;
   |Функция СуммаПриход       = Приход(Сумма);
   |Функция КоличествоСумма = Сумма(Количество);
   |Группировка Подразделение без групп;
   |Группировка Заказчик без групп;
   |Группировка Продукция без групп;
 //|Группировка Владелец без групп;
 //|Условие ((СтатьяЗатрат = ПолучитьПустоеЗначение(""Справочник"")) ИЛИ (СтатьяЗатрат = Константа.КМ_СтатьяВспомПроизвДляРасчетов.Получить(ДатаНач)));Условие(Подразделение = 1);
 //|Условие(Подразделение = 1 );
// |Условие(Подразделение.Вид()=""Инструментальный участок"");
   |";
     
       
         ЗапросПолучитьСум = СоздатьОбъект("Запрос");
       ЗапросПолучитьСум.Выполнить(ТекстЗапроса);  
       
       
       ТЗ = СоздатьОбъект("ТаблицаЗначений");
       
       ТЗ.НоваяКолонка("Подразделение", "Строка");
       ТЗ.НоваяКолонка("Заказчик", "Строка");
       ТЗ.НоваяКолонка("Продукция", "Строка");
       ТЗ.НоваяКолонка("Сумма","Число",15,2);
       
       ЗапросПолучитьСум.Выгрузить(ТЗЗ);    
       
       
       ТЗ.Свернуть("Заказчик","Сумма");
                 
       ТЗ.Заказчик = ЗапросПолучитьСум.Заказчик;
       ТЗ.Сумма = ЗапросПолучитьСум.СуммаПриход;

     
       Пока ЗапросПолучитьСум.Группировка("Подразделение") = 1 Цикл  
       
       Пока ЗапросПолучитьСум.Группировка("Заказчик") = 1 Цикл
       
           
           Пока ЗапросПолучитьСум.Группировка("Продукция") = 1 Цикл
               
                     ЕдИзм = " ";
                     Сум = " ";
                     
                   Если ЗапросПолучитьСум.Подразделение.Наименование = "АТЦ" Тогда
                       Сум = ЗапросПолучитьСум.СуммаПриход;
                 
                     ЕдИзм = "м/час" ;
           
                   
                   Таб.ВывестиСекцию("Строка");
                   КонецЕсли;  
                           
                    Если ЗапросПолучитьСум.Подразделение.Наименование = "Инструментальный участок" Тогда
           
               Сум = ЗапросПолучитьСум.СуммаПриход;
           
               ЕдИзм = "час" ;
                     //КонецЕсли;
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;  
           
                     Если ЗапросПолучитьСум.Подразделение.Наименование = "Компрессорная" Тогда
               Сум = ЗапросПолучитьСум.СуммаПриход;
               ЕдИзм = "куб.м." ;  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;
               
                     Если ЗапросПолучитьСум.Подразделение.Наименование = "Котельная" Тогда
               Сум = ЗапросПолучитьСум.СуммаПриход;
               ЕдИзм = "гкал" ;  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;
               
                      Если ЗапросПолучитьСум.Подразделение.Наименование = "Насосная" Тогда
               Сум = ЗапросПолучитьСум.СуммаПриход;          
               ЕдИзм = "куб.м.";  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;
               
                      Если ЗапросПолучитьСум.Подразделение.Наименование = "ОТК" Тогда  
               Сум = ЗапросПолучитьСум.СуммаПриход;          
               ЕдИзм = "час";  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;
                   
                    Если ЗапросПолучитьСум.Подразделение.Наименование = "РМЦ" Тогда
               ЕдИзм = "час";  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;
                   
                    Если ЗапросПолучитьСум.Подразделение.Наименование = "СГМ" Тогда
               Сум = ЗапросПолучитьСум.СуммаПриход;        
               ЕдИзм = "час";  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;
                   
                   Если ЗапросПолучитьСум.Подразделение.Наименование = "Участок по обслуживанию сантехники" Тогда
               Сум = ЗапросПолучитьСум.СуммаПриход;        
               ЕдИзм = "час";  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;
                   
                    Если ЗапросПолучитьСум.Подразделение.Наименование = "ЦЗЛ" Тогда
               Сум = ЗапросПолучитьСум.СуммаПриход;        
               ЕдИзм = "пробы";  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;
               
                    Если ЗапросПолучитьСум.Подразделение.Наименование = "Электроцех" Тогда
               Сум = ЗапросПолучитьСум.СуммаПриход;        
               ЕдИзм = "пробы";  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;  
               
                    Если ЗапросПолучитьСум.Подразделение.Наименование = "ЭТЛ" Тогда
               ЕдИзм = "час";  
                   Таб.ВывестиСекцию("Строка");
               КонецЕсли;
                   
           //ИначеЕсли
           //Иначе
                   
           //    КонецЦикла;
               
           КонецЦикла;

       КонецЦикла;

   КонецЦикла;
   

   //
   
   Таб.Опции(0,0,0,0);

   
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать","");
   
КонецПроцедуры

//}}БУХГАЛТЕРСКИЙ ЗАПРОС  

Процедура ПриОткрытии()  
   
    //
   


//{{ИНИЦИАЛИЗАЦИЯ БУХГАЛТЕРСКОГО ЗАПРОСА(Сформировать)
   ДатаНач = НачМесяца(ПолучитьДатуТА());
   ДатаКон = КонМесяца(ПолучитьДатуТА());

//{{ИНИЦИАЛИЗАЦИЯ БУХГАЛТЕРСКОГО ЗАПРОСА

КонецПроцедуры
1 Злопчинский
 
17.09.12
14:20
там где обходишь группировку "Заказчик" и Группировку" Продукция - формируй нужный тебе список/строку, а в строку по группировке "Подразделение" - выводи не в начале группировки, а в конце (после обхода вложенных группировок) - в выводимой строке г руппировки "Подразделение" - выводи УЖЕ ИМЕЮЩИЕСЯ строку/список подчиненных группирвоок.
2 Ёпрст
 
17.09.12
14:21
>>>>чтоб в одну строку выходили стан 10-65,стан 102-220 и т.д)и столбец Сумма..


Т.е без учета Продукция, так что ли ?
Инстр.участок   стан 10-65       25
Инстр.участок   стан 102-220  120
3 Pechka
 
17.09.12
14:22
без учета продукции,главное чтоб станы группировались и сумма их общая была
4 Злопчинский
 
17.09.12
14:23
Пока ЗапросПолучитьСум.Группировка("Подразделение") = 1 Цикл  
 СписокДляВывода="";
 Пока ЗапросПолучитьСум.Группировка("Заказчик") = 1 Цикл
   Пока ЗапросПолучитьСум.Группировка("Продукция") = 1 Цикл
       ДобавитьВсписокДляВывода(СписокДляВывода, Запрос.Заказчик,Запрос.Продукция);
   КонецЦикла;
 КонецЦикла;
 СтрокаДля Вывода = СформирвоатьСтрокуВывода(СписокДляВывода);
 Таб.ВывестиСекцию("Подразделение")
КонецЦикла;
5 Pechka
 
17.09.12
14:29
ошибку выдает Процедура не обнаружена (ДобавитьВсписокДляВывода)
6 Pechka
 
17.09.12
14:34
(2) да,так
7 Злопчинский
 
17.09.12
14:35
(6) в (2) не вижу, чтобы "в одну строку выходили стан 10-65,стан 102-220"..
вы уж определеитесь, что вам надо - водну строку, в несколько строк... тут есть телепаты - типа Ёпрста и меня, но мы телепатируем по разному - Епртса школа змеи, а у меня - школа бегемота.
8 PuhUfa
 
17.09.12
14:35
Пока ЗапросПолучитьСум.Группировка("Подразделение") = 1 Цикл
Если ЗапросПолучитьСум.Подразделение = "Инстр.участок" тогда
//для них не надо разворачивать по товарам, достаточно вывести группировки по заказчику
 Пока Пока ЗапросПолучитьСум.Группировка("Заказчик") = 1 Цикл
  //тут запоняем поля
  Таб.ВывестиСекцию("Строка");
 КонецЦикла;
Иначе
//для остальных выводим все
 Пока Пока ЗапросПолучитьСум.Группировка("Заказчик") = 1 Цикл
  Пока ЗапросПолучитьСум.Группировка("Продукция") = 1 Цикл
   //заполняем поля
   Таб.ВывестиСекцию("Строка");
  КонецЦикла;
 КонецЦикла;
КонецЕсли;
КонецЦикла;
9 Злопчинский
 
17.09.12
14:37
(5) Добавит в список для вывода - обозначает то, что вам надо написать чтобы получить нуджный вам результат. в упрощенном виде это может быть так:
.
Пока ЗапросПолучитьСум.Группировка("Подразделение") = 1 Цикл  
 СписокДляВывода="";
 Пока ЗапросПолучитьСум.Группировка("Заказчик") = 1 Цикл
   Пока ЗапросПолучитьСум.Группировка("Продукция") = 1 Цикл
         СписокДляВывода=   СписокДляВывода+" "+Запрос.Продукция;
   КонецЦикла;
 КонецЦикла;
 СтрокаДляВывода = СформирвоатьСтрокуВывода(СписокДляВывода);
 Таб.ВывестиСекцию("Подразделение")
КонецЦикла;
10 Злопчинский
 
17.09.12
14:38
(8) будет эпично когда участок переименуют в "Инструментально-механизированный участок"
11 PuhUfa
 
17.09.12
14:41
(10) это лишь алгоритм вывода. как ТС его реализует и реализует ли, это уже другой вопрос -)
12 Злопчинский
 
17.09.12
14:43
(11) прочитай (5) и задумайся ;-)
.
ТС спасает пока только что наличие фотки в личке
13 Злопчинский
 
17.09.12
14:45
Как печально что такие молодые и красиывае ломают мозг клюшками.. на снеговике же это (слом мозга) можно сделать гораздо изящнее!
14 PuhUfa
 
17.09.12
14:49
(12) Если читать 5 и вдумываться то вообще не сростается ТС и код в 0 -)
15 Pechka
 
17.09.12
14:51
мне вот надо ! :)
Инстр.участок   стан 10-65     25
Инстр.участок   стан 102-220  120
16 Злопчинский
 
17.09.12
14:58
(15) не вижу что "..в одну строку выходили стан 10-65,стан 102-220".
.
т.е. для начала переводим (0) и (15) на общедоступный язык:
- мне (топикстартеру) по барабану что я пишу, совершенно очевидно что мир полон добрых людей, которым нехрен делать, и которые за меня подумают. потом анпишут.. а я такая вся красивая в красном - возьму готове. И те, кто мне подскажут и сделают за меня безвозмездно то есть даром долюны быть мне благодарны что я дала им провяить свой можный ум интеллект и телепатию...
17 Злопчинский
 
17.09.12
14:59
Пока ЗапросПолучитьСум.Группировка("Подразделение") = 1 Цикл  
 Таб.ВывестиСекцию("Подразделение")
 Пока ЗапросПолучитьСум.Группировка("Заказчик") = 1 Цикл
   Таб.ВывестиСекцию("Заказчик")
 КонецЦикла;
18 Pechka
 
17.09.12
15:07
(16) Ну что уж вы такой злой..Я же учусь программировать, вы считаете ,что я совсем не работаю,не думаю над этим.Над этой задачей бьюсь уже который день..
19 Pechka
 
17.09.12
15:51
(8) спасибо большое!
20 Злопчинский
 
17.09.12
20:54
(18) Умение программировать в первую очередь опирается на умение внятно мыслить и оперировать формальными понятиями. А то у вас на губах в (0) каша - что жу вас тогда вообще в голове?
21 Злопчинский
 
17.09.12
20:55
(18) ну и никто не отнимает необходимости проработки хотя бы ШТАТНЫХ мануалов.