(0 ) IKSparrow , делал такое недавно, вот посмотри эту обработку - Скачивать файлы может только зарегистрированный пользователь!
Принцип такой:
1. создаешь макет
2. добавляешь на форму поле табличного документа
3. выводишь его кодом:
Код 1C v 8.2 УП
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВывестиМакет(ТД);
КонецПроцедуры
&НаСервере
Процедура ВывестиМакет(ТД)
Макет = Обработки.ОбработкаВводБланкЗаказа.ПолучитьМакет("Макет");
ТД.Вывести(Макет);
//Если ДокумБланк заполнен, то это песать бланка
ТекДок = Объект.ДокументБланк;
Если ЗначениеЗаполнено(ТекДок) Тогда
тд.Области.Клиент.Значение = ТекДок.Клиент;
тд.Области.DS.Значение = ТекДок.DS;
ТД.Области.КодА.Значение = ?(СокрЛП(ТекДок.Агент.Артикул)="","**",СокрЛП(ТекДок.Агент.Артикул));
ТД.Области.КодЛ.Значение = ?(СокрЛП(ТекДок.Учреждение.Код)="","***",СокрЛП(ТекДок.Учреждение.Код));
ТД.Области.КодВ.Значение = ?(СокрЛП(ТекДок.Врач.Артикул)="","***",СокрЛП(ТекДок.Врач.Артикул));
КонецЕсли;
КонецПроцедуры
4. события обработки выбора и изменения табличного документа
Код 1C v 8.2 УП &НаКлиенте
Процедура ТДВыбор(Элемент, Область, СтандартнаяОбработка)
Перем ВыбЭлемент;
Если Область.Имя = "Клиент" Тогда
СтандартнаяОбработка = Истина;
////ФормаВыбораКлиента=Справочники.Клиенты.ПолучитьФормуВыбора();
////ФормаВыбораКлиента.Открыть();
ИначеЕсли Область.Имя = "ДатаРождения" Тогда
//ФормаВводаВозраста = Обработки.ВводВозраста.ПолучитьФорму("Форма",ЭтаФорма);
//ФормаВводаВозраста.Открыть();
ИначеЕсли Лев(Область.Имя,3) = "Доп" Тогда
СтандартнаяОбработка = Ложь;
Если ВвестиЗначение(ВыбЭлемент,,Тип("СправочникСсылка.Исследования")) Тогда
//Область.Расшифровка = ВыбЭлемент;
Область.Значение = ВыбЭлемент;//?(ЗначениеЗаполнено(ВыбЭлемент.ПолНаименование),ВыбЭлемент.ПолНаименование,ВыбЭлемент.Наименование);
ЦенаИсследования = 123;//ОбщегоНазначенияСервер.ПоказатьЦенуИсследования(ВыбЭлемент, Объект.ТипЦен, Объект.ДатаЦен, Объект.Автор);
ТД.Область(Лев(Область.Имя,3)+"Цена"+Прав(Область.Имя,1)).Значение = ЦенаИсследования;
ВыбЭлементКод = КодИсследования(ВыбЭлемент);
ТД.Область(Лев(Область.Имя,3)+"Код"+Прав(Область.Имя,1)).Значение = ВыбЭлементКод;
НоваяСтрока = ТаблицаИсследований.Добавить();
НоваяСтрока.Код = ВыбЭлементКод;
НоваяСтрока.Наименование = ВыбЭлемент;
//НоваяСтрока.Срок = ВыбЭлемент.ДнейВыполнения;
НоваяСтрока.Цена = ЦенаИсследования;
КонецЕсли;
Иначе
Попытка
КодПоиска = Число(Сред(Область.Имя,2));
Исключение
КодПоиска = Неопределено;
КонецПопытки;
Если КодПоиска <> Неопределено Тогда
НайденыйЭлемен = НайтиИсследование(КодПоиска);
Если НайденыйЭлемен = ПредопределенноеЗначение("Справочник.Исследования.ПустаяСсылка") Тогда
Предупреждение("Нет исследования с таким кодом!");
ИначеЕсли Область.Значение = 0 Тогда
ЦенаИсследования = 123;//ОбщегоНазначенияСервер.ПоказатьЦенуИсследования(НайденыйЭлемен, Объект.ТипЦен, Объект.ДатаЦен, Объект.Автор);
Область.Значение = ЦенаИсследования;
если ЦенаИсследования>0 тогда
НоваяСтрока = ТаблицаИсследований.Добавить();
НоваяСтрока.Код = КодПоиска;
НоваяСтрока.Наименование = НайденыйЭлемен;
//НоваяСтрока.Срок = НайденыйЭлемен.ДнейВыполнения;
НоваяСтрока.Цена = ЦенаИсследования;
конецЕсли;
Иначе
// Область.Значение = 0;
// НайденнаяСтрока = ТаблицаИсследований.Найти(НайденыйЭлемен.Код,"Код");
// ТаблицаИсследований.Удалить(НайденнаяСтрока);
КонецЕсли;
КонецЕсли;
КонецЕсли;
//Расчет Итоговой суммы
ТД.Области.ВСЕГО.Значение = "Без скидки: " + Строка(СуммуБланка(Истина))+" руб.";
ТД.Области.СКИДКА.Значение = "Скидка: " + Строка(СуммуБланка(Истина)-СуммуБланка())+" руб.";
ТД.Области.ИТОГО.Значение = Строка(СуммуБланка())+" руб.";
ТД.Области.Прописью.Значение = СформироватьСуммуПрописью(СуммуБланка());
КонецПроцедуры
&НаКлиенте
Процедура ТДПриИзмененииСодержимогоОбласти(Элемент, Область)
Если Тип("Строка") = ТипЗнч(Область) Тогда
ОбластьИмя = Область;
Иначе
ОбластьИмя = "R" + Область.Верх + "C" + Область.Лево;
КонецЕсли;
Если ОбластьИмя = "R9C3" Тогда
ТД.Области.ДатаРождения.Значение = ПолучитьДанныеОбъекта(ТД.Области.Клиент.Значение, "ДатаРождения");
ТД.Области.Пол.Значение = ПолучитьДанныеОбъекта(ТД.Области.Клиент.Значение, "Пол");
ТД.Области.Телефон.Значение = ПолучитьДанныеОбъекта(ТД.Области.Клиент.Значение, "Сотовый");
ИначеЕсли ОбластьИмя = "R1C30" Тогда
ИскКод = ТД.Области.КодВ.Значение;
ПолученыйКодВ = Лев(СокрЛП(ИскКод),?(Найти(ИскКод,"/")=0,СтрДлина(СокрЛП(ИскКод)),Найти(ИскКод,"/")-1));
НайдЭлем = НайтиДанныеОбъектаАртикул("Врачи", ПолученыйКодВ);
НайдЭлемАген = ПолучитьДанныеОбъекта(НайдЭлем, "Агент");
НайдЭлемАгенКод = ПолучитьДанныеОбъекта(НайдЭлемАген, "Артикул");
НайдЭлемАгенМестоРаботы =ПолучитьДанныеОбъекта(НайдЭлем, "МестоРаботы");
НайдЭлемАгенМестоРаботыКод =ПолучитьДанныеОбъекта(НайдЭлемАгенМестоРаботы, "Код");
Если (НайдЭлемАгенКод <> ТД.Области.КодА.Значение) ИЛИ (НайдЭлемАгенМестоРаботыКод <> ТД.Области.КодЛ.Значение) Тогда
Если Вопрос("Агент и(или) ЛПУ выбраны не верно!
|Заполнить автоматически?",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
ТД.Области.КодА.Значение = НайдЭлемАгенКод;
ТД.Области.КодЛ.Значение = НайдЭлемАгенМестоРаботыКод;
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Объект.МестоЗабора) тогда
Объект.МестоЗабора=ПолучитьДанныеОбъекта(НайдЭлемАгенМестоРаботы, "МестоЗабора");
КонецЕсли;
ИначеЕсли ОбластьИмя = "R1C28" Тогда
КонецЕсли;
КонецПроцедуры