|
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) ну и никто не отнимает необходимости проработки хотя бы ШТАТНЫХ мануалов.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |