Имя: Пароль:
1C
1С v8
Поле табличного документа. Сохранение и вывод на печать
,
0 Chuvaschow
 
30.03.17
10:59
Здравствуйте, уважаемые форумчане!

Нужна ваша помощь, направьте в нужное русло.
Необходимо сделать заполнение одной из форм статистической отчетности из документов на УФ. Решил сделать через ПолеТабличногоДокумента. Наглядно, красиво. Однако как сохранять значения (при записи документа) и как вывести на печать не разобрался. Гугл не помог.
Подскажите:

1. Как сохранять значения при записи документа? (думаю нужно копать в сторону ХранилищеЗначений)

2. Как вывести на печать ПолеТабличногоДокумента?

Буду очень благодарен за помощь.

http://savepic.ru/13374434.jpg
1 Рэйв
 
30.03.17
11:02
А зачем его хранить? Формируй каждый раз заново. Вдруг данные изменятся - кому тогда твои сохранения будут нужны?
2 Chuvaschow
 
30.03.17
11:07
Дело в том, что это годовой отчет. Хочется записать документ, скажем за 2016 год, создать новый на 2017 и т.д. и в любой момент открыть и посмотреть, что же там было в 2016.
3 Рэйв
 
30.03.17
11:07
(2)Сохрани таб док в файл в какойнибудь папке с названием "Годовые отчеты" и смотри в любой мосент
4 Рэйв
 
30.03.17
11:08
но все таки чтобы "посмотреть, что же там было в 2016" лучше его в этом 2016 заново сформировать.
5 Chuvaschow
 
30.03.17
11:09
Возможно :) Тогда документ ни к чему, достаточно Отчета на СКД :)
Но хочется разобраться с документом...
6 Рэйв
 
30.03.17
11:10
(5)ну так на то оно и годовой ОТЧЕТ .Документ тут ни каким боком не канает.
7 Zmich
 
30.03.17
11:12
(0). Как вариант, не привлекая хранилище значение:
Таб = ЭлементыФормы.ПолеТабличногоДокумента;
Таб.Записать("C:\Таблица.mxl"); // записываем во внешний файл
Таб.Очистить();
Таб.Прочитать("C:\Таблица.mxl"); // считываем из внешнего файла
Таб.Напечатать(); // печать
8 Chuvaschow
 
30.03.17
11:26
Таб = Элементы.ПолеТабличногоДокументаСтраница1;

Ругается:

{Документ.РегламентированнаяОтчетностьФорма36.Форма.ФормаДокумента.Форма(67)}: Метод объекта не обнаружен (Записать)
    Таб.Записать("C:\Таблица.mxl");

и Прочитать тоже..
9 Chuvaschow
 
30.03.17
11:37
(6) Хотелось получить, что-то вроде регламентированной отчетности как в ЗУП 2.5.
10 Chuvaschow
 
30.03.17
11:51
&НаКлиенте
Процедура Печать(Команда)
    Таб = ПолеТабличногоДокументаСтраница1;
    Таб.Напечатать();

КонецПроцедуры


Это гениально :) Но уходит сразу на принтер, без предпросмотра
11 Zmich
 
30.03.17
12:00
(8). Сохранить и Записать на Клиенте не доступно, указывай директиву &НаСервере.
12 Zmich
 
30.03.17
12:00
(11)+ Т.е. Записать и Прочитать имел в виду.
13 Вафель
 
30.03.17
12:02
(0) Ты пытаешься переизобрести рег отчетность?
14 mistеr
 
30.03.17
12:28
(0) Росмотри рег. отчетность в типовых.

(6) Рег. отчеты не зря сделали документами. Бывают пересдачи и пр.
15 Chuvaschow
 
30.03.17
12:37
(14) на типовые и равняюсь. Но знаний мало, а стиль кода в типовых для меня просто мозговыносящий. Но я учусь :)
16 Chuvaschow
 
30.03.17
12:40
Никак не мог понять, почему метод Показать для ПолеТабличногоДокумента не доступен в толстом клиенте. Затем в  СП прочитал: Если табличный документ является реквизитом управляемой формы, то вызов метода приводит к возникновению исключения. И правда - зачем показывать, если все это и так на форме :)
17 Chuvaschow
 
30.03.17
13:46
Господа, помогите разобраться
Пытаюсь сделать так: формируем структуру со всеми страницами (с ПолеТабличногоДокумента), чтобы потом пробежаться по ней циклом методом Напечатать().

&НаКлиенте
Процедура Печать(Команда)
    
    СписокЗначений = Новый СписокЗначений;
    Для Каждого Строка Из ФормированиеСтруктурыСтраниц() Цикл
        СписокЗначений.Добавить(Строка.Ключ);
    КонецЦикла;
    СписокЗначений.ОтметитьЭлементы("Отметьте страницы для печати");
        
    Для Каждого ЭлементСпискаЗначений Из СписокЗначений Цикл                                        
        Если ЭлементСпискаЗначений.Пометка = Истина Тогда
            
            ????
            
        КонецЕсли;
    КонецЦикла;
    
    Таб = ПолеТабличногоДокументаСтраница1;
    Таб.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
КонецПроцедуры

Функция ФормированиеСтруктурыСтраниц()
    
    Страницы = Новый Структура;
    Страницы.Вставить("Страница1",ПолеТабличногоДокументаСтраница1);
    Страницы.Вставить("Страница2",ПолеТабличногоДокументаСтраница2);
    Страницы.Вставить("Страница3",ПолеТабличногоДокументаСтраница3);
    Страницы.Вставить("Страница4",ПолеТабличногоДокументаСтраница4);
    Страницы.Вставить("Страница5",ПолеТабличногоДокументаСтраница5);
    Страницы.Вставить("Страница6",ПолеТабличногоДокументаСтраница6);
    Страницы.Вставить("Страница7",ПолеТабличногоДокументаСтраница7);
    Страницы.Вставить("Страница8",ПолеТабличногоДокументаСтраница8);
    
    Возврат Страницы;
    
КонецФункции


Структура получается. Отметки получаются. Выбрать только отмеченные получается. А вот напечатать. К моменту печати мы уже имеем только лишь строку. Как объяснить 1С, что за строкой "Страница1" таится ПолеТабличногоДокументаСтраница1 и получить метод Напечатать()?
18 Chuvaschow
 
30.03.17
13:53
Если ЭлементСпискаЗначений.Пометка = Истина Тогда

поместить бы что-то вроде

Таб = ЭлементСпискаЗначений.Значение (выйти на само ПолеТабличногоДокумента)
Таб = Таб.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Таб.Напечатать()


Но за ЭлементСпискаЗначений.Значение - строка
19 Chuvaschow
 
30.03.17
15:04
Up
20 dezss
 
30.03.17
15:23
Исправь на

    Для Каждого Строка Из ФормированиеСтруктурыСтраниц() Цикл
        СписокЗначений.Добавить(Строка.Значение);
    КонецЦикла;
21 dezss
 
30.03.17
15:25
(19) Ты выбираешь ключ, а тебе надо выбирать значение...
Даже лучше так

    Для Каждого Строка Из ФормированиеСтруктурыСтраниц() Цикл
        СписокЗначений.Добавить(Строка.Значение, Строка.Ключ);
    КонецЦикла;
22 Chuvaschow
 
30.03.17
15:33
В таком случае в мы получим значение "ТабличныйДокумент", но так и не получим выхода на Таб.Напечатать()
23 dezss
 
30.03.17
15:38
(22) я просто указал на явную ошибку...

Ты же выше писал, что

&НаКлиенте
Процедура Печать(Команда)
    Таб = ПолеТабличногоДокументаСтраница1;
    Таб.Напечатать();

КонецПроцедуры

Работает и выводит на печать. А тут что, не выводит?
24 Chuvaschow
 
30.03.17
15:40
Да, но это нужно прописать по каждой странице, а их 11.
Хотел свести их в структуру и пробежаться методом Напечатать(). к тому же такая структура пригодилась бы еще для обработки всех страниц.
но выйти на печать никак не могу
25 Chuvaschow
 
30.03.17
15:41
Нужно отобрать страницы которые были поечены СписокЗначений.ОтметитьЭлементы и все напечатать
26 dezss
 
30.03.17
15:41
(24) Это что, не отрабатывает?

Для Каждого ЭлементСпискаЗначений Из СписокЗначений Цикл                                        
        Если ЭлементСпискаЗначений.Пометка = Истина Тогда
Таб = ЭлементСпискаЗначений.Значение;
Таб.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Таб.Напечатать()
        КонецЕсли;
    КонецЦикла;
27 Chuvaschow
 
30.03.17
15:45
Печатает :) Извините.
Просто при написании Таб.  получал различные методы, кроме нужных (Напечатать) и думал, что не дотягиваемся...
28 dezss
 
30.03.17
15:47
(27) Бывает. Не всегда все методы доступны через <ctrl> + <пробел>.
29 Chuvaschow
 
30.03.17
15:49
Так получилось вполне компактно и красиво.
Осталось решить вопрос с сохранением, чтобы при закрытии документы данные в ПолеТабличногоДокумента не пропадали.
Буду все-таки копать в сторону ХранилищеЗначений.
Не хочется мусорить на жесткий диск файлами.
30 dezss
 
30.03.17
16:02
(29) ага...лучше мусорить базу?
Ты очень хорошо подумай, прежде чем это делать и хотя бы оцени объемы.
31 Chuvaschow
 
30.03.17
16:24
Отчет годовой. Раз в год записать пару килобайт в Хранилище - думаю потянет :)