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


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

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

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

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