Передача параметров во внешнюю печатную форму для УТ 10.3
Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
По теме из базы знаний
- Передача параметров/значений во внешнюю печатную форму для конфигураций на БСП (1С:Предприятие 8.2/8.3)
- QR - кодирование документов БЕЗ изменения печатных форм, с произв. алгоритмами создания QR -кода и обработки (в т.ч прикрепление сканов к документам) для УТ 11 (все), ERP 2, КА 2, Розница 2, УНФ 1.6/3.0, БП 3, ЗУП 3
- Отправка электронной почты с помощью локального почтового клиента из 1С, развернутой под удаленным рабочим столом
- Первоначальная настройка 1С:Управление торговлей 11
- Выгрузка УПД в Контур Диадок для 1С:Управление торговлей 10.3 в ред. Приказа 02.04.2021 №534
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8)
Она туда уже будет загнана на момент вызова функции Печать() модуля внешней обработки типовым кодом вызова доп. обработки
(8)
кто вам такое сказал? там может хранится все то же, что и в обычной структуре в качестве значения элемента.
Как вы предлагаете загнать структуру в ДополнительныеПараметры?
Она туда уже будет загнана на момент вызова функции Печать() модуля внешней обработки типовым кодом вызова доп. обработки
(8)
Там могут храниться только примитивные типы насколько я знаю.
кто вам такое сказал? там может хранится все то же, что и в обычной структуре в качестве значения элемента.
(12) Вы наверно не дочитали задачу. Есть обработка в которой выбирается реализация при отправке на печать выбирается руководитель для подписи. Печатается Торг12 и счет-фактура из документов. Т.к. Ут 10.3 снята с поддержки (если вы об этом не знали) обновления для новой счет-фактуры нет, и она прикрепляется в виде внешней печатной формы. Изменять конфигурацию из-за этого желания нет (в частности добавлять новые параметры сеанса). Могу переписать обработку и внешнюю печатную форму.
Т.е. не нужно постоянно измененное имя руководителя. Его можно изменить и в другом месте, а не в дополнительных параметрах. Нужно менять подписанта при каждой печати.
Т.е. не нужно постоянно измененное имя руководителя. Его можно изменить и в другом месте, а не в дополнительных параметрах. Нужно менять подписанта при каждой печати.
(11) ДополнительныеПараметры имеет произвольный тип данных. Типовой алгоритм вызова внешней обработки формирует структуру.
Функция Печать() Экспорт
ТабДок = Новый ТабличныйДокумент;
//Ничто не мешает сделать так в другой форме обработки:
Руководитель = ОткрытьМодальноФормуВыбораФизЛица();
ДополнительныеПараметры.Вставить("Руководитель", Руководитель);
.........
КонецФункции
Показать
(18) Это я понимаю, каким образом это у вас реализовано на данный момент в коде?
Так понимаю, что-то вроде:
Так понимаю, что-то вроде:
РуководительДляПодписи = ОткрытьМодальноФормуВыборавФизЛица();
ДопОбработка = Справочники.ДополнительныеОбработки.Найти("НаименованиеОбработки");
ОбработкаОбъект = ВнешниеОбработки.Подключить(ИмяВременногоФайла, ИмяРегистрацииОбработки);
ВПФ = ВнешниеОбработки.ИмяРегистрацииОбработки.Создать();
ВПФ.СсылкаНаОбъект = СсылкНаСчетФактура;
ТабДок = ВПФ.Печать();
(19) После того, как я сделал все через Дополнительные параметры. Понял, что перезаписывать при каждой печати элемент справочника ВнешниеОбработки - это не выход. И просто передаю руководителя через ХранилищеОбщихНастроек. Думаю - это оптимально.
Перед печатью внешней формы сохраняю руководителя в хранилище, при печати достаю, после печати удаляю.
Перед печатью внешней формы сохраняю руководителя в хранилище, при печати достаю, после печати удаляю.
(22) я вам уже битые стопицот сообщений пытаюсь донести мысль о том, что не нужно вообще ничего никуда записывать и потом еще стирать - все работает через ДополнительныеПараметры дополнительной обработки.
От вас хочу увидеть реализацию в коде получения нужного руководителя и формирования печатной формы нужного документа, чтобы показать каким образом можно использовать ДополнительныеПараметры, но так понимаю, ваша реализация кодом сильно секретная.
Не буду настаивать, ваш вариант с помощью хранилища настроек рабочий.
От вас хочу увидеть реализацию в коде получения нужного руководителя и формирования печатной формы нужного документа, чтобы показать каким образом можно использовать ДополнительныеПараметры, но так понимаю, ваша реализация кодом сильно секретная.
Не буду настаивать, ваш вариант с помощью хранилища настроек рабочий.
(23) Нет ничего секретного. Хотите увидеть код с Дополнительными Параметрами - пожалуйста
Соответственно во внешней форме я сначала проверяю есть ли что в дополнительных параметрах
Вот такой код
Руководители = Новый Структура;
Руководители.Вставить("Руководитель", ВыбРуководитель);
Руководители.Вставить("ГлавныйБухгалтер", ВыбРуководитель);
СсылкаВнОбработки = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Счет-фактура1096");
ОбъектВнОбработки = СсылкаВнОбработки.ПолучитьОбъект();
ОбъектВнОбработки.Принадлежность[0].ДополнительныеПараметрыОбработки = Руководители;
ОбъектВнОбработки.Записать();
ДеревоМакетовПечати = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(СсылкаНаДокумент, Неопределено);
СтрокаКнопки = ДеревоМакетовПечати.Строки.Найти("Счет-фактура1096","Текст");
Расшифровка = СтрокаКнопки.Расшифровка;
Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(СсылкаНаДокумент, Расшифровка);
Если ТабДокумент <> Неопределено Тогда
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент);
КонецЕсли;
КонецЕсли;
ОбъектВнОбработки.Принадлежность[0].ДополнительныеПараметрыОбработки = "";
ОбъектВнОбработки.Записать();
ПоказатьСоответственно во внешней форме я сначала проверяю есть ли что в дополнительных параметрах
Если Не ДополнительныеПараметры.Свойство("Руководитель") = Неопределено Тогда
Макет.Параметры.Руководитель = ДополнительныеПараметры.Руководитель;
КонецЕсли;
Вот такой код
(28) А теперь следите за руками, как говорится:
Просто я не уверен, что ДополнительныеПараметрыОбработки находятся "в корне" структуры Расшифровка.
Руководители = Новый Структура;
Руководители.Вставить("Руководитель", ВыбРуководитель);
Руководители.Вставить("ГлавныйБухгалтер", ВыбРуководитель);
ДеревоМакетовПечати = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(СсылкаНаДокумент, Неопределено);
СтрокаКнопки = ДеревоМакетовПечати.Строки.Найти("Счет-фактура1096","Текст");
Расшифровка = СтрокаКнопки.Расшифровка;
Расшифровка.ДополнительныеПараметрыОбработки = Руководители;
Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(СсылкаНаДокумент, Расшифровка);
Если ТабДокумент <> Неопределено Тогда
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент);
КонецЕсли;
КонецЕсли;
ПоказатьПросто я не уверен, что ДополнительныеПараметрыОбработки находятся "в корне" структуры Расшифровка.
(25) Метод так и называется УниверсальныеМеханизмы.НапечататьВнешнююФорму.
ДеревоМакетовПечати = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(СсылкаНаДокумент, Неопределено);
СтрокаКнопки = ДеревоМакетовПечати.Строки.Найти("Счет-фактура1096","Текст");
Расшифровка = СтрокаКнопки.Расшифровка;
Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(СсылкаНаДокумент, Расшифровка);
Если ТабДокумент <> Неопределено Тогда
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент);
КонецЕсли;
КонецЕсли;
Показать
(27) Это стандартная структура дерева значений для выбранного макета. У вас что Ут 10 нет? Ладно. Вот вам стандартная функция из Ут 10
Функция НапечататьВнешнююФорму(Ссылка, ИсточникМакета) Экспорт
ДвоичныеДанные = ИсточникМакета.СсылкаНаВнешнююОбработку.Принадлежность[ИсточникМакета.НомерСтроки - 1].ХранилищеВнешнейОбработки.Получить();
Если ДвоичныеДанные = Неопределено Тогда
ДвоичныеДанные = ИсточникМакета.СсылкаНаВнешнююОбработку.ХранилищеВнешнейОбработки.Получить();
КонецЕсли;
ДополнительныеПараметры = ИсточникМакета.СсылкаНаВнешнююОбработку.Принадлежность[ИсточникМакета.НомерСтроки - 1].ДополнительныеПараметрыОбработки.Получить();
Если ДвоичныеДанные = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ТабДокумент = Неопределено;
ИмяФайла = ПолучитьИмяВременногоФайла("epf");
Попытка
ДвоичныеДанные.Записать(ИмяФайла);
Обработка = ВнешниеОбработки.Создать(ИмяФайла);
Обработка.СсылкаНаОбъект = Ссылка;
// Передать внешней обработке дополнительные параметры
Если ДополнительныеПараметры <> Неопределено Тогда
// Если у внешней обработки есть реквизит для дополнительных параметров, присвоить ему значение
Если НЕ Обработка.Метаданные().Реквизиты.Найти("ДополнительныеПараметры") = Неопределено Тогда
Обработка.ДополнительныеПараметры = ДополнительныеПараметры;
КонецЕсли;
КонецЕсли;
ТабДокумент = Обработка.Печать();
УдалитьФайлы(ИмяФайла);
Если ТипЗнч(ТабДокумент) = Тип("ТабличныйДокумент") И (ПустаяСтрока(ТабДокумент.ИмяПараметровПечати)) Тогда
Попытка
ИдентификаторОбработки = Строка(ИсточникМакета.СсылкаНаВнешнююОбработку.УникальныйИдентификатор());
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_" + СтрЗаменить(ИдентификаторОбработки, "-", "_");
ТабДокумент.ИмяПараметровПечати = ТабДокумент.ИмяПараметровПечати + "_" + Ссылка.Метаданные().Имя;
Исключение
КонецПопытки;
КонецЕсли;
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось сформировать внешнюю печатную форму!");
КонецПопытки;
Возврат ТабДокумент;
КонецФункции
Показать
(30) Если УТ10 настолько старая, что оперирует ДополнительныеПараметры в виде ХЗ, то заверните свою структуру с руководителями в ХЗ, делов-то.
Не нужно ее при этом в сам элемент справочника пихать и перезаписывать.
Расшифровка.СсылкаНаВнешнююОбработку.Принадлежность[ИсточникМакета.НомерСтроки - 1].ДополнительныеПараметрыОбработки = Новый ХранилищеЗначений(Руководители, Новый СжатиеДанных(9));
Не нужно ее при этом в сам элемент справочника пихать и перезаписывать.
(31) Ут 10 Самая новая 10.3.88.3. И новее, дорогой мой, уже похоже не будет. Что поделаешь, что дополнительные параметры у них сделаны как ХЗ. Но это один из способов перенести во внешнюю печатную форму свои параметры. Согласитесь, что через ОХЗ получается менее геморойно.
(32)
Как бы намек на то, а что будет, если несколько человек одновременно будут печатать свои комплекты с разными подписантами?
Согласитесь, что через ОХЗ получается менее геморойно.
Ага. Ты же их потом за собой очищаешь? Или они продолжают храниться в разрезе пользователей?
Как бы намек на то, а что будет, если несколько человек одновременно будут печатать свои комплекты с разными подписантами?
(33) Конечно. Мало того, что записываются для каждого пользователя, чтобы они лбами не сталкивались, но и после печати удаляются. Внешнюю форму ведь можно и просто из счет-фактуры распечатать (без обработки). Тогда там заполняются стандартные руководитель и главный бухгалтер. Если не удалю такая свистопляска пойдет.
(32)
У меня есть ЗУП КОРП 2.5 последней доступной версии, там выглядит несколько иначе:
Нет, хотя бы тем, что это еще очищать нужно, если пользователь отправит подряд несколько комплектов на печать с разными подписантами, то что в итоге получится - одному ктулху известно.
Ут 10 Самая новая 10.3.88.3.
У меня есть ЗУП КОРП 2.5 последней доступной версии, там выглядит несколько иначе:
Функция НапечататьВнешнююФорму(Ссылка, ИсточникМакета) Экспорт
Перем ДополнительныеПараметры;
ДвоичныеДанные = ИсточникМакета.СсылкаНаВнешнююОбработку.Принадлежность[ИсточникМакета.НомерСтроки - 1].ХранилищеВнешнейОбработки.Получить();
// Получить дополнительные параметры внешней обработки
ИсточникМакета.Свойство("ДополнительныеПараметрыОбработки", ДополнительныеПараметры);
Если ДвоичныеДанные = Неопределено Тогда
ДвоичныеДанные = ИсточникМакета.СсылкаНаВнешнююОбработку.ХранилищеВнешнейОбработки.Получить();
КонецЕсли;
Если ДвоичныеДанные = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ТабДокумент = Неопределено;
ИмяФайла = ПолучитьИмяВременногоФайла("epf");
Попытка
ДвоичныеДанные.Записать(ИмяФайла);
Обработка = ВнешниеОбработки.Создать(ИмяФайла);
Обработка.СсылкаНаОбъект = Ссылка;
// Передать внешней обработке дополнительные параметры
Если ДополнительныеПараметры <> Неопределено Тогда
// Если у внешней обработки есть реквизит для дополнительных параметров, присвоить ему значение
Если НЕ Обработка.Метаданные().Реквизиты.Найти("ДополнительныеПараметры") = Неопределено Тогда
Обработка.ДополнительныеПараметры = ДополнительныеПараметры;
КонецЕсли;
КонецЕсли;
ТабДокумент = Обработка.Печать();
УдалитьФайлы(ИмяФайла);
Исключение
ОбщегоНазначенияЗК.СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось сформировать внешнюю печатную форму!");
КонецПопытки;
Возврат ТабДокумент;
КонецФункции
ПоказатьСогласитесь, что через ОХЗ получается менее геморойно.
Нет, хотя бы тем, что это еще очищать нужно, если пользователь отправит подряд несколько комплектов на печать с разными подписантами, то что в итоге получится - одному ктулху известно.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот