Как получить оперативную себестоимость в УТ 11.5 для расчета наценки в заказах клиентов

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

В современных торговых системах на базе 1С:Управление торговлей 11.5 менеджеры по продажам часто сталкиваются с необходимостью видеть актуальную наценку непосредственно в момент формирования заказа (удобно через аналитика цен и остатков в заказе клиента). Основная сложность заключается в том, что полноценная себестоимость в 1С формируется только после выполнения процедуры Закрытие месяца. Рассмотрим, как настроить систему и какие программные методы использовать, чтобы получать максимально приближенные к реальности данные в оперативном режиме.

Анализ проблемы: Почему «СебестоимостьТоваров.Обороты» — это не лучший выбор

Проанализируем типичный подход: создание запроса к виртуальной таблице оборотов регистра накопления СебестоимостьТоваров. На первый взгляд, это кажется логичным, но на практике мы сталкиваемся с рядом проблем:

  1. Незавершенные расчеты: Если документ продажи проведен, но предварительное закрытие месяца еще не отработало, в регистре зафиксируется списание количества без стоимости. При делении суммы на количество мы получим некорректные данные или нулевое значение (в таких случаях лучше выводить информацию о выручке с НДС и без НДС, ценах на дату документа).
  2. Интеркампани (Intercompany): В схемах работы между организациями товар часто продается с одной фирмы, в то время как числится на другой. Без сформированных документов Передача товаров между организациями себестоимость на организации-продавце будет отсутствовать или отображаться как отрицательный остаток, что искажает общую картину.
  3. Производительность: Группировка оборотов за весь период работы базы данных — крайне ресурсоемкая операция, которая будет замедлять работу формы заказа при каждом обновлении данных.

Решение 1: Использование регистра сведений «Стоимость товаров»

Начиная с последних версий УТ 11, разработчики 1С добавили специализированный механизм кэширования себестоимости. Рассмотрим подробнее регистр сведений СтоимостьТоваров. Это «золотой ключик» для решения нашей задачи, позволяющий провести анализ списанной номенклатуры с выводом себестоимости и ценой продажи без закрытия месяца.

Преимущества этого регистра:

Выясним, как правильно обратиться к этим данным. Нам необходимо получить срез последних данных из этого регистра. Пример логики запроса:


ВЫБРАТЬ
    СтоимостьТоваров.Стоимость КАК СтоимостьЕдиницы,
    СтоимостьТоваров.СтоимостьБезНДС КАК СтоимостьБезНДС
ИЗ
    РегистрСведений.СтоимостьТоваров.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК СтоимостьТоваров

Важно помнить, что данные в этом регистре появляются только после того, как регламентное задание Предварительное закрытие месяца успешно завершило расчет. Если данных нет, следует использовать «запасной» вариант — цену последней закупки.

Решение 2: Настройка автоматизации Интеркампани

Разберем ситуацию, когда себестоимость не рассчитывается из-за использования схемы Интеркампани. Если менеджер продает товар, принадлежащий другой организации внутри группы, предварительное закрытие месяца не сможет определить его стоимость, пока не будет зафиксирована передача.

Для решения этой проблемы выполним следующие шаги:

  1. Перейдем в раздел Финансовый результат и контроллингОбслуживаниеРегламентные операции.
  2. Найдем и настроим регламентное задание Формирование передач товаров по данным Интеркампани.
  3. Установим расписание запуска (например, каждые 10–15 минут).

Таким образом, документы передачи будут создаваться оперативно в фоновом режиме. После их создания предварительное закрытие месяца (которое мы тоже запускаем по расписанию раз в 5–10 минут) сможет корректно «протащить» себестоимость от владельца к продавцу и учитывать дополнительные расходы с аналитикой по заказам/реализациям.

Решение 3: Обработка очередей и предварительный расчет

Посмотрим на механизм заданий к расчету — процесс ускоряет оперативный расчет себестоимости в УТ 11. В УТ 11 расчет ведется на основании регистра сведений ЗаданияКРасчетуСебестоимости. Если вы видите, что себестоимость не обновляется, проанализируйте состояние этого регистра. Если в нем скапливаются тысячи записей, значит, фоновое задание не успевает их обрабатывать.

Рекомендуем настроить Предварительное закрытие месяца со следующими параметрами:

Решение 4: Программный алгоритм расчета наценки в Заказе клиента

Рассмотрим, как правильно интегрировать расчет наценки в форму ЗаказКлиента — задача решается через себестоимость и закупочные цены в заказе клиента. Вместо того чтобы вычислять всё в запросе при каждом изменении строки, создадим серверную функцию, которая будет возвращать структуру с данными о себестоимости.

Проанализируем пример кода для заполнения колонки «Наценка»:


&НаСервере
Процедура РассчитатьНаценкуНаСервере(СтрокаТовара)
    
    // 1. Пытаемся получить данные из РС СтоимостьТоваров
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	СтоимостьТоваров.Стоимость КАК Себестоимость
        |ИЗ
        |	РегистрСведений.СтоимостьТоваров.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК СтоимостьТоваров";
    
    Запрос.УстановитьПараметр("Номенклатура", СтрокаТовара.Номенклатура);
    Запрос.УстановитьПараметр("Период", ТекущаяДата());
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() И Выборка.Себестоимость > 0 Тогда
        ТекущаяСебестоимость = Выборка.Себестоимость;
    Иначе
        // 2. Если данных нет, берем цену последней закупки
        ТекущаяСебестоимость = ЦенообразованиеВызовСервера.ПолучитьПоследнююЦенуЗакупки(СтрокаТовара.Номенклатура);
    КонецЕсли;
    
    Если ТекущаяСебестоимость > 0 Тогда
        СтрокаТовара.Наценка = ((СтрокаТовара.Цена - ТекущаяСебестоимость) / ТекущаяСебестоимость) * 100;
    Иначе
        СтрокаТовара.Наценка = 0;
    КонецЕсли;
    
КонецПроцедуры

Важный момент: Если ваша база имеет большой объем данных, выполнение запроса для каждой строки в цикле может замедлить работу. В таком случае лучше собрать все товары из табличной части в массив и получить все цены одним запросом во временную таблицу, а затем распределить их по строкам.

Резюме и практические советы

Подводя итог, отметим основные правила получения оперативной себестоимости в УТ 11.5:

Следуя этим рекомендациям, вы сможете обеспечить менеджеров актуальной информацией о прибыльности сделок без существенного снижения производительности системы. Для этой задачи есть анализ прибыли и рентабельности без закрытия месяца.

← На главную