отменить открытие формы 1с
Открытие форм
Область применения: управляемое приложение, мобильное приложение.
Рекомендация обусловлена соображениями
2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации.
Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).
3. Не следует применять другие способы параметризации формы при открытии. Например, нужно избегать обращения к методам и свойствам формы после ее открытия.
Например, вместо
ФормаПутеводитель = Форма.ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме»);
ФормаПутеводитель.Элементы.ГруппаШаг.ТекущаяСтраница = ФормаПутеводитель.Элементы.ГруппаШаг.Страницы.Приветствие;
следует по той же причине использовать параметры формы:
ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме», Новый Структура(«РежимОткрытия», «Приветствие»));
4. Для получения результата работы формы, вместо непосредственного обращения к элементам и реквизитам формы
ФормаВопроса = ПолучитьФорму(«ОбщаяФорма.ФормаВопроса»);
ФормаВопроса.ОткрытьМодально();
Если ФормаВопроса.БольшеНеПоказыватьНапоминание Тогда
// …
следует использовать процедуры-обработчики оповещений, которые будут вызваны при завершении работы пользователя с формой:
Оповещение = Новый ОписаниеОповещения(«БольшеНеПоказыватьНапоминаниеЗавершение», ЭтотОбъект);
ОткрытьФорму(«ОбщаяФорма.ФормаВопроса». Оповещение, РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс);
.
&НаКлиенте
Процедура БольшеНеПоказыватьНапоминаниеЗавершение(БольшеНеПоказыватьНапоминание, Параметры) Экспорт
Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;
Если БольшеНеПоказыватьНапоминание Тогда
// …
5. Другие ограничения:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
…
КонецПроцедуры
6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню «Все функции» вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:
Вызов обработки без открытия формы и получение при завершении данных
(16) Клиент НЕ МОЖЕТ соединяться с SQL. Это только сервер.
Клиент НЕ МОЖЕТ записать данные в базу. Это только сервер.
В форме так или иначе ВЫЗЫВАЕТСЯ сервер. Только правильно при его вызове оставить только заглушку, вызывающую функцию в модуле менеджера. Тогда и данными можно будет управлять не только из формы, и рег.задание настроить, да и не нагружать клиента несвойственными ему функциями.
И почему я объясняю Вам такие азбучные истины?
Кто-то тут предлагал читать то, что писал автор вопроса, не Вы? 🙂
Обработка возвращает ТОЛЬКО статус. Булево. Ну, и описание ошибки. Всё.
Форма ОБЯЗАНА вызывать сервер. Так что, хватит Вам флудить.
Ну, это, разумеется, если у Вас имена колонок таблицы совпадает с внешней БД.
Тогда на сервере в модуле формы, при вызове этой функции, когда заполняете МассивИмен, вместо этого создаёте пустую таблицу значений с нужной структурой.
Потом, получив результат, в форме можете его обработать и заполнять табличную часть простым ТабличнаяЧасть.Загрузить(тзТрансакции), если всё ОК, либо выводить сообщение об ошибке.
В рег.задании можно обрабатывать при успехе и отбрасывать при неудаче. Конечно, хорошо бы при этом в журнал регистрации писать.
Ну, и да, я не люблю COM. Во-первых, отпадают все варианты, кроме Windows. Во-вторых, это большая «дыра» в безопасности. И да, Вы правы, я использую для таких целей внешние источники данных, там хоть как-то можно прошерстить под Linux.
[Новое в платформе] Как правильно закрывать формы и приложение в платформе 1С:Предприятие 8.3.8 (и старше)
Эта статья для программистов 1С – в ней разберем новое ограничение платформы при разработке кода.
При закрытии формы обработки или при закрытии всего приложения достаточно часто используется дополнительный диалог.
В основной массе диалог представляет собой вопрос для подтверждения операции закрытия, но бывают более сложные случаи. Например, при закрытии формы подбора товаров можно запросить у пользователя разрешение на перенос подобранных товаров в документ.
Начиная с версии 8.3.8 разработчики платформы изменили подход, которому должны следовать программисты при решении подобного рода задач.
Коротко о главном…
Сначала коротко обозначим суть изменений. Начиная с версии платформы 8.3.8 необходимо выделять 2 сценария закрытия формы:
Как это повлияло на объем кода?
Кроме этого, изменения платформы серьезно затронули логику программного кода. Теперь в процессе закрытия приложения практически невозможно организовать произвольный сценарий из-за введенных ограничений. В чем суть ограничений?
Фактически теперь в процессе закрытия приложения можно указать только текст вопроса, который увидит пользователь.
Скорее всего, у вас уже возник вопрос: к чему же все эти изменения?
Приведем цитату разработчиков платформы из файла V8Update.htm, содержащего перечень изменений релизов платформы:
Теперь подробнее разъясним суть проблемы.
Раньше при выходе из системы, когда возникала задача открытия диалогов, приходилось писать программный код отдельно для веб-клиента и отдельно для других клиентов. Связано это с тем, что все современные веб-браузеры, если страница не хочет, чтобы ее закрывали, выводят свой диалог. Примеры этих диалогов вы сможете увидеть ниже, в той части статьи, где подробно рассматривается поведение веб-браузеров.
Что же сделали разработчики платформы? Теперь платформа ведет себя так же, как и веб-браузеры: если приложение не хочет, чтобы его закрывали, тогда выводится платформенный диалог. В результате нет необходимости писать код под разные клиенты, так как работает он одинаково, но платой за такую универсальность являются описанные выше ограничения.
При этом даже если мы не предполагаем использование веб-клиента в нашей базе, то это ничего не меняет. Ограничения все равно действуют. В некоторых случаях это может быть неудобным, но с этим придется мириться. В частности, теперь открытие дополнительных обработок при закрытии приложения может вызвать затруднение. Решение подобной задачи мы рассмотрим в конце статьи.
На этом завершаем краткий обзор изменений и переходим к подробному разбору.
Вопрос при закрытии формы
Изменения в коде будем рассматривать в сравнении с тем, как это делалось в предыдущих версиях платформы.
Ранее, когда в процессе закрытия формы возникала необходимость задать вопрос пользователю, использовался следующий программный код:
Если данный код попытаться выполнить на платформе 8.3.8 с отключенным режимом совместимости, тогда возникнет ошибка:
Теперь, начиная с версии платформы 8.3.8, необходимо выделять 2 сценария закрытия формы. Первый вариант – когда пользователь закрывает форму самостоятельно и второй вариант – когда форма закрывается в результате закрытия всего приложения.
Таким образом, код требует модернизации:
Как вы можете заметить, у обработчика ПередЗакрытием появились 2 новых параметра:
Теперь подробнее об изменении в коде. Как вы видите, появилась новая ветка алгоритма, которая выполняется в процессе завершения работы системы.
Обращаем ваше внимание, что никаких диалогов в этом случае не открывается, так как они запрещены. В коде устанавливается только текст предупреждения и обязательно устанавливается флаг Отказ. Как уже отмечалось выше, нельзя программным способом отменить процесс закрытия приложения, поэтому флаг Отказ работает иначе, чем при обычном закрытии формы. Установка флага указывает необходимость отображения предупреждения для пользователя, которое хранится в параметре ТекстПредупреждения.
В толстом и тонком клиенте окно предупреждения будет следующим:
Стоит отметить, что если флаг Отказ сброшен, а ТекстПредупреждения заполнен, тогда система проигнорирует текст и сообщение отображено не будет. Если же флаг Отказ установлен, а параметр ТекстПредупреждения не заполнен, тогда будет отображено системное предупреждение:
Также следует отметить, что количество подобных диалогов может быть любым – по числу закрываемых форм. Кроме того, аналогичный диалог может формироваться в обработчике ПередЗавершениемРаботыСистемы модуля управляемого приложения (этот вариант будет рассмотрен ниже). В итоге, если пользователь хотя бы в одном диалоге нажмет кнопку Продолжить работу, процесс завершения работы будет отменен и на экране останется та форма, в которой была нажата кнопка.
В веб-клиенте диалог будет выглядеть иначе. В веб-браузерах Mozilla Firefox и Google Chrome будет отображен только текст, заданный разработчиками веб-браузера и не будет отображаться текст, установленный в обработчиках событий системы.
Пример диалога для Mozilla Firefox:
Пример диалога для Google Chrome:
В веб-браузере Internet Explorer диалог будет выглядеть иначе. Будет отображен единый диалог, содержащий все сообщения, установленные в обработчиках формы и модуле управляемого приложения:
Стоит отметить, что если в свойствах конфигурации включен режим совместимости с 8.3.7 и более ранними версиями, то данный механизм будет работать в старом варианте.
Таким образом, при отключении режима совместимости следует проанализировать и скорректировать программный код по закрытию форм, так как если код содержит обращения к серверу или код по открытию дополнительных форм, то это будет приводить к ошибкам в процессе завершения работы системы.
Также можно сформулировать небольшую рекомендацию. Если в коде обработчика формы ПередЗакрытием, исполняемом в процессе завершения работы системы, необходимо получать дополнительные данные с сервера, то их следует получить заранее и хранить в данных формы.
Вопрос при закрытии приложения
В данном случае мы не будем приводить программный код, который использовался в предыдущих версиях для отображения вопроса при выходе из системы, так как он достаточно громоздкий. Приведем лишь новый код модуля управляемого приложения, который упростился до минимума:
Теперь для отображения вопроса при выходе из системы достаточно установить текст предупреждения и флаг Отказ равным Истина.
Опять же, в коде запрещены обращения к серверу и открытия дополнительных форм, а также поведение в веб-браузере будет аналогичным тому, что уже было описано выше.
Открытие формы обработки при закрытии приложения
В завершении статьи хотелось бы продемонстрировать прием, который позволяет открыть форму некоторой обработки в процессе завершения работы системы.
Наша задача заключается в том, чтобы отменить процесс закрытия приложения и открыть форму некоторой обработки. Проблема в том, что отменить процесс закрытия или открыть форму мы не можем, так как это запрещено.
Поэтому, для того чтобы отменить закрытие приложения, потребуется использовать предупреждение, а для того чтобы открыть форму, используем обработчик ожидания, который выполнится только в том случае, если пользователь откажется от завершения работы системы.
Используя инструкции препроцессора, мы разделили сценарии закрытия в веб-клиенте и в других видах клиентов. В случае веб-клиента мы не открываем обработку, так как практически во всех веб-браузерах текст нашего предупреждения не отображается. В других видах клиентов будет отображен наш диалог:
Если пользователь нажмет кнопку Продолжить работу, тогда сработает обработчик ожидания и будет открыта форма обработки.
Заключение
Платформа продолжает свое уверенное движение в сторону веб-браузеров, но на этот раз разработчики наложили ограничения на программный код, исполняемый в толстом и тонком клиентах. С одной стороны, это упростило и унифицировало код при закрытии форм, так как теперь нет необходимости писать несколько вариантов кода под каждый клиент, с другой стороны, это ограничило нас в возможностях.
Чтобы освоить разработку интерфейсов и форм в 1С:Предприятие 8.3
на профессиональном уровне, рекомендуем записаться на курс:
Поддержка – 3 месяца. Объем курса – 49 учебных часов.
Об авторе
Автор статьи – Сергей Калинкин
Директор ЦСО «Центр профессионального программирования», г. Казань
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в нее – сделайте это сейчас, и в блоке ниже (на этой странице) появятся ссылки на скачивание материалов.
Выполнение процедуры после открытия формы
Пытаюсь подчинить одну компоненту, пока не сдается.
Есть процедура(в ней вызывается функция) назначена на кнопку, после запуска обработки и открытия формы нажимаю кнопку, все ок, все работает.
Вешаю код ПриОткрытии, фиг не дает запустить, говорит «Значение не является значением объектного типа».
Вопрос такой: Можно ли в 8-ке оформить процедуру которая бы запускалась после открытия формы?
(2) PhoenixAOD, Там долго рассказывать про саму компоненту! Если в двух словах она работает с веб камерой.
Я хочу чтобы при запуске он автоматом находил камеру и включал ее, чтобы не нажимать кнопку.
Если процедура на кнопке, все работает. Если ПриОткрытии, вываливает ошибку.
Вот и подумал может есть возможность вызвать ее ПослеОткрытия, фактически такой процедуры нет в 8.
Форма НЕ управляемая!
Это ругается на код в функции:
Значение не является значением объектного типа (Выгрузить)
Если CamList.Выгрузить().Количество() > 0 Тогда
Эту функцию вызывает процедура:
Это ругается на код в функции:
Значение не является значением объектного типа (Выгрузить)
Если CamList.Выгрузить().Количество() > 0 Тогда
Эту функцию вызывает процедура:
Код
CamList = ЭлементыФормы.ЭлементУправления1.CamList;
СписокКамер = СформироватьСписокКамер(CamList);
Возможно, ошибка из-за того, что ПриОткрытии выполняется до показа формы пользователю.
Как вариант:
Процедура ПриОткрытии()
ОбновлениеОтображения()
КонецПроцедуры
Вот так попробуй,и значие ИСтина поставь качо
в таком случае процедура отработает после открытия формы
ЗЫ задержку 3 сек поставил на вскидку.. думаю можно меньше
Отказ от использования модальных окон в платформе 1С:Предприятие 8.3 (бесплатная статья по Программированию в 1С) из цикла статей «Первые шаги в разработке на 1С»
О чем эта статья
В статье будут рассмотрены основные причины отказа от модальности в платформе «1С:Предприятие» и основные методы преобразования участков кода на новую асинхронную модель.
Применимость
В статье рассматриваются асинхронная модель построения бизнес-логики, добавленная платформу «1С:Предприятие» редакции 8.3. Представленная информация актуальна для текущих релизов платформы.
Отказ от использования модальных окон в платформе 1С:Предприятие 8.3
При разработке конфигурации на платформе 1С:Предприятие 8 периодически возникает потребность приостановить работу программы до того момента, когда пользователь примет какое-либо решение или выполнит какие-либо действия.
Например, при нажатии на кнопку заполнения табличной части у пользователя следует спросить, нужно ли очистить табличную часть, чтобы не произошло потери ранее введенных данных.
Такое поведение может обеспечить, например, следующий код:
В результате работы этого фрагмента кода произойдет приостановка выполнения программного кода, на экране отображается вопрос, интерфейс приложения кроме диалога с вопросом становится недоступным, система ожидает принятия решения пользователем, выполнение кода продолжится только после ответа на вопрос.
Также к приостановке выполнения кода и блокировке интерфейса приводит открытие модальных окон при помощи вызова метода ОткрытьМодально().
При работе с конфигурацией в режиме веб-клиента через браузер в этом случае будет открыто новое окно – всплывающее окно, которое заблокирует не только текущую вкладку, но и весь интерфейс браузера, включая остальные открытые окна и вкладки.
Всплывающие окна в Интернете зачастую используются для злоумышленного распространения нежелательной рекламы, поэтому браузеры содержат функции блокировки всплывающих окон.
В таком случае для работы с конфигурациями 1С:Предприятие 8 через браузер необходимо запретить блокирование всплывающих окон.
Проблемы также возникают при работе на мобильных устройствах. Так, например, модальные окна не поддерживаются на iPad.
Для решения указанных проблем следует использовать блокирующие окна вместо модальных. Для пользователя визуально все выглядит так же: окно блокирует интерфейс веб-клиента.
Однако блокирующее окно как бы “рисуется” поверх главного окна, и блокируется только текущая вкладка браузера, в которой открыта конфигурация, позволяя переключаться на другие вкладки, поскольку модальные окна браузера при этом не используются.
Таким образом, всплывающие окна в браузере не открываются и обеспечивается работа через веб-клиент на мобильных устройствах.
У корневого элемента конфигурации существует свойство “Режим использования модальности”, которое определяет, можно ли в конфигурации открывать модальные окна.
Если выбран вариант “Использовать”, то модальные окна можно открывать. Если выбран вариант “Не использовать”, то модальные окна недопустимы. При попытке вызвать метод, открывающий модальное окно, система выводит сообщение об ошибке:
При таком значении свойства “Режим использования модальности” допустимы только блокирующие окна.
Если выбран вариант “Использовать с предупреждениями”, то при открытии модальных окон в окно сообщений выводится текст:
Такой вариант работы может использоваться как промежуточный при переработке конфигурации с целью отказа от использования модальных окон.
Основное отличие блокирующих окон от модальных заключается в том, что открытие блокирующего окна не производит приостановки выполнения кода.
Поэтому разработчикам придется переписать программный код, использующий модальные окна, с учетом этой особенности.
Код нужно разделить на две части:
Фрагмент кода, приведенный в начале статьи, нужно переписать следующим образом:
После выполнения процедуры ПоказатьВопрос() система не останавливается, ожидая ответ пользователя, исполнение кода продолжается.
Пользователь сможет сделать выбор только после завершения работы всей процедуры. При этом будет вызвана экспортная процедура ЗаполнитьТоварыВопросЗавершение(). Ее название мы передали в конструктор объекта ОписаниеОповещения.
Процедура, которая будет вызвана после осуществления выбора, может быть расположена в модуле формы, модуле команды, общем не глобальном модуле.
В рассмотренном примере вызываемая процедура расположена в модуле управляемой формы, поэтому мы передали в параметр ЭтотОбъект.
Рассмотрим вызов процедуры, расположенной в общем модуле. Для этого добавим новый общий модуль ОбработкаОповещений, установим для него флаг “Клиент (управляемое приложение)”, а признак “Глобальный” не устанавливаем. Расположим в этом модуле процедуру ЗаполнитьТоварыВопросЗавершение().
Тогда обработчик команды заполнения будет выглядеть так:
После вызова любого метода, открывающего блокирующее окно, процедура должна завершаться, а выполняемый далее код следует располагать в процедуре, которая будет вызвана после закрытия окна.
Для передачи контекста (вспомогательных данных, неких параметров, значений переменных) из процедуры, открывающей модальное окно, в процедуру, вызывающуюся при его закрытии, предусмотрен третий необязательный параметр конструктора объекта ОписаниеОповещения – ДополнительныеПараметры.
Этот объект (любого типа) будет передан в процедуру, описанную в ОписаниеОповещения, последним параметром.
На примере рассмотренного выше участка кода это можно сделать так:
Если нужно передать только одно значение, то структуру можно не использовать, а присвоить это значение параметру ДополнительныеПараметры конструктора объекта ОписаниеОповещения.
Рассмотрим несколько примеров работы с блокирующими окнами.
Задача 1. Открытие другой формы
Из формы документа по нажатию на кнопку “Открыть параметры” нужно открыть форму, на которой расположены два флажка Параметр1 и Параметр2, которые должен установить пользователь. После закрытия формы вывести в строку сообщений значения параметров.
Создаем общую форму “ФормаПараметров”, на которой размещаем реквизиты Параметр1 и Параметр2, а также команду ЗакрытьФорму:
Обработчик команды выглядит следующим образом:
Для формы свойство РежимОткрытияОкна устанавливаем в “Блокировать весь интерфейс”:
На форме документа располагаем команду ОткрытьПараметры, обработчик которой описываем следующим образом:
В пользовательском режиме, запуская конфигурацию под веб-клиентом, получаем такие результаты работы:
Для увеличения нажмите на изображение.
Режим открытия окна можно также указывать в последнем параметре процедуры ОткрытьФорму.
Задача 2. Вопрос при закрытии формы
При закрытии окна обработки задавать пользователю вопрос, действительно ли он хочет закрыть окно.
Эту задачу можно решить при помощи следующего кода, расположенного в модуле формы обработки:
В процедуре ПередЗакрытием формы пользователю задается вопрос, флаг Отказ выставляется в Истина, закрытие формы отменяется.
После утвердительного ответа на вопрос переменная НужноЗакрыватьФорму устанавливается в Истина, форма закрывается повторно.
Задача 3. Ввод числового значения
При нажатии на кнопку на форме обработки открывать стандартный диалог ввода числа.
Для этого необходимо воспользоваться методом ПоказатьВводЧисла() вместо ВвестиЧисло(), который открывает блокирующее окно вместо модального.
После закрытия окна ввода числа будет вызвана процедура, в первый параметр которой будет передано введенное число или значение Неопределено, если пользователь отказался от ввода.
Задача 4. Выбор цвета
При нажатии на кнопку на форме обработки при помощи стандартного диалога выбора цвета пользователь указывает необходимый цвет. Этот цвет установить для фона нажимаемой кнопки.
Добавим на форму команду ВыборЦвета со следующим обработчиком:
Для объектов ДиалогВыбораЦвета (а также ДиалогРедактированияСтандартногоПериода, КонструкторФорматнойСтроки, ДиалогРасписанияРегламентногоЗадания, ДиалогВыбораШрифта) метод Показать() открывает блокирующее окно.
После закрытия окна будет вызвана процедура, в первый параметр которой будет передано выбранное значение (цвет, шрифт и т.д.) или значение Неопределено, если пользователь отказался от выбора.
Следует обратить внимание, что объект ДиалогВыбораФайла не имеет метода Показать() в отличие от диалогов выбора цвета или шрифта, поскольку реализация этих диалогов существенно разная.
Для использования диалога выбора файла на веб-клиенте необходимо предварительно подключить расширение работы с файлами.
Диалоги, реализуемые через расширение работы с файлами, не создают таких проблем в работе, как модальные окна браузеров, поэтому не было реализовано открытие блокирующих окон для объекта ДиалогВыбораФайла.
В заключение отметим, что начиная с релиза 8.3.10 в веб-клиенте прекращена поддержка модальных окон. В этом случае, если в конфигурации происходит вызов модального метода, то происходит генерация исключения. Также в в веб-клиенте прекращена поддержка режима интерфейса В отдельных окнах. Кроме того, и в тонком, и в веб-клиенте теперь нельзя открывать форму в отдельном окне (при работе в режиме интерфейса В Закладках). Такие кардинальные шаги позволили отказаться от режима интерфейса, который уже не поддерживается всеми современными браузерами.
Какой практический вывод можно сделать из этой информации? А вывод довольно простой – если по какой-то причине в вашей конфигурации до сих пор существуют модальные вызовы, то в этих местах в в веб-клиенте будет выдаваться окно с сообщением об ошибке. Хочется предостеречь от попыток “нагуглить” какое-то быстрое решение данной проблемы, т.к. основная масса советов сводится к такому рецепту: в конфигураторе на уровне конфигурации в свойстве «Режим использования модальности» поставить значение «Использовать». Естественно, в данный момент, это работать не будет только из-за того, что сами современные браузеры уже не поддерживают модальные вызовы.
И у вас есть всего два пути, каким образом решить описанную выше проблему:
Кстати, начиная с релиза 8.3.11, больше не поддерживаются веб-браузеры Microsoft Internet Explorer версий 8 и 9.
С веб-браузерами в свете модальности мы разобрались, теперь настала пора прояснить ситуацию и с остальными клиентами.
Начиная с версии 8.3.5 свойство «Режим использования модальности» в тонком и толстом клиентах учитывается, только если указан параметр командной строки /EnableCheckModal. Этот параметр автоматически подставляется в командную строку только при запуске приложения из конфигуратора. Если же этот параметр не указан, то генерация исключений не происходит и соответствующие предупреждения не показываются. Т.е. на практике в случае использования толстого и тонкого клиента никакого кардинального изменения в работе при использовании режима модальности не наблюдается – модальные вызовы будут работать так же, как и работали ранее, при этом не выдавая никаких предупреждений, как в веб-клиенте.
Чтобы расставить все точки над “i”, заметим, что начиная с редакции 8.3.9 в толстом клиенте игнорируется свойство конфигурации «Режим использования синхронных вызовов расширений платформы и внешних компонент», при этом соответствующие синхронные методы работают без генерации исключений и вывода предупреждений. Указанное игнорируемое свойство было добавлено в редакции 8.3.5 с целью поддержки асинхронной работы с внешними компонентами, криптографией и расширениями для работы с файлами в веб-браузере Google Chrome. Понятно, что к толстому клиенту это никакого отношения не имеет, и поэтому “тихое” игнорирование данного свойства просто исключило лишние проверки использования синхронных методов при использовании конфигурации.
Кстати! Из-за того, что платформа уверенно движется в сторону веба, с версии 8.3.8 разработчики ввели определенные ограничения на программный код, который связан с логикой закрытия формы или приложения, исполняемый в толстом и тонком клиентах. Обязательно прочтите нашу статью, подробно освещающую этот нюанс. Кроме того, в курсе «Профессиональная разработка интерфейсов и форм в 1С:Предприятие 8.3», есть глава, посвященная отказу от модальности, и вы можете почерпнуть массу полезной и актуальной информации по этой теме.
Коллеги, существуют две вещи которые можно читать бесконечно: ленту вконтакте и список изменений в очередном релизе платформе, поэтому, давайте подводить окончательные итоги 😉
В процессе рассмотрения примеров, позволяющих перейти от элементов синхронной модели к асинхронной, вы, наверное, уже заметили, что в общем случае программного кода стало больше. Чем больше кода, тем больше повышается сложность его дальнейшего сопровождения и отладки.
Кроме того, количество кода еще более увеличится, если мы в процессе разработки будем использовать большее количество диалогов. Поэтому в процессе разработки прикладных решений, ориентированных на работу в веб-клиенте, нужно помнить о той парадигме работы, которая используется в данный момент в современных веб-приложениях. Поэтому если в вашей конфигурации много интерактивных диалогов с пользователем, выдаваемых предупреждений, то есть смысл пересмотреть данную функциональность в пользу каких-то других подходов в организации взаимодействия с пользователем.
Вместо заключения
Вот и подошел к концу наш цикл «Первые шаги в разработке на 1С». Если вы прочли его целиком, то скорее всего, уже заметили, какими семимильными шагами развивается платформа в последнее время. Материал данного цикла был написан относительно недавно, однако мы были вынуждены его серьезно актуализировать, т.к. даже за такой короткий срок появилась масса новых важных функциональных возможностей и изменений. Такие крупные изменения могут несколько озадачить программиста 1С, если он не рос и не развивался в профессиональном плане с платформой все это время.
На специализированных интернет-ресурсах часто можно прочесть просьбы от начинающих программистов и их более зрелых коллег посоветовать им материалы, которые помогли бы им разобраться в обширных и порой кажущихся бесконечными, возможностях платформы 1С. Мы, по традиции, рекомендуем обратить ваше внимание на наши курсы по программированию. Это сотни часов видео по самым актуальным темам от признанных гуру-разработки 😉
А как же «не переключайтесь»? Естественно! У нас еще тонны интересного и полезного материала по разработке, оптимизации и еще многому чему. Так что, изучайте, применяйте и да прибудет с вами сила 😉
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Комментарии / обсуждение (54):
Добрый день!
Столкнулся с проблемой (в конфигурации в которой не разрешены синхронные методы работы) – нужно записать файл на локальный диск, в каталог, которого не существует. Не могу найти информацию о том, как это можно / нужно реализовать асинхронно? Т.е. нужно либо создать каталог – до начала выполнения “ПолучитьФайл(Адрес, УникальноеПутьИИмяСохраняемогоФайла, НЕ Интерактивно)”, либо как то “уговорить” метод глобального контекста “ПолучитьФайл()” при записи в несуществующий каталог одновременно и каталог создать… Либо необходимо использовать что то другое… В общем не нашел решения… Не понимаю, как используя асинхронные методы “породить” на локальном диске каталог… Можете помочь советом?
Добрый день!
Можно воспользоваться методом глобального контекста НачатьПолучениеФайлов:
&НаКлиенте
Процедура ПолучитьКартинку(Команда)
ОписаниеФайлов = Новый Массив;
ОписаниеФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(«C:\Downloads\Картинки\1.png», АдресКартинки));//такого файла и каталога на диске не существует!
&НаКлиенте
Процедура ПолучитьКартинкуЗавершение(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
Если ПолученныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ПолученныеФайлы) = Тип(«Массив») Тогда
Для каждого ПолученныйФайл Из ПолученныеФайлы Цикл
Сообщить(ПолученныйФайл.Имя);
КонецЦикла;
В переменной АдресКартинки находится адрес во временном хранилище, где размещается файл. Для помещения во временное хранилище можно использовать методы ПоместитьВоВременноеХранилище, НачатьПомещениеФайла.




















