helpf.pro
Регистрация

v8.2 УП: Закрыть некоторые ячейки в табличном документе от редактирования

KorolyovSS
05.09.2014 12:38Прочитано: 3572

Добрый день в хату.

Имею в модуле формы документа и в модуле объекта процедуры печати:

В макете все ячейки с галкой "Защита"

При выводе отчета на экран (ТабличныйДокумент.Показать();) все равно ячейки можно редактировать.

А нужно сделать возможным менять не все, а только некоторые. Что я не так делаю?

Заранее благодарен.

Код 1C v 8.2 УП
 &НаКлиенте
// в модуле формы документа
Процедура ПечатьАкта(Команда)
Если Объект.Проведен И ЭтаФорма.Модифицированность=Ложь Тогда
ТабличныйДокумент = ПечатьАктовСписания(Объект.Ссылка);
Если ТабличныйДокумент <> Неопределено Тогда
ТабличныйДокумент.Показать();
КонецЕсли;
Иначе
Предупреждение("Для печати проведите или перепроведите документ!!!",, "Печать");
КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПечатьАктовСписания(Ссылка)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ОтображатьСетку = Ложь;
ТабличныйДокумент.Защита = Истина;
ТабличныйДокумент.ТолькоПросмотр = Истина;
ТабличныйДокумент.ОтображатьЗаголовки = Ложь;

Ссылка.ПолучитьОбъект().ПечататьАкт(ТабличныйДокумент);
    Возврат ТабличныйДокумент;
КонецФункции

// В модуле объекта документа
Процедура ПечататьАкт(ТабличныйДокумент) Экспорт
Попытка
Макет = ЭтотОбъект.ПолучитьМакет("МакетТД");
        ОтборПоРЭУ = Новый Структура("МестоХраненияМОЛ", МестоХраненияМОЛ.Родитель);
НачальникРЭУ = Строка(РегистрыСведений.РЭУДополнительно.ПолучитьПоследнее(Дата, ОтборПоРЭУ).НачальникРЭУ);

Область = Макет.ПолучитьОбласть("Документ");
Область.Параметры.Средства = ?(Средства, "Финансируемый", "Собственные ср-ва");
Область.Параметры.ТипАкта  = ?(Средства, "Текущий ремонт", "Техобслуживание");
Область.Параметры.Адрес = Адрес;
Область.Параметры.Номер = Номер;
Область.Параметры.Дата  = Дата;
Область.Параметры.РЭУ = РегистрыСведений.РЭУДополнительно.ПолучитьПоследнее(Дата, ОтборПоРЭУ).РЭУ;
Область.Параметры.Описание = Описание;
Область.Параметры.ГлИнженер = РегистрыСведений.ГлИнженер.ПолучитьПоследнее(Дата).ГлавныйИнженер;

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

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

ДЗМатериаловПоРаботе = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Для Каждого Группа Из ДЗМатериаловПоРаботе.Строки Цикл // Обход источников
Если Группа.Источник=ПФСерверные.ПустаяСсылка("МатериалыЕНиР") Тогда // Материалы без источника
Для Каждого Материал Из Группа.Строки Цикл
Область = Макет.ПолучитьОбласть("Материал");
Область.Параметры.Материал = Строка(Материал.Материал)+" (ц."+Строка(Материал.Материал.Цена)+")";
Область.Параметры.ЕдИзмМ = Материал.Материал.ЕдиницаИзмерения;
Область.Параметры.НормаМ = Материал.Количество;
Область.Параметры.ФактМ  = Материал.Количество;
ТабличныйДокумент.Вывести(Область);
КонецЦикла;
ИначеЕсли Группа.Материал > 1 Тогда // Один источник группирует несколько материалов
Область = Макет.ПолучитьОбласть("ГруппаМногоМатериала");
Область.Параметры.Источник = Группа.Источник.Описание;
Область.Параметры.ЕдИзмИ = Группа.Источник.ЕдиницаИзмерения;
Область.Параметры.НормаИ = Группа.Источник.Норма;
// Область.Параметры.НормаМ = Работа.ФактВыполнения*Группа.Источник.Норма;
Область.Параметры.НормаМ = Окр(Работа.ФактВыполнения*Группа.Источник.Норма, 3, РежимОкругления.Окр15как20);

Область.Параметры.ФактМ  = Группа.Количество;
ТабличныйДокумент.Вывести(Область);
Для Каждого Материал Из Группа.Строки Цикл
Область = Макет.ПолучитьОбласть("МатериалГруппы");
Область.Параметры.Материал = Строка(Материал.Материал)+" (ц."+Строка(Материал.Материал.Цена)+")";
Область.Параметры.ЕдИзмМ = Материал.Материал.ЕдиницаИзмерения;
Область.Параметры.ФактМ  = Материал.Количество;
ТабличныйДокумент.Вывести(Область);
КонецЦикла;
Иначе // Источник содержит 1 материал
Область = Макет.ПолучитьОбласть("Гр1Материал");
Область.Параметры.Источник = Группа.Источник.Описание;
Область.Параметры.ЕдИзмИ = Группа.Источник.ЕдиницаИзмерения;
Область.Параметры.НормаИ = Группа.Источник.Норма;
Область.Параметры.Материал =Строка(Группа.Строки[0].Материал)+" (ц."+Строка(Группа.Строки[0].Материал.Цена)+")";
// Область.Параметры.НормаМ = Работа.ФактВыполнения*Группа.Источник.Норма;
Область.Параметры.НормаМ = Окр(Работа.ФактВыполнения*Группа.Источник.Норма, 3, РежимОкругления.Окр15как20);
Область.Параметры.ЕдИзмМ = Группа.Строки[0].Материал.ЕдиницаИзмерения;
Область.Параметры.ФактМ  = Группа.Строки[0].Количество;
ТабличныйДокумент.Вывести(Область);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Область = Макет.ПолучитьОбласть("Подпись");


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


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

Итого = 0;
Для Каждого Материал Из ТЗМатериалы Цикл
Если Материал.Количество > 0 Тогда
Область = Макет.ПолучитьОбласть("Материал2");
Область.Параметры.Материал = Материал.Материал;
Область.Параметры.Код1С7 = Материал.Материал.Код1С7Материала;
Область.Параметры.Счет = Материал.Материал.Счет;
Область.Параметры.Цена = Материал.Материал.Цена;
Область.Параметры.ЕдИзм = Материал.Материал.ЕдиницаИзмерения;
Область.Параметры.Факт = Материал.Количество;
Итого = Итого + Материал.Материал.Цена*Материал.Количество;
ТабличныйДокумент.Вывести(Область);
КонецЕсли;
КонецЦикла;
Область = Макет.ПолучитьОбласть("Итого");
Область.Параметры.Итого = Окр(Итого);
ТабличныйДокумент.Вывести(Область);

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


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