Консультация № 171540
22.08.2009, 22:11
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты. 1С 8.1. Портал уже как родной дом.
1. Один из вас, помог мне построить отчет для данных из справочника и подготовить макет для печати. Не могу разобраться, как, имея справочник, у которого 2 табличной части(ко всем данным справочника доступ получен с помощью запроса), не только выбрать его элемент и вывести все его содержимое вместе с таб. частями, но и выбрать определенную строку из таб части с помощью построителя отчета, например, с помощью поля выбора(Загрузить все строки таб. части в поле выбора и по выбранному в нем элементу(элементов таб части будет мало) вывести именно его на печать, а не все элементы таб.части)? Выразился как смог понятно.
2. все о том же построителе отчета. подскажите, как по выбранному эл-ту в поле выбора вывести данные элемента на печать(например, выбрали в поле выбора элемент "справа" - у нас данные на печать расположились справа на листе), выбрали "Внизу", у нас данные эл-та расположились внизу и т.д.
3. скажите, пожалуйста, как на макете всем ячейкам или выбранному диапазону присвоить св-во защита в Истина?
Прилагаю ко д обработки, выложил бы саму обработку и инф. базу, но не знаю, можно ли это сделать(просто так было бы нагляднее).
Спасибо огромное за внимание. Как всегда, жду ваших предложений и думаю сам.

Приложение:
Перем ТабДокумент;

Процедура ПриОткрытии()

ИнициализацияОтчета();

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

Процедура ИнициализацияОтчета()

ПостроительОтчета.Текст =
"ВЫБРАТЬ
| Физлица.Ссылка КАК ФизЛицоСсылка
|{ВЫБРАТЬ
| Физлица.Ссылка.* КАК ФизЛицо}
|ИЗ
| Справочник.Физлица КАК Физлица
|{ГДЕ
| Физлица.Ссылка.* КАК ФизЛицо}
|
|УПОРЯДОЧИТЬ ПО
| Физлица.Наименование";

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

Процедура КнопкаВыполнитьНажатие(Кнопка)

ТабДокумент = Новый ТабличныйДокумент;

ПостроительОтчета.Выполнить();
ТаблицаРезультата = ПостроительОтчета.Результат.Выгрузить();

Для Каждого ТекущаяСтрока Из ТаблицаРезультата Цикл
ПечатьЭлементаСправочника(ТекущаяСтрока.ФизЛицоСсылка);
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;

ПечатнаяФорма = Неопределено;
ПечатнаяФорма = ПолучитьФорму("ФормаДляВыводаНаПечать");
ПечатнаяФорма.ЗаголовокОкна = "Печать физ лиц";
ПечатнаяФорма.ПриОткрытии();
ПечатнаяФорма.ЭлементыФормы.ПолеТабличногоДокумента.Очистить();
ПечатнаяФорма.ЭлементыФормы.ПолеТабличногоДокумента.ПолеСверху = 1;
ПечатнаяФорма.ЭлементыФормы.ПолеТабличногоДокумента.ПолеСправа = 1;
ПечатнаяФорма.ЭлементыФормы.ПолеТабличногоДокумента.ПолеСнизу = 1;
ПечатнаяФорма.ЭлементыФормы.ПолеТабличногоДокумента.ПолеСлева = 1;
ПечатнаяФорма.ЭлементыФормы.ПолеТабличногоДокумента.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ПечатнаяФорма.ЭлементыФормы.ПолеТабличногоДокумента.Автомасштаб = Истина;
ПечатнаяФорма.ЭлементыФормы.ПолеТабличногоДокумента.Вывести(ТабДокумент);
ПечатнаяФорма.Открыть();

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

Процедура ПечатьЭлементаСправочника(ФизЛицо)

Макет = ПолучитьМакет("Макет");
ЗапросШапка = Новый Запрос;
ЗапросШапка.Текст =
"ВЫБРАТЬ
| Физлица.Фамилия,
| Физлица.Имя,
| Физлица.Отчество,
| Физлица.ИНН,
| Физлица.Телефон,
| Физлица.ВременнаяРегистрация,
| Физлица.СвидОРегПоМестуПреб,
| Физлица.Доверенность,
| Физлица.ВУ,
| Физлица.КатегорияВУ,
| Физлица.ДатаВыдачиВУ,
| Физлица.КемВыданоВУ
|ИЗ
| Справочник.Физлица КАК Физлица
|ГДЕ
| Физлица.Ссылка = &Ссылка";
ЗапросШапка.УстановитьПараметр("Ссылка", ФизЛицо);
Результат = ЗапросШапка.Выполнить().Выбрать();
Результат.Следующий();

ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заполнить(Результат);
ТабДокумент.Вывести(ОбластьМакета);

ЗапросУдостоверениеЛичности = Новый Запрос;
ЗапросУдостоверениеЛичности.Текст =
"ВЫБРАТЬ
| ФизлицаУдостЛичности.Серия,
| ФизлицаУдостЛичности.Номер,
| ФизлицаУдостЛичности.КемВыдан,
| ФизлицаУдостЛичности.ДатаВыдачи,
| ФизлицаУдостЛичности.ДатаРождения,
| ФизлицаУдостЛичности.МестоРождения,
| ФизлицаУдостЛичности.ОблПрожив,
| ФизлицаУдостЛичности.Гражданство,
| ФизлицаУдостЛичности.Пол,
| ФизлицаУдостЛичности.РайонПрожив,
| ФизлицаУдостЛичности.ГородПрожив,
| ФизлицаУдостЛичности.УлицаПрожив,
| ФизлицаУдостЛичности.ДомПрожив
|ИЗ
| Справочник.Физлица.УдостЛичности КАК ФизлицаУдостЛичности
|ГДЕ
| ФизлицаУдостЛичности.Ссылка = &Ссылка";
ЗапросУдостоверениеЛичности.УстановитьПараметр("Ссылка", ФизЛицо);
Результат = ЗапросУдостоверениеЛичности.Выполнить().Выбрать();
Результат.Следующий();

ОбластьМакета = Макет.ПолучитьОбласть("Удостоверение");
ОбластьМакета.Параметры.Заполнить(Результат);
ТабДокумент.Вывести(ОбластьМакета);

ЗапросТранспортноеСредство = Новый Запрос;
ЗапросТранспортноеСредство.Текст =
"ВЫБРАТЬ
| ФизлицаТранспортноеСредство.ГосНомер,
| ФизлицаТранспортноеСредство.VIN,
| ФизлицаТранспортноеСредство.МаркаМодель,
| ФизлицаТранспортноеСредство.ТипТС,
| ФизлицаТранспортноеСредство.Категория,
| ФизлицаТранспортноеСредство.ГодВыпуска,
| ФизлицаТранспортноеСредство.МодельНомДвиг,
| ФизлицаТранспортноеСредство.НомерШасси,
| ФизлицаТранспортноеСредство.НомерКузова,
| ФизлицаТранспортноеСредство.ЦветКузова,
| ФизлицаТранспортноеСредство.ЗаводИзготовитель,
| ФизлицаТранспортноеСредство.МощнДвЛСКВт,
| ФизлицаТранспортноеСредство.РазрМаксМассаМассаБН,
| ФизлицаТранспортноеСредство.РабочОбъемДвиг,
| ФизлицаТранспортноеСредство.ПТС,
| ФизлицаТранспортноеСредство.СвидОРегТс,
| ФизлицаТранспортноеСредство.Стоимость,
| ФизлицаТранспортноеСредство.ПТСКемВыдано,
| ФизлицаТранспортноеСредство.ПТСДатаВыдачи,
| ФизлицаТранспортноеСредство.СвидетКемВыдано,
| ФизлицаТранспортноеСредство.СвидДатаВыдачи
|ИЗ
| Справочник.Физлица.ТранспортноеСредство КАК ФизлицаТранспортноеСредство
|ГДЕ
| ФизлицаТранспортноеСредство.Ссылка = &Ссылка";
ЗапросТранспортноеСредство.УстановитьПараметр("Ссылка", ФизЛицо);
Результат = ЗапросТранспортноеСредство.Выполнить().Выбрать();

ОбластьМакета = Макет.ПолучитьОбласть("ТранспортноеСредство");
ТабДокумент.Вывести(ОбластьМакета);

Номер = 0;
Пока Результат.Следующий() Цикл
Номер = Номер + 1;
ОбластьМакета = Макет.ПолучитьОбласть("ПроТранспортноеСредство");
ОбластьМакета.Параметры.Заполнить(Результат);
ОбластьМакета.Параметры.НомерПоПорядку = Номер;
ТабДокумент.Вывести(ОбластьМакета);
КонецЦикла;


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







Обсуждение

Неизвестный
25.08.2009, 10:52
общий
это ответ
Здравствуйте, Роман Андреевич.
1. Я понял Ваш вопрос так: есть одно физ лицо, за которым числится два транспортных средства. Нужно напечатать одно из них. Если я понял правильно, то можно сделать так: перед выполнением запроса к табличной части анализируем количество записей в табличной части; если записей больше 1 - значит даем пользователю возможность выбора транспортного средства и в запрос в качестве дополнительного условия передаем ограничение (выбранное пользователем транспортное средство). Но если печатать придется много - будет утомительно. Поэтому я бы ввел дополнительный признак (булево) в справочник ФизЛица - ОсновноеТранспортноеСредство и потом в условиях отбора ставил бы ОсновноеТранспортноеСредство = Истина.
2. Не смог разобраться в сути вопроса
3. Смотрите приложение

Приложение:
Макет = ПолучитьМакет("Макет");
Макет.ТолькоПросмотр = Истина; //В режиме просмотра в таблице не доступны для редактирования ячейки и рисунки, у которых установлено свойство Защита
Для i = 1 По 10 Цикл
Для j = 1 По 10 Цикл
Область = Макет.Область("R" + i + "C" + j);
Область.Защита = Ложь; //Поэтому здесь открываем нужные для редактирования ячейки
КонецЦикла;
КонецЦикла;
Макет.Показать();
5
Спасибо большое.
Форма ответа