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