1с как задать вопрос пользователю на сервере
Хочу в ПослеЗаписи элемента справочника, который выполняется на сервере, задать вопрос пользователю. такой код не фурычит Как его можно задать?
Никак. С сервера низя ничего сделать с клиентом, даже вызвать клиентскую функцию из серверной. Клиент запрашивает - сервер отвечает. Клиент показывает, задает вопросы - сервер вычисляет, делает выборки, движения. И никак иначе. Тогда уж ИЗ серверной :-d
т.е, проверить, есть ли договор, если нет, то спросить? а ты до спроси "нет договора, не угодно ли создать" и передай рез на сервер.
ИМХО, вы переписываете свою нетленку с 8.1 на 8.2? Придётся полностью переделать архитектуру согласно . Сам с этим сталкивался, поправимо.
Что-то я не понял. Автоматическое создание процедуры создается с директивой '&НаКлиенте', а в СП следующее: Ключевое слово 'Возникает на сервере', или что-то путаю?
автоматически создается с директивой НаСервере не понял, строить архитектуру так чтобы пользователю вопросы не задавать после записи элемента?
Вы перепутали: Расширение управляемой формы для объектов (Managed form extension for objects) ПослеЗаписи (AfterWrite) c Расширение формы элемента справочника (Catalog item form extension) ПослеЗаписи (AfterWrite)
Думаю ты не въехал, ну ответит пользователь - нет, у него останется пустой договор? Ты еще после проведения скажи "Получились отрицательные остатки! Отменить проведение?"
Идет редактирование / создание контрагента. После записи контрагента пользователю еще предлагают "А не хотите еще и договор завести.". Пользователь отвечает - "Нафиг, нафиг, задрали спамеры". Договор не создается. Все счастливы.
Если ситуация такая трудная, что надо спросить пользователя, то почему пользователь должен отвечать только "да". Напоминает известный вопрос для представительниц женской половины человечества, когда правильный ответ "да", но зачем-то надо спросить, а если нет то "не знаю что тогда".
Это ты не у меня, это ты у автора спроси. Ему так надо. И - не каждый раз - а только, когда интерактивно, в форме создается. И - не только создается, но и изменяется.
У вас - плохо с коммутацией. Мне - трудно с вами общаться. Попрошу вас - более подробно расписывать ход ваших мыслей.
Потому что, Обычно, в НЕ интерактивном режиме, никаких вопросов - не Задают. За это по рукам табуреткой бьют. Ибо на каждый "неинтерактивный" вопрос есть своя "Групповая обработка справочников и документов"
Когда появилась возможность публиковать 1С в интернете или устанавливать платформу 1С 8.3 на мобильные приложения, возникла проблема с модальными окнами.
Дело в том, что в мобильных приложениях (web интерфейсах) они не открываются вообще, а на настольных компьютерах в браузере они воспринимаются как всплывающие окна, и чаще всего заблокированы пользователем.
Какое-то время фирма 1С боролась с таким положением вещей и даже разработала сложный и ненадежный механизм для модальных окон. Но, например, на iPhone он до сих пор не работает (из источников на сайте 1С).
В связи с этим, фирма 1С решила вообще отказаться от модальных окон. Точнее, пока оставили такую возможность, но и появилась настройка, запрещающая полностью использовать модальность. В 1С 8.3 появилась возможность производить асинхронный вызов модальных окон.
Эту настройку можно найти в свойствах конфигурации.
Заходим в Конфигуратор, нажимаем правой кнопкой мышки на самую первую строчку и выбираем «Свойства». У кого все свойства не уместились на экране, прокручиваем до самого низа:
На данный момент существует три режима применения модальных окон:
- Использовать — позволяет использовать модальные окна в полной мере;
- Использовать с предупреждением — так же позволит появиться модальному окну, но выйдет предупреждение, что модальные окна использовать запрещено!;
- Не использовать — полностью исключает использование модальных окон.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Теперь разберемся, как оформить новый функционал программно.
Задаем вопрос в 1С Предприятие 8.3
Начну с того, что нужно будет делать две процедуры. Первая, где задается сам вопрос, вторая, где он обрабатывается.
Я сразу напишу пример, а в комментариях будут пояснения. Так проще и наглядней:
На этом все, приятного программирования!
Пользователи 1С
Управление пользователями в 1С — процесс достаточно простой и интуитивно понятный, однако всё равно нуждается в описании.
Условно администрирование и контроль включает в себя:
- создание пользователя;
- установка прав пользователей;
- просмотр активных пользователей;
- анализ действий пользователей.
Рассмотрим каждый из этих пунктов подробнее:
Создание и установка прав пользователей 1С
В зависимости от конфигурации пользователи вводятся либо в конфигураторе, либо в режиме пользователя. Практически все современные конфигурации поддерживают ввод пользователей в режиме 1С: Предприятие 8. Также в режиме 1С: Предприятие, как правило, вводятся дополнительные параметры пользователей.
Однако, независимо от конфигурации, первый пользователь с административными правами всегда вводится в режиме конфигуратор. Поэтому мы рассмотрим оба режима ввода пользователей.
Ввод пользователей в Конфигураторе
Для входа в режим 1С Конфигуратор необходимо в списке выбора баз выбрать вариант Конфигуратор:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Получите понятные самоучители по 1С бесплатно:
После входа необходимо выбрать в меню пункты Администрирование — Пользователи. Откроется список пользователей, если Вы заводите первого пользователя, он будет пуст. Добавим нового пользователя «Администратор»:
На этой странице Вы должны указать настройки пользователя:
- Имя и Полное имя — наименование пользователя.
- Если установлен флаг Аутентификация 1С: Предприятия, то станут доступны пункты Пароль (пароль, который используется для входа в 1С), Пользователю запрещено изменять пароль (делает доступным возможность смены пароля пользователем в пользовательском режиме), Показывать в списке выбора (делает доступным выбор пользователя в списке, в противном случае имя пользователя необходимо вводить вручную).
- Аутентификация операционной системы — флаг, отвечающий за возможность авторизации с помощью имени пользователя операционной системы. Пользователь — имя пользователя информационной системы (например, \\dom\kirill, где dom — домен сети, а kirill имя пользователя ОС). 1С при запуске сначала проверяет авторизацию через ОС, а потом авторизацию 1С.
- Аутентификация OpenID — включение возможности авторизации с помощью технологии OpenID. OpenID — это открытая децентрализованная система, которая позволяет пользователю использовать единую учётную запись для аутентификации на множестве не связанных друг с другом сайтов, порталов, блогов и форумов.
На вкладке Прочее нужно указать соответствующие роли для пользователя (подробней о ролях). В нашем случае мы укажем для администратора Полные права. Для других пользователей здесь можно отметить флагами требующиеся роли. Права пользователей суммируются из доступных объектов разных ролей. Т.е. если у пользователя выбрано две роли, в одной есть доступ к справочнику «Номенклатура», а у второй роли нет, доступ будет. Для любого пользователя без «Полных прав» обязательна установка роли «Пользователь»(если она присутствует).
Также на этой вкладке можно указать Основной интерфейс (работает только для обычных форм). Язык по умолчанию — если конфигурация разработана на нескольких языках. Режим запуска — управляемое или обычное приложение.
Создание пользователя в 1С Бухгалтерия 2.0
Для этого в меню необходимо выбрать пункт Сервис — Управление пользователями и доступом. Откроется справочник «Пользователи». Создайте нового пользователя:
Занесите информацию о пользователе и его основные настройки 1С, нажмите кнопку «ОК»: система предложит создать автоматически пользователя БД:
Необходимо согласиться, отобразится форма нового пользователя базы данных:
Где необходимо указать нужные настройки авторизации и роли пользователя.
Вот и всё! Создание пользователя и назначение ему прав завершено.
Просмотр активных пользователей в базе 1С
Для просмотра работающих в базе данных пользователей в режиме 1С: Предприятие необходимо выбрать пункт Сервис — Активные пользователи. Откроется список работающих в базе данных пользователей:
Как отключить пользователей в 1С 8.3
Отключить активного пользователя в базе 1С можно двумя способами:
- в интерфейсе программы (для конфигураций 1С Бухгалтерия 3.0, Управление торговлей 11 и т.д);
- через консоль кластера серверов (доступно только в клиент-серверном режиме работы).
Из интерфейса
В пользовательском режиме выкинуть зависшего пользователя можно, зайдя в меню «Администрирование» — «Поддержка и обслуживание», затем выбрав пункт «Активные пользователи»:
Выбираем в списке нужного пользователя и нажимаем кнопку «Завершить».
Из консоли кластера
Если у Вас есть доступ к административной панели сервера 1С, завершить сеанс можно с её помощью. Заходим в консоль, находим зависшего пользователя в меню «Сеансы», вызываем контекстное меню и нажимаем «Удалить»:
Контроль работы пользователей 1С 8.3
Для просмотра истории работы пользователей необходимо зайти в меню в пункт Сервис — Журнал регистрации:
Например, пользователь Иванов Иван в 15:09:18 создал новую номенклатуру «Лопата».
Информацию из журнала регистрации можно сортировать по типу данных, пользователю, виду действия и т.д. Для этого необходимо нажать на пиктограмму воронки над таблицей журнала регистрации.
Если база данных давно установлена и данные в ней часто меняются, просмотр журнала регистрации существенно замедляется, в особо запущенном случае система может обрабатывать данные очень продолжительный период времени.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
С появлением управляемых форм в модулях форм 1С 8.3 стали активно использоваться директивы компиляции в модулях форм и объектов:
Дальше речь пойдет о том, как правильно ими пользоваться и как с их помощью можно оптимизировать работу системы.
Необходимо понимать, как работают управляемые формы в тонком режиме, проще всего представить эту модель в виде веб-сайта: сервер отдельно, клиент отдельно. В момент обращения к форме клиент делает обращение к серверу, и вся работа выполняется на сервере. Клиент (Ваша машина) лишь получает результат работы сервера.
Обратите внимание! Если директива не указана, то по умолчанию она выполняется на сервере.
Особенности компиляции этих директив управляемого приложения
&НаКлиенте
Указывает на то, что процедура или функция выполняется на стороне клиента 1C, все переменные существуют лишь на время жизни клиентской части формы. Такой метод выполняется «у Вас на компьютере», никак не затрагивая серверную часть. С клиента доступны все серверные функции.
На клиенте есть доступ к следующим объектам:
- методы глобального контекста, у которых есть доступ на клиент (доступные директивы можно увидеть в синтаксис-помощнике); , которые скомпилированы на сервере;
- локальный контекст модуля;
- свойства и методы расширения формы, определяемого основным реквизитом;
- свойства и методы объекта встроенного языка УправляемаяФорма;
- реквизиты формы.
&НаСервере
Выполняется на сервере, переменные существуют только на время серверного вызова. С сервера допустим вызов практически любых процедур, кроме клиентских. Если работа происходит в режиме тонкого клиента, вся работа происходит на сервере, а клиент получает лишь результат выполнения.
&НаСервереБезКонтекста
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Это процедура выполняется на сервере, вне контекста формы. Т.е. процедура не имеет доступа к реквизитам формы, выполняется на сервере и возвращает желаемый результат. Хорошо подходит для получения статичных данных. Крайне рекомендуется к использованию для оптимизации клиент-серверного взаимодействия.
&НаКлиентеНаСервереБезКонтекста
Используется, когда к процедуре нужно обращаться и с клиента, и с сервера. В остальном аналог &НаСервереБезКонтекста.
Оптимизация клиент-серверного взаимодействия
При разработке функционала необходимо учитывать следующие нехитрые правила:
- в первую очередь минимизировать количество северных вызовов 1С с клиента;
- производить все объемные вычисления на сервере;
- там, где можно, использовать НаСервереБезКонтекста вместо НаСервере.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: использование диалогов в 1С
Автор уроков и преподаватель школы: Владимир Милькин
Давайте определимся, что же такое диалог? Вызов команды Сообщить является диалогом? А вызов команды ВвестиЧисло? А вызов ОткрытьЗначение?
Итак, диалог - это прежде всего элемент графического интерфейса , окно . А следовательно вызов Сообщить - диалогом не является, так как у него нет своего отдельного окна.
Диалог - это не просто окно. Это окно, которое открывается пользователю с целью вывода информации и (или) получения ответа.
Для того чтобы показать какой-либо диалог необходимо вызвать команду соответствующую этому диалогу и передать ей необходимые параметры. Команда - это обычная процедура или функция, только написанная не нами, а программистами фирмы 1С. Мы не можем менять эти команды, мы можем их только вызывать.
Предупреждение
Отличным примером диалога является вывод предупреждения пользователю:
Что мы видим? Вызов команды Предупреждение, в которую в качестве параметра передаётся строка "Осторожно".
Когда компьютер дойдёт до строчки, в которой вызывается эта команда, пользователю отобразится диалог предупреждения. И до тех пор, пока пользователь не закроет этот диалог, компьютер будет ожидать на этой же строчке. Только после закрытия диалога - выполнение программы продолжится и начнётся выполнение строки, следующей за вызовом диалога.
К примеру, пусть у нас есть такой код:
Как он будет выполняться?
В начале компьютер дойдёт до строчки №1 и выполнит команду Предупреждение с параметром "1". В этот момент пользователю покажется диалоговое окно с текстом "1", а компьютер замрёт на этой строчке и будет ожидать, пока пользователь закроет диалог. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
После закрытия диалога компьютер перейдёт к выполнению строчки №2 и выполнит команду Предупреждение уже с другим параметром "2". Пользователю снова покажется диалоговое окно, но уже с текстом "2", а компьютер замрёт уже на второй строчке и будет ожидать, пока пользователь закроет диалог.
Затем компьютер перейдёт к третьей строчке. Ну и так далее.
У команды Предупреждение параметр, отвечающий за текст, который выводится - не единственный. Есть ещё два дополнительных параметра:
Предупреждение(ТекстПредупреждения>, Таймаут>, Заголовок>)
Таймаут - означает количество секунд, через которое диалог закроется сам, если этого не сделает пользователь.
Заголовок - подменяет стандартный заголовок "1С:Предприятие" на строку пользователя.
К примеру, такой код:
покажет диалог с текстом "Осторожно." и заголовком "Внимание!", а также закроется через 5 секунд, если пользователь не сделает этого раньше:
А что если мы хотим задать только текст и заголовок окна, а таймаут не задавать?
Во-первых, мы можем передать в качестве таймаута ноль:
А во-вторых, мы можем просто оставить пустое место вместо параметра и система сама поймёт, что нужно оставить его значение по умолчанию:
Для того, чтобы узнавать обо всех возможных параметрах встроенных команд 1С - пользуйтесь синтакс-помощником так, как это описано в одном из предыдущих уроков (ссылка).
Ввод числа
Некоторые диалоги не только выводят какую-то информацию от нас пользователю, но и наоборот возвращают некий результат взаимодействия с пользователем. Примером такого диалога является ввод числа.
К примеру, напишем:
Зачем мы передаём в команду параметр Число? Во-первых, для того, чтобы отобразить начальное значение ввода в диалоге. А, во-вторых, чтобы вернуть в эту переменную значение, которое ввёл пользователь. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Но что если пользователь отказался от ввода и нажал кнопку "Отмена"? Как об этом узнать? Оказывается, функция ВвестиЧисло не только показывает диалог ввода числа, но ещё и возвращает нам Истина в том случае, если пользователь нажал кнопку "ОК" и Ложь, если он отменил ввод, нажав кнопку "Отмена".
Таким образом, более правильным будет такой код:
В переменную Результат (имя могло быть любым) возвращается Истина или Ложь в зависимости от того какую кнопку нажал пользователь ("ОК" или "Отмена").
В переменную Число возвращается число введенное пользователем.
Вопрос
Заключительным диалогом, который мы рассмотрим, будет является диалог вопроса пользователю.
Имя команды, которая вызывает этот диалог нам известна - Вопрос.
Теперь давайте посмотрим в синтакс-помощнике какие параметры принимает эта команда:
ТекстВопроса - это сам вопрос в текстовом виде, который увидит пользователь.
Кнопки - это одно из предопределенных значений, которые также можно посмотреть в синтакс-помощнике. Например, если передать в этот параметр:
- РежимДиалогаВопрос.ДаНет - в диалоге будет всего две кнопки Да и Нет.
- РежимДиалогаВопрос.ДаНетОтмена - три кнопки Да, Нет и Отмена.
- РежимДиалогаВопрос.ОкОтмена - две кнопки Ок и Отмена.
- И другие варианты кнопок.
- КодВозвратаДиалога.Нет
- КодВозвратаДиалога.Да
- КодВозвратаДиалога.Отмена
- И другие кнопки.
Таймаут - этот параметр нам уже знаком.
КнопкаПоУмолчанию - это кнопка, на которой будет фокус при показе окна. Её значения могут быть такими:
Заголовок - этот параметр нам уже знаком.
КнопкаТаймаута - если задать значение этой кнопки и параметр Таймаут, то именно на ней будет отображаться количество оставшихся секунд до закрытия диалога. У неё могут быть такие же значения как и у параметра КнопкаПоУмолчанию.
Уфф. Как видите, параметров много. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Но необязательно использовать их все. Как следует из синтакс-помощника обязательными к заполнению являются только первые два:
Вопрос-то мы задали. Хорошо бы теперь получить ответ - выспался пользователь или нет Из того же синтакс-помощника мы узнаём, что кнопка которая была нажата возвращается в качестве результата вызова команды Вопрос:
Модальность
Все примеры диалогов, которые мы рассмотрели - являются модальными, потому что компьютер, показывая диалог, замирает на той же строчке и не идёт дальше, пока диалог не закроется.
Ещё можно сказать, что когда мы показываем модальный диалог - пользователь может работать только с этим диалогом. Работа со всей остальной частью системы блокируется, пока не закроется диалог.
Таким недостатком не обладают немодальные версии диалогов, но к ним переходить нам ещё рано.
Читайте также: