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