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