При переходе на современную платформу «1С:Предприятие 8» перед небольшими торговыми компаниями (штат до 15 человек, в офисе работают 6 сотрудников, а в программе одновременно находятся 2–3 пользователя) часто встает дилемма: какую конфигурацию выбрать, чтобы она не была избыточной, но при этом закрывала все критически важные бизнес-процессы? Основной выбор обычно разворачивается между тремя решениями: «1С:Бухгалтерия» (БП), «1С:Управление нашей фирмой» (УНФ) и «1С:Управление торговлей» (УТ). Если бухгалтерский учет ведется обособленно, то БП сразу отходит на второй план. Давайте подробно проанализируем, как сделать правильный выбор между УТ и УНФ, а также разберем, как решить одну из самых частых и «болезненных» задач руководства — жесткий запрет продаж ниже себестоимости или закупочной цены.
Для того чтобы сделать осознанный выбор, проанализируем ключевые особенности обеих систем применительно к небольшому оптовому бизнесу:
Эта конфигурация позиционируется как единое решение для малого бизнеса («всё в одной коробке»). Здесь есть CRM, продажи, закупки, склад, учет денежных средств, а также базовые блоки для расчета зарплаты менеджеров и анализа финансового результата (баланс, прибыли и убытки). Программа относительно «легкая», не требует мощных серверов и отлично работает в файловом режиме или в облачном сервисе 1С:Фреш.
Однако, как отмечают практики, интерфейс и логика УНФ существенно отличаются от классических учетных систем 1С. Для некоторых пользователей она кажется непривычной и неудобной. Кроме того, в базовой поставке механизмы жесткого контроля цен и работы со сложными скидками здесь развиты слабее, чем в старших решениях.
Это мощный промышленный стандарт для автоматизации торгового учета. Программа содержит глубоко проработанные механизмы ценообразования, гибкие автоматические и ручные скидки, соглашения с клиентами, детальный партионный учет и развитый блок складской логистики (включая адресное хранение).
Главные минусы УТ 11 для совсем небольшой компании — это ее высокая требовательность к системным ресурсам и сложность освоения. Архитектурно она гораздо «тяжелее» УНФ, и для ее комфортной работы (даже на 3 пользователя) крайне желательно использовать клиент-серверный вариант работы с СУБД на быстром оборудовании.
Очень часто руководители небольших компаний требуют внедрить жесткое ограничение: запретить проведение и печать расходных накладных, если цена продажи оказывается ниже определенного порога (например, ниже цены закупки или себестоимости). Рассмотрим, как это можно реализовать технически.
Сразу выясним причину, почему контролировать именно реальную себестоимость в момент выписки документа в режиме реального времени — это технически неверный путь. В системах 1С окончательная себестоимость партии рассчитывается только при проведении регламентной операции «Закрытие месяца» (с учетом доп. расходов, транспортных затрат и партионных корректировок). В течение дня менеджеры видят лишь предварительную оценку. Пытаясь заблокировать проведение накладной по динамической себестоимости, мы неизбежно столкнемся с постоянными блокировками документов из-за копеечных погрешностей или изменения последовательности документов задним числом.
Поэтому правильным решением является контроль цен по плановым или фактически известным прайсовым показателям (например, по цене последней закупки).
В конфигурации «1С:Управление торговлей 11» задача контроля цен решается штатными средствами без изменения кода программы. Разберем этот процесс по шагам:
Заполнять по данным ИБ (информационной базы) или установим динамическую наценку на цену закупки: Наценка на другой вид цен (Закупочная + 5%).После выполнения этих настроек система будет вести себя следующим образом: если менеджер попытается вручную указать в документе РеализацияТоваровУслуг или ЗаказКлиента цену ниже установленной минимальной, программа физически заблокирует проведение документа и выдаст ошибку о нарушении условий продаж. Провести документ сможет только руководитель или пользователь с полными правами.
Если типовых механизмов контроля цен недостаточно (например, нам нужно сравнивать цену продажи строго с ценой из последнего приходного документа поставщика непосредственно в момент проведения накладной), мы можем реализовать простую программную проверку. Рассмотрим пример кода, который можно внедрить в модуль объекта документа продажи (или реализовать через механизм расширений, что более предпочтительно, так как конфигурация останется на поддержке).
Проанализируем пример кода для проверки цен в документе реализации:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Выполняем проверку только при непосредственном проведении документа
Если РежимПроведения Тогда
Для Каждого СтрокаТЧ Из Товары Цикл
// Получаем последнюю известную цену закупки для текущего товара
ПоследняяЗакупочнаяЦена = ПолучитьПоследнююЗакупочнуюЦену(СтрокаТЧ.Номенклатура);
// Если цена продажи оказалась ниже закупочной - блокируем проведение
Если СтрокаТЧ.Цена < ПоследняяЗакупочнаяЦена Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Внимание! Товар """ + СтрокаТЧ.Номенклатура + """ продается в убыток! " +
"Цена продажи (" + СтрокаТЧ.Цена + ") ниже закупочной (" + ПоследняяЗакупочнаяЦена + ").";
Сообщение.Поле = "Товары[" + Формат(СтрокаТЧ.НомерСтроки - 1, "ЧГ=0") + "].Цена";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина; // Отменяем проведение документа
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Для обеспечения работы этого алгоритма нам потребуется вспомогательная функция, которая быстро получает цену последнего поступления из регистра сведений или документов закупки. Посмотрим на пример реализации такой функции:
Функция ПолучитьПоследнююЗакупочнуюЦену(ТекущаяНоменклатура) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура И ВидЦены = &ВидЦеныЗакупки) КАК ЦеныНоменклатурыСрезПоследних";
// Задаем параметры запроса
Запрос.УстановитьПараметр("Номенклатура", ТекущаяНоменклатура);
// В реальной базе здесь должен быть ваш предопределенный или настроечный вид цены закупки
Запрос.УстановитьПараметр("ВидЦеныЗакупки", Справочники.ВидыЦен.НайтиПоНаименованию("Закупочная"));
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Цена;
КонецЕсли;
Возврат 0; // Если цена закупки не найдена, считаем ее равной нулю
КонецФункции
Рассмотрим важный организационный момент, о котором часто забывают руководители на этапе проектирования системы. В реальной торговой практике периодически возникают ситуации, когда продать товар в минус действительно необходимо:
Если внедрить жесткий запрет «намертво», работа менеджеров в такие моменты будет полностью парализована. Правильным решением будет организация двухуровневой системы авторизации. При попытке продать товар ниже минимальной цены программа должна не просто выдавать ошибку, а отправлять запрос на согласование руководителю (в УТ 11 для этого используется типовой бизнес-процесс согласования цен, а в УНФ это можно реализовать через доработку отправки уведомлений в Telegram или на почту).
Для небольшой оптовой компании из 10–15 человек оптимальным выбором станут конфигурации «1С:Управление нашей фирмой» или «1С:Управление торговлей».
Выбирайте 1С:УНФ, если вам нужна простая, быстрая в освоении и нетребовательная к оборудованию программа, которая помимо торговли закроет задачи CRM и управленческого баланса, а контроль цен вы готовы настроить по упрощенной схеме через виды цен продажи.
Выбирайте 1С:УТ 11, если перед вами стоят жесткие задачи контроля цен, разграничения прав менеджеров, работы по сложным индивидуальным соглашениям с покупателями и вы готовы инвестировать ресурсы в хорошее серверное оборудование и регулярное обслуживание системы квалифицированным специалистом.