Форум программистов, компьютерный форум, киберфорум
Наши страницы

1С: Собственные программы

Войти
Регистрация
Восстановить пароль
 
 
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,195
#1

Колонки в макете - 1С/1C 8.x

07.02.2018, 15:17. Просмотров 758. Ответов 27
Метки нет (Все метки)

Добрый день! Не могу понять как создать колонки с датами. Объясню что надо:
Я выбираю период с 01.02.2018 по 28.02.2018, формирую макет, в макете появилась таблица с 28 колонками, в шапке каждой колонки дата от 01.02.2018 по 28.02.2018.
В макете я в шапке колонка добавил параметр "Дата". Пытался различными способами но не могу найти нормальное объяснение. Используют Присоединить(), но как этим пользоваться не понятно.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
    ТабДок.Очистить();
    Макет=ПолучитьМакет("Макет");
    ОбластьШапка=Макет.ПолучитьОбласть("Шапка");
    Период="за "+ПредставлениеПериода(НачалоДня(НачПериода),КонецДня(КонПериода),);
    ОбластьШапка.Параметры.Период=Период;
    ОбластьШапка.Параметры.Регион=АбонентскийУчасток;
    ТабДок.Вывести(ОбластьШапка);   
 
    ДатаТЗ=НачалоДня(НачПериода);
    Пока ДатаТЗ<=КонПериода Цикл
        ОбластьШапкаДата=Макет.ПолучитьОбласть("ШапкаДата");
        ОбластьШапкаДата.Область().Текст=ДатаТЗ;
        ОбластьШапкаДата.Область().ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
        ДатаТЗ=ДатаТЗ+24*60*60;
        ТабДок.Присоединить(ОбластьШапкаДата);
    КонецЦикла;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2018, 15:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос 1C 8.x Колонки в макете (1С):

Ошибка Неверное имя колонки При добавлении колонки ТЗ - 1С
Народ, подскажите что не правильно, Выдет ошибку.Результат отчета помещаю в таблицу значений &amp;НаСервере Процедура ПолучитьТЗИзМакета()...

1C 8.x Расшифровка в макете - 1С
Есть отчет, в нем форма и макет. Макет открывается в отдельном окне, в него выводиться вся инф. Нужно для макета сделать расшифровку, т е...

Заполнение таблицы в макете - 1С
Здравствуйте. В макете печатной формы есть таблица. Данные из таблицы берутся из запроса. Проблема в том, что при заполнении параметров,...

1C 8.x Группировка строк в макете - 1С
Как вывести группировку, нужен именно такой пример:

Ошибка в макете Документа - 1С
Здравствуйте друзья! Прошу Вас об очередной помощи. Не могу найти ошибку в модуле менеджера документа &quot;Заправка Маркера&quot; Процедура...

1C 8.x Гиперссылка на ячейку в макете - 1С
Можете показать пример как в макете нажимая на ячейку с текстом (имеет гиперссылку ) чтобы открывался файл &quot;Файл.dot&quot;.

27
_ЕГОР_
Тест
209 / 112 / 27
Регистрация: 26.02.2010
Сообщений: 651
07.02.2018, 15:21 #2
Вроде как надо вывести, а не присоеденить....
1C
1
ТабДок.Вывести(ОбластьШапкаДата);
Ну а вообще еще надо макет смотреть как он нарисован
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,195
07.02.2018, 15:23  [ТС] #3
_ЕГОР_, если я буду выводить тогда будет в каждой строке а мне нужны колонки
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,195
08.02.2018, 16:25  [ТС] #4
Вывел колонки, теперь нужно заполнить их данные, может кто подскажет что не так
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
    ТабДок.Очистить();
    Макет=ПолучитьМакет("Макет");
    ОбластьШапка=Макет.ПолучитьОбласть("Шапка");
    Период="за "+ПредставлениеПериода(НачалоДня(НачПериода),КонецДня(КонПериода),);
    ОбластьШапка.Параметры.Период=Период;
    ОбластьШапка.Параметры.Регион=АбонентскийУчасток;
    ТабДок.Вывести(ОбластьШапка);
    ОбластьШапкаДата1=Макет.ПолучитьОбласть("R6C1");
    ТабДок.Вывести(ОбластьШапкаДата1);
    
        Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Групповые.КороткийАдрес КАК Адрес,
                   |    Начисление.ДатаДок,
                   |    Начисление.Количество
                   |ИЗ
                   |    РегистрНакопления.Начисление КАК Начисление
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Групповые КАК Групповые
                   |        ПО Начисление.Групповая = Групповые.Ссылка
                   |ГДЕ
                   |    Групповые.АбонентскийУчасток = &АбонентскийУчасток
                   |    И Начисление.ДатаДок МЕЖДУ &ДатаНач И &ДатаКон";
    
    Запрос.УстановитьПараметр("ДатаНач",НачПериода);
    Запрос.УстановитьПараметр("ДатаКон",КонПериода);
    Запрос.УстановитьПараметр("АбонентскийУчасток",АбонентскийУчасток);
    
    Результат = Запрос.Выполнить().Выгрузить();
    Результат.Сортировать("Адрес Возр"); 
    
    ДатаТЗ=НачалоДня(НачПериода);   
    Пока ДатаТЗ<=КонПериода Цикл
        ОбластьШапкаДата2 = Макет.ПолучитьОбласть("Дата|ШапкаДата");
        ОбластьШапкаДата2.Параметры.ДатаЗал = Формат(ДатаТЗ, "ДФ=dd.MM.yyyy");
        ТабДок.Присоединить(ОбластьШапкаДата2);
        ДатаТЗ = ДатаТЗ + 60*60*24;
    КонецЦикла;
    ОбластьШапкаДата3=Макет.ПолучитьОбласть("R6C3");
    ТабДок.Присоединить(ОбластьШапкаДата3);
    
    Для Каждого Стр из Результат Цикл
        ДатаДок = Стр.ДатаДок; 
        ОбластьмакетаСтрока=Макет.ПолучитьОбласть("Строка");
        ОбластьмакетаСтрока.Параметры.Адрес = Стр.Адрес;
        Если ДатаДок = ДатаТЗ Тогда
        ОбластьмакетаСтрока.Параметры.Данные = Стр.Количество;  
        Иначе
        КонецЕсли;  
        ТабДок.Вывести(ОбластьМакетаСтрока);
        ДатаТЗ = ДатаТЗ + 60*60*24; 
КонецЦикла;
    ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
    ТабДок.АвтоМасштаб=Истина;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь; 
    ТабДок.ПовторятьПриПечатиСтроки=ТабДок.Область("R4:R5");  
    ТабДок.Показать();
0
wwall
195 / 190 / 13
Регистрация: 29.05.2014
Сообщений: 971
08.02.2018, 16:41 #5
зачем именно руками? СКД, ПостроительОтчета - куда проще что бы такое строить

Добавлено через 1 минуту
Конкретно по твоему вопросу - ты просто не выводишь данные. нет у тебя второго присоединить лдя колонок
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,195
08.02.2018, 16:50  [ТС] #6
wwall, для меня не подходит скд
0
wwall
195 / 190 / 13
Регистрация: 29.05.2014
Сообщений: 971
09.02.2018, 09:33 #7
Тогда судя по запросу ты неверно выбираешь данные. Расскажи что у тебя есть и что ты хочешь получить?
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,195
09.02.2018, 10:26  [ТС] #8
Подскажите не могу понять как сделать

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    ДатаТЗ=НачалоДня(НачПериода);   
    Пока ДатаТЗ<=КонПериода Цикл
        ОбластьШапкаДата2 = Макет.ПолучитьОбласть("Дата|ШапкаДата");
        ОбластьШапкаДата2.Параметры.ДатаЗал = Формат(ДатаТЗ, "ДФ=dd.MM.yyyy");
        Для Каждого Стр из Результат Цикл
            Если Стр.ДатаДок = ДатаТЗ Тогда
        ОбластьмакетаСтрока=Макет.ПолучитьОбласть("Строка");
        ОбластьмакетаСтрока.Параметры.Адрес = Стр.Адрес;
        ОбластьмакетаСтрока.Параметры.Данные = Стр.Количество;
        ТабДок.Вывести(ОбластьМакетаСтрока);
        КонецЕсли;
    КонецЦикла;
            ТабДок.Присоединить(ОбластьШапкаДата2);
        ДатаТЗ = ДатаТЗ + 60*60*24;
    КонецЦикла;
    ОбластьШапкаДата3=Макет.ПолучитьОбласть("R6C3");
    ТабДок.Присоединить(ОбластьШапкаДата3);
0
wwall
195 / 190 / 13
Регистрация: 29.05.2014
Сообщений: 971
09.02.2018, 10:51 #9
давай начнем с самого начала - что тебе надо сделать? словами опиши задачу
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,195
09.02.2018, 12:07  [ТС] #10
wwall, я выбираю период за январь, в макете выводится в шапке все числа месяца, в первой колонки адреса и нужно с базы проставить значение по адресу и дате. пример прикрепил. Стал делать по частям чтобы понять, пока адреса не подставляю, подставил только значение к датам но почему то присоединяет все в одну строку.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ДатаТЗ=НачалоДня(НачПериода);
    Пока ДатаТЗ<=КонПериода Цикл
        ОбластьШапкаДата2 = Макет.ПолучитьОбласть("Дата|ШапкаДата");
        ОбластьШапкаДата2.Параметры.ДатаЗал = Формат(ДатаТЗ, "ДФ=dd.MM.yyyy");
        ТабДок.Присоединить(ОбластьШапкаДата2);
 
        Для Каждого Стр из Результат Цикл
            Адрес=Стр.Адрес;
            Отбор = Новый Структура();
            Отбор.Вставить("ДатаДок",ДатаТЗ);
            Отбор.Вставить("Адрес",Адрес);
            Строки = Результат.НайтиСтроки(Отбор);
            
        Если Строки.Количество()>0 Тогда 
        ОбластьмакетаСтрока2=Макет.ПолучитьОбласть("Строка|Дата");
        ОбластьмакетаСтрока2.Параметры.Данные = Стр.Количество;
        ТабДок.Присоединить(ОбластьмакетаСтрока2);
    КонецЕсли;
КонецЦикла;
        ДатаТЗ = ДатаТЗ + 60*60*24;
    КонецЦикла;
    ОбластьШапкаДата3=Макет.ПолучитьОбласть("R6C3");
    ТабДок.Присоединить(ОбластьШапкаДата3);
0
Миниатюры
Колонки в макете   Колонки в макете  
wwall
195 / 190 / 13
Регистрация: 29.05.2014
Сообщений: 971
09.02.2018, 12:15 #11

Не по теме:

Птз???? здорово земеля. Как же давно я там не был...




Прежде чем дальше что-то делать ответь на вопрос - где у тебя хранятся данные которые надо вывести в ячейку (3,2) - как ты из своего запроса будешь это вытаскивать?

После этого все станет просто.
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,195
09.02.2018, 12:19  [ТС] #12
wwall, Да он самый Петрозаводск ))))) Привет земляк
Вот весь код

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
    ТабДок.Очистить();
    Макет=ПолучитьМакет("Макет");
    ОбластьШапка=Макет.ПолучитьОбласть("Шапка");
    Период="за "+ПредставлениеПериода(НачалоДня(НачПериода),КонецДня(КонПериода),);
    ОбластьШапка.Параметры.Период=Период;
    ОбластьШапка.Параметры.Регион=АбонентскийУчасток;
    ТабДок.Вывести(ОбластьШапка);
    ОбластьШапкаДата1=Макет.ПолучитьОбласть("R6C1");
    ТабДок.Вывести(ОбластьШапкаДата1);
    
        Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Групповые.КороткийАдрес КАК Адрес,
                   |    НачислениеГаза.ДатаДок,
                   |    НачислениеГаза.Количество
                   |ИЗ
                   |    РегистрНакопления.НачислениеГаза КАК НачислениеГаза
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Групповые КАК Групповые
                   |        ПО НачислениеГаза.Групповая = Групповые.Ссылка
                   |ГДЕ
                   |    Групповые.АбонентскийУчасток = &АбонентскийУчасток
                   |    И НачислениеГаза.ДатаДок МЕЖДУ &ДатаНач И &ДатаКон";
    
    Запрос.УстановитьПараметр("ДатаНач",НачПериода);
    Запрос.УстановитьПараметр("ДатаКон",КонПериода);
    Запрос.УстановитьПараметр("АбонентскийУчасток",АбонентскийУчасток); 
    Результат = Запрос.Выполнить().Выгрузить();
    Результат.Сортировать("Адрес Возр");
    
    ДатаТЗ=НачалоДня(НачПериода);
    Пока ДатаТЗ<=КонПериода Цикл
        ОбластьШапкаДата2 = Макет.ПолучитьОбласть("Дата|ШапкаДата");
        ОбластьШапкаДата2.Параметры.ДатаЗал = Формат(ДатаТЗ, "ДФ=dd.MM.yyyy");
        ТабДок.Присоединить(ОбластьШапкаДата2);
 
        Для Каждого Стр из Результат Цикл
            Адрес=Стр.Адрес;
            Отбор = Новый Структура();
            Отбор.Вставить("ДатаДок",ДатаТЗ);
            Отбор.Вставить("Адрес",Адрес);
            Строки = Результат.НайтиСтроки(Отбор);
            
        Если Строки.Количество()>0 Тогда 
        ОбластьмакетаСтрока2=Макет.ПолучитьОбласть("Строка|Дата");
        ОбластьмакетаСтрока2.Параметры.Данные = Стр.Количество;
        ТабДок.Присоединить(ОбластьмакетаСтрока2);
    КонецЕсли;
КонецЦикла;
        ДатаТЗ = ДатаТЗ + 60*60*24;
    КонецЦикла;
    ОбластьШапкаДата3=Макет.ПолучитьОбласть("R6C3");
    ТабДок.Присоединить(ОбластьШапкаДата3);     
 
    ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
    ТабДок.АвтоМасштаб=Истина;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь; 
    ТабДок.ПовторятьПриПечатиСтроки=ТабДок.Область("R4:R5");  
    ТабДок.Показать();
0
wwall
195 / 190 / 13
Регистрация: 29.05.2014
Сообщений: 971
09.02.2018, 12:37 #13
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    Групповые.КороткийАдрес КАК Адрес,
|    НачислениеГаза.ДатаДок,
|    НачислениеГаза.Количество
|ИЗ
|    РегистрНакопления.НачислениеГаза КАК НачислениеГаза
|        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Групповые КАК Групповые
|        ПО НачислениеГаза.Групповая = Групповые.Ссылка
|ГДЕ
|    Групповые.АбонентскийУчасток = &АбонентскийУчасток
|    И НачислениеГаза.ДатаДок МЕЖДУ &ДатаНач И &ДатаКон
| сортировать по ДатаДок";
 
Запрос.УстановитьПараметр("ДатаНач",НачПериода);
Запрос.УстановитьПараметр("ДатаКон",КонПериода);
Запрос.УстановитьПараметр("АбонентскийУчасток",АбонентскийУчасток); 
РезультатТЗ = Запрос.Выполнить().Выгрузить();
 
СтрокаГрупировки = "";
 
Для каждого х из РезультатТЗ цикл
    НомерДня = ДеньГода(х.ДатаДок);
    ИмяКолонки = "_"+НомерДня;
    Если РезультатТЗ.Колонки.Найти(ИмяКолонки) = Неопределено тогда
        РезультатТЗ.Колонки.Добавить(ИмяКолонки,новый ОписаниеТипов("Число"),Формат(х.ДатаДок,"ДФ=dd.MM.yyyy"));
        СтрокаГрупировки = СтрокаГрупировки + "," +ИмяКолонки;
    КонецЕсли;
    х[ИмяКолонки] = х.Количество;
КонецЦикла;
 
РезультатТЗ.Свернуть("Адрес",СтрокаГрупировки);
 
Результат.Сортировать("Адрес Возр");
 
 
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
ТабДок.Очистить();
Макет=ПолучитьМакет("Макет");
ОбластьШапка=Макет.ПолучитьОбласть("Шапка");
Период="за "+ПредставлениеПериода(НачалоДня(НачПериода),КонецДня(КонПериода),);
ОбластьШапка.Параметры.Период=Период;
ОбластьШапка.Параметры.Регион=АбонентскийУчасток;
ТабДок.Вывести(ОбластьШапка);
 
    
 
ОбластьШапкаДата = Макет.ПолучитьОбласть("Шапка|Дата");
// добавим колонки
для каждого х из ТЗ.Колонки цикл
    ОбластьШапкаДата.Параметры.Дата = х.Заголовок;
    ТабДок.Присоединить(ОбластьШапкаДата);
КонецЦикла;
 
 
 
СтрокаДанных = макет.ПолучитьОбласть("Данные");
СтрокаДанныхДата = макет.ПолучитьОбласть("Данные|Дата");
 
/// выводим данные
Для каждого СтрокаВывода Из ТЗ цикл
    СтрокаДанных.Параметры.Адрес = СтрокаВывода.Адрес;
    ТабДок.Вывести(СтрокаДанных);
    
    для Каждого  х из ТЗ.Колонки цикл
        СтрокаДанныхДата.Параметры.Значение = СтрокаВывода[х.Имя];
        ТабДок.Присоеденить(СтрокаДанных);
    КонецЦикла;
    
КонецЦикла;
 
ОбластьШапкаДата3=Макет.ПолучитьОбласть("R6C3");
ТабДок.Присоединить(ОбластьШапкаДата3);     
 
ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
ТабДок.АвтоМасштаб=Истина;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьЗаголовки = Ложь; 
ТабДок.ПовторятьПриПечатиСтроки=ТабДок.Область("R4:R5");  
ТабДок.Показать();

Могут быть синтаксические ошибки, но логика по идее такая - сперва формируем ТЗ, в котором группируем по нашему признаку (Адрес) в разрезе второко признака - Дата. суммируем и выводим на печать.

Добавлено через 4 минуты
Но еще раз повторюсь - подобные задачи не для ручного коидрования. с ними легко справляется построитель отчетов или скд. И то и другое - простое в изучении
1
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,195
09.02.2018, 21:29  [ТС] #14
wwall, спасибо, буду разбираться. А что за построитель отчетов, хочу по читать про него
0
Dethmontt
Модератор
Эксперт 1С
2575 / 2383 / 390
Регистрация: 10.03.2011
Сообщений: 8,424
Записей в блоге: 1
Завершенные тесты: 1
10.02.2018, 17:17 #15
https://infostart.ru/public/19341/
1
10.02.2018, 17:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2018, 17:17
Привет! Вот еще темы с ответами:

1C 8.x Группировка строк в макете Печать - 1С
Есть макет Печать, по справочнику Курсы. Нужно чтобы имя каждого преподавателя выводилось только один раз и за каждым преподом все его...

1C 8.x Отобразить родительские документы в макете - 1С
Приветствую всех, вопрос возник с отображением в макете родительских документов (в служебном сообщении их получаю). Есть ВПФ ТОРГ-12,...

1C 8.x Удалить пустую ячейку в макете - 1С
Как вывести в отчет, если выбр Груп то Бренд и Товар, очистить поля или строку в макете, или Бренд то Груп и Товар очистить, Товар ...

1C 8.x Присоединение 2 строк к 1 ячейке в макете - 1С
Хочу к 1 ячейке которая занимает 3 строки справа добавить 3 строки, 1 получилось вывести как на рисунке. а вот еще 2 строки добавить не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru