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