Куперс

Бухучет и анализ

1С поиск по коду в справочнике

Найти элемент справочника в 1С 8 можно тремя способами:

1) Поиск по коду

Если известен код элемента справочника, и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу код элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким кодом не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным кодом, то будет возвращен тот, который найден первым.

Пример:

НайденныйЭлемент = Справочники.Номенклатура.НайтиПоКоду(«00000011254»);

Описание параметров метода НайтиПоКоду:

  • <Код> (обязательный). Тип: Число, Строка. Описание: искомый код, строка или число в зависимости от настроек справочника в конфигураторе.
  • <ПоискПоПолномуКоду> (необязательный). Тип: Булево. Описание: определяет режим поиска по полному коду, истина — искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом «/”. Значение по умолчанию: Ложь.
  • <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
  • <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.

2) Поиск по наименованию

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по .
Будем рады помочь Вам!

Если известно наименование элемента справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу наименование элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким наименованием не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным наименованием, то будет возвращен тот, который найден первым.

Пример:

НайденныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(«Аппарат сварочный»);

Описание параметров метода НайтиПоНаименованию:

  • <Наименование> (обязательный). Тип: Строка. Описание: строка, содержащая искомое наименование.
  • ТочноеСоответствие> (необязательный). Тип: Булево. Описание: определяет режим поиска по полному соответствию, поиск будет успешным, если строка поиска: в случае значения параметра Ложь — будет соответствовать левой части наименования, в случае значения параметра Истина — будет полностью совпадать с наименованием (за исключением «хвостовых” пробелов в наименовании). Значение по умолчанию: Ложь.
  • <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
  • <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.

3) Поиск по произвольному реквизиту

Если известно значение какого либо реквизита справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоРеквизита(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу имя реквизита, его значение и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким значением указанного реквизита не найден. Следует заметить, что если в справочнике присутствует несколько элементов с таким значением указанного реквизита, то будет возвращен тот, который найден первым.

Пример:

НайденныйЭлемент = Справочники.Номенклатура.НайтиПоРеквизиту(«Артикул»,»А-255″);

Описание параметров метода НайтиПоРеквизит:

  • <ИмяРеквизита> (обязательный). Тип: Строка. Описание: имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения: произвольный, кроме ХранилищеЗначения и строк произвольной длины.
  • <ЗначениеРеквизита> (обязательный). Тип: Произвольный. Описание: значение реквизита, по которому должен выполняться поиск.
  • <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
  • <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.

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

На стороне клиента код вида

Контрагент.ИНН

приведет к ошибке. Такие конструкции возможны только на сервере.

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

&НаКлиенте Процедура ПолучитьИНН(Команда) // Вызов серверной внеконтекстной функции ИННКонтрагента = ПолучитьИНННаСервере(Контрагент); Сообщить(«ИНН контрагента: » + ИННКонтрагента); КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьИНННаСервере(Контрагент) Возврат Контрагент.ИНН; КонецФункции

При нажатии на кнопку ПолучитьИНН вызывается серверная функция ПолучитьИНННаСервере(). В единственном параметре передается контрагент, выбранный интерактивно пользователем. Функция получает ИНН через точку и сразу же возвращает значение обратно на клиент. Результат работы серверной функции помещается в переменную ИННКонтрагента и выводится пользователю с помощью метода Сообщить().

Серверная функция является внеконтекстной (&НаСервереБезКонтекста). Это значит, что данные, содержащиеся в форме, не будут отсылаться на сервер, что уменьшит объем передаваемых данных и скорость возврата результата функции.

Внимание!

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

Возврат Контрагент.ИНН;

можно заменить на:

Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Контрагент, «ИНН»);

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

Рассмотрим пример: на форме документа рядом с полем ввода контрагента должен выводиться его ИНН. Для этого перенесем реквизит ИНН на форму:

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

Справочники

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

Проверка заполненности

&НаСервере

Процедура ПроверкаЗаполненияНаСерере()

Сообщить(РеквизитСпрНоменклатура = Справочники.Номенклатура.ПустаяСсылка());

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

&НаКлиенте

Процедура ПроверкаЗаполненияНаклиенте()

ПроверкаЗаполненияНаСерере();

Сообщить(РеквизитСпрНоменклатура.Пустая());

Сообщить(НЕ ЗначениеЗаполнено(РеквизитСпрНоменклатура));

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

Проверка пренадлежности элемента определённой группе

&НаСервере

Процедура ПринадлежностьНаСервере()

ПредопределённаяГруппа = Справочники.Склады.ОсновнаяГруппа;

Сообщить(Справочники.Склады.Основной.ПринадлежитЭлементу(ПредопределённаяГруппа));

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

Поиск по справочнику

&НаСервере

Процедура ПоискПоСправочнику()

Ссылка = Справочники.Номенклатура.НайтиПоНаименованию(«Стул»);

Сообщить(Ссылка);

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

&НаКлиенте

Процедура Тест(Команда) // кнопка

ПоискПоСправочнику();

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

Копировать элемент справочника

&НаСервере

Процедура КопироватьНаСервере()

НовыйЭлемент = РеквизитСпрНоменклатура.Скопировать();

НовыйЭлемент.Наименование = НовыйЭлемент.Наименование + » (Копия)»;

НовыйЭлемент.Записать();

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

Изменение значений реквизитов элемента справочника

&НаСервере

Процедура ИзменитьНаименования()

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

СпрОбъект = Выборка.ПолучитьОбъект();

СпрОбъект.Наименование = СпрОбъект.Наименование + «.»;

СпрОбъект.Записать();

КонецЦикла;

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

Пометить на удаление

&НаСервере

Процедура ПометитьНаУдалениеНаСервере()

СпрОбъект = РеквизитСпрНоменклатура.ПолучитьОбъект();

СпрОбъект.ПометкаУдаления = Истина;

СпрОбъект.Записать();

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

Проверка является тип реквилита ссылкой на справочник

&НаСервере

Процедура ПроверкаСервер()

Сообщить(Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(РеквизитСпрНоменклатура)));

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

Получить идентификатор группы или элемента (например предопределённые группы и элименты)

&НаСервере

Процедура ИдентификаторЭлемента()

Сообщить(Справочники.Склады.ОсновнаяГруппа.УникальныйИдентификатор());

Сообщить(Справочники.Склады.Основной.УникальныйИдентификатор());

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

Работа со справочником в обработке

&НаСервере

Процедура ПолучитьКонтрагентИзВыборки()

Выборка = Справочники.Контрагенты.Выбрать();

Если Выборка.Следующий() Тогда

СправочникКонтрагент = Выборка.Ссылка;

КонецЕсли;

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

&НаСервере

Процедура ПолучитьКонтрагентПоИмени(Имя)

Фирма = Справочники.Контрагенты.НайтиПоНаименованию(Имя, Истина,,);

СправочникКонтрагент = Фирма.Ссылка;

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

&НаСервере

Процедура СоздатьНовыйЭлементСправочника()

Элемент = Справочники.Номенклатура.СоздатьЭлемент();

Элемент.Наименование = «Шкаф»;

Элемент.Поставщик = Справочники.Контрагенты.Фирма;

Если Элемент.ПроверитьЗаполнение() Тогда

Элемент.Записать();

НаименованиеСпр = Элемент.Наименование;

КонецЕсли;

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

Модуль объекта (НаСервере)

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

Поставщик = Справочники.Контрагенты.ПустаяСсылка();

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

Процедура ПередЗаписью(Отказ)

СтароеЗначение = Ссылка.Наименование;

НовоеЗначение = Наименование;

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

Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)

Префикс = «НОМ»;

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

Процедура МойМетодВОбъекте() Экспорт

// Экспортируеммый метод

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

Обратится к экспортному методу модуля объекта из обработки (Фирма — это предопределенный элемент)

&НаСервере

Процедура ОбратитсяКЭкспортномуМетоду()

Справочники.Контрагенты.Фирма.ПолучитьОбъект().МойМетодВОбъекте();

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

Модуль менеджера (НаСервере, НаКлиенте)

Процедура МойМетодВМенеджере() Экспорт

// Экспортируемый метод

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

Обратится к экспортному методу модуля менеджер из обработки

Справочники.Номенклатура.МойМетодВМенеджере();

Работа с уникальным идентификатором в Модуле Объекта

Процедура ПередЗаписью(Отказ)

Если ЭтоНовый() Тогда

Ключ = Новый УникальныйИдентификатор;

НоваяСсылка = Справочники.Склады.ПолучитьСсылку(Ключ);

УстановитьСсылкуНового(НоваяСсылка);

КонецЕсли;

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

Работа с уникальным идентификатором в Обработке

&НаСервере

Процедура НовыйЭлементИНовымУД()

Ключ = Новый УникальныйИдентификатор;

НоваяСсылка = Справочники.Склады.ПолучитьСсылку(Ключ);

НовыйЭлемент = Справочники.Склады.СоздатьЭлемент();

НовыйЭлемент.УстановитьСсылкуНового(НоваяСсылка);

НовыйЭлемент.Наименование = «Оптовый»;

НовыйЭлемент.Записать();

Сообщить(«Ключ: » + Ключ);

Сообщить(«ID: » + НовыйЭлемент.Ссылка.УникальныйИдентификатор());

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

Подчинённые справочники. (Создаём Клиента и его Контакное лицо)

1) Справочник «Клиенты» реквизит «КонтактноеЛицо» (тип ссылка на справочник КонтактныеЛица) реквизит на форме «НовоеКонтактноеЛицо» (тип строка)

2) Справочник «КонтактныеЛица», иерархический, владельцы (справочник «Клиенты», подчинения: группам и элементам)

3) Справочник «Клиенты» форма элемента, функция ПередЗаписьюНаСервере

&НаСервере

Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

Если ТекущийОбъект.ЭтоНовый() Тогда

Ключ = Новый УникальныйИдентификатор;

НоваяСсылка = Справочники.Клиенты.ПолучитьСсылку(Ключ);

ТекущийОбъект.УстановитьСсылкуНового(НоваяСсылка);

КЛ = Справочники.КонтактныеЛица.СоздатьЭлемент();

КЛ.Наименование = НовоеКонтактноеЛицо;

КЛ.Владелец = НоваяСсылка;

КЛ.Записать();

ТекущийОбъект.КонтактноеЛицо = КЛ.Ссылка;

КонецЕсли;

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

Второй способ (форма элемента)

&НаСервере

Перем НоваяСсылка;

&НаСервере

Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

Если ТекущийОбъект.ЭтоНовый() Тогда

Ключ = Новый УникальныйИдентификатор;

НоваяСсылка = Справочники.КонтактныеЛица.ПолучитьСсылку(Ключ);

ТекущийОбъект.КонтактноеЛицо = НоваяСсылка;

КонецЕсли;

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

&НаСервере

Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

КЛ = Справочники.КонтактныеЛица.СоздатьЭлемент();

КЛ.УстановитьСсылкуНового(НоваяСсылка);

КЛ.Наименование = НовоеКонтактноеЛицо;

КЛ.Владелец = ТекущийОбъект.Ссылка;

КЛ.Записать();

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

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

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

Наверх