О чем эта статья
Эта статья продолжает цикл статей «Первые шаги в разработке на 1С». Материал предполагает, что вы уже ознакомились с предыдущими нашими статьями, посвященными интерфейсу. В это же статье мы продолжим знакомство с новыми возможностями интерфейса «Такси» и рассмотрим, какие интересные новшества получили управляемые формы в этом интерфейсе.
Применимость
В статье рассматривается интерфейс «Такси» конфигурации, разработанной на платформе 1C 8.3.5.1098. Дополнения к текущим релизам платформы (8.3.11) приведены в заключении. Поэтому вся представленная информация актуальна.
Новое в управляемых формах в «1С:Предприятие 8.3»
Разработчики платформы «1С:Предприятие 8.3» в очередной раз основательно поработали над удобством работы пользователей с управляемыми формами.
Ввод по строке
Ранее, в полях ввода, при вводе с клавиатуры начальных символов, система искала подходящие элементы.
Однако зачастую пользователям необходимо осуществлять поиск не только по первым символам наименования, но и в произвольном месте названия.
В конфигураторе у ссылочных объектов метаданных для настройки ввода по строке, была создана отдельная закладка “Поле ввода”:
На ней представлены следующие возможности для формирования списка выбора при вводе по строке:
- использование полнотекстового поиска;
- поиск по вхождению подстроки или по началу строки;
- выполнение поиска непосредственно или в фоновом режиме.
В свойстве “Способ поиска строки при вводе по подстроке” можно выбрать – следует ли искать только по первым символам строки или в любой ее части.
В пользовательском режиме поиск по любой части строки выглядит следующим образом: пользователь последовательно вводит с клавиатуры символы, а система осуществляет поиск.
Причем не только с первых букв названия, но и по вхождению набранной строки:
Естественно, использование поиска по любой части строки может привести к ухудшению производительности системы, особенно при большом объеме данных.
В файловом режиме пока пользователь набирает строку, поиск производится в фоне только в том случае, если в этот момент не выполняется другое фоновое или регламентное задание.
Если установлена соответствующая настройка, то при вводе данных в поле ввода может быть использован полнотекстовый поиск.
Во время полнотекстового поиска будут найдены как целые слова, так и строки, в которых набранные символы являются частью целых слов (используется оператор * полнотекстового поиска).
Например, пользователь вводит следующие части слов в поле ввода, система во всплывающем окне отображает найденные при помощи механизма полнотекстового поиска варианты:
Результаты полнотекстового поиска, соответствующего введенной поисковой строке, приведены на рисунке:
Напомним, что в платформе 8.3 появилась возможность переопределить представление ссылочного типа данных при помощи процедур ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления в модуле менеджера объекта.
Для увеличения нажмите на изображение.
При совместном использовании этого функционала и ввода по строке существует следующая особенность.
Указанные выше обработчики не влияют на представление значений в списке выбора – в списке отражается основное представление объекта.
Однако после выбора в поле отображается ожидаемое переопределенное представление объекта.
Для увеличения нажмите на изображение.
Разработчики считают, что ошибок в таком поведении платформы нет, и что более ценно показать, почему конкретный результат найден (выделить, например, подстроку, по которой объект был найден), чем отобразить оторванное от результата поиска представление соответствующего значения.
Рассмотренные выше свойства ввода по строке задавались на уровне всего объекта метаданных.
В конкретном месте конфигурации разработчик может переопределить эти свойства.
Например, при помощи обработчиков событий АвтоПодбор и ОкончаниеВводаТекста конкретного поля ввода или при помощи обработчика события ОбработкаПолученияДанныхВыбора в модуле менеджера объекта.
Для этого в этих процедурах предназначен параметр с именем Параметры типа Структура, в свойствах которой содержатся способ поиска строки, режим получения данных выбора, настройка использования данных выбора.
Для увеличения нажмите на изображение.
Выпадающий список для поля ввода
В платформе 8.3 выпадающий список для поля ввода получил дополнительную функциональность для повышения удобства работы с системой.
Теперь этот список может отображать историю выбранных ранее значений. Список с историей показывается на экране при установке курсора в поле, при нажатии кнопки Выбрать из списка, или кнопки на клавиатуре со Стрелкой вниз.
Включить отображение истории можно у полей ввода, связанных с данными типа справочник, документ, бизнес-процесс, задача, план видов характеристик, план видов расчета, план счетов и план обмена. В конфигураторе для этого предусмотрено свойство, расположенное на закладке “Поле ввода”:
Для увеличения нажмите на изображение.
Использование истории можно переопределить для конкретного реквизита объекта или элемента формы.
Кроме этого, если в списке поля ввода пользователь не нашел интересующего элемента, он может нажать кнопку “Показать все” для открытия формы списка, чтобы выбрать элемент из всего справочника.
Также в списке поля ввода есть команда “Создать новый объект”. При этом будет открыта форма нового элемента.
В этой форме пользователь заполняет необходимые поля. После записи и закрытия формы ссылка на только что созданный элемент будет подставлена в поле ввода.
Типовой шаблон использования команды “Создать новый элемент” выглядит следующим образом. Пользователь вводит название нужного элемента в поле ввода.
Если такого элемента в базе данных система не обнаружит – будет выведено сообщение об этом. После нажатия кнопки в списке, на экране откроется форма нового элемента с заполненным наименованием.
Рассмотренные новшества позволяют увеличить скорость ввода информации в систему.
Сохранение настроек динамических списков
В платформе 8.3 настройки динамического списка можно сохранять автоматически. Для этого в конфигураторе, для нужного реквизита формы, необходимо установить свойство “Автоматическое сохранение пользовательских настроек”. По умолчанию, при создании списка эта настройка включена.
У корневого элемента конфигурации появилось новое свойство – Хранилище пользовательских настроек динамических списков.
Это свойство выбирается из списка хранилищ настроек, определенных в конфигурации.
Для увеличения нажмите на изображение.
Настройка списков в пользовательском режиме вызывается при помощи соответствующего пункта меню:
Внешний вид формы похож на настройку отчетов.
Для увеличения нажмите на изображение.
Условия, по которым выполнен отбор списка, автоматически отображаются в нижней части настроек. Эти настройки будут включены в форму списка.
В режиме конфигуратора для этого необходимо заполнить свойство таблицы формы Группа пользовательских настроек.
В нем нужно указать отдельную группу формы, внутрь которой и будут добавляться элементы для отображения отбора.
При такой настройке форма будет иметь поля в виде “быстрых отборов”.
Для увеличения нажмите на изображение.
Если пользователь настроил список под себя, то настройки автоматически сохранятся и при повторном открытии список будет иметь тот же самый вид.
Режим просмотра динамического списка (список, дерево, иерархический список) сохраняется вместе с настройками элементов формы.
Для одного списка у пользователя может быть сохранено несколько различных вариантов настроек.
Журнал документов
Если режим совместимости конфигурации установлен в значение “Не использовать”, то для динамического списка, у которого в качестве основной таблицы указана таблица журнала документов, кнопка “Создать” автоматически формируется в виде подменю со списком документов, входящих в журнал.
Для увеличения нажмите на изображение.
Этим упростилось создание новых документов пользователем из формы журнала. Также стало возможным быстро создавать на командной панели формы отдельные кнопки для создания нового документа определенного вида.
Для этого была создана стандартная команда СоздатьПоПараметру. Если эта команда назначена кнопке на форме, то становится доступным свойство Параметр, в котором можно выбрать тип создаваемого документа при нажатии на эту кнопку.
Для увеличения нажмите на изображение.
В пользовательском режиме эта кнопка будет выглядеть следующим образом:
Для увеличения нажмите на изображение.
Т.к. материал в статье описан для платформы 8.3.5, то актуализируем его.
- До версии 8.3.7 ввод по строке работал недостаточно быстро, поэтому в этом релизе была изменена структура данных индекса полнотекстового поиска, что привело к повышению скорости при работе системы в тех местах, где используется данный механизм. Отметим, что новый формат полнотекстового поиска используется в том случае, если режим совместимости установлен в значение «Не использовать». В режиме совместимости с с версией 8.3.6 поведение не изменилось. Также отметим, что в следующем релизе платформы 1С (8.3.8) механизм ввода по строке и при использовании строки поиска динамического списка был также улучшен, и теперь он обеспечивает поиск данных, которые еще не попали в полнотекстовый поиск. Ранее такого поведения не наблюдалось.
- Выпадающий список поля ввода управляемой формы также претерпел некоторые улучшения. В версии 8.3.8 он стал автоматически подстраивать свою ширину под ширину отображаемых в нем данных, плюс клавиши Home и End стали обрабатываться прямо в поле ввода. Благодаря этим улучшениям стало удобнее использовать поле ввода с выпадающим списком.
- Механизм сохранения настроек динамических списков также был улучшен, и в версии 8.3.6 свойства расширения таблицы формы для динамического списка Период и Отображение стали храниться в тех же разрезах, что и другие настройки динамического списка, что сильно упростило работу с ними разработчику. Теперь они стали доступны в обработчике управляемой формы ПриЗагрузкеПользовательскихНастроекНаСервере(), чего ранее не было.
На этом знакомство с управляемыми формами в интерфейсе «Такси» мы завершим, но в следующей статье познакомимся с новыми возможностями, которые представила платформа «1С:Предприятие» редакции 8.3.
PDF-версия статьи для участников группы ВКонтакте
Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Вы можете скачать эту статью в формате PDF по следующей ссылке: Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Добрый день можете подсказать как настраивается хранение истории ввода в строке поиска в списке номенклатуры?!
В УТ в списке номенклатуры есть расширенный поиск и там для каждого пользователя сохраняется фразы поиска которые он вводил последние N раз. Не история выбора элемента а именно какую строку вводил в поле.
Пытался смоделировать это поведение в произвольной обработке которая ищет документы и не смог.
Уже сам разобрался. Идет сохранение списка выбора поля в хранилище настроек при записи и чтение при открытии. :)
Отлично!
Добрый день!
Это реализовано не на уровне платформы, а при помощи кода в конфигурации.
Беру УТ 11.5.7, открываю форму списка справочника Номенклатура. В модуле есть следующий код:
Процедура ПриЗакрытии(ЗавершениеРаботы)
...
Если Не ЗавершениеРаботы Тогда
СохранитьНастройкиФормыНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройкиФормыНаСервере()
ПодборТоваровСервер.СохранитьНастройкиФормы(ЭтаФорма);
КонецПроцедуры
В этой процедуре и происходит сохранение списка введенных строк для поиска. Хранится этот список в хранилище общих настроек.
ОбработкаПолученияДанных не работает из обычных форм, в “официальных” источниках об этом не пишут. Ткните или объясните, пожалуйста, где это написано?
Добрый день!
Например, в книге 1С:Предприятие 8.2. Коротко о главном. Новые возможности версии 8.2:
Модули менеджеров можно использовать и в режиме обычного приложения, и в режиме управляемого приложения. При этом надо учитывать, что в обычном режиме не будет вызываться обработчик события Обработка получения данных выбора.
Спасибо огромное!
Пожалуйста!
Интересного обучения!
Добрый день! Подскажите пожалуйста, как программно заполнить свойство Группа пользовательских настроек, например, динамического списка?
Добрый день!
Отдельного свойства, к которому можно было бы обратиться программно, нет.
Но создание такой группы можно реализовать при помощи следующего кода:
элСписокКомпоновщикНастроекПользовательскиеНастройки.Заголовок = "Группа пользовательских настроек";
элСписокКомпоновщикНастроекПользовательскиеНастройки.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Элементы.Список.СоздатьЭлементыФормыПользовательскихНастроек(элСписокКомпоновщикНастроекПользовательскиеНастройки, РежимОтображенияНастроекКомпоновкиДанных.Все);
Добрый день. Вопрос как почувствовать что ввод по строке использует полнотекстовый поиск?
Включение или выключение его никак не влияет на 50000 элементах (возможно конечно этого мало) справочника, полнотекстовый поиск по справочнику включен.
Добрый день!
Например, в модуле менеджера того объекта, где выполняется поиск, есть обработчик события ОбработкаПолученияДанныхВыбора. В этой процедуре есть параметр Параметры. Это структура, в которой есть ключ ПолнотекстовыйПоиск (признак, указывающий, что необходимо использования полнотекстовый поиск при вводе по строке).
Также в типовых (УТ 11) этот обработчик переопределяется (вызывается процедура НоменклатураОбработкаПолученияДанныхВыбора из общего модуля НоменклатураВызовСервера), СтандартнаяОбработка устанавливается в значение Ложь, используется собственный программный код для поиска.
Добрый день. Делаю внешнюю обработку с выполнением на клиенте заполнения реквизитов для открытого в форме документа и вызываемую по кнопке “Заполнить” (для внешней обработки), при этом в коде внешней обработки меняю реквизит объекта “Операция”, на форме есть поле операция с обработчиком ПриИзменении…(), в этом обработчик происходит переформирование отображения элементов формы с учетом выбранной операции с вызовом на сервере. Можно ли как-то вызвать событие элемента формы Операция для отработки Обработчика этого события из формы внешней обработки? Или еще как-то решить вопрос по переформированию формы объекта из формы внешней обработки?
Добрый день!
Из формы внешней обработки можно обратиться к форме документа, для которого выполняется заполнение, через ВладелецФормы. При помощи ВладелецФормы можно работать с реквизитами формы, экспортными методами формы. Например:
Здравствуйте, нужно создать документ, справочник или команду поиска (базу пациентов) для того чтобы когда я регистрирую новых пациентов можно было нажать на эту команду, ввести условно говоря фамилия и она выдавала карточку данного пациента?
Добрый день!
Да, можно такое реализовать. Пользователь вводит в поле на форме строку поиска. При нажатии на кнопку ищем в базе элементы справочника, которые содержат введенную пользователем подстроку. Если в базе найдены подходящие элементы, то открываем их формы или выводим список.
Получается нужно создавать именно форму? Как форму определенного документа?
Можете более подробно?
Например, создаете обработку, добавляете форму. На форме располагаете поле ввода и кнопку. При нажатии на кнопку осуществляется поиск в базе, открытие формы найденного элемента справочника.
Спасибо, Ваш пример понятен, но мне бы было интересно что-то типа ВладелецФормы.ЭлементФормы.ПриИзменении(), чтобы переформировать элементы формы, как-то так возможно?
Именно так нельзя написать. Можно вызвать экспортную процедуру из модуля формы.
В типовых конфигурациях чаще всего в обработчике события ПриИзменении управление передается в специальную процедуру, что-то вроде УстановитьВидимость, а внутри уже этой процедуры происходит настройка формы в зависимости от вида операции.
Добрый день!
В журнале документов на управляемых формах не нашел кнопки “Создать на основании”.
Подскажите – как можно её вернуть?
Спасибо.
Добрый день!
Такой возможности нет. Это ограничение динамического списка. В типовых конфигурациях подменю ввода на основании в формах заполняется программно. Например, в УТ 11 обработка ЖурналДокументовПродажи.
Здравствуйте!
1. Можно ли отключить всплывающие сообщения, которые появляются при проведение документа или записи элементов справочника?
2. Можно ли полностью убрать вниз падающий список при вводе номенклатуры? Сейчас у меня отображается только надпись “Введите строку для поиска”, но хотелось бы и ее убрать.
Добрый день!
1. Нет, отключить нельзя.
2. Попробуйте свойства справочника в конфигураторе установить, например, следующим образом:
Спасибо вам большое!
Добрый день! Подскажите, есть ли возможность из формы обработки открыть форму списка документов на весь экран? Спасибо.
Добрый день!
Можно попробовать использовать режим основного окна ПолноэкранноеРабочееМесто или Киоск. При этом основное окно раскрывается на весь экран, но все остальные окна, открывающиеся как с блокировкой интерфейса, так и с блокировкой формы владельца на весь экран не раскрываются, придется переносить их в основное окно.
Спасибо, Василий! Вы не планируете обновить курс по мобильной платформе? Все-таки много нового появилось…
Доброе. На самом деле – между 8.3.8 (версия курса) и 8.3.11 (текущая версия мобильной), ничего принципиально нового не появилось, увы.
А пот в 8.3.12 – появится, вот ее то мы и ждем. Чего только мобильный клиент стОит :)
Подскажите, пожалуйста, есть ли возможность программно отследить, введено что-то в строке поиска (дополнение элементов формы, связанное с таблицей формы, отображающей динамический список) или нет?
Добрый день!
В платформе не предусмотрен функционал для перехвата результата введенной пользователем строки поиска в динамическом списке.
Можно использовать методы ПолучитьИсполняемуюСхемуКомпоновкиДанных и ПолучитьИсполняемыеНастройкиКомпоновкиДанных.
В момент выполнения метода ПолучитьИсполняемыеНастройкиКомпоновкиДанных система проверяет, применен ли к списку поиск и включен индекс полнотекстового поиска. Если эти условия выполняются, будет выполнен новый полнотекстовый поиск. На основании результатов этого поиска будет сгенерирован отбор и возвращен в составе настроек, возвращаемых методом ПолучитьИсполняемыеНастройкиКомпоновкиДанных.
Спасибо большое, это то, что нужно.
1С:Предприятие 8.3 (8.3.8.1675)
Подскажите пожалуйста как зафиксировать строки в макете СКД в режиме тонкого клиента. Есть отчет на СКД. Ради форматирования групповых полей шапки, сделал фиксированный шаблон. После этого все строки стали прокручиваться. В процедуру ПриКомпоновкеРезультата поставил ДокументРезультат.ФиксацияСверху = 7; В отладчике вижу, что значение устанавливается, но после отображения отчета там снова 0. На кнопку вешаю тот же текст ДокументРезультат.ФиксацияСверху = 7; Работает.
Как же правильно установить ФиксациюСтрок, чтобы не жать кнопки?
Добрый день!
В настройках компоновки на закладке Другие настройки попробуйте поработать с параметрами Фиксация слева и Фиксация сверху, установить их в значение Не использовать, фиксировать шапку программно. Возможно, есть нюансы формирования табличного документа при различных настройках.
Просьба в комментариях к конкретной статье задавать вопросы по ее содержанию.
Здравствуйте! Можно ли переопределить представление для конкретного поля (ссылочного) после выбора? Будь то поле табличной части или реквизит формы?
Добрый день!
Не встречал такой возможности.
Добрый день.
Возможно ли при вводе по строке в выпадающем списке, который отображает система (с подходящими вхождениями символов), убрать значение кода элемента.
Т.е. стандартно показывает “Наименование (Код)”, а надо оставить только “Наименование”.
Спасибо.
Добрый день!
Не встречал такого способа.
Здравствуйте! Подскажите пожалуйста, есть конфигурация УНФ версия 1с 8.3, есть номенклатура с поиском и кнопка управления расширенным поиском. В этих настройках по умолчанию стоит выбор искать по части строки. Как мне изменить эту настройку по умолчанию, чтобы изначально стояла галка По началу строки. В конфигураторе не могу найти эту форму. Пробовал в справочнике номенклатура на закладке Поле ввода выбрать начало строки, но не помогает. Где в конфигураторе находится эта обработка поиска? Спасибо.
Добрый день!
Расширенный поиск – это возможность самой платформы, поэтому отдельной формы, которую можно было бы отредактировать в конфигураторе, нет.
Тогда непонятно, в документации написано, что если включен полнотекстовый поиск, то программа сначала будет искать по началу строки, далее там написано, что если вызвать форму расширенного поиска горячей клавишей Alt + F то должна автоматически стоять галочка (по точному соответствию). Но почему то ни один из этих способов не работает. Даже если включаешь полнотекстовый поиск, все равно поиск идет через эту форму и поиск работает по части строки. Релиз платформы 8.3.6 Конфигурация Автосервис от Рарус, которая сделана на конфигурации УНФ
Вот выдержка из документации 1С на портале ИТС: “Если для списка включен полнотекстовый поиск, то поиск будет выполняться только по началу слов.
Если диалог был открыт по сочетанию клавиш, то значение текущей ячейки будет установлено в строке Что искать и будет установлен поиск По точному совпадению.
Если диалог был открыт при начале ввода поисковой строки в списке, способ поиска будет выбран как По части строки, а набранный текст будет установлен в поле Что искать.”
Может я что то не так делаю? Или кому можно задать вопрос?
Беру демо-базу конфигурации УНФ 1.6.4. Открываю форму списка справочника Номенклатура.
В строке поиска ввожу bos bg. Получается вот такой результат:
Поиск идет по началу слов.
Затем устанавливаю курсор на колонку Единица измерения, нажимаю клавиши Alt + F:
Предлагается поиск по точному совпадению. Обратите внимание – можно выбрать конкретный элемент из справочника, а не только вводить текст.
Если же курсор будет на колонке Артикул или Наименование, то предлагается расширенный поиск по части строки, т.е. учитывается тип данных.
Непонятное поведение платформы может оказаться ошибкой. На нашем сайте есть специальная статья на эту тему – Как в 1С регистрировать ошибки платформы.
Очень удобная функция ввода по любой части строки.
Но вот беда – у меня не работает. Упорно считает только по началу строки.
Какие есть ограничения на применение этого функционала?
Релиз ядра 8.3.6.2332. База файловая… пока.
Полнотекстовый поиск ставил-убирал. Индекс поиска чистил и формировал заново.
Использовал оба режима получения данных выбора.
Кэш чистил.
Результат один – ищет только по началу строки.
Добрый день!
В модуле менеджера справочника может быть задан обработчик ОбработкаПолученияДанныхВыбора, в котором можно переопределить поведение системы. Например, сформировать собственный список выбора. Проверьте этот обработчик, может, в нем какая-либо специфическая логика реализована.
Здравствуйте. Столкнулась с такой проблемой, не сохраняются значения реквизитов формы. Для формы в свойствах установила Автоматическое сохранение, для этого реквизита установила флаг Сохранение, но реквизит сохраняется во всех формах с одним и тем же значением. Подскажите, пожалуйста, что не так делаю?
Добрый день!
Поясните, пожалуйста, подробнее, на примере, в чем именно проблема. Сначала вы пишете, что не сохраняются значения, а потом, что сохраняются. И что значит во всех формах с одним и тем же значением?
Здраствуйте, Василий,
Очень нужна ваша помощь, подскажите пожалуйста,
нужно чтобы в поиске(выбор) по строке в табличной части (например расх. накладная), выводилась информация номенклатуры не только (наименование, код, артикул) но и например: цена, остаток, группа родитель…
как правильно написать процедуру “ОбработкаПолученияДанныхВыбора”, которую я так понимаю нужно вставить в модуль менеджера объекта,
(1С 8.3, Розница 2.1) заранее благодарен Вам!!!
Добрый день!
Например, вот такой обработчик в модуле менеджера может получиться:
СтандартнаяОбработка = Ложь;
// Получим структуру возможных полей отбора справочника номенклатуры
СтруктураРеквизитов = РеквизитыСправочника("Номенклатура");
Запрос = Новый Запрос;
СтрокаПоиска = Параметры.СтрокаПоиска;
УсловиеОтбора = "";
Для Каждого КлючИЗначениеОтбора Из Параметры.Отбор Цикл
Если СтруктураРеквизитов.Свойство(КлючИЗначениеОтбора.Ключ) Тогда
УсловиеОтбора = УсловиеОтбора + "
| И СпрНоменклатура." + КлючИЗначениеОтбора.Ключ + " В (&" + КлючИЗначениеОтбора.Ключ + ")";
Запрос.УстановитьПараметр(КлючИЗначениеОтбора.Ключ,КлючИЗначениеОтбора.Значение);
КонецЕсли;
КонецЦикла;
Если НЕ Параметры.Отбор.Свойство("ЭтоГруппа") И Параметры.Свойство("ВыборГруппИЭлементов") Тогда
Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда
УсловиеОтбора = УсловиеОтбора + "
| И СпрНоменклатура.ЭтоГруппа";
ИначеЕсли Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы Тогда
УсловиеОтбора = УсловиеОтбора + "
| И НЕ СпрНоменклатура.ЭтоГруппа";
КонецЕсли;
КонецЕсли;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 50
| СпрНоменклатура.Ссылка,
| СпрНоменклатура.Наименование,
| СпрНоменклатура.Артикул
|ПОМЕСТИТЬ НоменклатураПоиск
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
|ГДЕ
| СпрНоменклатура.Наименование ПОДОБНО &СтрокаПоиска
| " + СокрЛП(УсловиеОтбора) + "
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НоменклатураПоиск.Ссылка,
| НоменклатураПоиск.Наименование,
| НоменклатураПоиск.Артикул,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
|ИЗ
| НоменклатураПоиск КАК НоменклатураПоиск
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| НоменклатураПоиск.Ссылка
| ИЗ
| НоменклатураПоиск КАК НоменклатураПоиск)) КАК ТоварыНаСкладахОстатки
| ПО НоменклатураПоиск.Ссылка = ТоварыНаСкладахОстатки.Номенклатура";
Запрос.УстановитьПараметр("СтрокаПоиска", СтрокаПоиска + "%");
ДанныеВыбора = Новый СписокЗначений;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстЗначения = СокрЛП(Выборка.Наименование) + " (артикул: " + Выборка.Артикул + ", остаток: " + Выборка.Количество + ")";
ДанныеВыбора.Добавить(Выборка.Ссылка, ТекстЗначения);
КонецЦикла;
КонецПроцедуры
Функция РеквизитыСправочника(ИмяСправочника)
СтруктураРеквизитов = Новый Структура;
МетаданныеСправочника = Метаданные.Справочники[ИмяСправочника];
Для Каждого Реквизит Из МетаданныеСправочника.СтандартныеРеквизиты Цикл
СтруктураРеквизитов.Вставить(Реквизит.Имя, Реквизит.Синоним);
КонецЦикла;
Для Каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл
СтруктураРеквизитов.Вставить(Реквизит.Имя, Реквизит.Синоним);
КонецЦикла;
Возврат СтруктураРеквизитов;
КонецФункции
За основу взята процедура НоменклатураВызовСервера.НоменклатураОбработкаПолученияДанныхВыбора из УТ 11.
Спасибо большое Вам,
но только когда ввожу первые буквы пишет ошибку:
{Справочник.Номенклатура.МодульМенеджера(304)}: Преобразование значения к типу Число не может быть выполнено
Запрос.УстановитьПараметр(“СтрокаПоиска”, СтрокаПоиска + “%”);
У нас
Проверьте, какое значение находится в этой переменной. При необходимости используйте явное приведение к типу Строка.
а пачему не работаит 1C версия 11.2 пишить так (Ограничение базовой версии
Достигнуто предельное количество подключений к ИБ) ?
Добрый день!
Это ограничения базовой версии.
В базовой версии с одной информационной базой в один момент времени может работать только один пользователь. Подробнее про другие ограничения базовых версий – на сайте фирмы “1С” (Управление торговлей. Базовая версия).
Ребята, день добрый!
Подскажите, возможно кто-то сталкивался, пользователи “испортили” ввод по строке, когда набирают в подборе контрагента с дефисом в наименовании вместо связки типа Наименование (Код) выводятся только коды, т.е. (Код), то же самое когда просто набираешь дефис(есть “служебный” контрагент с наименование “—-“), вместо связки Наименование (Код), в строке ввода выводятся только (Коды). Если сделать выгрузку в *.Dt и загрузить в другую (чистую) базу, все нормально, в текущей базе это не помогает, т.е. выгрузка-загрузка, а также не помогает реиндексирование, база SQL.
Добрый день!
Приложите, пожалуйста, скриншоты, интересно, как выглядит такое поведение.
Учитывая, что при загрузке в чистую базу все становится нормально, есть подозрение, что проблема может быть в локальном кэше метаданных. Попробуйте очистить его для текущей базы.
Чистка кэша не помогает, причем я захожу и открываю с разных серверов и под разными пользователями
Скажите куда выложить скриншоты, я выложу, в комментариях не вижу как можно прикрепить скриншоты.
Спасибо
На файлообменник любой выложите скриншоты, на этой странице можно только комментарии оставлять.
Василий, попробуйте:
https://cloud.mail.ru/public/CLag/77VvnJ6pf
https://cloud.mail.ru/public/FJr2/GitPkBPJv
На своих базах не получается воспроизвести.
Может, связано с полнотекстовым поиском. Попробовать как вариант обновить индекс полнотекстового поиска.
Для Ввода по строке в справочнике “Контрагенты” полнотекстовый поиск отключен, индекс обновлял, не помогает
А на других версиях платформы аналогичное поведение?
Не нашел в интернете что-нибудь похожее на вашу ошибку, у самого не воспроизвелось. Поэтому рекомендую обратиться к разработчикам платформы на v8@1c.ru. Возможно, они помогут диагностировать, в чем же конкретно ошибка.
Замечена такая же история, куда бежать, чего делать!?
Я предполагал, что проблема связана с локальным кэшем метаданных. Но у другого участника не подтвердилось. Предлагаю проверить поведение на других релизах платформы, а также на копии информационной базы. На чистой или демобазе какой-нибудь типовой конфигурации поведение воспроизведется?
Чтобы наверняка понять, в чем именно проблема, рекомендую обратиться к разработчикам платформы на v8@1c.ru.
Возможно ли реализовать в 8.3, при вводе строки, поиск любой части без редактирования конфигурации?
Такое поведение возможно, если разработчик указал такую возможность для данного объекта метаданных в конфигураторе. Если в конфигураторе настроен поиск только по первым символам строки, то в пользовательском режиме это переключить нельзя.
Скажите пожалуйста, можно ли свернуть/развернуть программно элемент ГруппаФормы при установленном поведении Свертываемая
Добрый день!
К сожалению, программно управлять сворачиванием нельзя. Также нельзя нельзя программно определить, свернута ли группа или развернута. Кроме этого, не существует обработчика события сворачивания/разворачивания группы. Пока это ограничения платформы.
спасибо. обработчики я не нашел поэтому и спросил.
у меня еще вопрос. в обработке есть УФ,есть реквизиты обработки.
в одной форме я устанавливаю через значение реквизита формы “объект” значение этих реквизитов обработки. как из другой формы
можно получить эти значения? и обращение “объект.” и реквизитформывзначение не содержат никаких значений.
Попробуйте воспользоваться методом Оповестить() в одной форме и обработчиком события ОбработкаОповещения во второй форме.
спасибо за ответ. я сделал через параметры при получитьформу(). но это какой-то “левый” способ. неужели из формы управляемой невозможно установить реквизиты самой обработки?
Добрый день!
Тут могут быть варианты, поскольку есть разница в том, где мы будем работать, – на сервере или на клиенте.
Если мы находимся на сервере, то можно выполнить следующий код:
Обработка1.Поле1 = ...;
Обработка1.ВыполнитьДействие();
Естественно, открыть форму на сервере мы не сможем.
На клиенте создать обработку мы не сможем. Такой тип на клиенте недоступен. Мы можем воспользоваться методом ОткрытьФорму. В параметрах открываемой формы мы можем передать значение в эту форму. А в самой форме обработать этот параметр. Его мы можем присвоить реквизиту объекта или реквизиту формы. Если с обработкой мы работаем только с формой, то смысла в реквизите объекта нет, достаточно использовать реквизит формы. А параметры как раз для этого и предназначены – передать некое начальное значение, для которого требуется открыть форму. Если предполагается исключительно серверное использование этой обработки, тогда оставляем реквизит объекта, но и форму открывать не придется.
спасибо за ответ. т.е. в УФ невозможно в одной форме установить значение реквизита обработки и получить его в другой форме. Только как вы писали через Оповестить() у уже открытой или через параметры при открытии?
Да, только такие способы.
Опишите, пожалуйста, подробнее, что за задачу вы решаете. Может, еще что-нибудь можно будет вам предложить.
спасибо за ответ. В одной форме устанавливаются параметры подключения к базе и выполняется некоторая работа, в другой форме строится дерево со значениями из подключаемой базы. обе формы заполнены элементами, вторая форма используется по необходимости и совместить их никак. нужно во вторую передать параметры подключения.сделал через параметы в получитьформу
Да, открывайте вторую форму и передавайте ей через параметры структуру со свойствами подключения к базе.
на самом деле более или менее адекватный способ есть. тоже как-то столкнулся с этой проблемой, долго копал форумы… в итоге пришел к решению сам, на базе метода КопироватьДанныеФормы. вот тут накидал статейку об этом: http://infostart.ru/public/414550/
не сочтите за рекламу, просто делюсь опытом
Добрый день. Пользователь через кнопку “Все действия” – “Изменить форму”, скрыл часть колонок. Как определить скрыта колонка в таб. поле документа или нет на управляемой форме.?
Добрый день!
Видимость элементов формы, настроенная пользователем интерактивно, не контролируется программно.
В документации об этом сказано здесь – Свойства элементов формы:
Для управления видимостью элементов формы существуют два свойства: Видимость и Пользовательская видимость. Первое свойство можно изменять как в редакторе формы (в конфигураторе), так и программно. Свойство Пользовательская видимость настраивается только в конфигураторе и задает начальную видимость элемента формы в разрезе ролей. Результирующая видимость элемента формы образуется сложением «по И» свойств Видимость и Пользовательская видимость для конкретного пользователя. Кроме того, изменяя видимость элементов формы в диалоге Настройка формы, пользователь фактически выполняет изменение свойства Пользовательская видимость конкретного элемента формы.
Т.е. пользовательская видимость программно не настраивается ни для каких элементов формы.
Спасибо, большое за ответ. Вы мне очень помогли.
Пожалуйста! Обращайтесь.
А появилась ли программная возможность получить в коде реальную видимость элемента ?
Например, мне в зависимости от того видит пользовтаель колонку или нет надо программно перестроить запрос , чтобы не выполнять лишних соединений.
Подскажите пожалуйста.
Добрый день!
В документации для свежих версий платформы точно такое же описание, как приведено выше, поведение системы аналогично.
Попробуйте привязаться к наличию определенной роли у пользователя или к настройкам пользователя.
Добрый день. Я вошел в свой аккаунт ВКонтакте. Почему не скачивается pdf файл? Спасибо
Доброго дня, Юрий!
Проверьте, пожалуйста, состоите ли Вы в нашей группе.
Даже если отображается, что да, то нужно повторно нажать “Вступить в группу” и pdf будет Вам доступна.
Подскажите пожалуйста как в 1С 8.3 поставить автоматическое время сохранения документа “поступление товаров и услуг ” на начало дня со временем “00:00:00”?
Добрый день!
Например при помощи такого обработчика в модуле документа:
Дата = НачалоДня(Дата);
КонецПроцедуры
Замечательная статья, спасибо!
Подскажите, пожалуйста, как изменить отображения элементов списка, которые изображены на этом скриншоте http://курсы-по-1с.рф/wp-content/uploads/2014/03/%D1%80%D0%B5%D0%B4-3.png
Ломаю голову над этой проблемой уже 4й день, не могу найти решение…
Отображение элементов списка поля ввода можно изменить при помощи следующих свойств: ИсторияВыбораПриВводе, ОтображениеКнопкиВыбора (Авто, В выпадающем списке, В выпадающем списке и в поле ввода, В поле ввода), КнопкаСоздания и т.д. Эти параметры можно редактировать при настройке элементов управления на форме.
Также в платформе 8.3 можно переопределить представление, например, справочника или документа. Однако на представление значений, отображаемые в выпадающем списке, обработчики ОбработкаПолученияПредставления() и ОбработкаПолученияПолейПредставления() не влияют. Т.е. в полях ввода данные отображаются с учетом переопределения представления, а в выпадающем списке отображается представление, предопределенное в платформе. Разработчики платформы считают это не ошибкой, а запланированным поведением.
>Разработчики платформы считают это не ошибкой, а запланированным поведением. Источник: ©Курсы-по-1С.рф
Подскажите, пжл, как можно изменить это “запланированное поведение”? Мне нужно отображать в выпадающем списке еще один реквизит:
клиент при выборе хочет видеть не только Наименование или Артикул, но еще и Размер (поскольку под каждым артикулом идет целая размерная линейка).
Спасибо.
Добрый день!
Если речь идет про поведение платформы (т.е. список, который формируется, когда мы вводим несколько символов в поле ввода), то тут мы его не заменим. Он будет выводиться следующим образом, как задано разработчиками платформы:
Если мы сами формируем список значений, то мы можем задать представление, которое нам нужно, добавив в представление еще и реквизит Размер.
Также вопрос возникает – если Размер у вас – это реквизит самого справочника Номенклатура, то размер можно указывать в наименовании. Если для одной номенклатуры может быть несколько размеров, то получается, что у нас два поля – номенклатура и характеристика. Значит, при выборе номенклатуры мы не можем в списке, формируемом платформой, выводить размеры, т.к. они относятся к другому справочнику (характеристик). Методологически правильно в таком случае воспользоваться формой подбора, в ней будут видны еще дополнительные сведения для заполнения документа, например, остатки товаров на складах по характеристикам (отдельно ботинки 42, 43, 44 размера и т.д.). При этом номенклатура будет одна, а у нее несколько характеристик.
Благодарю за подробный ответ. Жаль, что такой возможности в платформе не предусмотрено, но по крайней мере теперь знаю, что делать.
Извините не знаю куда написать скорее всего сюда, я делаю следующее в 8.3 хочу на форму бизнес-процесса вывести карту маршрута и чтобы при выполнении задач она обновлялась , сделал через оповещение раньше как помню это работало в 8.2 а сейчас ничего не происходит.
ОбновитьОтображениеДанных тоже использовал как на форуме советовали – ни как не обновляет. Если форму закрыть и опять открыть только тогда все ОК.Кто знает подскажите, спасибо заранее за ответ.
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия=”ЗадачаВыполнена” И Параметр=Объект.Ссылка Тогда
Карта = ПолучитьКарту(Объект.Ссылка);
ЭтаФорма.ОбновитьОтображениеДанных();
КонецЕсли;
КонецПроцедуры
Это ошибка платформы, на 8.3.5.1068 также воспроизводится – обновление карты маршрута после выполнения задачи не происходит. А если заново открыть форму, то карта маршрута отображается корректно. На платформе 8.2 поведение соответствует ожидаемому.
Необходимый функционал можно реализовать следующим образом.
В модуле формы задачи расположен следующий обработчик:
Процедура ПослеЗаписи(ПараметрыЗаписи)
Оповестить("ОбновитьКартуМаршрута");
КонецПроцедуры
А в модуле формы бизнес-процесса – такие процедуры:
Процедура Обновить(Команда)
ОбновитьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОбновитьНаСервере()
БП = РеквизитФормыВЗначение("Объект");
Схема = БП.ПолучитьКартуМаршрута();
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбновитьНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьКартуМаршрута" Тогда
ОбновитьНаСервере();
КонецЕсли;
КонецПроцедуры
Все сделал также , но не получается. Версия платформы 1С:Предприятие 8.3 (8.3.5.1088)
Все сделал также , но не получается. Версия платформы 1С:Предприятие 8.3 (8.3.5.1088) Готовлюсь к сертификации , видимо на экзамене я попаду из за бага спишут бал разбираться не будут, экзамен уже в понедельник
Работоспособность приведенного кода можно проверить под платформой 8.2, при выполнении задач карта маршрута обновляется. Под 8.3 действительно не работает. Если на экзамене именно это некорректное поведение системы приведет к снятию баллов, такое решение можно обжаловать. Главное – успеть за отведенное время выполнить все задания. Удачи на экзамене!