1с найти по реквизиту

Обновлено: 04.07.2024

Стояла задача найти Конрагента в справочнике по ИНН и КПП (кто знает, что такое обособленное подразделение, поймет). Логика проста - найти по ИНН, сверить КПП, если нет добавить.

Найдено=Справочники.Контрагенты.НайтиПоРеквезиту("ИНН",ИскомыйИНН);
Если Найден=Справочники.Контрагенты.ПустаяСсылка() Тогда

//СОЗДАТЬ КОНТРАГЕНТА
Иначе
Если Найдено.КПП=ИскомыйКПП Тогда
Сообщить("Найден филиал контрагента");
Иначе
//СОЗДАТЬ ФИЛИАЛ КОНТРАГЕНТА
КонецЕсли;
КонецЕсли;
И тут фэйл, мои дорогие, если в справочнике существует и филиал и ГО, то он кого-то по-любому не найдет. А все кроется в:

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

Пошел искать другие пути и набрел на два варианта:
Выборка()

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

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

Распечатать

Google maps : вывод точек на карту и режим панорамы  7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора База 1С при запуске уходит в дамп и вылетает  1
В последнее время частенько обращаются пользователи у которых после замены или ремонта компьютера 1С не запускается, а точнее при открытии уходит в dump и вылетает. Как правило, решение одно: Отключить аппаратное ускорение видеокарты В Window Блокировка записей, невозможно изменить или удалить из регистра. Конфликт блокировок MS SQL + 1C  3
При попытке удалить запись из регистра сведений - получаю ошибку: она заблокирована, ошибка блокировок и т.д. Отключил всех пользователей, перезапустил сервер, пробую удалить - опять ошибка блокировки :( Путем тестов было вяснено, что проблема Ввод по строке - поиск по первым символам или в любом месте наименования  6
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования! В 1С 8.3 по умолчанию настройки справочника номенклатуры такие: При такой настройке, механизм поиска в Веб браузер в 1С используя поле HTML документа  2
Настраивал клиенту CRM, он захотел - чтобы панель управления сайтом была в 1С. Хочет - делаем: Обработка Веб браузер проста, состоит из поля HTML документа и 20 строчек кода: Код команд: НаКлиенте Процедура Команда1(Команда) Объект.HTML = Посмотреть все результаты поиска похожих

Еще в этой же категории

Как очистить справочник удалив все не используемые элементы?  0
Очень часто менеджеры дублируют информацию в справочниках и время от времени их приходится чистить. Но как удалить только те элементы справочника, которые не используются в документах? Следующий пример кода поможет это сделать(в примере обрабатыва Вывод в поле Наименование справочника Штатное список значений из справочника Подразделения?  0
Есть два справочника Штатное и Подразделения. В справочнике Штатное есть автоматически генерируемое поле Наименование. Как программно сделать так чтобы в поле Наименование справочника Штатное выводились списком значений из поля Наименование справочн Посмотреть все в категории Справочники

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

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

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

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

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

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

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

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

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

Читайте также: