Как открыть или получить форму внешней обработки/отчета из другой формы обработки/отчета (Управляемые формы). Очередной пример

28.07.12

Разработка - Универсальные функции

Описание проблемы: в управляемых формах 1С: Предприятия 8.2. невозможно вызвать другую форму объекта (внешняя обработка, отчет и т.п.) привычным методом обычных форм.

Описание проблемы: в управляемых формах 1С: Предприятия 8.2. невозможно вызвать другую форму объекта (внешняя обработка, отчет и т.п.) привычным методом обычных форм (ПолучитьФорму("ФормаОбработки", ЭтаФорма).ОткрытьМодально();), так как необходимо указывать полный путь к форме. Почему девелоперы 1С так сделали, выяснять бесполезно, ибо неисповедимы пути господни компании Нуралиева и Ко.
В сети предлагаются несколько решений. От примитивного ОткрытьФорму("ВнешняяОбработка.ИмяОбработки.Форма.ИмяФормы");, до навороченных с помещением обработки во временное хранилище с последующим подключением, вызовом WScript.Shell, и всё это с использованием кучи серверных процедур.

Предлагаю ещё один, на этот раз совсем простой и универсальный метод определения полного пути к форме объекта, полностью клиентский, основанный на замещении имени текущей формы переданным значением. Преимуществом  метода является то, что при внедрении внешней обработки/отчёта в конфигурацию или переименовании объекта, не требуется изменять вызовы форм. 

Данную функцию следует поместить в модуль вызывающей формы.

 

// Возвращает полный путь к форме внешней обработки, отчета или любого объекта метаданных в виде
// ВнешняяОбработка.ИмяВнешнейОбработки.Форма.ИмяФормы
// ВнешнийОтчет.ИмяВнешнегоОтчета.Форма.ИмяФормы
// Документ.ИмяОбъекта.Форма.ИмяФормы
//
// ** coded by Sergey (aka Porutchik) * 2012, http://forum.aeroion.ru/
//
// Параметры
//  ИмяФормы  - - имя формы объекта
//
// Возвращаемое значение:
//      - полный путь к форме
//
&НаКлиенте
Функция ПолучитьПолноеИмяФормы(ИмяФормы)

   
СимволТочка = ".";
   
ПозицияТочки = СтрДлина(ЭтаФорма.ИмяФормы);
    Пока
Сред(ЭтаФорма.ИмяФормы, ПозицияТочки, 1) <> СимволТочка Цикл ПозицияТочки = ПозицияТочки - 1; КонецЦикла; //
   
Возврат Лев(ЭтаФорма.ИмяФормы, ПозицияТочки) + ИмяФормы;

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

Пример использования:

        ПараметрыФормы = Новый Структура(); 
        ОткрытьФормуМодально(ПолучитьПолноеИмяФормы("ИмяФормыОбработки"), ПараметрыФормы, ЭтаФорма);

 

Использование функции в существующих работах:

//infostart.ru/public/122215/

//infostart.ru/public/121248/

//infostart.ru/public/88286/

//infostart.ru/public/85228/

См. также

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4353    atdonya    22    

41

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3890    ke.92@mail.ru    16    

60

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8570    YA_418728146    6    

139

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2025    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16022    131    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7203    quazare    8    

108
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alexandr1972_1 29.07.12 01:14 Сейчас в теме
Всё гениальное просто. Никогда бы не додумался, хотя вашими обработками пользуюсь.
2. Поручик 4670 29.07.12 03:12 Сейчас в теме
Если бы в 1С Предприятии была функция поиска символов с конца строки, что-то типа НайтиСправа(), то эта функция состояла бы из одной строки.
3. absolutblohin 03.08.12 19:44 Сейчас в теме
(2) из одной строки говорите?

&НаКлиенте
Функция ПолучитьПолноеИмяФормы(ИмяФормы)

Возврат Лев(ЭтаФорма.ИмяФормы, СтрДлина(ЭтаФорма.ИмяФормы) - СтрДлина(СтрПолучитьСтроку(СтрЗаменить(ЭтаФорма.ИмяФормы, ".", Символы.ПС), СтрЧислоСтрок(СтрЗаменить(ЭтаФорма.ИмяФормы, ".", Символы.ПС))))) + ИмяФормы;

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

(это шутка, так программировать не хорошо :-)(-:))(-::-)))) (это имитация хаоса из смайликов))
DrSender; dour-dead; +2 Ответить
5. DrSender 82 23.06.13 13:41 Сейчас в теме
(3) absolutblohin , а вот так?

&НаКлиенте

Функция ПолучитьПолноеИмяФормы(ИмяФормы)

Возврат Лев(ЭтаФорма.ИмяФормы, Найти(ЭтаФорма.ИмяФормы,".Форма.")+6)+ ИмяФормы);

КонецФункции
Synoecium; AlexO; gigabyte-leha; Поручик; +4 Ответить
6. Поручик 4670 23.06.13 14:00 Сейчас в теме
(5) И это можно принять как вариант. Оригинальный алгоритм вообще состоял из парсинга имени формы на массив строк и замещения последнего элемента массива на переданное значение. В общей сложности десяток строк.
12. AlexO 135 23.02.15 20:06 Сейчас в теме
(5) shage,
&НаКлиенте

Возврат Лев(ЭтаФорма.ИмяФормы, Найти(ЭтаФорма.ИмяФормы,".Форма.")+6)+ ИмяФормы)
...
лишняя скобка, должно быть так:
&НаКлиенте 

Функция ПолучитьПолноеИмяФормы(ИмяФормы) 

Возврат Лев(ЭтаФорма.ИмяФормы, Найти(ЭтаФорма.ИмяФормы,".Форма.")+6) + ИмяФормы; 

КонецФункции
17. user1457947 02.09.20 08:02 Сейчас в теме
Теперь можно и одной строчкой

Лев(ЭтаФорма.ИмяФормы, СтрНайти(ЭтаФорма.ИмяФормы, ".", НаправлениеПоиска.СКонца)) + "ИмяФормы"
zastep; nayd; +2 Ответить
4. alex_davydov 79 25.01.13 17:00 Сейчас в теме
Спасибо тебе, хороший человек, за подсказку, а то я уже голову сломал, думая как это сделать :)
7. Поручик 4670 23.06.13 14:07 Сейчас в теме
Забыл сказать, потом массив собирался обратно в строку.
8. maikl007 91 26.09.13 05:53 Сейчас в теме
&НаСервере
Функция ВернутьМакет(ИмяМакета)

ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Возврат ОбработкаОбъект.ПолучитьМакет(ИмяМакета);

КонецФункции // ВернутьМакет()

&НаКлиенте
Процедура НадписьВариантыЗагрузкиНажатие(Элемент)

ПолноеИмяФормы = Лев(ИмяФормы, Найти(ИмяФормы,".Форма.")+6)+ "Инструкции";
Форма = ПолучитьФорму(ПолноеИмяФормы);
Форма.ПолеДокумента = ВернутьМакет("ВариантыЗагрузкиДокументов");
Форма.Открыть();

КонецПроцедуры
9. Tavalik 3348 14.08.14 11:30 Сейчас в теме
Спасибо. Действительно все просто и работает.
10. shoy 19 22.08.14 15:28 Сейчас в теме
Класс! А я то думал ...
%)
11. AndrewVVS 12.12.14 15:54 Сейчас в теме
В типовой Бухгалтерии в общем модуле "ВариантыОтчетовПереопределяемый" - тема таже?

Функция ОбъектОтчета(ЭтаФормаИмя) Экспорт

Если Найти(ЭтаФормаИмя, "Внешний") > 0 Тогда
ФормаИмя = СтрЗаменить(ЭтаФормаИмя, "Внешний", "");
Возврат ВнешниеОтчеты.Создать(Сред(Лев(ФормаИмя, Найти(ФормаИмя, ".Форма.") - 1), 7));
Иначе
Возврат Отчеты[Сред(Лев(ЭтаФормаИмя, Найти(ЭтаФормаИмя, ".Форма.") - 1), 7)].Создать();
КонецЕсли;

КонецФункции
13. pereligins 21 17.11.16 15:50 Сейчас в теме
Да это же гениально! =) Спасибо!
14. alexvbard 20 24.09.17 12:14 Сейчас в теме
Спасибо! Очень выручило!
15. CoSting 07.11.17 17:28 Сейчас в теме
Не получается открыть форму зарегистрированной внешней обработки((( Помогите пожалуйста!
16. vis_tmp 32 21.09.18 14:18 Сейчас в теме
Оставьте свое сообщение