Имя: Пароль:
1C
 
В таб.документе нет стандартных кнопок таких как "печать", кол-во копий и др.
0 Сергей Роспатнюк
 
06.04.18
16:59
Подскажите что я делаю не так, форма открывается из формы по команде открывается табличный документ но на нем нет стандартных кнопок таких как печать, кол-во копий и др. И почему-то название открывшегося окна (Таблица) а не (Печать Документа)
Платформа 1С:Предприятие 8.3 (8.3.10.2580)
Конфигурация Зарплата и управление персоналом, редакция 3.1 (3.1.5.129)

вот код на форме

&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    этаформа.Открыть();
    СсылкаНаОбъект    = этаформа.Объект.СсылкаНаОбъект;
КонецПроцедуры


&НаКлиенте
Процедура Команда(Команда, СсылкаНаОбъект)
    СсылкаНаОбъект    = этаформа.Объект.СсылкаНаОбъект;    
    КакаяТо(СсылкаНаОбъект).Показать();
КонецПроцедуры

&НаСервере
функция КакаяТо(СсылкаНаОбъект)
    
    КоллекцияПечатныхФорм = ПодготовитьКоллекциюПечатныхФорм("ПисьмоОТрудовой");

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

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


Вот Код в модуле Объекта

Функция СведенияОВнешнейОбработке() Экспорт    
    
    ПараметрыРегистрации                                = Новый Структура;
    МассивНазначений                                    = Новый Массив;
    ТаблицаКоманд                                        = ПолучитьТаблицуКоманд();
    
    МассивНазначений.Добавить     ("Справочник.Сотрудники");                  //Документ.Отпуск
    ПараметрыРегистрации.Вставить("Вид",                "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Назначение",            МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование",        НСтр("ru = 'ПисьмоОТрудовой'"));
    ПараметрыРегистрации.Вставить("Версия",                "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим",     Ложь);   //Истина
    ПараметрыРегистрации.Вставить("Информация",            НСтр("ru = 'Дополнительная печатная форма для ПисьмоОТрудовой'"));
    
    //ДобавитьКоманду(ТаблицаКоманд, НСтр("ru = 'ПисьмоОНевыходах'"), "ПисьмоОНевыходах", "ВызовСерверногоМетода", Истина, "ПечатьMXL");        // процедуры печати в этом модуле
    ДобавитьКоманду(ТаблицаКоманд, НСтр("ru = 'ПисьмоОТрудовой'"), "ПисьмоОТрудовой", "ВызовКлиентскогоМетода", Истина, "ПечатьMXL");    // процедуры печати в отдельной форме
    
    ПараметрыРегистрации.Вставить("Команды",             ТаблицаКоманд);      
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Функция ПолучитьТаблицуКоманд()
    
    Команды =                                             Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление",            Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор",            Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование",            Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Модификатор",                Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение",    Новый ОписаниеТипов("Булево"));
    
    Возврат Команды;
    
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

функция ДАПечатайУже(СсылкаНаОбъект) Экспорт
    
    
    УстановитьПривилегированныйРежим(Истина);
    МассивОбъектов = СсылкаНаОбъект;
    _ТабДок                             = Новый ТабличныйДокумент;
    _ТабДок.АвтоМасштаб                 = Истина;
    _ТабДок.ОриентацияСтраницы             = ОриентацияСтраницы.Портрет;
    _ТабДок.ИмяПараметровПечати         = "ПАРАМЕТРЫ_ПЕЧАТИ_ПисьмоОТрудовой";
    _МакетДог                             = ПолучитьМакет("ПисьмоОТрудовой");
    МассивПараметров                     = ПолучитьКоллекциюДанныхДляВсехМакетов2(СсылкаНаОбъект);       // МассивОбъектов
    
    _ОбластьМакетаТаблица                 = _МакетДог.ПолучитьОбласть("Таблица");
    _ОбластьМакетаТаблица.Параметры.Заполнить(МассивПараметров);
    
    _ТабДок.Вывести(_ОбластьМакетаТаблица);        
    
    возврат _ТабДок;
    
Конецфункции
1 b_ru
 
06.04.18
17:07
Ну ты же Табличный документ открываешь, а не форму. А чтобы были кнопочки, нужно записать его на форму и показывать уже форму.
2 Сергей Роспатнюк
 
06.04.18
17:22
(1) Странно почему-то другие обработки с вызовом клиентского метода работаю без этого правда там вообще нет форм и немного проще по этому. у меня подозрение что я не правильно использую УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию.
ну если можно создать вторую форму и записать туда _ТабДок
и все будет норм тогда попробую так сделать, Спасибо за подсказку.
3 b_ru
 
06.04.18
17:33
(2) Если ты хочешь использовать БСП и ее форму - используй ее. В таком случае не нужно

&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    этаформа.Открыть();
    СсылкаНаОбъект    = этаформа.Объект.СсылкаНаОбъект;
КонецПроцедуры


короче не до конца докопипастил стандартные процедуры печати.
Нужно прописать свою ПФ в функциях ДобавитьКомандыПечати(), Печать() и ПечатнаяФорма() модуля менеджера объекта
4 Сергей Роспатнюк
 
06.04.18
17:37
(3) делема в том что в печати нужно открыть форму где задается вопрос Какой адрес? и в зависимости от ответа меняется заполнение ТабДока.
5 b_ru
 
06.04.18
17:43
(4) Правильнее сделать реквизит, который позволяет выбрать адрес, ну и печать по умолчанию с первым попавшимся. Это для потенциальной ситуации с печатью кучи объектов сразу в регламентном задании.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший