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