1с 8 как спозиционироваться на элементе справочника
Потратил кучу времени. Оказалось, что если у динамического списка есть основная таблица, то текущая строка это ссылка и ее можно просто взять и заполнить ссылкой!
Форма обработки. В ней есть список приемов. В обработку передали параметр «Прием» и хотим этот прием видеть активированным в списке.
- Заказчикам
- Специалистам
- Услуги
- Продукты и решения
- О компании
- А. Белов +
Одним из неприятных моментов при работе с динамическими списками управляемого приложения является невозможность использования такой привычной для обычного приложения опции, как «поиск по строке». Предлагаю один из вариантов реализации поиска по первым буквам в динамическом списке на основе общей Формы Подбора из типовой конфигурации УНФ.
В описанном ниже примере поиск вместе с сортировкой по полю реализован для колонок Код, Артикул, Наименование.
Добавляем Реквизиты формы ПоискКод, ПоискАртикул, ПоискНаименование с типом «Строка».Вносим их в Группу Поиск на форме.
Программируем события поля ввода АвтоПодбор:
процедура Установитьпорядок ( ИмяПоля )
Если НЕ ( СписокЗапасов . Порядок . элементы . количество () = 1 и СписокЗапасов . Порядок . элементы [ 0 ]. поле = Новый ПолеКомпоновкиДанных ( ИмяПоля )) тогда
СписокЗапасов . Порядок . элементы . очистить ();
НЭлемент = СписокЗапасов . Порядок . Элементы . Добавить ( Тип ( "ЭлементПорядкаКомпоновкиДанных" ));
НЭлемент . Использование = Истина;
НЭлемент . Поле = Новый ПолеКомпоновкиДанных ( ИмяПоля );
НЭлемент . ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных . Возр ;
НЭлемент . РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных . Обычный ;
конецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьПоискПоСтрокеНаСервере ( Текст , ИмяКолонки )
ПостроительЗапроса = новый построительЗапроса ;
ПостроительЗапроса . Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ПОДСТРОКА(Номенклатура." + ИмяКолонки + " , 1, &Длина) = &Зн
| | Номенклатура.Ссылка.*>" ;
ПостроительЗапроса . Параметры . Вставить ( "Длина" , СтрДлина ( Текст ));
ПостроительЗапроса . Параметры . Вставить ( "Зн" , Текст );
Если Не СписокЗапасов . Параметры . элементы [ 2 ]. Значение = Справочники . Номенклатура . ПустаяСсылка () тогда
НЭлемент = ПостроительЗапроса . Отбор . Добавить ( "Ссылка" );
НЭлемент . ВидСравнения = ВидСравнения . ВИерархии ;
НЭлемент . Значение = СписокЗапасов . Параметры . элементы [ 2 ]. Значение ;
НЭлемент . Использование = Истина;
КонецЕсли;
ПостроительЗапроса . Выполнить ();
ТЗ = Построительзапроса . Результат . Выгрузить ();
Сп = новый СписокЗначений ;
Сп . ЗагрузитьЗначения ( ТЗ . ВыгрузитьКолонку ( "Ссылка" ));
СписокЗапасов . Отбор . Элементы . Очистить ();
НЭлемент = СписокЗапасов . Отбор . Элементы . добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ));
Нэлемент . левоеЗначение = новый ПолекомпоновкиДанных ( "Номенклатура" );
НЭлемент . ВидСравнения = ВидСравненияКомпоновкиДанных . ВСписке ;
НЭлемент . ПравоеЗначение = Сп ;
НЭлемент . Использование = истина;
КонецПроцедуры
Таким образом получаем , что при наборе первых букв искомого варианта в поле «по артикулу» , например, группы поиска, происходит сортировка списка по колонке Артикул и отбор тех строк, артикул которых начинается с набранных символов.
Тут , конечно, был бы удачнее не отбор, а позиционирование на первом найденном в списке элементе . Т.е. мне бы хотелось в тексте запроса Построителя добавить «Первые 1» и дальше просто позиционироваться на найденной ссылке, но как найти позицию в динамическом списке ? Ответа на этот вопрос не нашла.
Буду рада любым предложениям по оптимизации этого варианта решения вопроса или ссылкам на другой вариант решения.
Поскольку поиск в динамических списках в типовой УТ сводится в конечном счете к отбору, что не всегда привычно для пользователей, работавших ранее без динамических списков, привожу пример простого позиционирования в списке.
Пример на работе формы подбора в документ закупки в конфигурации УТ 11.2 (11.2.3.163). По сравнению с типовой обработкой внесены следующие изменения:
добавлены команды: ПоискПоНаименованиюВыполнить, ПоискПоНаименованиюФокус
добавлен реквизит ПоискПоНаименованию, Строка
добавлены кнопки в группу ФормаГорячиеКлавиши: ПоискПоНаименованию2 (команда ПоискПоНаименованиюФокус), ПоискПоНаименованиюВыполнить (команда ПоискПоНаименованиюВыполнить)
добавлены поля ввода: ПоискПоНаименованию1 (при ) в группе СтандартныйПоискНоменклатура, ПоискПоНаименованию в группе РасширенныйПоискНоменклатура. Данные для обоих полей ПоискПоНаименование, для обоих полей при изменении вызывается ПоискПоНаименованиюПриИзменении
Специальные предложения
См. также
Расширение подсистемы доставки и логистики, интеграция с Яндекс.Картами (в том числе WebKit) 12
Данная разработка — инструмент для оптимизации работы транспортной службы. Зоны доставки на карте. Автоматическое определение зоны по адресу. Планирование графика доставок. Расчет маршрута и контроль пробега.
11.11.2019 1038 7 andryandry 6
Генерация управляемой формы на основе обычной (proof of concept) 20
В статье рассматривается техническая возможность автоматизированной генерации управляемой формы на основе обычной.
06.11.2019 1638 1 user700211_a.straltsou 11
"Все функции" с плюшками 10
Устали ждать пока откроются "Все функции"? Мучает ностальгия по быстрому позиционированию по первым символам? Попробуйте "Все функции" с плюшками!
06.11.2019 1285 12 codejs 6
Аппроксимация в запросе. Прогноз продаж на практике 10
Составление прогноза продаж на основании данных предыдущих 3-х периодов. Методом линейной аппроксимации. На практике, напрямую в запросе. Оказывается, это гораздо проще, чем звучит.
15.09.2019 1728 3 kida1 0
Картинки конфигурации 26
Иногда перед разработчиками 1С встает вопрос: есть ли подходящая общая картинка в конфигурации или нужно рисовать свою иконку для кнопки? А какие вообще картинки есть в конфигурации и какие у большинства из них размеры? Поиск подходящей картинки через Конфигуратор, мне показался не совсем удобным, поэтому и появился отчет по общим картинкам конфигурации. Отчет универсальный должен работать в любой конфигурации и на обычных и на управляемых формах. Важно: версия платформы 1С должна быть 8.3.14 или выше.
10.09.2019 2050 10 rusmil 6
Описание формата внутреннего представления данных 1С в контексте обмена данными 150
Фирма 1С не рекомендует использовать внутреннее представление данных для любых целей, которые отличны от обмена с 1С:Предприятием 7.7. Но сама возможность заглянуть на "внутреннюю кухню" платформы с помощью функций ЗначениеВСтрокуВнутр(), ЗначениеВФайл(), ЗначениеИзСтрокиВнутр() и ЗначениеИзФайла(), дала возможность сообществу программистов 1С разработать новые приемы разработки и анализа. Так, именно на использовании внутреннего представления был построен алгоритм "быстрого массива", который позволяет практически мгновенно создать массив в памяти на основании строки с разделителями. С помощью разбора внутреннего представления можно "на лету" программным кодом выполнить анализ обычной формы и даже сделать редактор графической схемы. Во внутреннем формате сохраняют свои данные между сеансами различные популярные внешние обработки. А еще это возможность сделать быстрый обмен с внешними системами.
Метод можно использовать только для регистров, у которых Режим записи установлен Независимый. Вообще, строго говоря, метод СоздатьМенеджерЗаписи() обычно используется для записи новой строки в регистр или для удаления существующей строки.
Для редактирования регистра лучше использовать метод СоздатьНаборЗаписи().
Однако, можно и с помощью метода СоздатьНаборЗаписи():
Еще один пример несколько нестандартного использования метода СоздатьМенеджерЗаписи():
— при этом, как видно из этой процедуры, запись передается в обработку «РедактированиеКонтактнойИнформации», где дальше и редактируется (интерактивно):
admin
12 thoughts on “ Как в 1С v8 изменить запись регистра сведений с помощью метода СоздатьМенеджерЗаписи (1С: v8: Программисту: Язык программирования: Регистр сведений) ”
Используя ваш пример, пытаюсь спозиционироваться на одной записи регистра и изменить один ресурс. Но почему-то не получается. В отладчике МенеджерЗаписи.Выбран() все время равно Ложь, Хотя в регистре сведений ОСОЛицевыеСчета, есть запись с измерением Объект равным Спр.Ссылка. В регистре одно измерение Объект и несколько ресурсов, в том числе СОТипПлиты. Помогите пожалуйста разобраться почему так происходит? Вот то, что я написала:
МенеджерЗаписи=РегистрыСведений.ОСОЛицевыеСчета.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект= Спр.Ссылка;
МенеджерЗаписи.Прочитать();
Если МенеджерЗаписи.Выбран() Тогда
МенеджерЗаписи.СОТипПлиты=ТипПлиты; Иначе
Сообщить(«Возникла проблема определения записи по лиц счету» +Спр+ » в регистре ОСОЛицевыесчета»);
КонецЕсли;
МенеджерЗаписи.Записать();
Марина, добрый день!
Уточните, пожалуйста, сколько у вашего регистра измерений?
Команда МенеджерЗаписи.Объект= Спр.Ссылка; — это определение позиции по одному измерению, т.е. у вашего регистра «ОСОЛицевыеСчета» одно измерение — «Объект»?
Если больше, то для каждого нужно задать значение аналогичной командой (через точку с запятой)
У регистра одно измерение — Объект(тип -СправочникСсылка.ЛицевыеСчета)
Спр = Справочники.ЛицевыеСчета.Выбрать();
Пока Спр.Следующий() Цикл
—-тут то, что я писала выше—-
КонецЦикла
Пока идей нет, почему так происходит. Есть возможность выслать базу? Какой объем у базы?
С удовольствием попробую помочь. Интересно разобраться в проблеме.
Если нужно поменять одну запись в регистре сведений то лучше воспользоваться НаборомЗаписей.
работать будет быстрее, особенно на больших объемах данных.
Наверное, уже никого здесь нет, но точно такая же проблема:
У регистра одно измерение-Документ(Ссылка на документ) и на запись не становится, хотя она в регистре очевидно есть. Выбран() — стабильно = Ложь, хотя метод ПолучитьПоследнее прекрасно работает, но по нему я не могу узнать, каково же точное значение Периода. Какова же истина?
Александр, ваш регистр сведений подчинен регистратору? И не периодический ли регистр?
жаль, что такой удобный метод работает только с регистрами сведений с установленным параметром «Независимый»
Добавить комментарий Отменить ответ
Next Post
К вопросу об оптимизации запросов v8 с использованием виртуальных таблиц (1С: v8: Язык запросов)
Вопрос Можно ли в запросах 1С v8 всегда заменять условие «ГДЕ» параметрами среза виртуальной таблицы? Ответ Часто встречающаяся рекомендация по выполнению опимизации запросов: переносить условие из конструкции ГДЕ в параметры виртуальной таблицы. Однако без понимания, как это работает, легко совершить ошибку.
Озадачился такой штукой. Дано: Обычная форма, элемент формы, который при открытии формы заполняется списком контрагентов. При выборе из этого списка происходят дальнейшие действия. Так вот. Хотелось бы при повторном выборе позиционироваться на том элементе, которого до этого выбирал.
Проникся. Так вот. Хотелось бы начать сначала: Использование: Чтение и запись. Описание: Тип: Булево.
Спасибо за участие )) У элемента формы Контрагента в свойстве есть раздел Использование, флажок установил Кнопка списка выбора. Этот элемент связан в реквизитом формы Контрагента (справочник ссылка Контрагенты).Как заполняется я написал в. Когда пользователь выбирает из списка нужное значение то первоначально видит некий список значений с отображением наименования контрагента и суммы заказа. После выбора срабатывает обработчик КонтрагентПриИзменении и выполняются определенные процедуры. Теперь главное. При повторном использовании этого списка в поле формы снова открывается список и снова с самого верхнего элемента. При этом можно задействовать обработчик КонтрагентНачалоВыбораИзСписка. Здесь я и застрял. Штука не критичная, но пользователю было бы удобно позиционироваться в списке при открытии в ранее выбранном элементе. ЗЫ. Много бу-каф ))
А, точно ж! РежимВыбораИзСписка (ListChoiceMode) Использование: Чтение и запись. Описание: Тип: Булево. Использование: Чтение и запись. Описание: Тип: СписокЗначений.
Нет. По обычной кнопке выбирается форма выбора справочника. А по кнопке выбора из списка открывается список предварительно отобранных контрагентов.
Либо, если важен именно порядок элементов - можно сортировать смещать список по текущему элементу. Т.е. например: есть список с ээлементами: 1 2 3 4 5 Ты выбрал 3, отработали процедуры при изменении, открываешь список, там у тебя теперь: 3 4 5 1 2
Это не удобно, т.к. пользователь ищет по алфавиту. Есть решение, но пока лень делать )) Можно сделать отдельную форму для выбора списка и вызывать модально. Там можно накрутить всё, что хочешь.
В 8.3 - там есть история ввода. Последнее выбранное вроде отдельно показывается, так что можно и его заюзать.
При работе в 1С встречаются ситуации, когда сортировку динамического списка, предложенную по умолчанию, требуется изменить.
Рассмотрим случай, когда сортировка списка документов изменена на такую, которая обеспечивает вывод документов по дате в порядке, когда вверху списка находится последний документ.
При такой сортировке 1С, по умолчанию, переходит в конец списка, т.е. на первый созданный документ и список отображается с выделенной самой нижней строкой.
Как сделать, чтобы список был позиционирован вверх?
В режиме конфигуратора достаточно в свойствах элемента формы Список найти параметр НачальноеОтображениеСписка и перевести его из состояния Авто в состояние Начало.
Если вам недоступна по тем или иным причинам возможность редактирования конфигурации, то подобную настройку можно выполнить и в режиме Предприятия
Для этого нужно выбрать опции нужного списка по соответствующей кнопке Еще — пункт меню Изменить форму.
И, затем выделяем в справа нужный нам список и изменяем соответствующее свойство Начальное отображение списка также на Начало
После указанных действий наш список будет позиционироваться вверху, а не по умолчанию на первом документе.
Ответ на вопросы:
Как установить выделенную строку в списке 1С?
Как перейти вверх списка при открытии 1С?
Как установить позицию вверху списка при открытии формы списка 1С?
Как открывать журнал документов в 1с на последнем документе при сортировке по убыванию?
Как настроить журнал документов так, чтобы при открытии курсор был на последней строке?
Как настроить начальное отображение списка?
Если у Вас появились вопросы по статье или остались нерешенные проблемы обсудить их Вы можете на Форуме 1С Вопросы и ответы
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Заходите в «Одноклассники»!
Регистрируйтесь в «Вконтакте»!
Темы форума
1С на Линукс. advanter, 17.11
Аренда сервера.. за границей. advanter, 03.10
удаление чека. zvar, 11.09
1c 8.3 бухучет 8.2 сотрудники. zvar, 11.09
Корректировка расходной накладной. zvar, 11.09
Декретные. skameykin22, 30.07
обмен данными. taba88, 12.06
Списання малоцінки. advanter, 12.06
Допоможіть новачку. ). advanter, 12.06
Ошибка потока 1с 8.2 Предприятие после обновления SOS. advanter, 07.06
Изменить название основания на печатной форме. advanter, 16.05
Движение денежных средств за период по ответственным. advanter, 25.04
Рубрики
Это интересно:
Ответы на вопросы:
Полное или частичное копирование материалов сайта разрешается при наличии в тексте прямой индексируемой ссылки на сайт
У любого справочника 1С (кроме подчиненных) можно создавать предопределенный элемент или предопределенную группу этого справочника (если справочник иерархический). Предопределенные элементы справочника это элементы созданные разработчиком в конфигураторе, с которыми пользователь может работать. Пользователю уже не нужно самостоятельно создавать этот элемент справочника, он уже будет создан в базе по умолчанию при установке. Также разработчикам очень удобство работать с предопределенными элементами в том, что разработчик к ним может обращаться напрямую, используя менеджер справочника. В этой статье мы научимся работать с предопределенными элементами.
При разработке справочников, рекомендую, первым делом подумать будут ли предопределенные элементы у этих справочников, и создать их заранее, до того как этот справочник будет внедрен в опытную эксплуатацию.
К примеру, мы в нашей конфигурации для целей учета создали справочник Валюты, поскольку мы живем в Российской федерации, то валюта Рубль всегда будет в нашей конфигурации, которая используется на территории РФ. Поэтому наиболее логичнее её сделать в виде предопределенного элемента. Поэтому создадим для справочника Валюты предопределенный элемент Рубль. Для того, чтобы добавить предопределенный элемент необходимо выделить нужный справочник, вызвать контекстное меню и выбрать в этом меню команду «Открыть предопределенные данные».
Откроется список предопределенных элементов (и групп, если справочник иерархический), в котором можно добавлять новые элементы. Причем заметьте, при добавлении мы можем указать только наименование элемента и его код, если у справочника есть реквизиты, то мы эти реквизиты мы сможем заполнить только в пользовательском режиме.
Обращаю внимание на имя предопределенного элемента. Имя должно быть уникально в пределах этого справочника, и к нему применяются правила установки имен для объектов метаданных (отсутствие пробелов, спецсимволов кроме подчеркивания и т.д.). Пользователь не видит имени предопределенного элемента, он работает только с наименованием. С именем может работать разработчик, получая ссылку на конкретный предопределенный элемент, используя менеджер справочника.
Если справочник иерархический, то можно также создать и предопределенные группы, для этого в командной панели формы списка предопределенных элементов имеется команда «Добавить группу».
Если мы зайдем в форму списка справочника Страны в пользовательском режиме «1С: Предприятия», то обнаружим, что уже имеются группы и элементы с точкой внизу. Так платформа помечает предопределенные элементы и группы.
Замечу, что все реквизиты у предопределенных элементов присутствуют также как и у обычных, и в них можно записывать какие-либо значения.
Получить предопределенный элемент справочника 1С
Используя менеджер справочника, можно обратиться к предопределенному элементу. Делается это следующим образом.
Обращаю Ваше внимание, что получить ссылку на предопределенный элемент можно только в серверном контексте. Чтобы получить ссылку на предопределенный элемент в клиентском контексте управляемой формы необходимо использовать метод ПредопределенноеЗначение, где в кавычках нужно указать путь к этому элементу.
Имейте в виду, что и при помощи метода ПредопределенноеЗначение и при помощи прямого обращения посредством менеджера объекта мы получим ссылку на элемент, с которой можем работать как с обычной ссылкой на элемент справочника: присваивать её какому-нибудь реквизиту, получать объект из этой ссылки и т.д.
Создать предопределенный элемент справочника 1С
Мы уже научились создавать предопределенные элементы справочника в конфигураторе, но можно ли создать предопределенный элемент программно? И да, и нет.
Мы можем из простого элемента сделать предопределенный, и наоборот предопределенный элемент сделать простым.
Для этих целей у справочников имеется стандартный реквизит ИмяПредопределенныхДанных.
Если мы получим ссылку на предопределенный элемент, то этот реквизит заполнен.
Если же мы возьмем какой-то не предопределенный элемент, то этот реквизит будет пустой.
Если мы этому реквизиту присвоим какое-нибудь имя (помня об уникальности имен предопределенных элементов в контексте конкретного справочника), то мы программно «создадим» предопределенный элемент, но только в том случае если это имя уже существует в списке предопределенных элементов справочника, которые были заданы в конфигураторе 1С!
Например, тот же элемент «Тунис» справочника «Страны» у нас простой.
В какой-нибудь обработке напишем код, в котором попробуем сделать из этого элемента предопределенный элемент.
Если мы попытаемся его сейчас выполнить, то у нас возникнет ошибка «Предопределенный элемент не существует».
Такая ошибка возникла потому, что мы пытаемся указать имя предопределенного элемента, которого нет.
Если же мы у предопределенного элемента реквизиту ИмяПредопределенныхДанных присвоим пустую строку, то такой элемент станет простым, если же этому реквизиту обратно присвоим имя предопределенного элемента, то простой элемент станет предопределенным.
Сделаем на обработке две команды. Первая будет снимать предопределенность у элемента справочника с именем «Китай», а вторая устанавливать.
Теперь обратно установим.
Заметьте, что имя предопределенного элемента может быть только из списка имен предопределенных элементов справочника.
У нас до снятия элемент «Китай» был предопределенным.
А после снятия это стал простой элемент.
Удалить предопределенный элемент справочника 1С
Начиная с платформы 1С 8.3 предопределенные элементы можно удалять в пользовательском режиме.
Если сейчас этот элемент удалить через стандартную обработку «Удаление помеченных объектов», то он исчезнет из базы.
Для того, чтобы пользователь мог удалить (поставить пометку на удаление) предопределенный элемент, хотя бы у одной роли, которая есть в профиле пользователя должно быть установлено соответствующее право.
Что делать, если мы ошиблись и хотим опять «вернуть» предопределенный элемент? Есть несколько способов. Но самый простой это создать новый элемент справочника в пользовательском режиме и присвоить ему имя удаленного предопределенного элемента, как мы это уже делали.
Остальные статьи по теме конфигурирования:
Более подробно и основательно работа со справочниками, документами и другими объектами метаданных дается в моей книге:
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Вступайте в мои группы:
2 thoughts on “ Предопределенные элементы справочников 1С 8.3 ”
У любого справочника 1С можно создавать предопределенный элемент или предопределенную группу — если у справочника есть владелец, то создать предопределенный элемент нельзя.
Читайте также: