Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
11 Дек 2017, 07:08
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Печатная форма Документа не скрывает строки макета с пустыми данными  (Прочитано 4626 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dmitriy.Pro

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-12-22
  • Сайт: 
  • Профессия: Программист 8.1
Доброго времени суток, Уважаемые участники форума.
Я начинающий программист 1С на платформе 1С:Предприятие 8.2 (8.2.19.106), кофигурация Зарплата и кадры высшего учебного заведения, редакция 1.0 (1.0.76.2.A1.1.54.1022).
В созданной конфигурации существует "ПриемНаРаботуВОрганизацию", имеется модуль объекта, в котором прописана Функция Печатной формы. При печати выводится список сотрудников, принимающих на работу из сформированного запроса. Макет печати Приказа содержит определенные поля с информацией, и если это поле пусто, то оно должно скрываться программно, но почему то это выполняется только для первой записи, а у остальных всё поля отображаются и пустые тоже. (см.вложение.рис.1). А так же код Функции Печати приказа (вложение 2). Макет имеет "Шапка", "СтрокаСотрудник" и "Подвал". В цикле выводится данные по Сотрудникам, которые принимаются на работу. При выполнении никаких ошибок не возникает. Я даже цветом выделял то, что отрабатывает. Но мне это не помогает. Я не пойму в чём ошибка и как мне это исправить (Макет приказа тоже вложен Макет.jpg). Спасибо!


Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
ну сделайте каждую строку с параметром отдельной секцией и потом
если НЕ ПустаяСтрока(ВложеннаяВыборка.ТабНомер) Тогда
ТабДокумент.Вывести(ОбластьТабНомер);
конецесли;

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Dmitriy.Pro

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-12-22
  • Сайт: 
  • Профессия: Программист 8.1
Спасибо за ответ, Cska-fanat-kz! Я что то похожее делал, но поскольку не профи в программировании, я не мог довести эту идею до конца. Вот что я сделал по Вашему совету и какая появилась ошибка:
1. в макете каждый параметр сделал отдельной строкой;

2. код Функции печати меньше гораздо стал, но я не понял как их правильно перечислять с условиями, и как я понимаю для каждого отдельного параметра необходимо проверять своё условие?

Функция ПечатьТ12(ИмяМакета)

   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.ПолеСлева = 0;
   ТабДокумент.ПолеСправа = 0;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПриемНаРаботуВОрганизацию_Т12";
   ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; //.Ландшафт;

   // получаем данные для печати
   ВыборкаДляШапки    = СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выбрать();   
   ВыборкаРаботники    = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
   // подсчитываем количество страниц документа - для корректного разбиения на страницы
   ВсегоСтрокДокумента = РаботникиОрганизации.Количество();    //кол-во строк сотрудников в приказе
   yy = ВсегоСтрокДокумента;                            //кол-во строк сотрудников в приказе
                                                //Сообщить(ПарКол)                                             //Сообщить(ВсегоСтрокДокумента);
   // запоминаем области макета
   Макет = ПолучитьМакет(ИмяМакета);
   ОбластьМакетаШапка    = Макет.ПолучитьОбласть("Шапка"); // Шапка документа.
   ОбластьМакетаПодвал     = Макет.ПолучитьОбласть("Подвал");// Подвал документа
   ОбластьМакета       = Макет.ПолучитьОбласть("СтрокаРаботник"); // строка работника
   ОбластьМакета2      = Макет.ПолучитьОбласть("ТабНомер");
   ОбластьМакета3      = Макет.ПолучитьОбласть("СтрНомПФП");
   ОбластьМакета4      = Макет.ПолучитьОбласть("ДР");
   ОбластьМакета5      = Макет.ПолучитьОбласть("Адрес");
   ОбластьМакета6      = Макет.ПолучитьОбласть("Паспорт");
   ОбластьМакета7      = Макет.ПолучитьОбласть("ДанныеП");
   ОбластьМакета8      = Макет.ПолучитьОбласть("Должность");
   ОбластьМакета9      = Макет.ПолучитьОбласть("ДатаП");
   ОбластьМакета10      = Макет.ПолучитьОбласть("УслПриема");
   ОбластьМакета11      = Макет.ПолучитьОбласть("Оплата");
   ОбластьМакета12      = Макет.ПолучитьОбласть("ПКГ");
   ОбластьМакета13      = Макет.ПолучитьОбласть("ДопИнфо");
   
   // массив с двумя строками - для разбиения на страницы
   ВыводимыеОбласти    = Новый Массив();
   ВыводимыеОбласти.Добавить(ОбластьМакета);
   //ВыводимыеОбласти.Добавить(ОбластьМакета2);//ВыводимыеОбласти.Добавить(ОбластьМакета3);

   // выводим данные о руководителях организации
   Если ВыборкаДляШапки.Следующий() Тогда
   ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапки);  // Шапка документа.
   ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.
   КонецЕсли;

   // Начинаем формировать выходной документ
   ТабДокумент.Очистить();
   ТабДокумент.Вывести(ОбластьМакетаШапка); // Шапка документа.   //ВыведеноСтрок = 0; //ПарКол = ОбластьМакета.Параметры.Количество();   //Сообщить(ПарКол);   

   //// выводим строки по работникам
   Пока ВыборкаРаботники.Следующий() Цикл

      //ВыборкаРаботники.Следующий();
      ВложеннаяВыборка = ВыборкаРаботники.Выбрать();
      ВложеннаяВыборка.Следующий();
      ОбластьМакета.Параметры.Заполнить(ВложеннаяВыборка);

      РезультатСклонения = "";
      Если УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), ВложеннаяВыборка.Работник, 4,ВложеннаяВыборка.ФизЛицоПол, РезультатСклонения) Тогда
         ОбластьМакета.Параметры.Работник   = РезультатСклонения
      КонецЕсли;         
      
      Если Не ПустаяСтрока(ВложеннаяВыборка) Тогда
         ТабДокумент.Вывести(ОбластьМакета);      
      КонецЕсли;


КонецЦикла;
      
   ТабДокумент.Вывести(ОбластьМакетаПодвал);
   
   Возврат ТабДокумент;

КонецФункции // ПечатьТ12()

Я не понял, как В условиях "Не ПустаяСтрока(ВложеннаяВыборка)" ВложеннаяВыборка.ТабНомер? это что за такое свойство "ТабНомер" у объекта "ВложеннаяВыборка"? Система ругается что не понимает что это такое...
А вот, если написать так, как я написал в Условиях, то система ругается:
"{Документ.ПриемНаРаботуВОрганизацию.МодульОбъекта(1100)}: Преобразование значения к типу Строка не может быть выполнено
      Если Не ПустаяСтрока(ВложеннаяВыборка) Тогда "

Или я что то не понимаю в условиях, например система так же не понимает, что такое ОбластьТабНомер в :
ТабДокумент.Вывести(ОбластьТабНомер)? ... ведь область записывается в "", например:
ТабДокумент.Вывести("ТабНомер").

Спасибо!

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
1. каждую область назовите осмысленно а не ОбластьМакетаN - черт ногу сломит потом отлаживать!
2. ну параметр у вас называется например ТабельныйНомер или СтраховойНомерПФР. Соответственно проверяйте на заполненность не целиком ВложеннаяВыборка (смысла с этом ваще нет), а ВложеннаяВыборка.ТабельныйНомер или ВложеннаяВыборка.СтраховойНомерПФР...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Dmitriy.Pro

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-12-22
  • Сайт: 
  • Профессия: Программист 8.1
Уважаемый, Cska-fanat-kz!
А в условиях проверки самой ВложеннаяВыборка.??? там что надо правильно писать то? Имя поля в выборке, или имя Псевдонима?

Если Не ПустаяСтрока(ВложеннаяВыборка.???) Тогда
    ТабДокумент.Вывести("Работник");      
КонецЕсли;

И при выводе ТабДокумент.Вывести(???), насколько я понимаю правильно должно быть имя параметра или области? В моем макете получается что одна область-один параметр. В чём разница тогда, вывода области или конкретного параметра?

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Уважаемый, Cska-fanat-kz!
А в условиях проверки самой ВложеннаяВыборка.??? там что надо правильно писать то? Имя поля в выборке, или имя Псевдонима?

Если Не ПустаяСтрока(ВложеннаяВыборка.???) Тогда
    ТабДокумент.Вывести("Работник");      
КонецЕсли;

И при выводе ТабДокумент.Вывести(???), насколько я понимаю правильно должно быть имя параметра или области? В моем макете получается что одна область-один параметр. В чём разница тогда, вывода области или конкретного параметра?

у вас имена полей выборки совпадают с именами параметров макета, иначе не было бы изначально
"ОбластьМакета.Параметры.Заполнить(ВложеннаяВыборка);"

соответственно например для "ТабельныйНомер":
Если НЕ пустаяСтроки(ВложеннаяВыборка.табельныйНомер) Тогда
//1. условие зависит от типа параметра, в данном случае строка поэтому "Не ПустаяСтрока(", можно и универсальное "Не ЗначениеЗаполнено("
//2. после "вложеннаяВыборка." ставим имя параметра как в макете, само собой проверяем, что в запросе такое поле тоже есть
ТабДокумент.Вывести(ОбластьМакетаТабельныйНомер);
//в "Вывести(...)" ставим имя области где выводится ТабельныйНомер
//т.е. ищем "ОбластьМакетаТабельныйНомер = Макет.ПолучитьОбласть("ТабНомер");"
КонецЕсли;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Dmitriy.Pro

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-12-22
  • Сайт: 
  • Профессия: Программист 8.1
ООО, прогресс! Получилось, да, я понял суть! Система понимает и выводит только те параметры, которые действительно не пустые, но значения этих непустых параметров не показывает на экране, почему? А вот если заменить "ПустаяСтрока" на "ЗначениеЗаполнено", система вообще не выводит параметры :).
Для четырех параметров я написал код следующий:
Если Не ПустаяСтрока(ВложеннаяВыборка.Работник) Тогда
           ТабДокумент.Вывести(ОбластьМакета);
      КонецЕсли;    
      Если Не ПустаяСтрока(ВложеннаяВыборка.ТабельныйНомер) Тогда
           ТабДокумент.Вывести(омТабНомер);
      КонецЕсли;
      Если Не ПустаяСтрока(ВложеннаяВыборка.СтраховойНомерПФР) Тогда
           ТабДокумент.Вывести(омСтрНомПФП);
      КонецЕсли; 
       Если Не ПустаяСтрока(ВложеннаяВыборка.ДатаРождения) Тогда
           ТабДокумент.Вывести(омДР);
      КонецЕсли;

а вот результат во вложении.

И Параметры в Макете я прописал следующим образом:
// запоминаем области макета
   Макет = ПолучитьМакет(ИмяМакета);
   ОбластьМакетаШапка    = Макет.ПолучитьОбласть("Шапка"); // Шапка документа.
   ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");// Подвал документа
   ОбластьМакета       = Макет.ПолучитьОбласть("СтрокаРаботник"); // строка работника
   омТабНомер         = Макет.ПолучитьОбласть("ТабНомер");
   омСтрНомПФП         = Макет.ПолучитьОбласть("СтрНомПФП");
   омДР            = Макет.ПолучитьОбласть("ДР");
   омАдрес            = Макет.ПолучитьОбласть("Адрес");
   омПаспорт         = Макет.ПолучитьОбласть("Паспорт");
   омДанныеП         = Макет.ПолучитьОбласть("ДанныеП");
   омДолжность         = Макет.ПолучитьОбласть("Должность");
   омДатаП            = Макет.ПолучитьОбласть("ДатаП");
   омУслПриема         = Макет.ПолучитьОбласть("УслПриема");
   омОплата         = Макет.ПолучитьОбласть("Оплата");
   омПКГ            = Макет.ПолучитьОбласть("ПКГ");
   омДопИнфо         = Макет.ПолучитьОбласть("ДопИнфо");
Добавлено: 23 Дек 2014, 12:01

Спасибо еще раз Cska-fanat-kz за ответы и помощь!
На мой вопрос Вы верно ответили и главное, что получилось так как и должно было быть!
А вот, что не показывает непустую информацию - это уже другой вопрос, полазаю в инете и справках, обязательно что нить найду!

Спасибо еще раз!

Решение, было всего то в правильной записи условия для одного параметра макета:
Если Не ПустаяСтрока(ВложеннаяВыборка.ТабельныйНомер) Тогда
  ТабДокумент.Вывести(омТабНомер);
КонецЕсли;

Еще раз Спасибо!

Последний раз редактировалось: Dmitriy.Pro; 23 Дек 2014, 12:01. Причина: Объединение сообщений

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
я бы для таких однотипных кусков как

Если Не ПустаяСтрока(ВложеннаяВыборка.ТабельныйНомер) Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ТабНомер");
ОбластьМакета.Параметры.Заполнить(ВложеннаяВыборка);
           ТабДокумент.Вывести(ОбластьМакета);
      КонецЕсли;

сделал бы отдельную процедуру, например так:
Процедура ВывестиОбластьДанныхСотрудника(ТабДокумент, Макет, ИмяПараметра, Выборка)
    Если Не ЗначениеЗаполнено(Выборка[ИмяПараметра]) Тогда
        ОбластьМакета = Макет.ПолучитьОбласть("Область"+ИмяПараметра);
        ОбластьМакета.Параметры.Заполнить(Выборка);
        ТабДокумент.Вывести(ОбластьМакета);
    КонецЕсли;
КонецПроцедуры

Соответственно для табельного номера вызов будет выглядеть как:
ВывестиОбластьДанныхСотрудника(ТабДокумент, Макет, "ТабельныйНомер", ВложеннаяВыборка);

ну и по образу и подобию размножить...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
А вот, что не показывает непустую информацию

ясное дело почему не показывает. см. выше...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Если Не ПустаяСтрока(ВложеннаяВыборка.ДатаРождения) Тогда

я же писал, что условие зависит от типа параметра. прослушали (
лучше тогда поменяйте на универсальное "НЕ ЗначениеЗаполнено(...)"
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.


Теги:
 

Не открывает форму сохраненного документа, открывает форму нового.

Автор EHOTРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 4467
Последний ответ 13 Апр 2012, 23:26
от Vit1501
Автоматическое заполнение табличной части документа из табличной части другого

Автор WillРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 15899
Последний ответ 16 Авг 2012, 12:07
от Will
Заполнение поля табличной части документа из табличной части справочника.

Автор Kurt_WagnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 4194
Последний ответ 06 Апр 2015, 20:08
от Kurt_Wagner
Заполнение табличной части документа реквизитами табличной части справочника

Автор kaf_infoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 614
Последний ответ 10 Май 2017, 20:44
от ilnur75
Добавление сведений в графу "основание" документа "ТОРГ-12"

Автор Ярослав1984Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 7730
Последний ответ 20 Авг 2013, 18:45
от Ярослав1984

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
160 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
55 Сообщений
alex0402
46 Сообщений
andron81_81
44 Сообщений
AIFrame
35 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
Golickoff Golickoff
27 Сообщений
BuhRust
27 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 290
  • Точка Скрытых: 0
  • Точка Пользователей: 5
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal