Имя: Пароль:
1C
 
УТ 11. Внешняя печатная форма, с вызовом формы.
0 AlexKulikov
 
15.02.17
16:04
Добрый день, уважаемые форумчане.

Впервые столкнулся с такой задачей и зашел в тупик. Но обо всем по порядку.
Есть ВПФ для документа "Заказ покупателя", на форме обработки расположены дополнительные реквизиты для печати.
Соответственно перед печатью открываю форму обработки для пользователя, чтобы он ввел свои значения и после чего на форме жмется кнопка и  идет печать документа.

И вот тут у меня появился затык, как мне перехватить ссылку на объект из которого  была вызвана эта ВПФ.
То есть на данном этапе мне приходиться перевыбирать документ для печати, что не есть хорошо.
1 Gbpltw
 
15.02.17
16:23
(0)  а если идет печать 80-200 документов?
2 AlexKulikov
 
15.02.17
18:47
Теперь валится на ошибке "В обработчике печати не был сформирован табличный документ", хотя я специально в функции формирования табличного документа оставил 3 строчки, чтобы не ошибиться. Что я упустил?


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


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

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


// Экспортная процедура печати, вызываемая из основной программы
//
// Параметры:
// ВХОДЯЩИЕ:
//  МассивОбъектовНазначения - Массив - список объектов ссылочного типа для печати документа
//                 Как правило, содержит один элемент с ссылкой на вызвавший форму объект (документ, справочник)
//
// ИСХОДЯЩИЕ:
//  КоллекцияПечатныхФорм - ТаблицаЗначений - таблица сформированных табличных документов.
//                 Как правило, содержит одну строку с именем текущей печатной формы
//  ОбъектыПечати - СписокЗначений - список объектов печати.
//  ПараметрыВывода - Структура - Параметры сформированных табличных документов. Содержит поля:
//                          ДоступнаПечатьПоКомплектно - булево - по умолчанию Ложь
//                          ПолучательЭлектронногоПисьма
//                          ОтправительЭлектронногоПисьма
//
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    Макет = ПолучитьМакет("АКТ_ПРИЁМА_ПЕРЕДАЧИ_ТОВАРА");
    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;

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

    //Присваиваем значение по умолчанию нашему параметру, переданному из формы
    АктПриемаПередачиВ1С = Истина;

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

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


Функция ПечатьАктаПриемаПередачи(СсылкаНаОбъект,ОбъектыПечати) Экспорт
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("АКТ_ПРИЁМА_ПЕРЕДАЧИ_ТОВАРА");
    ОбластьМакетаЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ТабличныйДокумент.Вывести(ОбластьМакетаЗаголовок);

    Возврат ТабличныйДокумент;

КонецФункции
3 AlexKulikov
 
15.02.17
18:47
Блин, коряво вставилось, приношу свои извинения
4 AlexKulikov
 
16.02.17
18:32
Решил вопрос с ошибкой связанной с табличным документом.
В ниже приведенной функции, когда добавлял команду, необходимо указывать макет третьим параметром "Макет_Акт_Приема". Всем спасибо за помощь. С уважением, Алексей.
<code>    
    ДобавитьКоманду(ТаблицаКоманд,"Печатные формы для заказа клиента","Макет_Акт_Приема", "ОткрытиеФормы", Истина, "ПечатьMXL");
    
</code>
5 AlexKulikov
 
16.02.17
18:33
Функция "СведенияОВнешнейОбработке()". Почему то не могу отправить сообщение с полным кодом.
6 AlexKulikov
 
20.02.17
17:36
Добрый день, уважаемые форумчане.
Подскажите пожалуйста, каким образом можно в функцию:
<code>
ДобавитьКоманду(ТаблицаКоманд,"Печатные формы для заказа клиента","Макет_Акт_Приема", "ОткрытиеФормы", Истина, "ПечатьMXL");

</code>

добавить условие, чтобы подставлялся нужный макет(у меня их 4).
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший