1с найти по ссылке в запросе
Найти элемент справочника в 1С 8 можно тремя способами:
1) Поиск по коду
Если известен код элемента справочника, и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоКоду(, , , ) менеджера справочника. В простейшем случае необходимо передать данному методу код элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким кодом не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным кодом, то будет возвращен тот, который найден первым.
Описание параметров метода НайтиПоКоду:
- (обязательный). Тип: Число, Строка. Описание: искомый код, строка или число в зависимости от настроек справочника в конфигураторе.
- (необязательный). Тип: Булево. Описание: определяет режим поиска по полному коду, истина — искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом “/”. Значение по умолчанию: Ложь.
- (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
- (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
2) Поиск по наименованию
Если известно наименование элемента справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоНаименованию(, , , ) менеджера справочника. В простейшем случае необходимо передать данному методу наименование элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким наименованием не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным наименованием, то будет возвращен тот, который найден первым.
Описание параметров метода НайтиПоНаименованию:
- (обязательный). Тип: Строка. Описание: строка, содержащая искомое наименование.
- ТочноеСоответствие> (необязательный). Тип: Булево. Описание: определяет режим поиска по полному соответствию, поиск будет успешным, если строка поиска: в случае значения параметра Ложь — будет соответствовать левой части наименования, в случае значения параметра Истина — будет полностью совпадать с наименованием (за исключением “хвостовых” пробелов в наименовании). Значение по умолчанию: Ложь.
- (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
- (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
3) Поиск по произвольному реквизиту
Если известно значение какого либо реквизита справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоРеквизита(, , , ) менеджера справочника. В простейшем случае необходимо передать данному методу имя реквизита, его значение и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким значением указанного реквизита не найден. Следует заметить, что если в справочнике присутствует несколько элементов с таким значением указанного реквизита, то будет возвращен тот, который найден первым.
Имеется запрос простенький запрос:
ВЫБРАТЬ
ПриемНаРаботуВОрганизациюРаботникиОрганизации.ФизЛицо,
ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Организация
ПОМЕСТИТЬ ПриемНаРаботу
ИЗ
Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ПриемНаРаботуВОрганизациюРаботникиОрганизации
ГДЕ
ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Ссылка = &ДокССылка
И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Проведен = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
ЗаявкаНаОткрытиеСчетов.Организация,
ЗаявкаНаОткрытиеСчетов.Дата,
ЗаявкаНаОткрытиеСчетов.Ссылка
ПОМЕСТИТЬ НеВыгруженнаяЗаявка
ИЗ
Документ.ЗаявкаНаОткрытиеСчетов КАК ЗаявкаНаОткрытиеСчетов
ГДЕ
ЗаявкаНаОткрытиеСчетов.ПометкаУдаления = ЛОЖЬ
И ЗаявкаНаОткрытиеСчетов.БанковскийСчет.Ссылка = &БанковскийСчет
И ЗаявкаНаОткрытиеСчетов.БанковскийСчет.Банк.Ссылка = &Банк
И ПОДСТРОКА(ЗаявкаНаОткрытиеСчетов.Комментарий, 0, 6) = &Комментарий
УПОРЯДОЧИТЬ ПО
ЗаявкаНаОткрытиеСчетов.Дата УБЫВ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПриемНаРаботу.ФизЛицо,
НеВыгруженнаяЗаявка.Дата,
НеВыгруженнаяЗаявка.Ссылка
ИЗ
ПриемНаРаботу КАК ПриемНаРаботу
ЛЕВОЕ СОЕДИНЕНИЕ НеВыгруженнаяЗаявка КАК НеВыгруженнаяЗаявка
ПО ПриемНаРаботу.Организация = НеВыгруженнаяЗаявка.Организация
И простое условие:
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать().Следующий();
СсылкаНаДокумент = Выборка.Ссылка;
НовыйДокумент = СсылкаНаДокумент.ПолучитьОбъект();
НовыйДокумент.Дата = Дата;
Иначе
НовыйДокумент = Документы.ЗаявкаНаОткрытиеСчетов.СоздатьДокумент();
НовыйДокумент.Дата = Дата;
КонецЕсли;
НовыйДокумент.Организация = Справочники.Организации.НайтиПоКоду("000000002");
НовыйДокумент.Банк = Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП("Банк для перечисления зарплаты на карточки"));
НовыйДокумент.БанковскийСчет = Справочники.БанковскиеСчета.НайтиПоНаименованию("Зарплатный");
НовыйДокумент.НомерДоговора = "72276141";
НовыйДокумент.Комментарий = "Создан "+ НовыйДокумент.Дата;
Для Каждого Строка из РаботникиОрганизации Цикл
НоваяСтрока = НовыйДокумент.РаботникиОрганизации.Добавить();
НоваяСтрока.ФизЛицо = Строка.ФизЛицо;
ДанныеТекущегоРаботникаОрганизации = Новый Структура("ФизЛицо,ЭмбоссированныйТекст1,ЭмбоссированныйТекст2,ЭмбоссированныйТекст3,КодМиграционногоДокумента,НомерМиграционногоДокумента,Резидент,Гражданство,Должность");
ДанныеТекущегоРаботникаОрганизации.Вставить("ФизЛицо", Строка.ФизЛицо);
ДанныеТекущегоРаботникаОрганизации = ЗаполнитьСтрокуПоФизическомуЛицу(ДанныеТекущегоРаботникаОрганизации);
НоваяСтрока.ЭмбоссированныйТекст1 = ДанныеТекущегоРаботникаОрганизации.ЭмбоссированныйТекст1;
НоваяСтрока.ЭмбоссированныйТекст2 = ДанныеТекущегоРаботникаОрганизации.ЭмбоссированныйТекст2;
НоваяСтрока.ЭмбоссированныйТекст3 = ДанныеТекущегоРаботникаОрганизации.ЭмбоссированныйТекст3;
НоваяСтрока.Резидент = ДанныеТекущегоРаботникаОрганизации.Резидент;
НоваяСтрока.Гражданство = ДанныеТекущегоРаботникаОрганизации.Гражданство;
НоваяСтрока.Должность = ДанныеТекущегоРаботникаОрганизации.Должность;
НоваяСтрока.КодМиграционногоДокумента = ДанныеТекущегоРаботникаОрганизации.КодМиграционногоДокумента;
НоваяСтрока.НомерМиграционногоДокумента = ДанныеТекущегоРаботникаОрганизации.НомерМиграционногоДокумента;
КонецЦикла;
//НовыйДокумент.Записать();
Объект = НовыйДокумент.ПолучитьФорму("ФормаДокумента");
Объект.Открыть();
Ругается на это:
СсылкаНаДокумент = Выборка.Ссылка;
НовыйДокумент = СсылкаНаДокумент.ПолучитьОбъект();
Как будет правильнее получить по ссылке объект, чтобы потом его изменить? Дело в том что я бы мог и без запроса, но мне надо проверить есть ли документ со строкой "Создан" в поле комментарий, если есть то не создавать новый документ а загрузить данные в существующий.
Часто бывает, что в результате обмена данных в 1С 8.3 и 8.2 случаются ошибки, и вместо значения ссылочных данных в полях встречается «Объект не найден», то есть «битые ссылки».
Поиск битых ссылок в 1С запросом
Очень часто встает вопрос: как отобрать элементы с битыми ссылками запросом 1С?
Вопрос решается достаточно легко, рассмотрим его на примере:
необходимо отобрать документы Счет на оплату покупателю, где вместо организации установлена «битая ссылка».
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Первым отбором «НЕ СчетНаОплатуПокупателю.Организация ЕСТЬ NULL» мы определили, что ссылка установлена.
Вторым отбором СчетНаОплатуПокупателю.Организация.Код ЕСТЬ NULL, обращаясь к коду организации по точке, система строит левое соединение, но не находит в таблице организаций такой элемент — возвращает NULL.
Всё получается достаточно просто.
Определение битой ссылки в объектной модели
Если у Вас нет возможности сделать проверку запросом, рекомендую использовать два разных метода. Рассмотрим их на примере, который давали ранее:
Используя ПолучитьОбъект()
При использовании метода «ПолучитьОбъект()» битая ссылка вернет «Неопределено».
Поиск в строке
Этот метод самый простой — поиск строки «Объект не найден» в представлении элемента.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом: (16:bca8000c6efdd52111d8eaba7c9706eb)
Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:
Код 1C v 8.х
Код 1C v 8.х
И последний вариант для проверки в запросах:
ГДЕ Объект.РеквизитОбъекта ЕСТЬ NULL И Не Объект=&ПустаяСсылкаОбъекта
Ниже дана программа для удаления записей регистров, у которых регистратор - битая ссылка, т.е. не существует в базе.
Похожие FAQ
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени В чем разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С 10
Цитата из справки 1С: " По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной . Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Читайте также: