Найти элемент справочника в 1С 8 можно тремя способами:
1) Поиск по коду
Если известен код элемента справочника, и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу код элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким кодом не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным кодом, то будет возвращен тот, который найден первым.
Пример:
НайденныйЭлемент = Справочники.Номенклатура.НайтиПоКоду("00000011254");
Описание параметров метода НайтиПоКоду:
- <Код> (обязательный). Тип: Число, Строка. Описание: искомый код, строка или число в зависимости от настроек справочника в конфигураторе.
- <ПоискПоПолномуКоду> (необязательный). Тип: Булево. Описание: определяет режим поиска по полному коду, истина — искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом “/”. Значение по умолчанию: Ложь.
- <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
- <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
2) Поиск по наименованию
Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!
Если известно наименование элемента справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу наименование элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким наименованием не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным наименованием, то будет возвращен тот, который найден первым.
Пример:
НайденныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию("Аппарат сварочный");
Описание параметров метода НайтиПоНаименованию:
- <Наименование> (обязательный). Тип: Строка. Описание: строка, содержащая искомое наименование.
- ТочноеСоответствие> (необязательный). Тип: Булево. Описание: определяет режим поиска по полному соответствию, поиск будет успешным, если строка поиска: в случае значения параметра Ложь — будет соответствовать левой части наименования, в случае значения параметра Истина — будет полностью совпадать с наименованием (за исключением “хвостовых” пробелов в наименовании). Значение по умолчанию: Ложь.
- <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
- <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
3) Поиск по произвольному реквизиту
Если известно значение какого либо реквизита справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоРеквизита(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу имя реквизита, его значение и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким значением указанного реквизита не найден. Следует заметить, что если в справочнике присутствует несколько элементов с таким значением указанного реквизита, то будет возвращен тот, который найден первым.
Пример:
НайденныйЭлемент = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул","А-255");
Описание параметров метода НайтиПоРеквизит:
- <ИмяРеквизита> (обязательный). Тип: Строка. Описание: имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения: произвольный, кроме ХранилищеЗначения и строк произвольной длины.
- <ЗначениеРеквизита> (обязательный). Тип: Произвольный. Описание: значение реквизита, по которому должен выполняться поиск.
- <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
- <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
У справочников в 1С есть встроенные функции для поиска в них элементов, к ним относится НайтиПоКоду, НайтиПоНаименованию и НайтиПоРеквизиту;
В данном случае рассмотрим поиск по коду. Можно использовать когда необходимо получить предопределенный элемент.
Синтаксис:
Справочники.<НазваниеСправочника>.НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>)
Параметры:
НазваниеСправочника — наименование справочника, к примеру Сотрудники.
Код — если код является строкой то задается в кавычках.
ПоискПоПолномуКоду — По умолчанию установлен в значении Ложь. Но если установить в истину то поиск будет вестись по полному коду элемента. Полный код состоит из всех кодов родителей(уровней) разделены «/». Пример: «00001/0002/0008″. (необязательный)
Родитель — Ссылка на родителя. Поиск будет вестись только по тем элементам где указан данный родитель. (необязательный)
Владелец — Ссылка на элемент владельца справочника, указанного на закладке Владельцы. (необязательный)
Результат:
Если элемент не найден возвращается ПустаяСсылка, иначе ссылка на элемент.
Если существует несколько элементов, возвращается только 1.
Если код отсутствует в справочнике, т.е. установлена длина 0, то возвращается Неопределено.
Пример:
КодЭлемента = "000000001"; ТекСправочник = Справочники.Преподаватели; РезультатПоискаПоКоду = ТекСправочник.НайтиПоКоду(КодЭлемента); Если РезультатПоискаПоКоду = ТекСправочник.ПустаяСсылка() Тогда Сообщить(РезультатПоискаПоКоду.наименование); Иначе Сообщить("Не найден"); КонецЕсли;
+6
1С 8.3 : Поиск элемента, найти элемент справочника
&НаКлиенте
Процедура ПоКнопкеНайти(Команда)
// Вставить содержимое обработчика.
Сообщить(НайтиКонтрагента("000000001"));
КонецПроцедуры
&НаСервере
Функция НайтиКонтрагента(КодКонтрагента)
Перем КонрагентДляПоиска, СсылкаНайденногоКонрагента;
КонрагентДляПоиска = Справочники.Контрагенты;
СсылкаНайденногоКонрагента = КонрагентДляПоиска.НайтиПоКоду(КодКонтрагента);
Если СсылкаНайденногоКонрагента = КонрагентДляПоиска.ПустаяСсылка() Тогда
Возврат "Контрагент не найден";
Иначе
Возврат СсылкаНайденногоКонрагента.Наименование;
КонецЕсли;
КонецФункции;
Код 1C v 8.х
// Ниже перечислены несколько способов поиска,если элемент найден, то он возвращается,
// иначе возвращается Неопределено
СпрСотр = Справочники.Сотрудники;
НайденныйСотр = СпрСотр.НайтиПоКоду(123);
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
НайденныйСотр СпрСотр.НайтиПоРеквизиту("Оклад", 5000);
//далее нужно проверить найденное значение так:
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030");
Если РезультатПоиска.Пустая() Тогда
// Выполнить действия, предусмотренные в случае, когда элемент не найден.
КонецЕсли;
// или так:
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
Если НайденныйСотр = Неопределено Тогда
.....//элемент не найден
КонецЕсли;
Код 1C v 7.x
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиЭлемент(Сотрудник);
СпрСотр.НайтиПоКоду(123);
СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
СпрСотр.НайтиПоРеквизиту("Оклад", 5000);
//если элемент найден, он становится текущим и его можно прочитать так:
Если СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович")=1 Тогда
........НайденныйСотр = СпрСотр.ТекущийЭлемент();
КонецЕсли;
//еще пример
спр=СоздатьОбъект("Справочник.Материалы");
Если спр.НайтиПоНаименованию("Пряжа шерстяная")=1 Тогда
Предупреждение("Найденный элемент справочника имеет код "+спр.ТекущийЭлемент().Код);
Иначе
Предупреждение("Элемент с заданным наименованием не найден");
КонецЕсли;
Поиск элемента справочника по коду. |
Я |
10.09.13 – 17:18
Код = “00000000922”;
Контрагент = Справочники.Контрагенты.НайтиПоКоду(Код);
Почему такой код находит и возвращает ссылку на элемент справочника с кодом “000000009”?
Что это? Глюк платформы? или мой глюк?
Я не понимаю:(
1 – 10.09.13 – 17:19
Сколько длина кода в конфигураторе задана?
2 – 10.09.13 – 17:19
(1) 11
3 – 10.09.13 – 17:21
Контрагент = Справочники.Контрагенты.НайтиПоКоду(Код, Истина);
4 – 10.09.13 – 17:22
хотя не, глюк
5 – 10.09.13 – 17:22
запросом ищи, всё остальное ересь 🙂
6 – 10.09.13 – 17:22
(0) а почему ты так решил?
7 – 10.09.13 – 17:23
(3) это поиск по полному коду, включая коды родителей, насколько я помню
8 – 10.09.13 – 17:23
Фигня какая-то…
Может и есть такой глюк.
В нормальных базах ведь не бывает кода “000000009” при длине кода 11.
9 – 10.09.13 – 17:24
(6) проверил в отладчике:)
10 – 10.09.13 – 17:24
(5) запросом – да….
придется
11 – 10.09.13 – 17:24
(0) А длина кода – какая?
12 – 10.09.13 – 17:24
(8) код поправлен руками, судя по всему
13 – 10.09.13 – 17:25
(11) 11, я уже ответил
14 – 10.09.13 – 17:25
(8) Дык это не в _базе_. Код у него – переменная. Значение которой…
15 – 10.09.13 – 17:25
(14) 000000009 – это в базе
16 – 10.09.13 – 17:26
Код это ведь реквизит у тебя? его длина какая?
17 – 10.09.13 – 17:26
(9)зачем отладчик? может глючит
в сервис-табло введи
Справочники.Контрагенты.НайтиПоКоду(“00000000922”) и посмотри значение
18 – 10.09.13 – 17:27
(17) ввел. получил элемент с кодом 000000009
19 – 10.09.13 – 17:27
код скопируй у элемента
20 – 10.09.13 – 17:27
Справочники.Контрагенты.НайтиПоКоду(“00000000922”).код
а так
21 – 10.09.13 – 17:27
(16) в конфигураторе длина кода 11
22 – 10.09.13 – 17:28
тестирую базу…
23 – 10.09.13 – 17:28
(13) Есть особенность одна при поиске НайтиПоКоду… Там параметров больше, чем один. Посмотри, что обозначают остальные.
24 – 10.09.13 – 17:29
(21) на всякий случай, а в конфигурации БД? Демоническое обновление было? Код 00000000922 в справочнике можно задать?
25 – 10.09.13 – 17:29
(21) найди отличия в следующих алгоритмах:
Код = “00000000922”;
Контрагент = Справочники.Контрагенты.НайтиПоКоду(Код);
и:
Контрагент = Справочники.Контрагенты.НайтиПоКоду(“00000000922”);
26 – 10.09.13 – 17:29
(23) сморел. второй отвечает за поиск по полному коду, включая коды всех родителей
27 – 10.09.13 – 17:29
+(23)кстати да что за справочник может подчиненный
28 – 10.09.13 – 17:30
Справочник Контрагенты в БП 2.0
29 – 10.09.13 – 17:30
индексы пож полители, переиндексируй
30 – 10.09.13 – 17:31
(29) тестирую базу…
31 – 10.09.13 – 17:31
(28) в типовой длина кода – 9
32 – 10.09.13 – 17:31
проверь с пом. запроса что возвращает
33 – 10.09.13 – 17:32
(32) тестирование закончится – проверю
34 – 10.09.13 – 17:32
(31) может быть…
35 – 10.09.13 – 17:34
(25)
Прикольно 🙂
(0)
А где ты ентот код исполняешь?
36 – 10.09.13 – 17:35
в обработке внешней…
Знаю, что поиск по коду не слишком надежен, но на сегодня постановка задачи такова.
37 – 10.09.13 – 17:36
(36)
В обработке нет случайно реквизита Код?
38 – 10.09.13 – 17:37
(37) нет:)
В консоли кода тоже находит не тот элемент
39 – 10.09.13 – 17:37
(31) Тогда как был создан код с длинной 11? Может быть длинна была изменена после?
40 – 10.09.13 – 17:38
(38)
Ну тогда индексы слетели
41 – 10.09.13 – 17:38
(40) индексируем…
42 – 10.09.13 – 17:39
(39) может и после… кто знает?:)
только все эти вопросы не о том.
43 – 10.09.13 – 17:41
(42) О том. Очень сильно о том. “1С”, к слову, очень своеобразно относится к хвостовым пробелам в наименованиях и в кодах. И к типу кода, кстати, тоже.
44 – 10.09.13 – 17:41
(29) тестирование базы не помогло
45 – 10.09.13 – 17:42
(42) Если попробовать с другим кодом и Спр?
46 – 10.09.13 – 17:44
(45)
а = Справочники.Контрагенты.НайтиПоКоду(“00000000122”).код
возвращает 000000001
47 – 10.09.13 – 17:46
а тупо вбить код “00000000122” в справочник можно?
48 – 10.09.13 – 17:49
(0) аааа:)
вечер:)
длина кода 9….
11 в другом справочнике
49 – 10.09.13 – 17:49
(47) А поле ввода “Код” в Форме Элемента какую длину имеет, тип значения какой
50 – 10.09.13 – 17:50
(48) С этого и надо было начинать
51 – 10.09.13 – 17:50
(50) Я с этого начала, а ТС начал мутить воду…
kanalex
52 – 10.09.13 – 17:50
сорри:)
- АКТУАЛЬНЫЕ РЕЛИЗЫ 1С
- ПРИМЕРЫ КОДА НА ПЛАТФОРМЕ 1С
Справочники в 1С 8.x
- Как создать элемент (группу) справочника?
- Как найти элемент справочника?
- Как удалить элемент справочника?
- Как перебрать элементы справочника?
- Как выбрать все элементы из определенной группы?
- Как перебрать элементы подчиненного справочника с помощью запроса?
- Как перебрать элементы подчиненного справочника с помощью выборки справочника?
- Как открыть форму списка (элемента) справочника?
- Как добавить запись в табличную часть элемента справочника?
- Как удалить строки из табличной части справочника?
- Как перебрать строки табличной части справочника?
- Как создать элемент в нужной группе?
- Как узнать, есть ли у текущего элемента подчиненные?
- Как узнать количество подчиненных элементов у выбранного элемента справочника?
- Как узнать количество подчиненных элементов у выбранного элемента справочника, если количество подчиненных справочников больше чем один?
- Как получить всех родителей выбранного элемента справочника?
- Как получить запросом “полный” код элементов справочника, если тип кода – Строка?
- Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?
- Как найти все элементы справочника, в которых не заполнен строковый реквизит?
- Как перенести все элементы справочника “Контрагенты” из одной группы в другую?
- Как организовать программный выбор элемента справочника?
- Как сохранить фотографию сотрудника в справочнике “Сотрудники”?
Как создать элемент (группу) справочника?
НовыйЭлемент = Справочники.ДокументыУдостоверяющиеЛичность.СоздатьЭлемент();
НовыйЭлемент.Наименование = "военный билет";
// Установить другие реквизиты.
....
НовыйЭлемент.Записать();
НовыйЭлемент = Справочники.Банки.СоздатьЭлемент();
// Получить ссылку на группу, в которой будет находиться новый элемент.
Родитель = Справочники.Банки.НайтиПоКоду("000000001");
НовыйЭлемент.Наименование = "АКБ";
НовыйЭлемент.Код = "000000011";
НовыйЭлемент.Родитель = Родитель;
// Установить другие реквизиты.
....
НовыйЭлемент.Записать();
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
// Получить ссылку на группу, в которой должна находиться создаваемая группа.
Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Обувь", Истина);
НоваяГруппа.Наименование = "Модельная обувь";
НоваяГруппа.Родитель = Родитель;
// Установить другие реквизиты.
....
НоваяГруппа.Записать();
// Создать новый элемент в корне справочника.
НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент();
НовыйЭлемент.Наименование = "IT отдел";
НовыйЭлемент.Записать();
// Получить ссылку на родителя добавляемых элементов.
Родитель = НовыйЭлемент.Ссылка;
// Создать дочерний элемент.
НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Группа разработки";
НовыйЭлемент.Родитель = Родитель;
НовыйЭлемент.Записать();
Как найти элемент справочника?
// Найдем по коду
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030");
Если РезультатПоиска.Пустая() Тогда
// Выполнить действия, предусмотренные в случае, когда элемент не найден.
КонецЕсли;
// Найдем по наименованию
РезультатПоиска = Справочники.Номенклатура.НайтиПоНаименованию("Кроссовки");
// Найдем по реквизиту
РезультатПоиска = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "К-120002");
Как удалить элемент справочника?
// Найти ссылки на удаляемый элемент.
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(СсылкаНаУдаляемыйЭлемент);
НайденныеСсылки = НайтиПоСсылкам(МассивСсылок);
Если НайденныеСсылки.Количество() > 0 Тогда
Сообщить("Нельзя удалять элемент, на него имеются ссылки");
Иначе
УдаляемыйЭлемент = СсылкаНаУдаляемыйЭлемент.ПолучитьОбъект();
УдаляемыйЭлемент.Удалить();
КонецЕсли;
УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);
Как перебрать элементы справочника?
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
// Обращение к другим данным справочника.
КонецЦикла;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Ссылка,
| Наименование
|ИЗ
| Справочник.Номенклатура
|АВТОУПОРЯДОЧИВАНИЕ");
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Как выбрать все элементы из определенной группы?
Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель);
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
КонецЦикла;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Ссылка,
| Наименование
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Родитель = &Родитель
|АВТОУПОРЯДОЧИВАНИЕ");
Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель);
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
КонецЦикла;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Ссылка,
| Наименование
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Родитель В ИЕРАРХИИ(&Родитель)
|АВТОУПОРЯДОЧИВАНИЕ");
Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Как перебрать элементы подчиненного справочника с помощью запроса?
Процедура ПереборПодчиненыхЭлементов(Контрагент)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КонтактныеЛица.Ссылка
|ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица
|ГДЕ
| КонтактныеЛица.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец", Контрагент);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ОчереднойПодчиненый = Выборка.Ссылка;
КонецЦикла;
КонецПроцедуры
Как перебрать элементы подчиненного справочника с помощью выборки справочника?
Процедура ПереборПодчиненыхЭлементов(Контрагент)
// Получить выборку по указанному контрагенту.
Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент);
Пока Выборка.Следующий() Цикл
ОчереднойПодчиненый = Выборка.Ссылка;
КонецЦикла;
КонецПроцедуры
Как открыть форму списка (элемента) справочника?
Форма = Справочники.Номенклатура.ПолучитьФормуСписка();
Форма.Открыть();
Элемент = Справочники.Номенклатура.НайтиПоКоду("00070");
Форма = Элемент.ПолучитьФорму();
Форма.Открыть();
Как добавить запись в табличную часть элемента справочника?
ЭлементОбъект = СсылкаКонтрагент.ПолучитьОбъект();
НоваяСтрока = ЭлементОбъект.ВидыДеятельности.Добавить();
// Заполнить реквизиты.
НоваяСтрока.ВидДеятельности = ПолеВводаВидДеятельности;
ЭлементОбъект.Записать();
Как удалить строки из табличной части справочника?
ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006");
ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект();
ОбъектСправочника.ВидыДеятельности.Очистить();
ОбъектСправочника.Записать();
ОбъектСправочника = ВыбранныйЭлемент.ПолучитьОбъект();
// Создать структуру для отбора удаляемых строк.
СтруктураОтбора = Новый Структура("ВидДеятельности", ВыбранныйВидДеятельности);
// Получить массив удаляемых строк.
ПодходящиеСтроки = ОбъектСправочника.ВидыДеятельности.НайтиСтроки(СтруктураОтбора);
// Удалить строки.
Для Каждого ОчереднаяСтрока Из ПодходящиеСтроки Цикл
ОбъектСправочника.ВидыДеятельности.Удалить(ОчереднаяСтрока);
КонецЦикла;
ОбъектСправочника.Записать();
Как перебрать строки табличной части справочника?
ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006");
Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл
Сообщить(ТекущаяСтрока.ВидДеятельности);
КонецЦикла;
Как создать элемент в нужной группе?
КодГруппы = "330100";
ПоискПоПолномуКоду = Ложь; // значение по умолчанию
Группа = Справочники.Номенклатура.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду);
Если Группа.Пустая() Тогда
Группа = Справочники.Номенклатура.СоздатьГруппу();
Группа.Код = КодГруппы;
Группа.Наименование = "Загруженные";
Группа.Записать();
ИначеЕсли Не Группа.ЭтоГруппа Тогда
Сообщить("Найден элемент справочника с указанным кодом!");
// Предусмотреть прерывание алгоритма.
КонецЕсли;
Спр = Справочники.Номенклатура.СоздатьЭлемент();
Спр.Наименование = "Программно созданный";
// Реквизиты заполняются в соответствии с задачей.
Спр.Родитель = Группа.Ссылка;
Спр.Записать();
Группа = Справочники.Номенклатура.Загруженные;
КодЭлемента = "330100";
ПоискПоПолномуКоду = Ложь; //Значение по умолчанию
Родитель = Справочники.Номенклатура.НайтиПоКоду(КодЭлемента, ПоискПоПолномуКоду);
Если Родитель.Пустая() Тогда
Родитель = Справочники.Номенклатура.СоздатьЭлемент();
Родитель.Код = КодЭлемента;
Родитель.Наименование = "Загруженные";
Родитель.Записать();
КонецЕсли;
Спр = Справочники.Номенклатура.СоздатьЭлемент();
Спр.Наименование = "Программно созданный";
// Реквизиты заполняются в соотвествии с задачей.
Спр.Родитель = Родитель.Ссылка;
Спр.Записать();
Как узнать, есть ли у текущего элемента подчиненные?
Выборка = Справочники.Номенклатура.Выбрать( , Владелец);
Если Выборка.Следующий() = Истина Тогда
// Есть подчиненные элементы.
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| ЕдиницыИзмерения.Ссылка
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
|ГДЕ
| ЕдиницыИзмерения.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец", Владелец);
Если НЕ Запрос.Выполнить().Пустой() Тогда
// Есть подчиненные элементы!
КонецЕсли;
Как узнать количество подчиненных элементов у выбранного элемента справочника?
Выборка = Справочники.ЕдиницыИзмерения.Выбрать( , Владелец);
КоличествоЭлементов = 0;
Пока Выборка.Следующий() Цикл
КоличествоЭлементов = КоличествоЭлементов + 1;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК КоличествоЗаписей
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
|ГДЕ
| ЕдиницыИзмерения.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец", Владелец);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
КоличествоЗаписей = Выборка.КоличествоЗаписей;
КонецЕсли;
Как узнать количество подчиненных элементов у выбранного элемента справочника, если количество подчиненных справочников больше чем один?
ВЫБРАТЬ
СУММА(КоличествоПодчиненных) КАК КоличествоПодчиненныхЭлементов
ИЗ
(ВЫБРАТЬ
КОЛИЧЕСТВО(*) КАК КоличествоПодчиненных
ИЗ
Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
ГДЕ ЕдиницыИзмерения.Владелец = &Владелец
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
КОЛИЧЕСТВО(*)
ИЗ
Справочник.СерииНоменклатуры КАК СерииНоменклатуры
ГДЕ СерииНоменклатуры.Владелец = &Владелец ) КАК ВложенныйЗапрос
Как получить всех родителей выбранного элемента справочника?
МассивРодителей = Новый Массив;
Родитель = СсылкаНаЭлемент.Родитель;
Пока Не Родитель.Пустая() Цикл
МассивРодителей.Добавить(Родитель);
Родитель = Родитель.Родитель;
КонецЦикла;
Для Каждого ТекущийРодитель Из МассивРодителей Цикл
// Работа с текущим родителем.
КонецЦикла;
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Ссылка = &Ссылка
ИТОГИ ПО
Ссылка ТОЛЬКО ИЕРАРХИЯ
ТекущийЭлементНоменклатуры = ЭлементНоменклатура;
Запрос = Новый Запрос("ВЫБРАТЬ
| Номенклатура.Родитель,
| Номенклатура.Родитель.Родитель,
| Номенклатура.Родитель.Родитель.Родитель,
| Номенклатура.Родитель.Родитель.Родитель.Родитель,
| Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &ТекущийЭлементНоменклатуры";
Пока Истина Цикл
Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", ТекущийЭлементНоменклатуры);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Прервать;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл
ТекущийЭлементНоменклатуры = Выборка[НомерКолонки];
Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда
Прервать;
Иначе
Сообщить(ТекущийЭлементНоменклатуры);
КонецЕсли;
КонецЦикла;
Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Как получить запросом “полный” код элементов справочника, если тип кода – Строка?
ВЫБРАТЬ
Контрагенты.Ссылка,
ВЫБОР
КОГДА (Контрагенты.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Код
КОГДА (Контрагенты.Родитель.Родитель.Код ЕСТЬ NULL ) ТОГДА
Контрагенты.Родитель.Код + "/" + Контрагенты.Код
ИНАЧЕ Контрагенты.Родитель.Родитель.Код + "/" + Контрагенты.Родитель.Код +
"/" + Контрагенты.Код
КОНЕЦ КАК ПолныйКод
ИЗ
Справочник.Контрагенты КАК Контрагенты
Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?
Запрос = Новый Запрос("ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| (Контрагенты.Наименование ПОДОБНО &ЧастьНаименования) И (НЕ Контрагенты.ЭтоГруппа)
|ИТОГИ ПО
| Ссылка ТОЛЬКО ИЕРАРХИЯ");
Запрос.УстановитьПараметр("ЧастьНаименования", "%" + ПолеВводаПодстрока + "%");
Как найти все элементы справочника, в которых не заполнен строковый реквизит?
ВЫБРАТЬ
ФизическиеЛица.Ссылка
ИЗ
Справочник.ФизическиеЛица КАК ФизическиеЛица
ГДЕ
(ФизическиеЛица.ИНН = "")
ВЫБРАТЬ
ФизическиеЛица.Ссылка
ИЗ
Справочник.ФизическиеЛица КАК ФизическиеЛица
ГДЕ
(ФизическиеЛица.СтраховойНомерПФР = "") ИЛИ (ФизическиеЛица.СтраховойНомерПФР = " - -")
Как перенести все элементы справочника “Контрагенты” из одной группы в другую?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Родитель = &СтарыйРодитель";
Запрос.УстановитьПараметр("СтарыйРодитель", СтарыйРодитель);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Контрагент = Выборка.Ссылка.ПолучитьОбъект();
Контрагент.Родитель = НовыйРодитель;
Контрагент.Записать();
КонецЦикла;
Как организовать программный выбор элемента справочника?
// Получить форму выбора справочника как подчиненную
// форме документа
ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма);
// Открыть полученную форму
ФормаВыбора.Открыть();
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
ПолученноеЗначение = ЗначениеВыбора;
// Дальнейшая обработка значения.
КонецПроцедуры
ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма);
Выбрано = ФормаВыбора.ОткрытьМодально();
Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка)
// Запретить стандартную обработку.
СтандартнаяОбработка = Ложь;
// Получить форму выбора справочника как подчиненную полю ввода.
ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , Элемент);
// Открыть полученную форму
ФормаВыбора.Открыть();
КонецПроцедуры
Процедура ПолеВводаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
// Отключить стандартную обработку (при необходимости).
СтандартнаяОбработка = Ложь;
ПолученноеЗначение = ВыбранноеЗначение;
// Дальнейшая обработка значения.
КонецПроцедуры
Как сохранить фотографию сотрудника в справочнике “Сотрудники”?
Процедура ЗагрузитьФотографию(Элемент)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = "Текст (*,*)|*.*";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите картинку";
Если ДиалогОткрытияФайла.Выбрать() Тогда
ВыбраннаяКартинка = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла);
ЭлементХранилища = Новый ХранилищеЗначения(ВыбраннаяКартинка);
Фотография = ЭлементХранилища;
КонецЕсли;
КонецПроцедуры
ВыбФайл = Новый ДвоичныеДанные(ДиалогОткрытияФайла.ПолноеИмяФайла);
элХранилища = Новый ХранилищеЗначения(ВыбФайл);
Фотография = элХранилища;