Стояла задача найти Конрагента в справочнике по ИНН и КПП (кто знает, что такое обособленное подразделение, поймет). Логика проста — найти по ИНН, сверить КПП, если нет добавить.
Найдено=Справочники.Контрагенты.НайтиПоРеквезиту(«ИНН»,ИскомыйИНН);
Если Найден=Справочники.Контрагенты.ПустаяСсылка() Тогда
//СОЗДАТЬ КОНТРАГЕНТА
Иначе
Если Найдено.КПП=ИскомыйКПП Тогда
Сообщить(«Найден филиал контрагента»);
Иначе
//СОЗДАТЬ ФИЛИАЛ КОНТРАГЕНТА
КонецЕсли;
КонецЕсли;
И тут фэйл, мои дорогие, если в справочнике существует и филиал и ГО, то он кого-то по-любому не найдет. А все кроется в:
Возвращаемое
значение:
Тип: СправочникСсылка.
Ссылка на найденный элемент справочника. Если не существует ни одного
элемента с требуемым значением реквизита, то будет возвращена пустая ссылка.
Если найдено более одного, функция вернет только первое вхождение…неприятно, однако…
Пошел искать другие пути и набрел на два варианта:
Выборка()
ПараметрПоискаИННОтбор=Новый Структура;ПараметрПоискаИННОтбор.Вставить(«ИНН»,ИскомыйИНН);
Выборка=справочники.контрагенты.Выбрать(,,ПараметрПоискаИННОтбор);
Пока Выборка.Следующий() Цикл
КППНайден=Ложь;
Если Выборка.КПП=ИскомыйКПП Тогда
Сообщить(«Найден филиал контрагента»);
КППНайден=Истина;
Прервать;
//Мне дальше не нужно
КонецЕсли;
КонецЦикла;
Если КППНайден=Ложь Тогда
//СОЗДАТЬ ФИЛИАЛ КОНТРАГЕНТА
КонецЕсли;
И второй
Новый Запрос
ЗапросПоискИНН=Новый Запрос(«ЗапросПоискИНН»);ЗапросПоискИНН.Текст=«ВЫБРАТЬ
|Контрагенты.Ссылка
|ИЗ
|Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|Контрагенты.ИНН = &ИНН»;
ЗапросПоискИНН.Параметры.Вставить(«ИНН»,ИскомыйКПП);
Выборка=ЗапросПоискИНН.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
КППНайден=Ложь;
Если Выборка.КПП=ИскомыйКПП Тогда
Сообщить(«Найден филиал контрагента»);
КППНайден=Истина;
Прервать;
//Мне дальше не нужно
КонецЕсли;
КонецЦикла;
Если КППНайден=Ложь Тогда
//СОЗДАТЬ ФИЛИАЛ КОНТРАГЕНТА
КонецЕсли;
В Запросе можно добавить еще один параметр, чего не сделаешь в Выборке.
Но, у обоих вариантов есть минус, а именно:
Если Выборка.Следующий()=Справочники.Контрагенты.ПустаяСсылка() Тогда
//ЧЕГО ТО ТАМ;
КонецЕсли;
А дальше цикл ПокаЦикл. Блок «если», в этом случае, съест первую итерацию, и потом может кого-то обломать.
Короче, вся эта фигня к тому, что не надо использовать Выборка.Следующий() как условие, можно проверить по Выборка.Количество() или Выборка.Пустой().
поиск по нескольким реквизитам |
Я |
30.12.11 — 10:52
как можно осущиствить поиск справочника по нескольким реквизитам(3) и открыть его
1 — 30.12.11 — 10:54
запросом
2 — 30.12.11 — 10:56
а как именно?
3 — 30.12.11 — 10:58
(2) написать запрос
4 — 30.12.11 — 10:58
(2) ну запросом же
5 — 30.12.11 — 10:59
в запросе ссылку на этот справочник только передавать?
6 — 30.12.11 — 10:59
(5) хы
7 — 30.12.11 — 11:00
(5) зачем тебе тогда искать если ты его передавать собрался ?
8 — 30.12.11 — 11:00
(5) как твоей душеньке угодно будет
запрос штука такая: хош на этот, хош на тот
9 — 30.12.11 — 11:00
или все данные справочника?
10 — 30.12.11 — 11:00
PS че-нить да выдаст
11 — 30.12.11 — 11:01
Select RRef From Catalog2345 Where //Твое условие.
12 — 30.12.11 — 11:03
ВЫБРАТЬ Партии.Ссылка КАК Ссылка Из Справочник.Партии КАК Партии ГДЕ Партии.Жуликов И Партии.Воров
13 — 30.12.11 — 11:05
вот так накидал
форма=Справочники.КонтакныеЛица.ПолучитьФорму(«ФормаЭлемента»);
организация=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Организация;
ФИО=ЭлементыФормы.ТабличноеПоле3.ТекущиеДанные.ФИО;
Должность=ЭлементыФормы.ТабличноеПоле3.ТекущиеДанные.Должность;
запрос = Новый Запрос;
Запрос.Текст= «ВЫБРАТЬ
| КонтакныеЛица.Код,
| КонтакныеЛица.Наименование,
| КонтакныеЛица.ФИО,
| КонтакныеЛица.Должность,
| КонтакныеЛица.ТелефонРабочий,
| КонтакныеЛица.ТелефонСотовый,
| КонтакныеЛица.EMail,
| КонтакныеЛица.Комментарий
|ИЗ
| Справочник.КонтакныеЛица КАК КонтакныеЛица
|ГДЕ
| КонтакныеЛица.Наименование = &Наименование
| И КонтакныеЛица.ФИО ПОДОБНО &ФИО
| И КонтакныеЛица.Должность = &Должность» ;
запрос.УстановитьПараметр(«Наименование»,организация);
запрос.УстановитьПараметр(«ФИО»,ФИО);
запрос.УстановитьПараметр(«Должность»,Должность);
результат=запрос.Выполнить();
а вот дальше как открыть этот справочник?
14 — 30.12.11 — 11:06
мля, ты человеческим языком объясни, что тебе сделать-то надо?
15 — 30.12.11 — 11:07
и не путай справочник с элементами справочника
16 — 30.12.11 — 11:08
ой не то сделал
во так форма=Справочники.КонтакныеЛица.ПолучитьФорму(«ФормаЭлемента»);
организация=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Организация;
ФИО=ЭлементыФормы.ТабличноеПоле3.ТекущиеДанные.ФИО;
Должность=ЭлементыФормы.ТабличноеПоле3.ТекущиеДанные.Должность;
запрос = Новый Запрос;
Запрос.Текст= «ВЫБРАТЬ
| КонтакныеЛица.Ссылка КАК Ссылка
|ИЗ
| Справочник.КонтакныеЛица КАК КонтакныеЛица
|ГДЕ
| КонтакныеЛица.Наименование = &Наименование
| И КонтакныеЛица.ФИО ПОДОБНО &ФИО
| И КонтакныеЛица.Должность = &Должность» ;
запрос.УстановитьПараметр(«Наименование»,организация);
запрос.УстановитьПараметр(«ФИО»,ФИО);
запрос.УстановитьПараметр(«Должность»,Должность);
результат=запрос.Выполнить();
17 — 30.12.11 — 11:09
а устанавливать параметр надо в моем случае?
18 — 30.12.11 — 11:09
(16) опять не то
19 — 30.12.11 — 11:10
параметры откуда получать надо?
20 — 30.12.11 — 11:11
(16)
Выборка = Запрос.Выполнить.Выбрать();
Пока Выборка.Следующий() Цикл
Выборка.Ссылка.ПолучитьФорму().Открыть();
прервать;/предполагаем что элемент один
КонецЦикла;
21 — 30.12.11 — 11:12
(20) это что за народное творчество?
Если Выборка.Следующий()
22 — 30.12.11 — 11:12
(16)
Тебе надо текущее значение контактного лица в списке справочника получить что ли?
Тогда это будет:
ТекКонтактноеЛицо = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
23 — 30.12.11 — 11:12
+(21) а вообще, предполагать в таком случае плохо
24 — 30.12.11 — 11:12
форма=Справочники.КонтакныеЛица.ПолучитьФорму(«ФормаЭлемента»); — Что ты хочешь этим сделать ?
И задачу давай описывай полностью.
25 — 30.12.11 — 11:13
(21) это ты где это прочитал?
26 — 30.12.11 — 11:14
Поле объекта не обнаружено (Выполнить)
27 — 30.12.11 — 11:14
(23) может у автора контроль по наименованию и ФИО на уникальность при записи.
Он ведь ставит задачу открыть элемент, а не показать список
28 — 30.12.11 — 11:15
(26) ну Выполнить() конечно же
29 — 30.12.11 — 11:15
(21) а ну или так
30 — 30.12.11 — 11:16
(27) Почитай его пример . Он получает форму , потом считывает элементы с формы и пытается найти КонтактноеЛицо. Тебе не кажется что это бред ?
31 — 30.12.11 — 11:18
в общем сутьь такая есть общая форма на ней два ТП
в первом поле находится выгруженое запросом организация и другие данные, а во втором ТП фио и должность
есть кнопка
по этим трем параметрам мне нужно найти справочник при нажатии кнопки и открыть его,
поэтому я пишу получитьформу что бы как то обратиться к этому справочнику, а через текущие данные считываю организация, фио, должность
суть понятна?
32 — 30.12.11 — 11:19
(31) Дай обработку на почту.
33 — 30.12.11 — 11:21
(31) Значит так:
Пишем запрос:
Запрос = Новый Запрос;
Запрос.текст = «ВЫБРАТЬ Ссылка ИЗ Справочник.НАЗВАНИЕСПРАВОЧНИКА ГДЕ РЕКВИЗИТ1 = &Реквизит1 И РЕКВИЗИТ2 = &Реквизит2 (повторять…)»;
Запрос.Установитьпараметр(«Реквизит1», ЗНАЧЕНИЕ);
Запрос.Установитьпараметр(«Реквизит2», ЗНАЧЕНИЕ);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать(); Выборка.Следующий();
ОткрытьЗначение(Выборка.Ссылка);
КонецЕсли;
Vasus55
34 — 30.12.11 — 11:28
заработаааааааааааааааааааааааааало!!!
Всех с НОВЫМ ГОДОМ!!!!
ВСЕГО ВАМ САМОГО НАИЛУЧШЕГО!!!
При работе с таблицами справочника есть методы НайтиПоРеквизиту и НайтиПоКоду в итоге получаем найденную запись и делаем с ней что хотим. Вопрос как найти получить запись поиском по нескольким реквизитам? Т.е. сделать не Выборку, а именно установить курсор на найденной по нескольким реквизитам записи?
1С 8.2 Мне Запрос не нужен. Необходимо получить для редактирования искомую строку.
по идейным соображениям запрос не нужен?
+4 разрешаю искать перебором, раз запрос не нужен
ну так получи. В чём вопрос то? Есть такой метод… НайтиСтроки…
самое оптимальное запрос с параметром подобно
НайтиСтроки вроде бы ищет только в табличных частях справочника, а не сами записи справочника?
подобно — ни разу не отпимально
ещё в ТЗ. пробегись по выборке, засунь всё в ТЗ, потом ищи строки. раз уж религия такая
а… в справочнике… Запрос. Или в лес. Ну или на Привоз
сам запутался в своём СП. Какая ирония
Запросом можно искать, но много писанины (создать запрос, по том перебирать и искать по коду). Этоже самое к примеру в Фоксе можно сделать одной командой (типа Locate for)
зато работает как надо. купи гуся
Выборка конечно лучше получая все поля объекта и помещая в ОЗУ. А запрсом получаем нужные поля. Если поиск по нескольким реквизитам и по трем набранным буквам сделать поиск с помощью объектной модели как то затруднительно.
зачем искать по коду? достаточно правильно создать запрос, тем более текст запроса достаточно «накликать» в конструкторе запросов
потом перебирать? срочно дружись с запросами, у тебя пусто в голове
если ты не любишь Запросы, ты не можешь называть себя одинесником
я! я не люблю! семёрочные. у меня от них начинает кружиться голова и возникает необъяснимое чувство тревоги и страха
таки вперёд на Привоз покупать гуся…
если ты боишься запросов, выпей 50 грамм. Алкоголь притупляет чувство страха
500 будет в самый раз для притупления. только я ж работать не смогу
а ты ещё и работаешь? О_о
поработаешь тут с вами. я в отпуске загораю
бить надо за найтипоКоду и поРеквизиту. Больше ими не пользуйся
Я может чёт не понимаю. После запроса пишем: Выборка=РезультатЗапроса.Выбрать; Выборка — это же виртуальная таблица, а как мне получить реальную запись справочника, не используя Справочник.НайтиПоКоду(Выборка.Код)
Выборка это скорее курсор SQL (ближе к нему) Выборка.Ссылка — если есть конечно поле такое в запросе, дает ссылку на запись справочника
За Выборка.Ссылка спасибо,это понятно. Я не очень 1С — ник. Так что плаваю в структуре языка. А ППЦ в голове у Defender aka
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Помогаю со студенческими работами здесь
Объектно-ориентированный аналог телефонного справочника: поиск по нескольким параметрам одновременно
Здравствуйте! Помогите, пожалуйста, с задачей!
Создать объектно-ориентированный аналог…
Выбор справочника
Добрый день! Пытаюсь реализовать выбор нужного мне справочника, задача стоит если значение…
Хитрый выбор из справочника
Подскажите как сообразить следующий выбор.
Есть вот такой пиклист, с помощью него происходит…
Выбор значаний из справочника
Добрый день!
Скажите, пожалуйста, как решить такую проблему.
Есть документ, в поле которого…
Искать еще темы с ответами
Или воспользуйтесь поиском по форуму:
2
-
Приветствую
Конфа 1С 8.3 БП 3.0Загрузка документа из Excel
в обработке требуется произвести поиск на наличие имеющейся номенклатуры по наименованию и номеру ГТД
Справочники.Номенклатура.НайтиПоРеквизиту(«НомерГТД»,СтрЗаменить(СтрокаТабЧасти.ГТД,» «,» «)); — ничего не дает
пробую так но Выборка все равно пустая((
код:
Запрос = Новый Запрос(«Запрос»);
Запрос.Текст = «
|ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &Наименование
| И Номенклатура.НомерГТД = &НомерГТД
|»;
Запрос.Параметры.Вставить(«Наименование», Справочники.Номенклатура.НайтиПоНаименованию(СтрЗаменить(СтрокаТабЧасти.НоменклатураФайла,» «,» «),Ложь));
Запрос.Параметры.Вставить(«НомерГТД», Справочники.НомераГТД.НайтиПоКоду(СтрЗаменить(СтрокаТабЧасти.ГТД,» «,» «),Ложь));Выборка = Запрос.Выполнить().Выбрать();
пока Выборка.Следующий() цикл
КонецЦикла; -
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
Видимо номер ГТД имеет ссылочный тип, а вы строку используете.
-
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
Думаю что ошибка тут:
Запрос.Параметры.Вставить("НомерГТД", Справочники.НомераГТД.НайтиПоНаименованию(СтрЗаменить(СтрокаТабЧасти.ГТД," "," "),Ложь))
Вы походу путаете код и наименование.
-
нет не путаю, почему то выборка пустая хотя номенклатура с наименованием и ГТД есть в справочнике
-
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
У вас код элемента справочника ГТД и те, что в экселе, совпадают ????????????
-
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
-
Offline
Tiger86
Модераторы
Команда форума
Модератор- Регистрация:
- 24 мар 2011
- Сообщения:
- 6.407
- Симпатии:
- 108
- Баллы:
- 104
вообще начнем с того, что
метода Вставить что то я не нашла в СП…— Объединение сообщений, 8 май 2014 —
параметры задавайте как
Запрос.УстановитьПараметр("ИмяПараметра", ЗанчениеПараметра);
-
даже через Запрос.УстановитьПараметр не хочет зараза)
выбираю всю номенклатуру, устанавливаю параметр, а выводиться вся номенклатура все равно(
-
решил, в параметре НомерГТД указал
параметр Наименовании не хочет цеплять нивкакую)