Быстро найти элемент на форме |
Я |
30.06.14 — 09:00
Есть у документа реквизит. Реквизит вытащили на обычную форму и изменили его синоним до неузнаваемости Задача — найти соответствующий элемент формы. (о том что реквизит точно находится на форме можно понять с помощью окна из меню форма->размещение данных)
так же на форме очень много других элементов, поэтому у каждого проверять значение свойства «Данные» (в нем содержится путь к реквизиту) — не вариант.
Есть ли способ быстро перейти к искомому элементу формы (что бы не искать его «глазами»)?
1 — 30.06.14 — 09:03
Ctrl+Shift+L
2 — 30.06.14 — 09:04
(1)+ там можно Ctrl+F и искать по названию и т.п.
3 — 30.06.14 — 09:04
(1) (2) Опередил)
4 — 30.06.14 — 10:00
>Ctrl+Shift+L
Это что вообще?
> там можно Ctrl+F и искать по названию и т.п.
не сработает. ищет только глобально во всей конфигурации. это всё только усложняет.
5 — 30.06.14 — 10:07
>Ctrl+Shift+L
Открылось окно «Список элементов управления формы», однако сделать в нем поиск по свойству «ДоговорКонтрагента» не возможно. Возможен лишь поиск по имени, а имя реквизиту, как уже говорилось ранее не соответствует.
Есть еще варианты?
6 — 30.06.14 — 10:08
извиняюсь, опечатка:
*однако сделать в нем поиск по свойству «Данные» не возможно.
7 — 30.06.14 — 10:16
Ставишь на первый элемент (когда свойства открыты) и нажимаешь табулятор, повторять нажатия до появления ощущения счастья…
8 — 30.06.14 — 10:50
Так можно состариться, пока счастье наступит. Это и есть вариант поиска — «глазами».
9 — 30.06.14 — 11:19
(8)»Это и есть вариант поиска — «глазами».»
а что удивляет-то? ))
10 — 30.06.14 — 11:21
Прочитайте пост сначала
11 — 30.06.14 — 11:23
(10) за это время уже нашел бы и «глазами»
12 — 30.06.14 — 11:32
ты сюда пришел дать совет, или тебе заняться просто нечем, умник? спамить не нужно, если по существу нечего предложить
#################
Кому интересно — решил следующим способом:
1. Помести на форму кнопку, в обработчике обхожу все элементы формы и вывожу имя того единственного, у которого поле «Данные» = искомому значению.
2. Открываю в конфигураторе список элементов формы и через ctrl+F4 нахожу расположение элемента с заданным именем.
13 — 30.06.14 — 11:33
опечатка
ctrl+F
14 — 30.06.14 — 11:42
(4) >>не сработает. ищет только глобально во всей конфигурации. это всё только усложняет.
Странно, у меня все работает, надо только в списке элементов в какой-нибудь элемент мышкой тыкнуть…
15 — 30.06.14 — 13:44
(4) У меня работает, а у тебя не работает?
Ещё и огрызаешься в (12)?…
Далеко пойдешь…
Drac0
16 — 30.06.14 — 13:52
Правый клик на реквизите и «перейти» …
Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое в одном месте. Пользуйтесь и делитесь с друзьями.
Обычные формы. Как организовать подбор в табличную часть
Рассмотрим решение задачи на примере формы документа, у которого имеется табличная часть «Заказ-наряды».
1. На форме документа на командную панель табличной части «Заказ-наряды» добавляем кнопку подбора и прописываем её код:
Процедура ПодборНарядов(Кнопка) Форма = Документы.ЗаказНаряд.ПолучитьФормуВыбора(, ЭлементыФормы.ЗаказНаряды, ЭтотОбъект); Форма.ЗакрыватьПриВыборе = Ложь; Форма.Открыть(); КонецПроцедуры
2. Далее у табличной части находим событие «ОбработкаВыбора» и прописываем для него код:
Процедура ЗаказНарядыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Если ТипЗнч(ВыбранноеЗначение) = Тип("ДокументСсылка.ЗаказНаряд") Тогда Если ЗаказНаряды.НайтиСтроки(Новый Структура("ЗаказНаряд", ВыбранноеЗначение)).Количество() = 0 Тогда НоваяСтрока = ЗаказНаряды.Добавить(); НоваяСтрока.ЗаказНаряд = ВыбранноеЗначение; // также здесь можно выполнить дополнительные обработки КонецЕсли; КонецЕсли; КонецПроцедуры
Есть список контрагентов, нужно быстро узнать их коды в базе
Делаем такой запрос где в кавычках прописываем список наименований контрагентов (должен 100% совпадать с названиями контрагентов в базе):
Таким образом мы избавляемся от необходимости вручную прописывать список контрагентов в запросе, работа происходит в разы быстрее за счёт использования списка через запятую.
СКД. Параметр с указанным именем не найден
В СКД если при открытии отчета выходит ошибка «Параметр с указанным именем не найден», то это может быть глюк платформы. Чтобы его исправить, заходим в схему компоновки данных и на вкладке «Параметры» изменяем для нужного параметра поле «Значение» — очищаем его если заполнено или заполняем если оно пустое. Сохраняем отчет, запускаем его, затем возвращаем всё восвояси и заново запускаем отчёт.
СКД. Как вывести документ в виде: Г00001 от 01.01.2019, чтобы по двойному клику его можно было открыть
По умолчанию документы в СКД выводятся в следующем виде:
Мы сделаем его красивым и сокращенным:
Для этого нужно прописать следующее выражение в колонку «Выражение представления» по этому полю:
Быстрый поиск по фразе в коде (CTRL+F3)
Если в коде нужно быстро найти какую-то фразу, можно выделить её и нажать CTRL + F3, тогда она автоматически подставится в поле поиска сверху и нажатием F3 можно будет переходить по всем местам этой фразы в коде.
Таким образом мы экономим время на копирование фразы (кстати, фразу можно быстро выделить, зажав CTRL и щелкнув внутри фразы), а также на перемещение мышью и вставку этого текста в поле поиска.
Как быстро поменять название процедуры, назначенной на событие
Бывает так что имя процедуры слишком длинное или оно устарело. А чтобы его поменять – нужно изменить и название процедуры в коде и исправить её название в обработчике события.
Для быстрого изменения же следует делать это в поле с именем процедуры в событии. При изменении 1С предложит поменять имя процедуры:
И при нажатии «Да» имя процедуры изменится и в коде. Таким образом можно быстро выполнять рефакторинг.
Как разрешить выбирать в поле на форме номенклатуру только типа «Комплект» (или другое условие)
Рассмотрим на примере документа «Изменение состава комплекта» из сертификационного экзамена 1С: Специалист по платформе. У него есть реквизит «Комплект» с типом «Номенклатура». Нужно сделать так чтобы в этом поле пользователь мог выбирать номенклатуру только с видом номенклатуры «Комплект».
Для этого нужно у этого реквизита в свойствах указать Параметры выбора Отбор.ВидНоменклатуры(Комплект):
Таким образом больше не нужно ничего писать в коде для гарантии того что пользователь сможет выбирать только комплекты.
Отладка COM соединения
Отлаживать COM соединение можно ставя в ключевые места в коде во внешней базе примерно такие блоки:
ТекстовыйФайл = Новый ТекстовыйДокумент; ТекстовыйФайл.ДобавитьСтроку("Тип параметра распознан верно, это наряд на отгрузку"); ТекстовыйФайл.Записать("UserPCshared_folderЗадачиLog_1.txt");
И затем после вызова этой процедуры через COM соединение проверять наличие файла в каталоге. Если его нет, значит до этой точки код даже не дошёл. В текстовый файл при этом можно добавлять любые фразы и по несколько строк. Также можно сделать единый log файл в который прописывать весь алгоритм работы COM соединения в ключевых его местах.
Отладка под определенным пользователем
Чтобы запускать 1С в режиме отладки из конфигуратора от имени другого пользователя, можно задать нужного пользователя в параметрах конфигуратора (меню Сервис – Параметры) на вкладке «Запуск 1С: Предприятия»:
Как вернуть реквизит в тоже состояние, в котором оно было до его изменения?
Очень просто, получаем его запросом. Для этого удобно воспользоваться типовой функцией БСП «ЗначениеРеквизитаОбъекта»:
В данном примере использован другой модуль (в отличии от типовой БСП) в который просто была помещена типовая функция БСП, которая строит запрос.
Как ускорить запрос заменив оператор ИЛИ объединением
Запрос будет работать значительно быстрее, если в выборке из большой таблицы не использовать оператор ИЛИ в условие ГДЕ или в условии соединения, а заменить это на объединение результатов двух запросов:
Как можно писать структуру короче
Закоментированный вариант длиннее:
Как быстро посмотреть параметры вызываемой процедуры
Находясь курсором на параметре процедуры хорошо было бы понять, какой параметр в процедуре заполняет данная переменная:
Сделать это просто. Нажимаем в этот момент CTRL + Shift + Пробел и вот что видим:
Не удивляйтесь что цвет фона у всплывшего окна розовый, это настраивается в конфигураторе.
Подсветка выделенных переменных в коде
Можно сделать так чтобы, поставив курсор на какую-нибудь переменную видеть все места её использования в коде:
Для этого в конфигураторе через меню сервис-параметры во вкладке «Модули» настраиваем цвет для текущего идентификатора:
Как находить быстро нужные объекты в дереве метаданных
В дереве метаданных сверху есть поле для ввода. В него можно вводить искомые объекты. Главный лайфхак в том, что слова можно вводить частями и с пробелами:
Более короткий вариант условия ИЛИ
Можно писать так:
А можно писать так (это идентично, но более читаемо):
Быстрый просмотр временных таблиц запроса
На управляемых формах есть консоль запросов, которая позволяет смотреть данные всех временных таблиц:
Её без проблем можно найти в свободном доступе в интернете. И не нужно тратить время на комментирование и выполнение запроса по частям.
Как найти элемент на обычной форме если на ней куча элементов?
Заходим в меню «Форма» — «Список элементов управления формы…» в результате появится окно со списком всех элементов формы. Здесь можно выполнить поиск по CTRL+F (и продолжить поиск нажимая F3), а щелкнув на элемент он отобразится на самой форме.
Создаем шаблоны для быстрого ввода часто-используемого кода:
Нажав CTRL+Shift+T можно открыть окно шаблонов текста. На просторах интернета есть замечательный набор шаблонов от Павла Чистова, я использую его уже более 5 лет и всем рекомендую его поставить, а от стандартных шаблонов отказаться.
Фишка в том, что файл шаблонов можно изменять. Рассмотрим добавление шаблона:
С помощью текст <?> задается куда будет установлен курсор после замены.
Таким образом фраза ПарОтб автоматом будет заменяться на этот кусок кода. Кстати, в справке хорошо написано какие возможности по созданию шаблонов предоставляются разработчику.
А чтобы шаблоны работали (автоматически заменяя введенный текст ПарОтб на всю конструкцию, описанную в шаблоне), необходимо в настройках конфигуратора включить автозамену (сервис – параметры – модули – автозамена — включить с подсказкой).
В шаблонах Павла Чистова уже есть огромное количество необходимых конструкций в ежедневной работе разработчика 1С (циклы, условия, создание процедур и т.п.).
Перейти в раздел примеры кода 1С 8.3:
При наличии в конфигурации БСП, желательно использовать метод ЕстьРеквизитИлиСвойствоОбъекта (ссылка выше). Но что делать если конфигурация нетиповая? Вариантов (в зависимости от поставленной задачи) несколько: скопировать метод из БСП, проверить на свойство объекта, проверить через поиск, использовать попытку (не рекомендуется, только как временная заплатка).
Проверка реквизита через свойство объекта в 1С 8.3:
Функция ПроверкаНаСвойствоОбъекта(Объект, ИмяСвойстваОбъекта) Экспорт
ЕстьСвойство = Ложь;
СтруктураОбъекта = Новый Структура(ИмяСвойстваОбъекта, Неопределено);
ЗаполнитьЗначенияСвойств(СтруктураОбъекта, Объект);
Если СтруктураОбъекта[ИмяСвойстваОбъекта] = Неопределено Тогда
СтруктураОбъекта[ИмяСвойстваОбъекта] = Ложь;
ЗаполнитьЗначенияСвойств(СтруктураОбъекта, Объект);
Если СтруктураОбъекта[ИмяСвойстваОбъекта] <> Ложь Тогда
ЕстьСвойство = Истина;
КонецЕсли;
Иначе
ЕстьСвойство = Истина;
КонецЕсли;
Возврат ЕстьСвойство;// Булево
КонецФункции
Проверка реквизита через Найти в 1С 8.3:
Функция ПроверитьНаРеквизит(ИмяРеквизита, МетаданныеДок) // универсальная функция
// Например ИмяРеквизита=»ДрагМеталлы»;
Если МетаданныеДок.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
Функция НайтиДрагМеталлы(Номенклатура, Материал, ОсновноеСредство) // пример использования в универсальной обработке
// если реквизит шапки
ИмяРеквизита=«ДрагМеталлы»;
Если Метаданные.Справочники.Товары.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
Возврат Номенклатура.ДрагМеталлы;
ИначеЕсли Метаданные.Справочники.Материалы.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
Возврат Материал.ДрагМеталлы;
ИначеЕсли Метаданные.Справочники.ОсновныеСредства.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
Возврат ОсновноеСредство.ДрагМеталлы;
Иначе
Возврат Ложь;
КонецЕсли;
// если реквизит таб.части
//Если НЕ ТекущаяСтрока.Свойство(ИмяРеквизита) ИЛИ НЕ ТекущаяСтрока.ДрагМеталлы Тогда
// ЗаполнитьЗначенияСвойств(ТаблицаДок.Добавить(), ТекущаяСтрока); // приёмник, источник
//КонецЕсли;
КонецФункции
Проверка реквизита через Попытка (&НаКлиенте) в 1С 8.3:
&НаКлиенте
Функция ПроверитьНаНаличиеРеквизитаЧерезПопытку(ИмяРеквизита)
Попытка
РеквизитФормыПоИмени = ЭтаФорма[ИмяРеквизита];
ЕстьРеквизитНаФорме = Истина;
Исключение
ЕстьРеквизитНаФорме = Ложь;
КонецПопытки;
Возврат ЕстьРеквизитНаФорме;
КонецФункции
В определенных задачах можно использовать метод в 1С 8.3:
ПолучитьРеквизиты(GetAttributes)
Синтаксис:
ПолучитьРеквизиты(<Путь>)
Параметры:
<Путь> (необязательный)
Тип: Строка.
Указывает путь к родительскому реквизиту. Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.
Возвращаемое значение:
Тип: Массив.
Массив объектов РеквизитФормы.
Описание:
Получает описание реквизитов формы.
Copyright©, «Программист 1С в г.Минске», 06.11.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
При попытке разобраться с другим вопросом, изобрел велосипед:
&НаСервере
Функция НайтиВозможныйРеквизитформыНаСервере(ИскомыйЭлементНаСервере)
Если Не ИскомыйЭлементНаСервере="" Тогда
Для Каждого Рек из ЭтаФорма.Элементы Цикл
Если рек.Имя=ИскомыйЭлементНаСервере
Или Рек.Заголовок=ИскомыйЭлементНаСервере
Тогда
Возврат рек.ПутьКДанным;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Истина;
КонецФункции //НайтиЭлементыНаСервере
&НаКлиенте
Процедура НайтиРеквизит(Команда)
ИмяОбъекта = НайтиВозможныйРеквизитформыНаСервере(ЭлементДляПоиска);
Если ИмяОбъекта=Истина Тогда
Предупреждение("Не найдено");
Иначе
ЭтотОбъект[ИмяОбъекта]=НовоеЗначение;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЭлементДляПоиска="Реквизит1"; НовоеЗначение="Текст нового значения";
КонецПроцедуры
Позволяет найти нужный реквизит, используя обработчик события, например:
Регулирование(Элемент, Направление, СтандартнаяОбработка)
А точнее:
Элемент.Имя
Как определить есть ли у формы реквизит с наименованием, например «Реквизит1», или нет.
встать на список реквизитов, поискать через поиск
+ Уже сам порылся : Синтаксис: Найти(<Имя>) Параметры: Тип: Строка. Имя элемента формы. Возвращаемое значение: Тип: Элемент управления; Неопределено. Элемент управления в форме. Если элемент не найден, то возвращается значение Неопределено. Описание: Осуществляет поиск элемента управления с заданным именем. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент. Пример:
это поиск элемента формы, а не реквизита
Тогда через получить реквизиты. Удачи в твоем не легком деле. )))
да он возвращает массив, а по массиву нужно дополнительно поиск делать, спасибо за поддержку
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям