Имя: Пароль:
1C
1С v8
Как из отчёта запустить команду внешней печатной формы документа?
0 Креатив
 
21.01.18
16:07
Есть отчёт, в нём есть ссылка на документ. Во внешней печатной форме есть три команды. Необходимо запустить одну из них.
1 Aleksey
 
21.01.18
16:17
42
2 Креатив
 
22.01.18
11:45
(1)И?
3 ildary
 
22.01.18
11:47
(2) Как? Написать код. Какой? Подсмотреть вызов в типовой, ну или пригласить специалиста.
4 Darych
 
22.01.18
11:57
(2) 42
5 Timon1405
 
22.01.18
11:59
(1)(4) ответ будет в 42 сообщении в этой ветке?
6 Гипервизор
 
22.01.18
12:03
7 Креатив
 
22.01.18
12:05
(3)Этот путь мне известен. Вот только "вызов в типовой" можно проискать несколько часов. Может кто-то уже занимался и знает, где копать?
8 Гипервизор
 
22.01.18
12:09
(7) Экий вы скрытный. Платформа, конфигурация? Как именно запустить ВПФ? Ваш отчет сделан на СКД и нужно через расшифровку по ссылке на документ открыть ВПФ? Ничего не ясно, потому ответ в (3).
9 ildary
 
22.01.18
12:11
(8) зачем так быстро раскрывать карты? Ещё не все телепаты и гадалки успели разогреться.
10 ildary
 
22.01.18
12:13
(7) я поискал по коду и нашёл. Даже шрамов на теле не осталось. И мне было стыдно клянчить на форуме помощи, пока не упёрся. И самое смешное - не упёрся, все получилось. Делиться не получится - многое вынес в свои общие модули, придётся все это разгребать.
11 Вафель
 
22.01.18
12:39
модуль ДополнительныеОтчетыИОбработки

Функция ВыполнитьКоманду(ПараметрыКоманды, АдресРезультата = Неопределено) Экспорт
    
    Если ТипЗнч(ПараметрыКоманды.ДополнительнаяОбработкаСсылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")
        Или ПараметрыКоманды.ДополнительнаяОбработкаСсылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    ВнешнийОбъект = ОбъектВнешнейОбработки(ПараметрыКоманды.ДополнительнаяОбработкаСсылка);
    ИдентификаторКоманды = ПараметрыКоманды.ИдентификаторКоманды;
    РезультатВыполнения = ВыполнитьКомандуВнешнегоОбъекта(ВнешнийОбъект, ИдентификаторКоманды, ПараметрыКоманды, АдресРезультата);
    
    Возврат РезультатВыполнения;
    
КонецФункции
12 Креатив
 
22.01.18
13:25
(8)Конфа Розница 2.2. Отчёт будет на СКД, да в расшифровке по ссылке на документ нужно открыть готовую печатную форму (без права выбора).
(11)Спасибо, будем разбираться.
13 Новиков
 
22.01.18
13:39
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(Форма, Команда, Источник);

Параметры:
Форма = ЭтаФорма
Команда = [КомандаФормы]
Источник = Объект, для которого ты собрался получать печатную форму.

[КомандаФормы] - ее можешь получить либо от имени, если ты его знаешь, либо найти имя по заголовку (то, что видишь глазами).
14 Креатив
 
22.01.18
13:43
(13)Круто, благодарю.
15 Креатив
 
23.01.18
20:03
(13)С поиском команды возникли заморочки.
16 Креатив
 
24.01.18
05:08
(13)К сожалению не взлетело. Там в качестве источника нужно таблицу формы передавать. Пришлось выковыривать. Сделал тестовый отчёт в нём реквизит дк - ссылка на документ.
&НаКлиенте
Процедура Печать(Команда)
    Форма = ПолучитьФорму("Документ.ПоступлениеТоваров.Форма.ФормаДокумента");
    Кмд = Форма.Команды.ПодменюПечатьОбычное_ПоступлениеТоваровПродажа;  //имя коамнды из ВПФ
    Источник = Новый Структура;
    Источник.Вставить("Ссылка", дк);
    ИмяКоманды = Кмд.Имя;
    АдресНастроек = Форма.ПараметрыПодключаемыхКоманд.АдресТаблицыКоманд;
    ОписаниеКоманды = ПодключаемыеКомандыКлиентПовтИсп.ОписаниеКоманды(ИмяКоманды, АдресНастроек);
    Контекст = ПодключаемыеКомандыКлиентСервер.ШаблонПараметровВыполненияКоманды();
    Контекст.ОписаниеКоманды = Новый Структура(ОписаниеКоманды);
    Контекст.Форма           = Форма;
    Контекст.Источник        = Источник;
    Контекст.ЭтоФормаОбъекта = Истина;
    Контекст.Вставить("ТребуетсяОпределитьСсылки", Истина);
    Контекст.Вставить("ТребуетсяЗапись", Ложь);
    Контекст.Вставить("ТребуетсяПроведение", Ложь);
    Контекст.Вставить("ТребуетсяРаботаСФайлами", Ложь);
    МассивСсылок = Новый Массив;
    МассивСсылок.Добавить(дк);
    Контекст.Вставить("МассивСсылок", МассивСсылок);
    ПараметрКоманды = МассивСсылок;
    КлиентскийМодуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюСлужебныйКлиент");
    Обработчик = Новый ОписаниеОповещения("ОбработчикКоманды", КлиентскийМодуль, Контекст);
    ВыполнитьОбработкуОповещения(Обработчик, ПараметрКоманды);
КонецПроцедуры
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший