Имя: Пароль:
1C
1C 7.7
v7: Вывод таблицы где колонки и столбцы параметры
, ,
0 Coldboy
 
22.10.13
16:35
Здравствуйте. 7-ку вообще не знаю, но надо кое-что сделать, хочу как в скд, примерно, делать табличный документ с группировками, причем, хочу, чтобы столбцы брались из параметра (автоподстраиваемые), строчки получались тоже параметрами (тута вроде разобрался), а на пересечении всего того стоял ресурс. Как быть?
Выглядеть это должно так.

Реквизт             Колонка1Рек   КОлонка2Рек
  Резквит1            Ресурс          Ресурс
1 zak555
 
22.10.13
16:40
присоеденить секцию
2 aka AMIGO
 
22.10.13
16:40
возможно, так:
Доступ к колонкам ТЗ.ПолучитьПараметрыКолонки(Ы)
в таблице - вертикальная секция для вывода имени колонки
тут-же ниже выводишь свой ресурс
3 aka AMIGO
 
22.10.13
16:44
+2 вернее так: выводишь имена колонок ТЗ в заголовке, используя подсказку (1)
далее - перебираешь строки ТЗ и выводишь значения из под соответствующих колонок ТЗ
4 Coldboy
 
22.10.13
16:44
а вывод  с группировками по складам как организовать?
и еще как юзать присоеденить секцию, что должно быть в макете?
5 Coldboy
 
22.10.13
16:46
не смотрите. таблица примерного такого типа

Склад           Номенклат1    Номенклат2
  Время          Количество    Количество.

Вот как это мне выводить и как правильно отчертить макет. Склад не тока один. Таблицу значений
я буду сворачивать так ТЗ.Свернуть("Склад,Время,Номенклатура","Количество"). А как ее отрисовать как я хочу?
6 Ёпрст
 
22.10.13
16:46
Класс.ИтогиПоГруппировкам или тупо поделка для вывода ТЗ с итогами с проклаба/или у Чебура можешь посмотреть.
7 aka AMIGO
 
22.10.13
16:49
(4) ууу... в макете должны быть горизонтальные и вертикальные секции
первым должен быть оператор "ВывестиСекцию(..|..); - это вывод на следующей строке
далее в цикле "ПрисоединитьСекцию(..|..); - это вывод в той-же строке

(5) не важно.. можно умно выполнить с помощью классов, или тупо, как я тебе описал
8 Coldboy
 
22.10.13
16:52
(7) параметр должно быть в вертикальной секции?
9 Coldboy
 
22.10.13
16:52
(6) а это что такое?
10 Coldboy
 
22.10.13
16:56
так как мне быть вывести мой таблицу, которая будет выглядеть следующим образом
ТЗ.Свернуть("Склад,Время,номенклатура","Количество")
с группировками по складам, а колонки будет номенклатура. примерно опишите пожалуйста.
11 Ёпрст
 
22.10.13
17:00
(9) что именно ?
первое - готовый класс для вывода шахматки из твоей таблицы значений.
Второе - тоже самое, только штатными методами - универсальный отчет для печати тз с группировками.
12 Ёпрст
 
22.10.13
17:01
Первое работает быстрее и красившее.
13 Ёпрст
 
22.10.13
17:01
всего лишь надо скормить классу ТЗ, указать что есть измерения и что есть ресурсы.. ну и усё.
14 Coldboy
 
22.10.13
20:56
(13) как почитать как работать с этим классом и как вывести это на макет?
15 Coldboy
 
22.10.13
22:28
Up. ребят я сформировал таблицузначений Склады,Время,номенклатура это измерения, а ресурсы количество и сумма. как вывести так, чтобы
строками были Склад к нему номенклатура, а
время будет колонками а на их пересечении будут стоят ресурсы количество и сумма. и все это в макете.
16 zak555
 
22.10.13
22:34
см в (1)
17 Coldboy
 
22.10.13
22:44
(16) че то пробывал не понимаю, как это сделать, не получается. шапка таблицы должна выглядеть так

Склад    Время1 Время2

А строчки должны выглядеть так

Склад1
  Номенклатура1
  Номенклатура2

в итоге хочу получить как в СКД

Склад               Время1         Время2
Склад1             ИтогКолНом1     ИтогКОлНом2
  Номенклатура1     КолНом1         КолНом1
  Номенклатура2     КолНом1         КолНом1

как то так.
18 Coldboy
 
22.10.13
22:50
up...
19 Coldboy
 
22.10.13
23:12
up
20 zak555
 
22.10.13
23:15
группировка склад
вывести
группировка номенклатура
высети
группировка время
присоеденить
21 Coldboy
 
22.10.13
23:25
а у меня разве группировки будут? если эту таблицу значений я сам сделал и свернул как надо. хорошо а в макете как это должно выглядеть это не могу понять.
22 Coldboy
 
22.10.13
23:37
а как мне присоединть область, но ничег овыводить если по данному времени не было ничего, просто 0 количество?
23 zak555
 
22.10.13
23:38
зачем тебе тз ?
я тебе сразу описал, как запрос получить
24 Coldboy
 
22.10.13
23:45
а данные я в тз же получаю, из документы, которые выбираю функцией выбратьдокументы.
25 Coldboy
 
23.10.13
09:19
up.
26 Coldboy
 
23.10.13
09:20
(23) еще вопрос время то у меня от 0 до 24, а вот в данных может быть не все время ,как в этом случае, как мне до нужно времени вывести все это.
27 Coldboy
 
23.10.13
09:26
Up.
28 zak555
 
23.10.13
09:27
в тз данные откуда получить ?
29 Coldboy
 
23.10.13
09:39
делаю выборку через функцию ВыбратьДокументы(Дарта1,дата2).
30 Coldboy
 
23.10.13
09:48
АППП
31 zak555
 
23.10.13
09:49
в ты оперируешь ресурсом, который присутствует у регистра
32 Coldboy
 
23.10.13
09:51
(31) какой ресурс у регистра, документ сапоиска( как и вся база), данные беру чисто из документа и его табличной части, под ресурсом я поразумевал количество и сумма.
33 zak555
 
23.10.13
09:52
(32) что за конфа ?
34 Coldboy
 
23.10.13
09:53
тз = СоздатьОбъект("ТаблицаЗначений");
    тз.новаяколонка("точка");
    тз.новаяколонка("номенклатура");  
    тз.новаяколонка("время");
    тз.новаяколонка("количество");
    тз.новаяколонка("сумма");


    док=создатьобъект("документ.заказы");
    док.выбратьдокументы(дата1,дата2);
пока док.получитьдокумент()=1 цикл  
    если док.проведен()=1 Тогда
          Склад = док.точка;
        //  Время1 = док.время;
          ТабличнаяЧасть=СоздатьОбъект("ТаблицаЗначений");
         док.ВыгрузитьТабличнуюЧасть(ТабличнаяЧасть);
          ТабличнаяЧасть.ВыбратьСтроки();  
           Пока ТабличнаяЧасть.ПолучитьСтроку() = 1 Цикл
               тз.новаястрока();
               тз.точка = склад;
               тз.время = Формат(док.ПолучитьВремя(),"ЧЧ");
              тз.номенклатура = табличнаячасть.Наименование;
               тз.количество = табличнаячасть.количество;
               тз.сумма = табличнаячасть.сумма;
               КонецЦикла;
        КОнецЕсли;
конеццикла;    
    тз.свернуть("точка,время,номенклатура","количество,сумма");
    тз.сортировать("точка,время,номенклатура");
    тз.ВыбратьСтроку();

    Таб = СоздатьОбъект("Таблица");
       Таб.ИсходнаяТаблица("Таблица");
       Таб.ВывестиСекцию("Шапка");
       тз.выбратьстроки();  
       таб.вывестиСекцию("Заголовок|Точка");
       Пока тз.получитьстроку()=1 цикл
                таб.присоединитьсекцию("Заголовок|время");
           конеццикла;
    
        Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
        Таб.ТолькоПросмотр(1);
        Таб.Показать("Отчет","");
35 Coldboy
 
23.10.13
09:53
вот что щас есть.
36 zak555
 
23.10.13
09:58
> тз.время = Формат(док.ПолучитьВремя(),"ЧЧ");

это работает ? о_О
37 zak555
 
23.10.13
09:59
делай запрос к документу
38 Coldboy
 
23.10.13
09:59
да
39 Coldboy
 
23.10.13
09:59
каким образом запрос и зачем? у меня ведь и так выбраны данные..
40 zak555
 
23.10.13
10:00
с учётом 12
41 Coldboy
 
23.10.13
10:02
(40) а как мне вывести все это в шахматку и в макете правильно отрисовать вот в чем вопрос. мб где нить есть похожий пример отчета, чтобы подглядеть можно было.
42 zak555
 
23.10.13
10:06
> док.ВыгрузитьТабличнуюЧасть(ТабличнаяЧасть);

и каждый раз у тебя затираются данные из предыдущего документа
43 Coldboy
 
23.10.13
10:07
ну и пусть. я ведь данными тз наполняю их. а в тз все сохраняется ... и она после свертки хороши выглядит. тока вывести ее не могу ....
44 zak555
 
23.10.13
10:10
1. выгружаешь из тз все время в сз
2. далее строишь шапку
3. а потом 12 с хитрой группировкой по времени с учётом сз

или же делаешь запрос к документу
45 zak555
 
23.10.13
10:11
не 12, а 20

и не группировка время
а
группировка время все вожеджие
46 Coldboy
 
23.10.13
11:48
(45) извините, а для особо умных, кто 7.7 видит в первый раз можно чутка поподробней .
47 pofigos
 
23.10.13
11:57
(0) ВК какие-нибудь используете?
Я решаю такие задачи индексированными таблицами. Это один из вариантов решения.
48 Coldboy
 
23.10.13
12:21
(47) ВК? индексированные таблицы? ох емае...
49 pofigos
 
23.10.13
12:30
(48) уже понял что ступил... хотя если уделить время и разобраться, очень даже пригодиться. (http://www.1cpp.ru/forum/YaBB.pl?board=general)
50 zak555
 
23.10.13
13:14
(47) зачем тут ВК :?
51 zak555
 
23.10.13
13:14
(46) ща, только вернулся
52 pofigos
 
23.10.13
13:23
(50) Если как таковые используются, то применимо и вывод данных по индекса был бы быстрее и корректнее
53 zak555
 
23.10.13
13:31
что-то типа того


Перем ПД;


Функция ПолучитьКоличествоЧасовД(Д)
    ПД.НайтиДокумент(Д);
    ЧЧ = 0; ММ = 0; СС = 0;
    Д.ПолучитьВремя(ЧЧ,ММ,СС);    
    Возврат ЧЧ;
КонецФункции

Процедура Сформировать()
    
    
    ПД = СоздатьОбъект("Документ");
    
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "
    |Период с дата1 по дата2;
    |Точка = Документ.Заказы.Склад;
    |Номенклатура = Документ.Заказы.Наименование;
    |Количество = Документ.Заказы.Количество;
    |Время = ПолучитьКоличествоЧасовД(Документ.Заказы.ВремяДок);
    |Сумма = Документ.Заказы.Сумма;
    |Функция КоличествоСумма = Сумма(Количество);
    |Функция СуммаСумма = Сумма(Сумма);
    |Группировка Точка;
    |Группировка Номенклатура;
    |Группировка Время все ВошедшиеВЗапрос;
    |"
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса

    // Заполнение полей "Заголовок"

    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Склад

        Пока Запрос.Группировка(2) = 1 Цикл
            // Заполнение полей Номенклатура

            Пока Запрос.Группировка(3) = 1 Цикл
                // Заполнение полей ВремяДок

            КонецЦикла;
        КонецЦикла;
    КонецЦикла;


КонецПроцедуры
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.