Вход | Регистрация
 

Внешняя печатная форма

Внешняя печатная форма
Я
   Mihasya
 
02.06.20 - 03:26
Натолкните на мысль.
Хочу припилить в ЗУПе к форме элемента "График работы сотрудника" внешнюю печатную форму, как в эту обработку передать "НомерТекущегоГода" который выбран в форме открытого графика?
   strange2007
 
1 - 02.06.20 - 04:08
Внешняя печ.форма знает о документе, к которому прицеплена, а значит из него можно выбрать и текущий год. Там же ссылка на документ передаётся в экспортную процедуру (или функцию???), которая является точкой старта формирования печатной формы
   Chameleon1980
 
2 - 02.06.20 - 04:46
блин автор мозгивключи. как ты думаешь по каким вообще данным строится печ. форма?
   Mihasya
 
3 - 02.06.20 - 05:18
(1) это не документ, это справочник. Ну да не особо это важно, важно то что "НомерТекущегоГода" это не реквизит этого справочника, а реквизит формы из которой и нужно вызвать процедуру печати...
   Mihasya
 
4 - 02.06.20 - 05:20
(2) хочешь сказать это не возможно?
   strange2007
 
5 - 02.06.20 - 05:22
Вот такая вот кода для редактирования формы. Т.е. данные формы доступны
// Отладка возможна только через сложности

// В "ВыполнитьКоманду" необходимо прописать вызов процедуры общего модуля. В которой,
// в свою очередь, можно вызвать отладочную обработку, передав все 3 параметра.

// После отладки необходимо скопировать код в этот модуль.
// Для отладки эту обработку надо подключить к БСП. Пусть она сама и инициирует

// вызов "ВыполнитьКоманду"

#Область Регистрация_в_БСП


Функция СведенияОВнешнейОбработке() Экспорт

    // Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();

    // Версия БСП нужня для того, чтобы вызов был современный. Проверка идёт на

    // версию 1.2.1.4. Надо поставить что-то побольше

    ПараметрыРегистрации.ВерсияБСП = "8.3.11.3034";

    // Список назначений в формате Вид.Тип

    ПараметрыРегистрации.Назначение.Добавить("Документ.НачислениеЗарплаты");
    ПараметрыРегистрации.Назначение.Добавить("Документ.НачислениеЗаПервуюПоловинуМесяца");

    // Вид, в совокупности с типом (использование) указывает БСП что за обработка и что она делать будет

    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();

    // Информационная часть

    ПараметрыРегистрации.Наименование = "Сортировка данных начисления";
    ПараметрыРегистрации.Информация = "Сортировка данных ТЧ документа 'Начисление ЗП'";
    //ПараметрыРегистрации.Версия = "12.07.2018";        // создание


    // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)

    ПараметрыРегистрации.БезопасныйРежим = Истина;
    //ПараметрыРегистрации.БезопасныйРежим = Ложь;


    // Создание списка команд

    //ДобавитьКоманду(ПараметрыРегистрации.Команды, "Сортировка начислений", "ЗаполнениеТЧ", ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода(), Ложь, "");

    ДобавитьКоманду(ПараметрыРегистрации.Команды, "Сортировка начислений", "СортировкаНачислений", ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы(), Истина, "");

            //бнгрэ_ОбщиеМодули.ИсследованиеВнОбработки(ПараметрыРегистрации);


    // Теперь вернем системе наши параметры

    Возврат(ПараметрыРегистрации);
КонецФункции

// Читай описание в коллекции знаний. Там капец какие комбинации.

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

    // Добавляем команду в таблицу команд по переданному описанию.

    // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд

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

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

#КонецОбласти


// Далее вызываемая процедура, в которой можно раскомментировать вызов отладки и тогда будет отладка

// Вызываемая часть.
// Если версия БСП не указана, то вызываемая часть третий параметр не передаст. А именно

// в нём и находится форма, которую можно корректировать. Хотя фиг знает, может мне нужна
// "ЭтаФорма", а не элементы её

//
// Параметры:

// ИдентификаторКоманды - Это та штука, которая указывается третьим параметром в "ДобавитьКоманду"
// ОбъектыНазначения - Неопределено. Не знаю, что это такое, поэтому пофиг.

// ПараметрыВыполнения - Структура, которая состоит из:
//          ДополнительнаяОбработкаСсылка - Ссылка на справочник, в котором эта обработка. Как эту информацию использовать? Сам не знаю.

//          РезультатВыполнения - Структура. В описании ничего про неё не нашёл. Наверное её надо заполнить((((((
//          ЭтаФорма - Сама форма, которую можно редактировать! Ура!

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

    // Вызов отладки

    бнгрэ_ОбщиеМодули.ИсследованиеВнОбработки(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения);

    // Вызов модулей сортировки

    //СортировкаНачислений(ПараметрыВыполнения);


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



// Отладочная процедура должна выглядеть примерно так


#Область Для_отладки_внешних_модулей_БСП


Процедура ИсследованиеВнОбработки(Пар1=Неопределено, Пар2=Неопределено, Пар3=Неопределено) Экспорт

    А = 1;
    ОтладочнаяОбр = ВнешниеОбработки.Создать("d:\Work\По датам\190306 Начисления без копеек\ОтладкаРаспределения.epf", Ложь);
    ОтладочнаяОбр.ВыполнитьКоманду(Пар1, Пар2, Пар3);

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

#КонецОбласти

// В модуле обработки надо внести процедуру

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


// Вот и всё. Нужно настроить внешнюю обработку, расположенную по указанному пути и можно отлаживать, предварительно подключив внешнюю обработку в БСП


Примечание: в подключаемой обработке надо поставить небезопасный режим!
   strange2007
 
6 - 02.06.20 - 05:23
Только отладка гораздо проще. Можно без общего модуля сразу перенаправить вызов в обработку-отладчик
   Mihasya
 
7 - 02.06.20 - 05:40
(5,6) Спасибо, сам уже нашел

В процедуре ВыполнитьКлиентскийМетодОбработки есть вызов процедуры "Печать" на клиенте, как раз то что нужно...

ЭтаФорма.ВладелецФормы.НомерТекущегоГода
   strange2007
 
8 - 02.06.20 - 05:45
(7) Можно и так. Вариантов много. Я просто наугад одну модуль одной из обработок сохранил, что бы в будущем подглядывать, как редактировать форму.
И да, в (5) есть огрехи в том, что не всё с формы доступно. Твой вариант круче. Вопрос только в том, почему же я то этот вариант не записал. Надо исправить
   Mihasya
 
9 - 02.06.20 - 05:56
(8) Единственно мне нужно что б кнопка печати была только в форме элемента, а внешняя печатная форма похоже и к списку цепляется... Похоже не доработали 1С-ники в этом вопросе )) Ну буду проверять из какой формы вызывается печать ))
   strange2007
 
10 - 02.06.20 - 06:11
(9) Это же мегаудобно, когда выделяешь 48 строк и все сразу печатаешь. Народу нравится
   Mihasya
 
11 - 02.06.20 - 06:18
(10) да это понятно, я про саму возможность подключать кнопку печати, нет выбора куда ее подключать, к форме списка или форме элемента )) вот мне не нужно к форме списка, а кнопка все равно подключается... ну да ладно, это уже мелочи
   strange2007
 
12 - 02.06.20 - 06:25
(11) Малость оффтопа: Простейшие механизмы БСП, касающиеся внешних обработок и отчётов, вносят многолетние вопросы для сообщества 1С (я один из этого списка и горжусь своей глупостью!). А теперь представим, что было бы, если создатели БСП добавили бы механизм расположение кнопок. Ещё лет пять непонимания и ненависть к БСП!
Хотя да, согласен, было бы круто, если можно было бы управлять расположением кнопок, с возможностью полного сокрытия.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.