Добавить внешнюю печатную форму в Подменю печати

1. Guyer 21 08.04.19 22:36 Сейчас в теме
Доброго времени суток. Сразу начну: есть внешняя печатная форма, она загружена в ДополнительныеОтчетыИОбработки, в ее модуле есть функция и процедура

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


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


и сведения о ней, в которых формируется команда

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



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


Смотрел Модуль менеджера
Использовал МестоРазмещения - не помогло
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 09.04.19 08:25 Сейчас в теме
Полагаю, что для внешней печатной формы определить местоположение ее команды не получится. Все они попадают в один список.

Если не ошибаюсь, 1С в таких случаях для печатных форм рекомендуют использовать не подключаемые ВПФ, а ПФ в расширениях.
6. Guyer 21 09.04.19 13:58 Сейчас в теме
(2) Я тоже думаю что скорее всего так и придётся делать.
3. andy_zhav 197 09.04.19 11:08 Сейчас в теме
Нужно изменить функцию ПолучитьТаблицуКоманд() и процедуру ДобавитьКоманду()

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

  Возврат Команды;
КонецФункции

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

 
КонецПроцедуры
Показать
4. dhurricane 09.04.19 12:54 Сейчас в теме
(3) Извините, а это для какой версии БСП должно сработать? В версии 3.0.2 нет реквизитов доп. отчетов и обработок для хранения места размещения.
9. andy_zhav 197 09.04.19 14:57 Сейчас в теме
(4) 3.0.2 не смотрел, если честно. Это для 2.4. Ща гляну для 3.0.2
5. Guyer 21 09.04.19 13:57 Сейчас в теме
(3) Пробовал - не помогло.
7. meriferi 09.04.19 14:11 Сейчас в теме
кнопка <Произвольное подменю> и внешнюю печатную форму добавить с нужным параметром
8. Guyer 21 09.04.19 14:29 Сейчас в теме
(7) Можно попродробнее...
10. user5300 1079 09.04.19 16:03 Сейчас в теме
Это модуль внешней обработки
Функция СведенияОВнешнейОбработке() Экспорт
	ОбъектыНазначенияФормы = Новый Массив;
	ОбъектыНазначенияФормы.Добавить("Справочник.Сотрудники");
	ПараметрыРегистрации = ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы, "Справка о доходах");
	ПараметрыРегистрации.Версия = "3.1.4.120";
	ПараметрыРегистрации.Информация = "Внешняя печатная форма справок о доходах";
	
	ТаблицаКоманд = ПолучитьТаблицуКоманд();
	ДобавитьКоманду(ТаблицаКоманд,
	"Справка о средней заработной плате и других доходах", // Представление команды в пользовательском интерфейсе
	"Справка_о_доходах", // Уникальный идентификатор команды
	"ОткрытиеФормы",//"ВызовСерверногоМетода", // Использование команды //ОткрытиеФормы
	Истина, // Показывать оповещение.
	"ПечатьXML" // Дополнительный модификатор команды.
	);
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "", Информация = "", Версия = "1.0.0")

	Если ТипЗнч(ОбъектыНазначенияФормы) = Тип("Строка") Тогда
		ОбъектНазначенияФормы = ОбъектыНазначенияФормы;
		ОбъектыНазначенияФормы = Новый Массив;
		ОбъектыНазначенияФормы.Добавить(ОбъектНазначенияФормы);
	КонецЕсли;

	ПараметрыРегистрации = Новый Структура;
	//ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОтчет");   
	//ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
	ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
	
	
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);

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

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

		ПараметрыРегистрации.Вставить("Версия", Версия);

	Возврат ПараметрыРегистрации;

КонецФункции

Функция ПолучитьТаблицуКоманд()

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

КонецФункции

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

КонецПроцедуры 
Показать
11. user5300 1079 09.04.19 16:19 Сейчас в теме
(10) ошибочка вышла, вот правильная
Функция СведенияОВнешнейОбработке() Экспорт
ОбъектыНазначенияФормы = Новый Массив;
ОбъектыНазначенияФормы.Добавить("Справочник.Сотрудники");
ПараметрыРегистрации = ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы, "Справка о доходах");
ПараметрыРегистрации.Версия = "3.1.4.120";
ПараметрыРегистрации.Информация = "Внешняя печатная форма справок о доходах";
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Справка о средней заработной плате и других доходах", // Представление команды в пользовательском интерфейсе
"Справка_о_доходах", // Уникальный идентификатор команды
"ОткрытиеФормы",//"ВызовСерверногоМетода", // Использование команды //ОткрытиеФормы
Истина, // Показывать оповещение.
"ПечатьXML" // Дополнительный модификатор команды.
);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "", Информация = "", Версия = "1.0.0")

Если ТипЗнч(ОбъектыНазначенияФормы) = Тип("Строка") Тогда
ОбъектНазначенияФормы = ОбъектыНазначенияФормы;
ОбъектыНазначенияФормы = Новый Массив;
ОбъектыНазначенияФормы.Добавить(ОбъектНазначенияФормы);
КонецЕсли;

ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Назначение", ОбъектыНазначенияФормы);

Если Не ЗначениеЗаполнено(НаименованиеОбработки) Тогда
НаименованиеОбработки = ЭтотОбъект.Метаданные().Представление();
КонецЕсли;
ПараметрыРегистрации.Вставить("Наименование", НаименованиеОбработки);

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

ПараметрыРегистрации.Вставить("Версия", Версия);

Возврат ПараметрыРегистрации;

КонецФункции

Функция ПолучитьТаблицуКоманд()

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

КонецФункции

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

КонецПроцедуры 
Показать

В подменю печати
12. Guyer 21 10.04.19 12:55 Сейчас в теме
(11) Так в подменю печать она и так попадает, мне же нужно чтобы чтобы в Подменю Печать, попала в Подменю Факисимле
13. user5300 1079 10.04.19 13:17 Сейчас в теме
(12) не совсем понял, но думаю эта статья поможет https://infostart.ru/public/558559/
14. pehatuk 13 24.02.22 11:22 Сейчас в теме
Скорее всего после формирования списка команд печати, нужную команду необходимо переместить в группу "ПодменюПечатьФаксимиле".
15. pehatuk 13 24.02.22 12:29 Сейчас в теме
Вот решение:

1. У идентификатора внешней печатной формы добавить слово Факсимиле
НоваяКоманда.Идентификатор = "ФаксимилеЗаказЗаНаличку";

2. Добавить процедуру через расширение в "ПечатьДокументовУНФ" после:

&После("КорректировкаРазмещениеПодчиненнойГруппыКомандПечати")
Процедура инт_КорректировкаРазмещениеПодчиненнойГруппыКомандПечати(Форма, ЭлементФормы_ПодменюПечать, ЭлементФормы_ГруппаКомандУНФ)
	Если ЭлементФормы_ГруппаКомандУНФ.Имя = "ПодменюПечатьФаксимиле" тогда 
		
		ИмяГруппыФормыФаксимиле = "ПодменюПечатьФаксимиле";
		ГруппаФормыСКомандамиПечатиФаксимиле = Форма.Элементы.Найти(ИмяГруппыФормыФаксимиле);
		НачалоИмениЭлемента = "ПодменюПечатьОбычное_Факсимиле";
		Для Каждого Элемент из Форма.Элементы цикл
			Если Лев(Элемент.Имя,СтрДлина(НачалоИмениЭлемента)) = НачалоИмениЭлемента тогда
				Форма.Элементы.Переместить(Элемент, ГруппаФормыСКомандамиПечатиФаксимиле);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;	
КонецПроцедуры
Показать


Так работает!!!
user682948_rusmaxval; puhshok; vovan221980; ankr; +4 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот