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