Новое в управляемых формах в «1С:Предприятие 8.3»
(бесплатная статья по Программированию в 1С)
из цикла статей «Первые шаги в разработке на 1С»

О чем эта статья

Эта статья продолжает цикл статей «Первые шаги в разработке на 1С». Материал предполагает, что вы уже ознакомились с предыдущими нашими статьями, посвященными интерфейсу. В это же статье мы продолжим знакомство с новыми возможностями интерфейса «Такси» и рассмотрим, какие интересные новшества получили управляемые формы в этом интерфейсе.

Применимость

В статье рассматривается интерфейс «Такси» конфигурации, разработанной на платформе 1C 8.3.5.1098. Дополнения к текущим релизам платформы (8.3.11) приведены в заключении. Поэтому вся представленная информация актуальна.

Новое в управляемых формах в «1С:Предприятие 8.3»

Разработчики платформы «1С:Предприятие 8.3» в очередной раз основательно поработали над удобством работы пользователей с управляемыми формами.

Ввод по строке

Ранее, в полях ввода, при вводе с клавиатуры начальных символов, система искала подходящие элементы.

Однако зачастую пользователям необходимо осуществлять поиск не только по первым символам наименования, но и в произвольном месте названия.

В конфигураторе у ссылочных объектов метаданных для настройки ввода по строке, была создана отдельная закладка “Поле ввода”:

Конфигуратор - Поле ввода

На ней представлены следующие возможности для формирования списка выбора при вводе по строке:

  • использование полнотекстового поиска;
  • поиск по вхождению подстроки или по началу строки;
  • выполнение поиска непосредственно или в фоновом режиме.

В свойстве “Способ поиска строки при вводе по подстроке” можно выбрать – следует ли искать только по первым символам строки или в любой ее части.

Конфигуратор - Способ поиска строки

В пользовательском режиме поиск по любой части строки выглядит следующим образом: пользователь последовательно вводит с клавиатуры символы, а система осуществляет поиск.

Причем не только с первых букв названия, но и по вхождению набранной строки:

Поиск по вхождению символов

Естественно, использование поиска по любой части строки может привести к ухудшению производительности системы, особенно при большом объеме данных.

В файловом режиме пока пользователь набирает строку, поиск производится в фоне только в том случае, если в этот момент не выполняется другое фоновое или регламентное задание.

Если установлена соответствующая настройка, то при вводе данных в поле ввода может быть использован полнотекстовый поиск.

Во время полнотекстового поиска будут найдены как целые слова, так и строки, в которых набранные символы являются частью целых слов (используется оператор * полнотекстового поиска).

Например, пользователь вводит следующие части слов в поле ввода, система во всплывающем окне отображает найденные при помощи механизма полнотекстового поиска варианты:

Полнотекстовый поиск

Результаты полнотекстового поиска, соответствующего введенной поисковой строке, приведены на рисунке:

Полнотекстовый поиск в конфигурации 1С

Напомним, что в платформе 8.3 появилась возможность переопределить представление ссылочного типа данных при помощи процедур ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления в модуле менеджера объекта.

Модуль менеджера объекта

Для увеличения нажмите на изображение.

При совместном использовании этого функционала и ввода по строке существует следующая особенность.

Указанные выше обработчики не влияют на представление значений в списке выбора – в списке отражается основное представление объекта.

Поиск в 1С

Однако после выбора в поле отображается ожидаемое переопределенное представление объекта.

Поиск по объекту метаданных

Для увеличения нажмите на изображение.

Разработчики считают, что ошибок в таком поведении платформы нет, и что более ценно показать, почему конкретный результат найден (выделить, например, подстроку, по которой объект был найден), чем отобразить оторванное от результата поиска представление соответствующего значения.

Рассмотренные выше свойства ввода по строке задавались на уровне всего объекта метаданных.

В конкретном месте конфигурации разработчик может переопределить эти свойства.

Например, при помощи обработчиков событий АвтоПодбор и ОкончаниеВводаТекста конкретного поля ввода или при помощи обработчика события ОбработкаПолученияДанныхВыбора в модуле менеджера объекта.

Для этого в этих процедурах предназначен параметр с именем Параметры типа Структура, в свойствах которой содержатся способ поиска строки, режим получения данных выбора, настройка использования данных выбора.

Выражение - Параметры

Для увеличения нажмите на изображение.

Выпадающий список для поля ввода

В платформе 8.3 выпадающий список для поля ввода получил дополнительную функциональность для повышения удобства работы с системой.

Теперь этот список может отображать историю выбранных ранее значений. Список с историей показывается на экране при установке курсора в поле, при нажатии кнопки Выбрать из списка, или кнопки на клавиатуре со Стрелкой вниз.

Выпадающий список поля ввода

Включить отображение истории можно у полей ввода, связанных с данными типа справочник, документ, бизнес-процесс, задача, план видов характеристик, план видов расчета, план счетов и план обмена. В конфигураторе для этого предусмотрено свойство, расположенное на закладке “Поле ввода”:

История выбора при вводе

Для увеличения нажмите на изображение.

Использование истории можно переопределить для конкретного реквизита объекта или элемента формы.

Отображение истории

Кроме этого, если в списке поля ввода пользователь не нашел интересующего элемента, он может нажать кнопку “Показать все” для открытия формы списка, чтобы выбрать элемент из всего справочника.

Также в списке поля ввода есть команда “Создать новый объект”. При этом будет открыта форма нового элемента.

В этой форме пользователь заполняет необходимые поля. После записи и закрытия формы ссылка на только что созданный элемент будет подставлена в поле ввода.

Создание нового элемента в поле ввода

Типовой шаблон использования команды “Создать новый элемент” выглядит следующим образом. Пользователь вводит название нужного элемента в поле ввода.

Если такого элемента в базе данных система не обнаружит – будет выведено сообщение об этом. После нажатия кнопки в списке, на экране откроется форма нового элемента с заполненным наименованием.

Рассмотренные новшества позволяют увеличить скорость ввода информации в систему.

Сохранение настроек динамических списков

В платформе 8.3 настройки динамического списка можно сохранять автоматически. Для этого в конфигураторе, для нужного реквизита формы, необходимо установить свойство “Автоматическое сохранение пользовательских настроек”. По умолчанию, при создании списка эта настройка включена.

Автоматическое сохранение настройки динамических списков

У корневого элемента конфигурации появилось новое свойство – Хранилище пользовательских настроек динамических списков.

Это свойство выбирается из списка хранилищ настроек, определенных в конфигурации.

Хранилище настроек в конфигурации

Для увеличения нажмите на изображение.

Настройка списков в пользовательском режиме вызывается при помощи соответствующего пункта меню:

Настроить список

Внешний вид формы похож на настройку отчетов.

Настройка списка в конфигурации

Для увеличения нажмите на изображение.

Условия, по которым выполнен отбор списка, автоматически отображаются в нижней части настроек. Эти настройки будут включены в форму списка.

В режиме конфигуратора для этого необходимо заполнить свойство таблицы формы Группа пользовательских настроек.

В нем нужно указать отдельную группу формы, внутрь которой и будут добавляться элементы для отображения отбора.

Конфигуратор - группа пользовательских настроек

При такой настройке форма будет иметь поля в виде “быстрых отборов”.

Настроенная форма

Для увеличения нажмите на изображение.

Если пользователь настроил список под себя, то настройки автоматически сохранятся и при повторном открытии список будет иметь тот же самый вид.

Режим просмотра динамического списка (список, дерево, иерархический список) сохраняется вместе с настройками элементов формы.

Сохранение настроек динамического списка

Для одного списка у пользователя может быть сохранено несколько различных вариантов настроек.

Журнал документов

Если режим совместимости конфигурации установлен в значение “Не использовать”, то для динамического списка, у которого в качестве основной таблицы указана таблица журнала документов, кнопка “Создать” автоматически формируется в виде подменю со списком документов, входящих в журнал.

Журнал документов

Для увеличения нажмите на изображение.

Этим упростилось создание новых документов пользователем из формы журнала. Также стало возможным быстро создавать на командной панели формы отдельные кнопки для создания нового документа определенного вида.

Для этого была создана стандартная команда СоздатьПоПараметру. Если эта команда назначена кнопке на форме, то становится доступным свойство Параметр, в котором можно выбрать тип создаваемого документа при нажатии на эту кнопку.

Создать по параметру

Для увеличения нажмите на изображение.

В пользовательском режиме эта кнопка будет выглядеть следующим образом:

Пользовательский режим 1С

Для увеличения нажмите на изображение.

Т.к. материал в статье описан для платформы 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-формате

Вы можете скачать эту статью в формате PDF по следующей ссылке: Ссылка доступна для зарегистрированных пользователей)

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.

Комментарии / обсуждение (95):

  1. Михаил

    Добрый день можете подсказать как настраивается хранение истории ввода в строке поиска в списке номенклатуры?!

    В УТ в списке номенклатуры есть расширенный поиск и там для каждого пользователя сохраняется фразы поиска которые он вводил последние N раз. Не история выбора элемента а именно какую строку вводил в поле.

    Пытался смоделировать это поведение в произвольной обработке которая ищет документы и не смог.

    • Михаил

      Уже сам разобрался. Идет сохранение списка выбора поля в хранилище настроек при записи и чтение при открытии. :)

    • Василий Ханевич

      Добрый день!
      Это реализовано не на уровне платформы, а при помощи кода в конфигурации.
      Беру УТ 11.5.7, открываю форму списка справочника Номенклатура. В модуле есть следующий код:

      &НаКлиенте
      Процедура ПриЗакрытии(ЗавершениеРаботы)
         
          ...
          Если Не ЗавершениеРаботы Тогда
              СохранитьНастройкиФормыНаСервере();
          КонецЕсли;
         
      КонецПроцедуры

      &НаСервере
      Процедура СохранитьНастройкиФормыНаСервере()
         
          ПодборТоваровСервер.СохранитьНастройкиФормы(ЭтаФорма);
         
      КонецПроцедуры

      В этой процедуре и происходит сохранение списка введенных строк для поиска. Хранится этот список в хранилище общих настроек.

  2. miha.strem98

    ОбработкаПолученияДанных не работает из обычных форм, в “официальных” источниках об этом не пишут. Ткните или объясните, пожалуйста, где это написано?

  3. Jesper

    Добрый день! Подскажите пожалуйста, как программно заполнить свойство Группа пользовательских настроек, например, динамического списка?

    • Василий Ханевич

      Добрый день!
      Отдельного свойства, к которому можно было бы обратиться программно, нет.
      Но создание такой группы можно реализовать при помощи следующего кода:

          элСписокКомпоновщикНастроекПользовательскиеНастройки = Элементы.Вставить("СписокКомпоновщикНастроекПользовательскиеНастройки", Тип("ГруппаФормы"));
          элСписокКомпоновщикНастроекПользовательскиеНастройки.Заголовок = "Группа пользовательских настроек";
          элСписокКомпоновщикНастроекПользовательскиеНастройки.Вид = ВидГруппыФормы.ОбычнаяГруппа;
         
          Элементы.Список.СоздатьЭлементыФормыПользовательскихНастроек(элСписокКомпоновщикНастроекПользовательскиеНастройки, РежимОтображенияНастроекКомпоновкиДанных.Все);
  4. Шерстянников Вячеслав

    Добрый день. Вопрос как почувствовать что ввод по строке использует полнотекстовый поиск?
    Включение или выключение его никак не влияет на 50000 элементах (возможно конечно этого мало) справочника, полнотекстовый поиск по справочнику включен.

    • Василий Ханевич

      Добрый день!
      Например, в модуле менеджера того объекта, где выполняется поиск, есть обработчик события ОбработкаПолученияДанныхВыбора. В этой процедуре есть параметр Параметры. Это структура, в которой есть ключ ПолнотекстовыйПоиск (признак, указывающий, что необходимо использования полнотекстовый поиск при вводе по строке).

      Также в типовых (УТ 11) этот обработчик переопределяется (вызывается процедура НоменклатураОбработкаПолученияДанныхВыбора из общего модуля НоменклатураВызовСервера), СтандартнаяОбработка устанавливается в значение Ложь, используется собственный программный код для поиска.

  5. Алекс

    Добрый день. Делаю внешнюю обработку с выполнением на клиенте заполнения реквизитов для открытого в форме документа и вызываемую по кнопке “Заполнить” (для внешней обработки), при этом в коде внешней обработки меняю реквизит объекта “Операция”, на форме есть поле операция с обработчиком ПриИзменении…(), в этом обработчик происходит переформирование отображения элементов формы с учетом выбранной операции с вызовом на сервере. Можно ли как-то вызвать событие элемента формы Операция для отработки Обработчика этого события из формы внешней обработки? Или еще как-то решить вопрос по переформированию формы объекта из формы внешней обработки?

    • Василий Ханевич

      Добрый день!
      Из формы внешней обработки можно обратиться к форме документа, для которого выполняется заполнение, через ВладелецФормы. При помощи ВладелецФормы можно работать с реквизитами формы, экспортными методами формы. Например:

      ВладелецФормы.Объект.Товары.Очистить();
      • Алим

        Здравствуйте, нужно создать документ, справочник или команду поиска (базу пациентов) для того чтобы когда я регистрирую новых пациентов можно было нажать на эту команду, ввести условно говоря фамилия и она выдавала карточку данного пациента?

        • Василий Ханевич

          Добрый день!
          Да, можно такое реализовать. Пользователь вводит в поле на форме строку поиска. При нажатии на кнопку ищем в базе элементы справочника, которые содержат введенную пользователем подстроку. Если в базе найдены подходящие элементы, то открываем их формы или выводим список.

          • Алим

            Получается нужно создавать именно форму? Как форму определенного документа?
            Можете более подробно?

            • Василий Ханевич

              Например, создаете обработку, добавляете форму. На форме располагаете поле ввода и кнопку. При нажатии на кнопку осуществляется поиск в базе, открытие формы найденного элемента справочника.

    • Алекс

      Спасибо, Ваш пример понятен, но мне бы было интересно что-то типа ВладелецФормы.ЭлементФормы.ПриИзменении(), чтобы переформировать элементы формы, как-то так возможно?

      • Василий Ханевич

        Именно так нельзя написать. Можно вызвать экспортную процедуру из модуля формы.
        В типовых конфигурациях чаще всего в обработчике события ПриИзменении управление передается в специальную процедуру, что-то вроде УстановитьВидимость, а внутри уже этой процедуры происходит настройка формы в зависимости от вида операции.

  6. Леонид

    Добрый день!
    В журнале документов на управляемых формах не нашел кнопки “Создать на основании”.
    Подскажите – как можно её вернуть?
    Спасибо.

    • Василий Ханевич

      Добрый день!
      Такой возможности нет. Это ограничение динамического списка. В типовых конфигурациях подменю ввода на основании в формах заполняется программно. Например, в УТ 11 обработка ЖурналДокументовПродажи.

  7. Марк

    Здравствуйте!

    1. Можно ли отключить всплывающие сообщения, которые появляются при проведение документа или записи элементов справочника?
    2. Можно ли полностью убрать вниз падающий список при вводе номенклатуры? Сейчас у меня отображается только надпись “Введите строку для поиска”, но хотелось бы и ее убрать.

    • Василий Ханевич

      Добрый день!
      1. Нет, отключить нельзя.
      2. Попробуйте свойства справочника в конфигураторе установить, например, следующим образом:
      Свойства справочника

  8. Mitrofanov.Vladimir

    Добрый день! Подскажите, есть ли возможность из формы обработки открыть форму списка документов на весь экран? Спасибо.

    • Василий Ханевич

      Добрый день!
      Можно попробовать использовать режим основного окна ПолноэкранноеРабочееМесто или Киоск. При этом основное окно раскрывается на весь экран, но все остальные окна, открывающиеся как с блокировкой интерфейса, так и с блокировкой формы владельца на весь экран не раскрываются, придется переносить их в основное окно.

      • Mitrofanov.Vladimir

        Спасибо, Василий! Вы не планируете обновить курс по мобильной платформе? Все-таки много нового появилось…

        • Поддержка курса по EDT

          Доброе. На самом деле – между 8.3.8 (версия курса) и 8.3.11 (текущая версия мобильной), ничего принципиально нового не появилось, увы.
          А пот в 8.3.12 – появится, вот ее то мы и ждем. Чего только мобильный клиент стОит :)

  9. Belskij

    Подскажите, пожалуйста, есть ли возможность программно отследить, введено что-то в строке поиска (дополнение элементов формы, связанное с таблицей формы, отображающей динамический список) или нет?

    • Василий Ханевич

      Добрый день!
      В платформе не предусмотрен функционал для перехвата результата введенной пользователем строки поиска в динамическом списке.

      Можно использовать методы ПолучитьИсполняемуюСхемуКомпоновкиДанных и ПолучитьИсполняемыеНастройкиКомпоновкиДанных.
      В момент выполнения метода ПолучитьИсполняемыеНастройкиКомпоновкиДанных система проверяет, применен ли к списку поиск и включен индекс полнотекстового поиска. Если эти условия выполняются, будет выполнен новый полнотекстовый поиск. На основании результатов этого поиска будет сгенерирован отбор и возвращен в составе настроек, возвращаемых методом ПолучитьИсполняемыеНастройкиКомпоновкиДанных.

  10. Аркадий

    1С:Предприятие 8.3 (8.3.8.1675)
    Подскажите пожалуйста как зафиксировать строки в макете СКД в режиме тонкого клиента. Есть отчет на СКД. Ради форматирования групповых полей шапки, сделал фиксированный шаблон. После этого все строки стали прокручиваться. В процедуру ПриКомпоновкеРезультата поставил ДокументРезультат.ФиксацияСверху = 7; В отладчике вижу, что значение устанавливается, но после отображения отчета там снова 0. На кнопку вешаю тот же текст ДокументРезультат.ФиксацияСверху = 7; Работает.

    Как же правильно установить ФиксациюСтрок, чтобы не жать кнопки?

    • Василий Ханевич

      Добрый день!
      В настройках компоновки на закладке Другие настройки попробуйте поработать с параметрами Фиксация слева и Фиксация сверху, установить их в значение Не использовать, фиксировать шапку программно. Возможно, есть нюансы формирования табличного документа при различных настройках.
      Просьба в комментариях к конкретной статье задавать вопросы по ее содержанию.

  11. Nickon

    Здравствуйте! Можно ли переопределить представление для конкретного поля (ссылочного) после выбора? Будь то поле табличной части или реквизит формы?

  12. BorisLK

    Добрый день.
    Возможно ли при вводе по строке в выпадающем списке, который отображает система (с подходящими вхождениями символов), убрать значение кода элемента.
    Т.е. стандартно показывает “Наименование (Код)”, а надо оставить только “Наименование”.
    Спасибо.

  13. Сергей

    Здравствуйте! Подскажите пожалуйста, есть конфигурация УНФ версия 1с 8.3, есть номенклатура с поиском и кнопка управления расширенным поиском. В этих настройках по умолчанию стоит выбор искать по части строки. Как мне изменить эту настройку по умолчанию, чтобы изначально стояла галка По началу строки. В конфигураторе не могу найти эту форму. Пробовал в справочнике номенклатура на закладке Поле ввода выбрать начало строки, но не помогает. Где в конфигураторе находится эта обработка поиска? Спасибо.

    • Василий Ханевич

      Добрый день!
      Расширенный поиск – это возможность самой платформы, поэтому отдельной формы, которую можно было бы отредактировать в конфигураторе, нет.

      • Сергей

        Тогда непонятно, в документации написано, что если включен полнотекстовый поиск, то программа сначала будет искать по началу строки, далее там написано, что если вызвать форму расширенного поиска горячей клавишей Alt + F то должна автоматически стоять галочка (по точному соответствию). Но почему то ни один из этих способов не работает. Даже если включаешь полнотекстовый поиск, все равно поиск идет через эту форму и поиск работает по части строки. Релиз платформы 8.3.6 Конфигурация Автосервис от Рарус, которая сделана на конфигурации УНФ

        Вот выдержка из документации 1С на портале ИТС: “Если для списка включен полнотекстовый поиск, то поиск будет выполняться только по началу слов.

        Если диалог был открыт по сочетанию клавиш, то значение текущей ячейки будет установлено в строке Что искать и будет установлен поиск По точному совпадению.

        Если диалог был открыт при начале ввода поисковой строки в списке, способ поиска будет выбран как По части строки, а набранный текст будет установлен в поле Что искать.”

        Может я что то не так делаю? Или кому можно задать вопрос?

        • Василий Ханевич

          Беру демо-базу конфигурации УНФ 1.6.4. Открываю форму списка справочника Номенклатура.
          В строке поиска ввожу bos bg. Получается вот такой результат:
          Номенклатура
          Поиск идет по началу слов.
          Затем устанавливаю курсор на колонку Единица измерения, нажимаю клавиши Alt + F:
          Единица измерения
          Предлагается поиск по точному совпадению. Обратите внимание – можно выбрать конкретный элемент из справочника, а не только вводить текст.
          Если же курсор будет на колонке Артикул или Наименование, то предлагается расширенный поиск по части строки, т.е. учитывается тип данных.
          Непонятное поведение платформы может оказаться ошибкой. На нашем сайте есть специальная статья на эту тему – Как в 1С регистрировать ошибки платформы.

  14. Владислав

    Очень удобная функция ввода по любой части строки.
    Но вот беда – у меня не работает. Упорно считает только по началу строки.
    Какие есть ограничения на применение этого функционала?
    Релиз ядра 8.3.6.2332. База файловая… пока.
    Полнотекстовый поиск ставил-убирал. Индекс поиска чистил и формировал заново.
    Использовал оба режима получения данных выбора.
    Кэш чистил.
    Результат один – ищет только по началу строки.

    • Василий Ханевич

      Добрый день!
      В модуле менеджера справочника может быть задан обработчик ОбработкаПолученияДанныхВыбора, в котором можно переопределить поведение системы. Например, сформировать собственный список выбора. Проверьте этот обработчик, может, в нем какая-либо специфическая логика реализована.

  15. Лена

    Здравствуйте. Столкнулась с такой проблемой, не сохраняются значения реквизитов формы. Для формы в свойствах установила Автоматическое сохранение, для этого реквизита установила флаг Сохранение, но реквизит сохраняется во всех формах с одним и тем же значением. Подскажите, пожалуйста, что не так делаю?

    • Василий Ханевич

      Добрый день!
      Поясните, пожалуйста, подробнее, на примере, в чем именно проблема. Сначала вы пишете, что не сохраняются значения, а потом, что сохраняются. И что значит во всех формах с одним и тем же значением?

  16. Илья

    Здраствуйте, Василий,
    Очень нужна ваша помощь, подскажите пожалуйста,

    нужно чтобы в поиске(выбор) по строке в табличной части (например расх. накладная), выводилась информация номенклатуры не только (наименование, код, артикул) но и например: цена, остаток, группа родитель…

    как правильно написать процедуру “ОбработкаПолученияДанныхВыбора”, которую я так понимаю нужно вставить в модуль менеджера объекта,

    (1С 8.3, Розница 2.1) заранее благодарен Вам!!!

    • Василий Ханевич

      Добрый день!
      Например, вот такой обработчик в модуле менеджера может получиться:

      Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
         
          СтандартнаяОбработка = Ложь;
         
          // Получим структуру возможных полей отбора справочника номенклатуры
          СтруктураРеквизитов = РеквизитыСправочника("Номенклатура");
         
          Запрос        = Новый Запрос;
          СтрокаПоиска  = Параметры.СтрокаПоиска;
          УсловиеОтбора = "";
         
          Для Каждого КлючИЗначениеОтбора Из Параметры.Отбор Цикл
              Если СтруктураРеквизитов.Свойство(КлючИЗначениеОтбора.Ключ) Тогда
                  УсловиеОтбора = УсловиеОтбора + "
                      |   И СпрНоменклатура." + КлючИЗначениеОтбора.Ключ + " В (&" + КлючИЗначениеОтбора.Ключ + ")";
                  Запрос.УстановитьПараметр(КлючИЗначениеОтбора.Ключ,КлючИЗначениеОтбора.Значение);
              КонецЕсли;
          КонецЦикла;
         
          Если НЕ Параметры.Отбор.Свойство("ЭтоГруппа") И Параметры.Свойство("ВыборГруппИЭлементов") Тогда
              Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда
                  УсловиеОтбора = УсловиеОтбора + "
                      |   И СпрНоменклатура.ЭтоГруппа";
              ИначеЕсли Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы Тогда
                  УсловиеОтбора = УсловиеОтбора + "
                      |   И НЕ СпрНоменклатура.ЭтоГруппа";
              КонецЕсли;
          КонецЕсли;
         
          Запрос.Текст =
          "ВЫБРАТЬ ПЕРВЫЕ 50
          |   СпрНоменклатура.Ссылка,
          |   СпрНоменклатура.Наименование,
          |   СпрНоменклатура.Артикул
          |ПОМЕСТИТЬ НоменклатураПоиск
          |ИЗ
          |   Справочник.Номенклатура КАК СпрНоменклатура
          |ГДЕ
          |   СпрНоменклатура.Наименование ПОДОБНО &СтрокаПоиска
          |   " + СокрЛП(УсловиеОтбора) + "
          |;
          |
          |////////////////////////////////////////////////////////////////////////////////
          |ВЫБРАТЬ РАЗЛИЧНЫЕ
          |   НоменклатураПоиск.Ссылка,
          |   НоменклатураПоиск.Наименование,
          |   НоменклатураПоиск.Артикул,
          |   ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
          |ИЗ
          |   НоменклатураПоиск КАК НоменклатураПоиск
          |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
          |               ,
          |               Номенклатура В
          |                   (ВЫБРАТЬ
          |                       НоменклатураПоиск.Ссылка
          |                   ИЗ
          |                       НоменклатураПоиск КАК НоменклатураПоиск)) КАК ТоварыНаСкладахОстатки
          |       ПО НоменклатураПоиск.Ссылка = ТоварыНаСкладахОстатки.Номенклатура";
         
          Запрос.УстановитьПараметр("СтрокаПоиска", СтрокаПоиска + "%");
         
          ДанныеВыбора = Новый СписокЗначений;

          Выборка = Запрос.Выполнить().Выбрать();
          Пока Выборка.Следующий() Цикл
             
              ТекстЗначения = СокрЛП(Выборка.Наименование) + " (артикул: " + Выборка.Артикул + ", остаток: " + Выборка.Количество + ")";
              ДанныеВыбора.Добавить(Выборка.Ссылка, ТекстЗначения);
             
          КонецЦикла;  
         
      КонецПроцедуры

      Функция РеквизитыСправочника(ИмяСправочника)
         
          СтруктураРеквизитов   = Новый Структура;
          МетаданныеСправочника = Метаданные.Справочники[ИмяСправочника];
         
          Для Каждого Реквизит Из МетаданныеСправочника.СтандартныеРеквизиты Цикл
              СтруктураРеквизитов.Вставить(Реквизит.Имя, Реквизит.Синоним);
          КонецЦикла;
         
          Для Каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл
              СтруктураРеквизитов.Вставить(Реквизит.Имя, Реквизит.Синоним);
          КонецЦикла;
         
          Возврат СтруктураРеквизитов;
         
      КонецФункции

      За основу взята процедура НоменклатураВызовСервера.НоменклатураОбработкаПолученияДанныхВыбора из УТ 11.

      • Илья

        Спасибо большое Вам,

        но только когда ввожу первые буквы пишет ошибку:

        {Справочник.Номенклатура.МодульМенеджера(304)}: Преобразование значения к типу Число не может быть выполнено
        Запрос.УстановитьПараметр(“СтрокаПоиска”, СтрокаПоиска + “%”);

        • Василий Ханевич

          У нас

          СтрокаПоиска  = Параметры.СтрокаПоиска;

          Проверьте, какое значение находится в этой переменной. При необходимости используйте явное приведение к типу Строка.

  17. Валиев

    а пачему не работаит 1C версия 11.2 пишить так (Ограничение базовой версии
    Достигнуто предельное количество подключений к ИБ) ?

    • Василий Ханевич

      Добрый день!
      Это ограничения базовой версии.
      В базовой версии с одной информационной базой в один момент времени может работать только один пользователь. Подробнее про другие ограничения базовых версий – на сайте фирмы “1С” (Управление торговлей. Базовая версия).

  18. masterol

    Ребята, день добрый!
    Подскажите, возможно кто-то сталкивался, пользователи “испортили” ввод по строке, когда набирают в подборе контрагента с дефисом в наименовании вместо связки типа Наименование (Код) выводятся только коды, т.е. (Код), то же самое когда просто набираешь дефис(есть “служебный” контрагент с наименование “—-“), вместо связки Наименование (Код), в строке ввода выводятся только (Коды). Если сделать выгрузку в *.Dt и загрузить в другую (чистую) базу, все нормально, в текущей базе это не помогает, т.е. выгрузка-загрузка, а также не помогает реиндексирование, база SQL.

    • Василий Ханевич

      Добрый день!
      Приложите, пожалуйста, скриншоты, интересно, как выглядит такое поведение.
      Учитывая, что при загрузке в чистую базу все становится нормально, есть подозрение, что проблема может быть в локальном кэше метаданных. Попробуйте очистить его для текущей базы.

      • masterol

        Чистка кэша не помогает, причем я захожу и открываю с разных серверов и под разными пользователями
        Скажите куда выложить скриншоты, я выложу, в комментариях не вижу как можно прикрепить скриншоты.
        Спасибо

        • Василий Ханевич

          На файлообменник любой выложите скриншоты, на этой странице можно только комментарии оставлять.

            • Василий Ханевич

              На своих базах не получается воспроизвести.
              Может, связано с полнотекстовым поиском. Попробовать как вариант обновить индекс полнотекстового поиска.

              • masterol

                Для Ввода по строке в справочнике “Контрагенты” полнотекстовый поиск отключен, индекс обновлял, не помогает

                • Василий Ханевич

                  А на других версиях платформы аналогичное поведение?
                  Не нашел в интернете что-нибудь похожее на вашу ошибку, у самого не воспроизвелось. Поэтому рекомендую обратиться к разработчикам платформы на v8@1c.ru. Возможно, они помогут диагностировать, в чем же конкретно ошибка.

                  • Василий Ханевич

                    Я предполагал, что проблема связана с локальным кэшем метаданных. Но у другого участника не подтвердилось. Предлагаю проверить поведение на других релизах платформы, а также на копии информационной базы. На чистой или демобазе какой-нибудь типовой конфигурации поведение воспроизведется?
                    Чтобы наверняка понять, в чем именно проблема, рекомендую обратиться к разработчикам платформы на v8@1c.ru.

  19. User

    Возможно ли реализовать в 8.3, при вводе строки, поиск любой части без редактирования конфигурации?

    • Василий Ханевич

      Такое поведение возможно, если разработчик указал такую возможность для данного объекта метаданных в конфигураторе. Если в конфигураторе настроен поиск только по первым символам строки, то в пользовательском режиме это переключить нельзя.

  20. Владимир

    Скажите пожалуйста, можно ли свернуть/развернуть программно элемент ГруппаФормы при установленном поведении Свертываемая

    • Василий Ханевич

      Добрый день!
      К сожалению, программно управлять сворачиванием нельзя. Также нельзя нельзя программно определить, свернута ли группа или развернута. Кроме этого, не существует обработчика события сворачивания/разворачивания группы. Пока это ограничения платформы.

      • Владимир

        спасибо. обработчики я не нашел поэтому и спросил.
        у меня еще вопрос. в обработке есть УФ,есть реквизиты обработки.
        в одной форме я устанавливаю через значение реквизита формы “объект” значение этих реквизитов обработки. как из другой формы
        можно получить эти значения? и обращение “объект.” и реквизитформывзначение не содержат никаких значений.

        • Василий Ханевич

          Попробуйте воспользоваться методом Оповестить() в одной форме и обработчиком события ОбработкаОповещения во второй форме.

          • Владимир

            спасибо за ответ. я сделал через параметры при получитьформу(). но это какой-то “левый” способ. неужели из формы управляемой невозможно установить реквизиты самой обработки?

            • Василий Ханевич

              Добрый день!
              Тут могут быть варианты, поскольку есть разница в том, где мы будем работать, – на сервере или на клиенте.
              Если мы находимся на сервере, то можно выполнить следующий код:

              Обработка1 = Обработки.Обработка1.Создать();
              Обработка1.Поле1 = ...;
              Обработка1.ВыполнитьДействие();

              Естественно, открыть форму на сервере мы не сможем.

              На клиенте создать обработку мы не сможем. Такой тип на клиенте недоступен. Мы можем воспользоваться методом ОткрытьФорму. В параметрах открываемой формы мы можем передать значение в эту форму. А в самой форме обработать этот параметр. Его мы можем присвоить реквизиту объекта или реквизиту формы. Если с обработкой мы работаем только с формой, то смысла в реквизите объекта нет, достаточно использовать реквизит формы. А параметры как раз для этого и предназначены – передать некое начальное значение, для которого требуется открыть форму. Если предполагается исключительно серверное использование этой обработки, тогда оставляем реквизит объекта, но и форму открывать не придется.

              • Владимир

                спасибо за ответ. т.е. в УФ невозможно в одной форме установить значение реквизита обработки и получить его в другой форме. Только как вы писали через Оповестить() у уже открытой или через параметры при открытии?

                • Василий Ханевич

                  Да, только такие способы.
                  Опишите, пожалуйста, подробнее, что за задачу вы решаете. Может, еще что-нибудь можно будет вам предложить.

              • Владимир

                спасибо за ответ. В одной форме устанавливаются параметры подключения к базе и выполняется некоторая работа, в другой форме строится дерево со значениями из подключаемой базы. обе формы заполнены элементами, вторая форма используется по необходимости и совместить их никак. нужно во вторую передать параметры подключения.сделал через параметы в получитьформу

                • Василий Ханевич

                  Да, открывайте вторую форму и передавайте ей через параметры структуру со свойствами подключения к базе.

                • Александр

                  на самом деле более или менее адекватный способ есть. тоже как-то столкнулся с этой проблемой, долго копал форумы… в итоге пришел к решению сам, на базе метода КопироватьДанныеФормы. вот тут накидал статейку об этом: http://infostart.ru/public/414550/

                  не сочтите за рекламу, просто делюсь опытом

  21. maldinitaly

    Добрый день. Пользователь через кнопку “Все действия” – “Изменить форму”, скрыл часть колонок. Как определить скрыта колонка в таб. поле документа или нет на управляемой форме.?

    • Василий Ханевич

      Добрый день!
      Видимость элементов формы, настроенная пользователем интерактивно, не контролируется программно.
      В документации об этом сказано здесь – Свойства элементов формы:
      Для управления видимостью элементов формы существуют два свойства: Видимость и Пользовательская видимость. Первое свойство можно изменять как в редакторе формы (в конфигураторе), так и программно. Свойство Пользовательская видимость настраивается только в конфигураторе и задает начальную видимость элемента формы в разрезе ролей. Результирующая видимость элемента формы образуется сложением «по И» свойств Видимость и Пользовательская видимость для конкретного пользователя. Кроме того, изменяя видимость элементов формы в диалоге Настройка формы, пользователь фактически выполняет изменение свойства Пользовательская видимость конкретного элемента формы.
      Т.е. пользовательская видимость программно не настраивается ни для каких элементов формы.

          • Андрей Данилюк

            А появилась ли программная возможность получить в коде реальную видимость элемента ?
            Например, мне в зависимости от того видит пользовтаель колонку или нет надо программно перестроить запрос , чтобы не выполнять лишних соединений.
            Подскажите пожалуйста.

            • Василий Ханевич

              Добрый день!
              В документации для свежих версий платформы точно такое же описание, как приведено выше, поведение системы аналогично.
              Попробуйте привязаться к наличию определенной роли у пользователя или к настройкам пользователя.

  22. Юрий

    Добрый день. Я вошел в свой аккаунт ВКонтакте. Почему не скачивается pdf файл? Спасибо

    • Татьяна Гужавина

      Доброго дня, Юрий!
      Проверьте, пожалуйста, состоите ли Вы в нашей группе.
      Даже если отображается, что да, то нужно повторно нажать “Вступить в группу” и pdf будет Вам доступна.

  23. Кристина

    Подскажите пожалуйста как в 1С 8.3 поставить автоматическое время сохранения документа “поступление товаров и услуг ” на начало дня со временем “00:00:00”?

    • Василий Ханевич

      Добрый день!
      Например при помощи такого обработчика в модуле документа:

      Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
          Дата = НачалоДня(Дата);
      КонецПроцедуры
  24. Дмитрий

    Замечательная статья, спасибо!
    Подскажите, пожалуйста, как изменить отображения элементов списка, которые изображены на этом скриншоте http://курсы-по-1с.рф/wp-content/uploads/2014/03/%D1%80%D0%B5%D0%B4-3.png
    Ломаю голову над этой проблемой уже 4й день, не могу найти решение…

    • hanv

      Отображение элементов списка поля ввода можно изменить при помощи следующих свойств: ИсторияВыбораПриВводе, ОтображениеКнопкиВыбора (Авто, В выпадающем списке, В выпадающем списке и в поле ввода, В поле ввода), КнопкаСоздания и т.д. Эти параметры можно редактировать при настройке элементов управления на форме.
      Также в платформе 8.3 можно переопределить представление, например, справочника или документа. Однако на представление значений, отображаемые в выпадающем списке, обработчики ОбработкаПолученияПредставления() и ОбработкаПолученияПолейПредставления() не влияют. Т.е. в полях ввода данные отображаются с учетом переопределения представления, а в выпадающем списке отображается представление, предопределенное в платформе. Разработчики платформы считают это не ошибкой, а запланированным поведением.

      • Владимир

        >Разработчики платформы считают это не ошибкой, а запланированным поведением. Источник: ©Курсы-по-1С.рф
        Подскажите, пжл, как можно изменить это “запланированное поведение”? Мне нужно отображать в выпадающем списке еще один реквизит:
        клиент при выборе хочет видеть не только Наименование или Артикул, но еще и Размер (поскольку под каждым артикулом идет целая размерная линейка).
        Спасибо.

        • Василий Ханевич

          Добрый день!
          Если речь идет про поведение платформы (т.е. список, который формируется, когда мы вводим несколько символов в поле ввода), то тут мы его не заменим. Он будет выводиться следующим образом, как задано разработчиками платформы:
          Список
          Если мы сами формируем список значений, то мы можем задать представление, которое нам нужно, добавив в представление еще и реквизит Размер.
          Также вопрос возникает – если Размер у вас – это реквизит самого справочника Номенклатура, то размер можно указывать в наименовании. Если для одной номенклатуры может быть несколько размеров, то получается, что у нас два поля – номенклатура и характеристика. Значит, при выборе номенклатуры мы не можем в списке, формируемом платформой, выводить размеры, т.к. они относятся к другому справочнику (характеристик). Методологически правильно в таком случае воспользоваться формой подбора, в ней будут видны еще дополнительные сведения для заполнения документа, например, остатки товаров на складах по характеристикам (отдельно ботинки 42, 43, 44 размера и т.д.). При этом номенклатура будет одна, а у нее несколько характеристик.

          • Владимир

            Благодарю за подробный ответ. Жаль, что такой возможности в платформе не предусмотрено, но по крайней мере теперь знаю, что делать.

  25. Александр

    Извините не знаю куда написать скорее всего сюда, я делаю следующее в 8.3 хочу на форму бизнес-процесса вывести карту маршрута и чтобы при выполнении задач она обновлялась , сделал через оповещение раньше как помню это работало в 8.2 а сейчас ничего не происходит.
    ОбновитьОтображениеДанных тоже использовал как на форуме советовали – ни как не обновляет. Если форму закрыть и опять открыть только тогда все ОК.Кто знает подскажите, спасибо заранее за ответ.

    &НаКлиенте
    Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия=”ЗадачаВыполнена” И Параметр=Объект.Ссылка Тогда
    Карта = ПолучитьКарту(Объект.Ссылка);
    ЭтаФорма.ОбновитьОтображениеДанных();
    КонецЕсли;

    КонецПроцедуры

    • hanv

      Это ошибка платформы, на 8.3.5.1068 также воспроизводится – обновление карты маршрута после выполнения задачи не происходит. А если заново открыть форму, то карта маршрута отображается корректно. На платформе 8.2 поведение соответствует ожидаемому.

      Необходимый функционал можно реализовать следующим образом.
      В модуле формы задачи расположен следующий обработчик:

      &НаКлиенте
      Процедура ПослеЗаписи(ПараметрыЗаписи)
          Оповестить("ОбновитьКартуМаршрута");
      КонецПроцедуры

      А в модуле формы бизнес-процесса – такие процедуры:

      &НаКлиенте
      Процедура Обновить(Команда)
          ОбновитьНаСервере();
      КонецПроцедуры

      &НаСервере
      Процедура ОбновитьНаСервере()
          БП = РеквизитФормыВЗначение("Объект");
          Схема = БП.ПолучитьКартуМаршрута();
      КонецПроцедуры

      &НаСервере
      Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
          ОбновитьНаСервере();
      КонецПроцедуры

      &НаКлиенте
      Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
          Если ИмяСобытия = "ОбновитьКартуМаршрута" Тогда
              ОбновитьНаСервере();
          КонецЕсли;
      КонецПроцедуры
      • Александр

        Все сделал также , но не получается. Версия платформы 1С:Предприятие 8.3 (8.3.5.1088)

        • Александр

          Все сделал также , но не получается. Версия платформы 1С:Предприятие 8.3 (8.3.5.1088) Готовлюсь к сертификации , видимо на экзамене я попаду из за бага спишут бал разбираться не будут, экзамен уже в понедельник

          • hanv

            Работоспособность приведенного кода можно проверить под платформой 8.2, при выполнении задач карта маршрута обновляется. Под 8.3 действительно не работает. Если на экзамене именно это некорректное поведение системы приведет к снятию баллов, такое решение можно обжаловать. Главное – успеть за отведенное время выполнить все задания. Удачи на экзамене!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.