Диалог ввода данных в 1С
Ввод числа
Для ввода числа в 1С можно использовать одну из двух функций: ВвестиЧисло или ПоказатьВводЧисла. ВвестиЧисло синхронная функция, ПоказатьВводЧисла — асинхронная. ВвестиЧисло считается устаревшей, так как будет работать только если разрешено использование модальности.
Рассмотрим обе функции на примерах.
ВвестиЧисло
ПоказатьВводЧисла
Ввод строки
Для ввода строки в 1С можно использовать одну из двух функций: ВвестиСтроку или ПоказатьВводСтроки. ВвестиСтроку синхронная функция, ПоказатьВводСтроки — асинхронная. ВвестиСтроку считается устаревшей, так как будет работать только если разрешено использование модальности.
Рассмотрим обе функции на примерах.
ВвестиСтроку
ПоказатьВводСтроки
Ввод даты
Для ввода даты в 1С можно использовать одну из двух функций: ВвестиДату или ПоказатьВводДаты. ВвестиДату синхронная функция, ПоказатьВводДаты — асинхронная. ВвестиДату считается устаревшей, так как будет работать только если разрешено использование модальности.
Рассмотрим обе функции на примерах.
ВвестиДату
ПоказатьВводДаты
Ввод значения
Помимо функций для ввода примитивных типов, в 1С есть функции для ввода значения произвольного типа данных: синхронная ВвестиЗначение и асинхронная ПоказатьВводЗначения. ВвестиЗначение можно использовать только если разрешено использование модальности.
В данных функциях последним параметром можно передать тип значения, который нужно будет ввести. Если тип не указать, то будет использоваться тип переменной, в которую будет получен результат. Также можно указать составной тип данных, тогда до ввода значения нужно будет выбрать тип.
Универсальные формы ввода даты, числа, строки, Виртуальная клавиатура, форма выбора из списка (для сенсорных экранов). Управляемые и обычные формы.
Любая форма используется как общая, для скачивания помещена в обработку. Форму из обработки необходимо поместить в общие формы, для удобства создать в общем модуле процедуру, аналогичную указанной в примере.
Работает на любой конфигурации, формы и обычные и управляемые, мы тестировали на УПП 1.3 (обычные) и на ERP 2.5 (управляемые).
Скачать файлы
Специальные предложения
(3) Исправил. Обработку обновил.
Или сами поправьте у себя:
Процедура «ЦифраНажатие(Элемент)»
Меняем Число = Число(Строка(Число) + Строка(Добавить));
на Число = Строка(Число) + Строка(Добавить);
Обновление 18.03.21 10:43
См. также
Альтернативный способ добавления элементов и реквизитов на формы Промо
Предлагаю альтернативный вариант добавления динамически создаваемых элементов и реквизитов на форму.
09.09.2019 17666 34 bmk74 7
Выделение текущей строки в отчете (сделать сразу во всех отчетах и ничего не сломать)
Как за 10 минут упростить работу с отчётами программистам и пользователям. Добавить ВО ВСЕ ОТЧЁТЫ механизм автоматического выделения текущей строки отчёта (той, на которой установлен курсор). И ПРИ ЭТОМ НИЧЕГО НЕ СЛОМАТЬ.
17.10.2021 2245 4 Патриот 48
Самые красивые шахматы для 1С на управляемых формах
Здравствуйте, представляем Вашему вниманию классическую игру – Шахматы! Написана игра средствами 1С, на управляемых формах. Программный код представляет собой с аккуратностью составленную систему, содержащую лаконичные логические приемы и описательные имена переменных, объектов и функций. Программа полностью отлажена и многократно протестирована. Оригинальный авторский дизайн фигур, иконок и кнопок приятен глазу. Игра содержит большое количество функций, настроек и режимов игры, включая сетевую игру, тренировку с ботом или игру на двоих. Не упустите возможность найти ряд технических решений, применимых для реализации различных задач, а также поиграть в вечную игру с отличным оформлением! Желающие научиться программировать на управляемых формах могут многое почерпнуть в этой конфигурации.
18.02.2021 5428 13 compmir 30
Интерактивная справка по объектам 1С (подключаемое расширение)
База знаний, подключаемая к объектам основной базы. Пополняется интерактивно, формируется в виде статей прямо в 1С (текст, картинки, таблицы, ссылки). Есть возможность прикрепления файлов, привязки к объектам 1С, возможности рейтинга и комментирования пользователями.
29.09.2020 15553 82 sapervodichka 45
Расширенный автоподбор при вводе по строке в поле ввода в управляемых формах
Ниже будет выложен готовый код. А тут несколько вводных слов к нему.
Альтернативный алгоритм максимально близок к штатному автоподбору при вводе по строке с режимом поиска по строке «Любая часть». Строки результата в которых слова поиска находятся в начале строки выдаются первыми. Чтобы изменить количество строк выдаваемого результата достаточно изменить значение переменной «МаксимумСтрокРезультата». Из забавного: подсветку слов поиска в результате пришлось реализовывать вручную в функции ПодсветитьСлова() и это оказалось сопоставимо по объему с остальным кодом.
Формирование списка позиций для автоподбора перехватывается в модуле менеджера объекта (соответствующего типу значения для поля ввода). Обработчик называется ОбработкаПолученияДанныхВыбора(). Собственно, в этом обработчике и необходимо организовать альтернативный алгоритм получения данных автоподбора при вводе по строке. К слову, получение данных выбора можно инициировать программно, вызвав метод модуля менеджера объекта ПолучитьДанныеВыбора().
Но так как может оказаться нежелательным менять алгоритм автоподбора при вводе по строке сразу для всех полей ввода в конфигурации, ниже будет демонстрация приема переопределения для конкретного поля ввода «Номенклатура» в модуле некоей формы с помощью перехвата события поля ввода «Автоподбор»:
Ниже код модуля менеджера справочника «Номенклатура»:
Вот, собственно, и все чем я хотел поделиться в этой статье. Надеюсь, кому-то она сэкономит время.
Переопределение ввода по строке в управляемой форме 1С
Предыстория
К написанию статьи меня подтолкнула задача, для решения которой я должен был разработать сложную форму с большим количеством полей, связанных с разными объектами и, что главное, «c одной кнопкой». Тут и родилась мысль воспользоваться функцией «ввода по строке» в управляемом приложении 1С. В процессе решения задачи пришлось «набить шишек», но, надеюсь, приобретенный опыт будет полезен не только мне.
Механика
Думаю, правильным будет начать с краткого описания механики клиент-серверного взаимодействия при «вводе по строке».
Все начинается с поля ввода формы, у которого есть события «Автоподбор» и «ПриОкончанииВводаТекста».
Событие «АвтоПодбор» возникает при остановке ввода текста или нажатии на кнопку «стрелка вниз».
Событие «ОкончаниеВводаТекста» вызывается, как нам сообщает справка, при формировании значения из текста ввода. Кстати, это событие интересно тем, что если значение не сформировано, система не даст нам выйти из режима редактирования элемента. Иными словами, если введенный в поле текст не соответствует какому либо значению из данных выбора, то редактирование не будет завершено.
Обращаясь к труду «Разработка управляемого интерфейса» госпожи Хрусталевой и прочих уважаемых авторов, находим упоминание о методе «ПолучитьДанныеВыбора». Если спросить об этом методе синтаксис помощник, он выдаст нам список методов менеджеров для всех видов объектов платформы. Но, что толку от методов менеджеров, которые выполняются на сервере, если серверные вызовы нам недоступны? На самом деле, этот вопрос здесь, только по той причине, что если бы я был более внимательным человеком, я сразу решил бы свою задачу, и никакой статьи не появилось бы. Достаточно просто пролистать до конца список ссылок, и в конце обнаружится глобальный метод «ПолучитьДанныеВыбора». С помощью этого метода мы на клиенте можем получить данные выбора для любого ссылочного объекта системы, что дает возможность переопределить стандартный алгоритм получения выбора данных. Например, для поля строчного типа, у которого вообще нет стандартных данных выбора, использовать алгоритм справочника «Контрагенты».
Но для нас основная ценность метода «ПолучитьДанныеВыбора» в том, что он провоцирует вызов события «ПриПолученииДанныхВыбора», котрое выполняется в контексте менеджера выбранного нами типа объекта. Иными словами мы, наконец, получаем возможность работать с сервером, а значит и самостоятельно сформировать данные выбора. И с этого момента на возможность работать с автоподбором влияют только фантазия и здравый смысл.
Задача
Мы разобрались с взаимодействием клиента и сервера, теперь я предлагаю подкрепить теорию практикой. Решим небольшую задачу, которая звучит следующим образом.
Реализовать в форме документа «РасходТовара» подбор покупателя по ФИО.
Решать сохранение нового покупателя и его ФИО не будем, так как к «вводу по строке» это не относится.
Решение:
Добавим в конфигурацию «Управляемое приложение» новый периодический регистр сведений «ФИОКонтрагентов». Периодичность «день», единственное и ведущее измерение «Контрагент» (Тип(«СправочникСсылка.Контрагенты»)), ресурсы «Фамилия», «Имя», «Отчество» (Тип(«Строка(50)»)).
На форме документа «РасходТовара» также добавим три новых реквизита «ПокупательФамилия», «ПокупательИмя», «ПокупательОтчество». Также, для удобства, добавим кнопку и команду «ОчиститьФИО».
В модуле формы реализуем метод «ПолучитьДанныеВыбораПоФИО» с директивой компиляции &НаКлиенте
В модуле менеджера справочника «Контрагенты» реализуем обработчик «ОбработкаПолученияДанныхВыбора»
В модуле менеджера регистра сведений «ФИОКонтрагентов» реализуем экспортную функцию
«ПолучитьДанныеВыбораФИО»
Теперь определим в форме документа обработчики «ФамилияАвтоПодбор», «ИмяАвтоПодбор», «ОтчествоАвтоПодбор».
Готово! Можем заходить и проверять, что у нас получилось.
Решенный вариант можно получить с помощью обновления (cfu) в приложении к статье. Для этого создайте из «Демонстрационной конфигурации «Управляемое приложение» (1.0.16.1)» файл поставки и обновите его приложенным файлом. Для тех, кто редко делает поставки вот нехитрая процедура:
Особенности работы ввода по строке в поле ввода
1. Как переопределять работу поля ввода в части ввода по строке
Для переопределения работы поля ввода в части ввода по строке можно обрабатывать события поля ввода «АвтоПодборТекста» и «ОкончаниеВводаТекста».
1.1. Событие АвтоПодборТекста
Событие «АвтоПодборТекста» возникает во время начала ожидания ввода текста (когда в процессе набора текста сделана пауза). При стандартной отработке события происходит поиск по полям, указанным в свойстве «Ввод по строке» соответствующего объекта метаданных. Если найдено единственное значение, то производится автоподстановка окончания текста. Если введенному тексту соответствует несколько значений, то автоподстановки не происходит.
В этом примере при вводе в поле ввода буквы «п» и прерывании редактирования в поле ввода появился слово «пункт», при этом выделена будет его часть «ункт» (начало слова было уже введено и выделение на него не делается):
Выделение выставляется для того, чтобы подставленную часть текста можно было легко заменить следующим действием редактирования, если подставленный текст не подходит. Для отключения стандартного обработчика в значение параметра «СтандартнаяОбработка» записали «Ложь».
1.2. Событие ОкончаниеВводаТекста
Событие «ОкончаниеВводаТекста» вызывается системой в тех случаях, когда по введенному (отредактированному) в поле ввода тексту нужно сформировать значение, соответствующее этому тексту. При этом, если по имеющемуся в поле ввода тексту уже было ранее успешно сформировано значение, нового формирования значения по этому тексту выполняться не будет (т.е. не будет возникать событие «ОкончаниеВводаТекста»).
Необходимость формирования значения по тексту в поле ввода возникает в различных ситуациях, например при переходе из поля ввода к другому элементу управления, нажатии в поле ввода кнопки выбора (клавиша F4) и в ряде других ситуаций.
Стандартный (системный) обработчик события ищет некоторое значение, которое соответствует набранному тексту. Если найдено одно значение – оно сохраняется в качестве значения поля ввода. Если найдено несколько значений – в выпадающем списке предоставляется возможность выбрать из них нужное значение. Если не найдено ни одного значения – выдается сообщение о том, что в элементе управления введены некорректные данные.
В этом примере обеспечивается следующая функциональность для поля ввода: если в поле ввода набрать слово «одежда», то при формировании значения по имеющемуся в поле ввода тексту (например, при переходе из поля ввода к другому элементу управления в форме), пользователю будет предоставлена возможность выбрать одно из двух значений: «Рубашка» или «Брюки»:
— введем в поле ввода слово «одежда»:
— нажмем на клавишу Tab для перехода к следующему элементу управления: при этом появится выпадающий список из двух значений:
— выберем в выпадающем списке первое значение с помощью клавиши «Enter». выбранное значение будет установлено в поле ввода, а мы перейдем к следующему элементу управления:
2. Использование результатов поиска по строке
В каждом из этих случаев стандартные (системные) обработчики событий «АвтоПодборТекста» и «ОкончаниеВводаТекста» ведут себя определенным образом.
2.1. Работа стандартного (системного) обработчика события АвтоПодборТекста с результатами поиска по строке
1. По имеющемуся в поле ввода тексту ищется одно подходящее значение
2. Значение найдено?
2.1. Получается текстовое представление найденного значения
2.2. В поле ввода дописываются недостающие завершающие символы текстового представления найденного значения.
Пример : пусть поле ввода имеет тип «СправочникСсылка.Номенклатура»; в свойстве «Ввод по строке» указаны поля «Код», «Наименование»; в справочнике есть два элемента с наименованиями «Рубашка», «Брюки»:
Если мы введем воле ввода текст «Ру», он будет дополнен текстом «башка»:
2.2. Устройство механизма преобразования текста в поле ввода в значение и обработчик события ОкончаниеВводаТекста
Рассмотрим процесс формирования значения по тексту, введенному в поле ввода. Ниже приводится алгоритм преобразования текста в поле ввода в значение:
Из описанного алгоритма видно, что смысл подмены стандартного (системного) обработчика может состоять в том, чтобы сформировать свой список значений из одного и более элементов или одно конкретное значение для поля ввода в зависимости от того текста, который есть в поле ввода.
2.3. Работа стандартного (системного) обработчика события ОкончаниеВводаТекста с результатами поиска по строке
Стандартный (системный) обработчик события «ОкончаниеВводаТекста» работает следующим образом:
3. Настройка состава и порядка полей, используемых в стандартных (системных) обработчиках событий АвтоПодборТекста и ОкончаниеВводаТекста
Состав полей объекта метаданных, которые могут участвовать в поиске, состоит из некоторых фиксированных полей и реквизитов, для которых указано, что они строкового или числового типа и их нужно индексировать или индексировать с дополнительным упорядочиванием.
При поиске по строке для числовых полей из строки формируется число, которое затем ищется в базе данных. При поиске по строке для строковых полей ищутся все записи из базы данных, у которых в соответствующем поле хранится текст, начинающийся с искомого.
В качестве значения по умолчанию для свойства «Ввод по строке» в 1С:Предприятии 8 используются следующие поля:
Отметим, что поле используется для поиска по строке только в том случае, если длина поля больше нуля. Так, например, если длина наименования в некотором справочнике равна нулю, то поиск по полю «Наименование» выполняться не будет.
4. Модальные действия в обработчиках событий АвтоПодборТекста и ОкончаниеВводаТекста
Механизм автоподбора текста в поле ввода и преобразования текста в значение не предусматривает возможности использования разработчиком конфигурации интерактивных действий в обработчиках событий. Кроме того, логика работы стандартных (системных) обработчиков событий достаточно сложная и в обработчиках этих событий не всегда можно узнать, по какому поводу он (обработчик) вызван. Например, обработчик события » ОкончаниеВводаТекста» будет вызываться не только при переходе из поля ввода на другой элемент управления формы, но и при нажатии в поле ввода кнопки выбора (клавиша F4).
Рекомендуется в обработчиках событий » АвтоПодборТекста» и » ОкончаниеВводаТекста» работать исключительно с параметрами обработчиков, формируя нужный текст и значения и отдавая их через параметры обработчиков.
5. Управление механизмом автопоиска и автоподбора с помощью прав
Управлять механизмом автопоиска и автоподбора можно на уровне прав пользователей. Для этого в списке прав для различных объектов метаданных существует право «Ввод по строке».
6. Работа механизма автопоиска и автоподбора с правами на уровне записей
Данные, используемые системой в обработчиках событий автопоиска и автоподбора, могут иметь ограничения на доступ к ним. Достичь этого можно с помощью механизма ограничения прав доступа к данным на уровне записей. В этой ситуации сама платформа 1С:Предприятие 8 выбирает только разрешенные записи и дополнительной поддержки на уровне обработчиков событий для этого не требуется.
Если же есть необходимость поиска подходящих данных в обработчиках событий автопоиска и автоподбора, в запросе нужно использовать служебное слово «РАЗРЕШЕННЫЕ», указывающее, что при встрече данных, доступ к которым ограничен, нужно их просто пропускать: в противном случае будет выдана ошибка времени исполнения.