Как открыть вторую форму внешней обработки в управляемом приложении 1С
Многие сталкиваются с проблемой при использовании внешних отчетов и обработок в управляемом приложении: если необходимо открыть вторую форму обработки, то данные, введенные на первой форме не доступны. То есть, вторая форма открывается, как бы, отдельно от первой, как новый экземпляр обработки.
В этой статье мы рассмотрим способ, с помощью которого можно открыть вторую (а также третью, четвертую и т.д.) форму внешней обработки, не потеряв при этом данные, введенные на первой форме. Опустим моменты, связанные с созданием кнопок и процедур открытия форм и перейдем сразу к процедуре переноса данных из первой управляемой формы во вторую. Кстати, об открытии форм в управляемом приложении можно почитать тут.
Итак, первое, что нужно сделать — это поместить все данные внешней обработки, введенные на первой форме, в некоторое хранилище. Для этого используем функцию ПоместитьВоВременноеХранилище(). В нее нужно передать все данные внешней обработки. В целом код выглядит так:
&НаКлиенте
Процедура ОткрытьВторуюФорму ( )
Теперь нужно во второй управляемой форме принять и обработать данные. Это делается через обработчик события ПриСозданииНаСервере().
При закрытии второй формы нужно сделать то же самое: собрать все данные в хранилище, передать в процедуру оповещения в первой форме и обработать там.
&НаКлиенте
Процедура ЗакрытьФорму ( )
//Закрываем форму, передав параметры.
Закрыть ( _Параметры ) ;
А в первой форме создаем процедуру, для которой делали описание оповещения. В ней обрабатываем принятые данные.
Если РезультатЗакрытия = Неопределено Тогда
Возврат ;
КонецЕсли ;
Как открыть вторую форму внешней обработки в управляемом приложении 1С : 1 комментарий
«&НаКлиенте
Процедура ОткрытьВторуюФорму ()
//Обойдем в цикле все реквизиты внешней обработки и запишем их в структуру
_Объект = РеквизитФормыВЗначение(«Объект»);»
Программирование в 1С для всех
В этой статье я разберу особенности программного открытия обработок в 1С. Мы узнаем, как открыть форму обработки, как открыть форму внешней обработки из самой внешней обработки, а также как открыть форму внешней обработки из клиентского режима платформы 1С 8.3.
Открыть форму обработки 1С
Начнем с того, что саму по себе открыть программной обработку нельзя. Можно открыть какую-либо из форм обработки. Для программного открытия управляемой формы обработки необходимо использовать метод ОткрытьФорму.
В первой статье, в которой мы начали знакомиться с обработками в 1С, я создал обработку «Обработка для примера» с формой.
В этой статье я покажу, как открыть программно форму этой обработки из другой обработки «Обработка1». Для этого у Обработки1 я создал управляемую форму и команду формы.
В клиентском обработчике команды, напишем код, который будет открывать основную форму обработки.
Какая именно форма обработки будет открыта, можно указать в контекстной подсказке, которая появляется после ввода названия обработки.
После, в результате выполнения команды, в отдельном окне будет открываться форма обработки «Обработка для примера».
Открыть форму внешней обработки 1С
Если нам необходимо, чтобы из одной формы внешней обработки открылась другая форма этой же внешней обработки, то также необходимо использовать метод ОткрытьФорму, как в примере выше, только вместо слова Обработка необходимо написать ВнешняяОбработка.
Разберем пример. Пусть, у внешней обработки будут две формы: Основная и Дополнительная.
На основной форме создадим команду «Открытие дополнительной», при выполнении которой будет открываться дополнительная форма.
У этой команды будет клиентский обработчик события, со следующим кодом:
Теперь, открыв внешнюю обработку, мы сможем из её основной формы открыть дополнительную.
Открыть внешнюю обработку 1С
Выше мы разбирали пример, когда внешняя обработка открыта, и нам нужно открыть форму внешней обработки из самой внешней обработки, но иногда возникают задачи, когда нужно открыть форму внешней обработки из какого-то другого места, зная путь к этой обработке на жестком диске, или выбрав непосредственно файл обработки.
Разберем эту задачу. Откроем внешнюю обработку из обработки, которую создали в предыдущей статье, и с которой работали уже в этой — «Обработка 1».
В этой обработке создадим команду, при выполнении которой откроется форма внешней обработки.
В форме обработки напишем следующий код:
Код работает, начиная с платформы 8.3.15.
В вышеприведенном коде, процедура ОткрытьВнешнююОбработку — обработчик команды «Открыть внешнюю обработку», в этом обработчике используется метод НачатьПолучениеФайлаНаСервер, который выполнен в варианте открытия диалога выбора файла. После выбора файла срабатывает процедура описания оповещения ПослеВыбораФайла. В этой процедуре получается адрес временного хранилища файла (переменная Адрес), по которому находится название внешней обработки (в серверной процедуре ПолучитьИмяВнешнейОбработки), а потом эта внешняя обработка открывается.
После выполнения команды, откроется окно выбора файла внешней обработки.
Если файл будет выбран, внешняя обработка откроется.
Статьи про открытие форм:
Статьи по конфигурированию в 1С:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Как во внешней обработке открыть форму выбора? Код.
Дали задание доделать обработку внешнюю, чтоб сначала открывалась форма выбора комиссии. Сама форма уже есть написанная, осталось понять как её вывести перед открытием обработки.
Не выводит. Ошибок не пишет никаких, но и сразу открывается основная форма. Если писать без
то будет вылезать ошибка «Интерактивные действия не доступны».
Также пробовал через
В программировании совсем недавно, пытаюсь вот совладать с этим.
Делаю под управляемые формы.
Какой код здесь нужен?
Решение не моё! а Pavel Rodinchenko
в модуле ФОРМЫ СПИСКА документа требование накладная, в процедуре «Подключаемый_ВыполнитьКоманду» проверять на имя своей команды
Если Команда.Имя = «ПодменюПечатьОбычное_АктСписанияВнешний» Тогда
// заполнить комиссию в ТЧ обработки
// заполнить комиссию в ТЧ документа
И уже полученные значения хранить, но все дело в том, что тебе придется перезаписывать документ. А если хочешь именно для печатной формы самой это сделать, то я бы делал следующий образом: поискал бы возможность, чтобы отключить проверку на проведенность документа, потом делал бы действия описанные выше.
Это если конфигурация снята с поддержки.
Наверно у вас обычные форма, а не управляемые.
Тогда на форме обработки создай кнопку.
ОткрытьФорму(«ВнешняяОбработка.КуКу.Форма.ФормаВыбора»
(10)У Вас есть обработка. В ней есть форма, назовем ее «Основная», которая открывается по умолчанию и вместо которой Вам необходимо открыть форму для выбора комиссии, пусть называется «Комиссия».
Для чего это может понадобиться?
1) Допустим, вы решили складировать все регламенты и настройки для них в одной обработке. Соответственно ваша форма для этой обработки становится все больше и страшнее. Вам придётся что-то скрывать\показывать.
2) Вы собираете форму программно и вдруг заметили, что код по формированию уже стал километровым.
3) У Вас есть универсальные Процедуры\Функции, вы их держите в модуле обработки и вам нужны разные формы для работы с этими процедурами\функциями.
Мысли вслух:
Сам лично я живу с одной формой и мог бы просто ответить не предусмотрено и приложить кусок кода из БСП:
Сам ответ кроется тут: ОткрытьФорму(«ВнешняяОбработка.»+ ИмяОбработки +«.Форма», ПараметрыОбработки, Форма);
В описании функции ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы написано следующее:
То есть открывается форма которая определена в обработке.
Вообще если посмотреть внимательно видно, что в БСП даже не затевали возможность вывода нескольких форм.
В противном случае они бы сделали прикручивание вывода каждой формы к определенной подсистеме.
Такой ответ был бы прост, но.
С другой стороны:
-Есть возможность регулирования быстрого доступа с установкой видимости под конкретных пользователей.
-Есть возможность добавлять формы.
-Есть возможность добавлять несколько команд с открытием формы.
В итоге на работе в пятницу час перед уходом сидел и баловался с кодом. По принципу «придумать минимум два решения».
На первый взгляд, задача сводится к тому, что нужно заменить вот этот злополучный кусок кода:
На что его менять?
У нас есть Идентификатор команды с помощью этого идентификатора можно было бы передать название формы:
Можно использовать ВыполняемаяКоманда.Модификатор и загнать сюда название формы:
Как мы видим он занят только для команды с типом «ПечатнаяФорма», следовательно можно для команды «ОткрытиеФормы» использовать его как контейнер для названия формы
А давайте сделаем.
2 Добавил формы с надписью которая говорит какая форма открыта
3 Скачал БСП 3.0.3.48 и развернул демо конфигурацию (Для примера 1.1) использовал платформу 8.3.12.1685
А] Форму передаем через Идентификатор
Создал расширение upBSP:
Добавил в расширение модуль ДополнительныеОтчетыИОбработкиКлиент
Собственно все, пробуем и радуемся!
Б] Форму передаем через Модификатор
В Модификатор команды мы будем писать либо название формы, либо путь к форме объекта конфигурации.
Когда мы пишем путь к объекту конфигурации в идентификатор команды добавляем кодовый ключ «upBSP».
НоваяКоманда.Идентификатор = «ДемоБанковскиеСчетаФормаСписка_upBSP«;
НоваяКоманда.Модификатор = «Справочник._ДемоБанковскиеСчета.ФормаСписка«;
Собственно все, пробуем и радуемся!
После чего решил его сделать и остановится. Мало ли, что еще в голову придет.
. Слабонервным просьба не читать.
1 В обработке создаем форму «ФормаРаспределения» и прописываем ее как основную форму.
2 В Функции СведенияОВнешнейОбработке просто описываем команды, без извращений. Как обычно.
Обратите внимание: //Открываем форму «Справочник._ДемоБанковскиеСчета.ФормаСписка»
То есть открывать формы не только обработки мы будем.
3 В форме «ФормаРаспределения» добавляем немного кода
Как программно открыть внешний отчет из «Дополнительных отчетов и обработок» и передать параметры (при помощи БСП)
Дано: конфигурация на платформе 1С 8.3. В «Дополнительные отчеты и обработки» загружен отчет или обработка.
Задача: открыть данный отчет/обработку программно в коде, например, по кнопке.
В моем случае нужно было на одну из форм документа в конфигурации добавить кнопку, которая бы открывала внешний отчет (зарегистрированный через дополнительные отчеты и обработки), с фильтром по данному документу. Чтобы не изменять саму конфигурацию, было сделано расширение к данному документу (расширения здесь не будут рассматриваться, данное описание только в качестве примера), которое добавляло кнопку на форму документа.
Далее рассмотрим пример кода, который будет срабатывать по нажатию кнопки и открывать внешний отчет.
В сети интернет много примеров, как открыть внешний отчет или обработку. Большинство из них содержит код загрузки из файла, если это внешний файл отчета.
Итак, в БСП есть модуль работы со справочником «Дополнительные отчеты и обработки» (ДополнительныеОтчетыИОбработки), в частности есть процедура открытия отчета и функция подключения внешнего отчета:
Вторая вызывается из первой, но ее также можно вызвать и отдельно (что и будет сделано ниже).
Один из вариантов использовать первую процедуру, но он мне не понравился из-за необходимости излишних действий, чтобы заполнить переменную ВыполняемаяКоманда, а также тем, что передать параметры в отчет можно только массивом (ОбъектыНазначения).
Поэтому решила использовать функцию под номером 2, что подключает нужный отчет/обработку, который затем можно открыть по имени, возвращаемому данной функцией.
Итак, сам пример (полный код):
Пример формы с кнопками, вызывающими эти процедуры:
Скачать пример данной формы можно в файлах к статье.
Если вызывается отчет на СКД, то нужно создать для него типовую форму. Подробнее см. Как добавить типовую форму для СКД
Примечание: создавать форму, как оказалось, не обязательно. См. вариант вызова СКД без создания формы
Чтобы сработал код передачи параметров в СКД (ОткрытьВнешнийОтчетСКДсПараметром), нужно в модуле объекта СКД добавить код, принимающий эти параметры:
Скачать пример данного СКД отчета можно в файлах к статье.
Также пробовала передавать параметры в СКД вот так:
Однако возникала ошибка: Невозможно применить фиксированные настройки. Пересекаются элементы отбора.
Поэтому выше описала, как передавала параметры отбора в отчет СКД при котором такой ошибки не было.
Обработки тестировались на демо-базе БСП версии 2.4.5.
См. также Как в СКД по щелчку на какой-либо ячейке в отчете получить значение другой ячейки (там применяется метод, описанный в статье для вызова внешней обработки в качестве расшифровки ячейки СКД)