Имя: Пароль:
1C
1С v8
Печатная форма/пустые реквизиты
0 ildarian
 
29.04.13
12:50
Доброго времени суток!

Такая проблема. Есть справочник "контрагенты" и есть макет печатной формы элемента справочника. На печатную форму выводятся реквизиты справочника в столбик, но есть реквизиты которые не заполнены.

Задача: не выводить на печатную форму пустые реквизиты. Форма создавалась конструктором печатных форм.

Вот код.

Процедура Печать() Экспорт
   ТабДок = Новый ТабличныйДокумент;
   Макет = Справочники.КонтрагентыСчета.ПолучитьМакет("Печать");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   
   Шапка.Параметры.Заполнить(ЭтотОбъект);
   
   шапка.ТекущаяОбласть.пус
   ТабДок.Вывести(Шапка);
   
   
   
   ТабДок.ОтображатьСетку = Ложь;
   ТабДок.Защита = Ложь;
   ТабДок.ТолькоПросмотр = Ложь;
   ТабДок.ОтображатьЗаголовки = Ложь;
   ТабДок.Показать();
КонецПроцедуры
1 ildarian
 
29.04.13
12:53
Опечатка. Такой вот код!


Процедура Печать() Экспорт
   ТабДок = Новый ТабличныйДокумент;
   Макет = Справочники.КонтрагентыСчета.ПолучитьМакет("Печать");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   
   Шапка.Параметры.Заполнить(ЭтотОбъект);
   
   ТабДок.Вывести(Шапка);
   
   
   
   ТабДок.ОтображатьСетку = Ложь;
   ТабДок.Защита = Ложь;
   ТабДок.ТолькоПросмотр = Ложь;
   ТабДок.ОтображатьЗаголовки = Ложь;
   ТабДок.Показать();
КонецПроцедуры
2 Wobland
 
29.04.13
12:54
задача ясна
3 ildarian
 
29.04.13
12:59
как сделать так чтобы пустые реквизиты не выводились ?
4 Wobland
 
29.04.13
13:02
(3) пробежаться по параметрам, при заполненности выводить
5 Wobland
 
29.04.13
13:03
что-то типа Если ЗначениеЗаполнено(ЭтотОбъект[ТекПараметр])
6 1Сергей
 
29.04.13
13:03
использовать больше областей
7 Aprobator
 
29.04.13
13:11
создать в макете ОбластьРеквизиты, там 2 параметра: Имя реквизита и значение реквизита. И при обходе реквизитов справчоника, по условию использоватье ПрисоединитьОбласть.
8 ildarian
 
29.04.13
13:20
(7) А можете расписать подробнее? Я просто новичок совсем в программировании. Область я создал, а как привязать к ним реквизиты справочника ?
9 Wobland
 
29.04.13
13:31
(8) а тебе из всех подряд незаполненные выводить надо или из какого-то подмножества?
10 Wobland
 
29.04.13
13:32
(9) *не выводить
11 Wobland
 
29.04.13
13:37
спр=Справочники.Контрагенты.НайтиПоКоду();
Для Каждого ТекРеквизит Из спр.Метаданные().Реквизиты Цикл
   ЗначениеРеквизита=спр[ТекРеквизит.Имя];
   Если ЗначениеЗаполнено(ЗначениеРеквизита) Тогда
   КонецЕсли;
КонецЦикла;
12 Aprobator
 
29.04.13
13:44
(8) у области в свойствах есть тип заполнения. Надо выбрать Параметр. Чуть ниже задать его имя и потом в коде .... Область.Параметры.ИмяПараметра = ЗначениеПараметра.
13 ildarian
 
29.04.13
13:45
из всех
14 Wobland
 
29.04.13
13:45
(13) на здоровье
15 ildarian
 
29.04.13
13:47
в общим я сделал вот так

ТабДок = Новый ТабличныйДокумент;
   Макет = Справочники.КонтрагентыСчета.ПолучитьМакет("Печать");
   // Заголовок
   //Область = Макет.ПолучитьОбласть("Заголовок");
   //ТабДок.Вывести(Область);
   // Шапка
   Шапка = Макет.ПолучитьОбласть("Шапка");
   Шапка.Параметры.Заполнить(ЭтотОбъект);
   Шапка.Параметры.Наименование = "" + ЭтотОбъект.Наименование + Символы.ПС + "ФИО" + ЭтотОбъект.Фамилия + Символы.ПС +
   "г." + ЭтотОбъект.Город + Символы.ПС + "с." + ЭтотОбъект.Село + Символы.ПС + "обл." + ЭтотОбъект.Область + Символы.ПС +
   "Р-н" + ЭтотОбъект.Район + Символы.ПС + "ул." + ЭтотОбъект.Улица + Символы.ПС ;
   ТабДок.Вывести(Шапка);

   ТабДок.ОтображатьСетку = Ложь;
   ТабДок.Защита = Ложь;
   ТабДок.ТолькоПросмотр = Ложь;
   ТабДок.ОтображатьЗаголовки = Ложь;
   ТабДок.Показать();


Теперь где-то тут нужно поставить проверку заполнения.
16 Wobland
 
29.04.13
13:59
зачем наврал в (13)?
17 cw014
 
29.04.13
14:00
(15) Какой бюджет?
18 Wobland
 
29.04.13
14:00
+(11) Шапка.Параметры.ИмяРеквизита=ТекРеквизит.Имя;
Шапка.Параметры.ЗначениеРеквизита=ЭтотОбъект[ЗначениеРеквизита];
ТабДок.Вывести(Шапка);
19 Wobland
 
29.04.13
14:01
даже Шапка.Параметры.ИмяРеквизита=ТекРеквизит.Синоним
20 ildarian
 
29.04.13
14:52
(17) не понял вопрос

Сделал так :

Процедура Печать() Экспорт
   ТабДок = Новый ТабличныйДокумент;
   Макет = Справочники.КонтрагентыСчета.ПолучитьМакет("Печать");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   Шапка.Параметры.Заполнить(ЭтотОбъект);
   Шапка.Параметры.Наименование = "" + ?(ЗначениеЗаполнено(ЭтотОбъект.Наименование),ЭтотОбъект.Наименование + Символы.ПС,"") +
   
   ?(ЗначениеЗаполнено(ЭтотОбъект.Фамилия),"ФИО: " + ЭтотОбъект.Фамилия,"")+ Символы.ПС +
   ?(ЗначениеЗаполнено(ЭтотОбъект.Город),"г. " + ЭтотОбъект.Город + Символы.ПС,"") +
   ?(ЗначениеЗаполнено(ЭтотОбъект.Село),"с. " + ЭтотОбъект.Село + Символы.ПС,"") +
   ?(ЗначениеЗаполнено(ЭтотОбъект.Область),"обл. " + ЭтотОбъект.Область + Символы.ПС,"") +
   ?(ЗначениеЗаполнено(ЭтотОбъект.Район),"Р-н. " + ЭтотОбъект.Район + Символы.ПС,"") +
   ?(ЗначениеЗаполнено(ЭтотОбъект.Улица),"ул. " + ЭтотОбъект.Улица + Символы.ПС,"") +
   ?(ЗначениеЗаполнено(ЭтотОбъект.Дом),"Дом. " + ЭтотОбъект.Дом + Символы.ПС,"") +
   ?(ЗначениеЗаполнено(ЭтотОбъект.Корпус),"Корп. " + ЭтотОбъект.Корпус + Символы.ПС,"") +
   ?(ЗначениеЗаполнено(ЭтотОбъект.Офис),"офис: " + ЭтотОбъект.Офис + Символы.ПС,"") ;
   
   
   ТабДок.Вывести(Шапка);

   ТабДок.ОтображатьСетку = Ложь;
   ТабДок.Защита = Ложь;
   ТабДок.ТолькоПросмотр = Ложь;
   ТабДок.ОтображатьЗаголовки = Ложь;
   ТабДок.Показать();
КонецПроцедуры



Может кому-то это поможет.
21 mikecool
 
29.04.13
14:55
(20) кому это может помочь?
22 ildarian
 
29.04.13
14:57
(21) например тому у кого возникнет такая же проблема
23 Wobland
 
29.04.13
15:01
(22) тому мы посоветуем делать заполнение и вывод области пореквизитно
24 Tedman
 
29.04.13
15:03
(20) Боже мой... Тебе же написали в (11) как это делается.

спр=Справочники.Контрагенты.НайтиПоКоду(); // Берешь твой объект
Для Каждого ТекРеквизит Из спр.Метаданные().Реквизиты Цикл // Начинаешь перебирать все его реквизиты
   ЗначениеРеквизита=спр[ТекРеквизит.Имя]; // Берешь значение какого-то реквизита
   Если ЗначениеЗаполнено(ЗначениеРеквизита) Тогда // если оно заполнено делаешь
      Область = ПолучитьОбласть("ИменнованнаяОбласть");
      Область.Параметр.ЗначениеПараметра = "Значение твоего параметра";
      ТабДок.Присоединить(Область); // Почитай разницу в синтаксис-помошнике для табличного документа между Присоединить и Вывести.
   КонецЕсли;
КонецЦикла;

Я всё понимаю, и все мы были новичками и когда-то даже ходить не умели, но я соглашусь с (21), и очень надеюсь, что это никому и никогда не поможет. Потому что когда я встречаю такой код, то становится как-то не по себе (мягко говоря).
И ещё. Открой УТ 10.3 типовую (например) и посмотри формирование печатной формы, например, у счета.
Там есть колонка, которая добавляется в зависимости от того, какую ты в настройка программы выбрал доп. колонку печати (Артикул или код).
Там очень простой и понятный код формирования печатных форм с присоединяемой колонкой в шапке и строках.
25 Aprobator
 
29.04.13
15:04
эх, и я когда то был в 1С полным лопухом. Как меня тут пинали *по щеке стекает слеза ностальгии*
26 Wobland
 
29.04.13
15:06
(24) получать одну и ту же область в цикле нехорошо
27 Tedman
 
29.04.13
15:07
(25) + 1. Да все такие были)))
(1) Так что не ленись, открой формирование любой печ. формы и почитай, как это делается. Времени потратишь - час - два максимум, а пользы от этого будет много, особенно если ты собираешься заниматься 1сом серьёздно.
28 Tedman
 
29.04.13
15:08
(24) Согласен. Это всё понедельник. Я особо и не думал.
29 Aprobator
 
29.04.13
15:13
(28) такие вещи на уровне рефлексов должны быть )
30 ildarian
 
29.04.13
15:26
Всем спасибо за помощь.
честно говоря мне тот код посоветовали на другом форуме мне он показался проще, а конфигурация у меня сильно маленькая чтобы заметить изменения в производительности. Но всё же переделаю по Вашему примеру

По поводу печатных форм в УТ, почитаю спасибо!
31 Aprobator
 
29.04.13
15:28
дело не в конфе, пока учишься - формируется общий подход. Этот как почерк. Одно дело его поставить сразу, а другое после его исправлять.
32 1Сергей
 
29.04.13
15:32
пелядь, какие все вумные... типа, уже не новички, да? пороху понюхали?
33 Aprobator
 
29.04.13
15:33
(32) завидно?
34 Wobland
 
29.04.13
16:30
(32) а у тебя даже полоска на 2 см длиннее моей
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший