Мы часто сталкиваемся с ситуациями, когда система 1С:Бухгалтерия 3.0, использующая учет товаров по продажным ценам со счетом 42 "Торговая наценка", начинает формировать некорректные проводки в документе "Отчет о розничных продажах". Особенно это актуально, если данные поступают из внешней системы, например, 1С:Розница 2.0, через механизм синхронизации. Разберем эту проблему подробно, выясним возможные причины и предложим шаги по ее диагностике и устранению.
Представим себе типичную ситуацию. Наш розничный магазин использует учет по продажным ценам. Это означает, что товары приходуются на счет 41 по фактической себестоимости, а торговая наценка отражается на счете 42.01. Все настроено корректно, документы поступления формируют нужные проводки, включая наценку.
Однако при формировании документа "Отчет о розничных продажах" (ОРП) мы обнаруживаем, что программа начинает делать странные вещи. Вместо того чтобы просто списать себестоимость и торговую наценку по реализованным товарам, она производит проводки, которые выглядят как переоценка, даже если цена продажи полностью совпадает с розничной ценой, установленной в системе. Это приводит к тому, что учетная стоимость товара на счете 41.11 искажается, и последующие документы, например, поступления, могут ругаться на несоответствие розничной и учетной цены.
Рассмотрим конкретный пример некорректных проводок, которые могут возникнуть при продаже:
Вместо ожидаемых проводок, программа может сформировать что-то подобное:
1. Дебет 90.02.1 Кредит 41.11 - на сумму 15 рублей (списание себестоимости проданного товара)
2. Дебет 41.11 Кредит 42.01 - на сумму 6 рублей (списание наценки)
3. Дебет 90.02.1 Кредит 41.11 - на сумму 6 рублей
В результате такой операции, на счете 41.11 останется 4 штуки товара на сумму 90 рублей. Если мы попытаемся рассчитать среднюю учетную цену, то получим 90 / 4 = 22,50 рубля за штуку. Изначально же цена была 21 рубль. Таким образом, учетная стоимость единицы товара "сбивается", что приводит к дальнейшим проблемам.
Прежде чем углубляться в диагностику проблемы, давайте вспомним, как должен работать учет товаров по продажным ценам с использованием счета 42 в 1С:Бухгалтерии 3.0.
Для ведения учета по продажным ценам необходимо установить соответствующие параметры в разделе "Главное" -> "Настройки" -> "Функциональность", а также указать способ оценки товаров в рознице в учетной политике вашего предприятия: "По продажной стоимости".
Торговые точки (магазины, склады) создаются в системе с указанием типа: "розничный магазин (АТТ)" для автоматизированных торговых точек или "неавтоматизированная торговая точка (НТТ)" для неавтоматизированных. В АТТ учет ведется в разрезе номенклатуры с ежедневным отражением движения, в НТТ – данные отражаются обобщенно, без детализации по товарам. На счете 42 "Торговая наценка" могут быть открыты субсчета, например, 42.1.1 "Торговая наценка в автоматизированных торговых точках" и 42.2.2 "Торговая наценка в неавтоматизированных торговых точках".
Списание реализованных торговых наценок в 1С:Бухгалтерии 3.0 может происходить двумя способами, в зависимости от настроек учетной политики:
Проблемы с некорректным расчетом торговой наценки могут возникать, если товар был продан со скидкой. В таком случае в "Отчете о розничных продажах" может формироваться проводка по сторнированию наценки на сумму скидки.
Чтобы найти корень проблемы, предлагаем последовательно выполнить следующие шаги.
Начнем с базовых настроек, которые могут влиять на поведение программы:
Иногда причиной "блуждающих" ошибок могут быть повреждения данных в регистрах, например, развалившиеся остатки бухгалтерского регистра. Такое может произойти при изменении плана счетов или обновлениях. Запустите тестирование и исправление информационной базы через конфигуратор или с помощью утилиты chdbfl. Обратите внимание на сообщения о "пустых" или "неопределенных" значениях, которые могут быть установлены вместо NULL в неиспользуемых признаках.
Если после выполнения предыдущих шагов проблема сохраняется, обратите внимание на очень важный момент: формируются ли некорректные проводки только в документах, которые пришли обменом (синхронизацией), или также в документах, созданных вручную?
Если при ручном создании документа "Отчет о розничных продажах" и вводе тех же самых позиций проводки формируются корректно (то есть, наценка списывается правильно или вообще не двигается до закрытия месяца), а некорректные проводки возникают только в загруженных документах, то это практически однозначно указывает на проблему в данных, передаваемых при обмене.
Чаще всего, при синхронизации из сторонних программ (например, 1С:Розница) в табличной части "Товары" документа "Отчет о розничных продажах" могут заполняться скрытые или служебные реквизиты, которые не видны пользователю, но влияют на алгоритмы проведения. Наиболее вероятным виновником является реквизит Себестоимость.
Если поле Себестоимость в табличной части товаров документа ОРП заполнено (даже если оно невидимо), программа будет пытаться списать товар именно по этой указанной себестоимости, а не по стандартному алгоритму (например, среднескользящей или ФИФО), который она применяет для товаров на счете 41.11. Это может приводить к расхождениям и "ломать" учетную стоимость, вызывая эффект "переоценки" и ошибочное движение по счету 42, когда его не должно быть.
Чтобы подтвердить гипотезу о некорректном заполнении скрытых реквизитов, выполним следующие действия:
Воспользуемся консолью запросов (или любым другим инструментом для просмотра данных в режиме отладки) для сравнения данных загруженного документа и документа, созданного вручную.
Нас интересуют данные заголовка документа и, особенно, табличной части "Товары". Проанализируйте заполнение всех реквизитов, обращая особое внимание на те, которые могут быть связаны с ценой или себестоимостью.
ВЫБРАТЬ
Док.Ссылка,
Док.Номер,
Док.Дата,
Товары.Номенклатура,
Товары.Количество,
Товары.Цена,
Товары.Сумма,
Товары.Себестоимость // Этот реквизит особенно важен
ИЗ
Документ.ОтчетОРозничныхПродажах КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах.Товары КАК Товары
ПО Док.Ссылка = Товары.Ссылка
ГДЕ
Док.Ссылка В (&СсылкаДокументаИзОбмена, &СсылкаДокументаРучного)
И Товары.Номенклатура = &НужнаяНоменклатура
// Можно добавить другие условия, если нужно
Сравните результаты для документа, загруженного через обмен, и для того, который был создан вами вручную. Если вы обнаружите, что в загруженном документе поле Себестоимость (или аналогичное, связанное с учетной ценой) заполнено, а в ручном документе оно пустое (или равно 0), то вы нашли причину проблемы.
Если у вас есть навыки программирования, пройдитесь отладчиком по алгоритму проведения документа "Отчет о розничных продажах". Это позволит точно определить, откуда берутся те или иные значения, используемые для формирования проводок. Вы сможете увидеть, в какой момент и почему программа решает, что требуется "переоценка" или почему она использует нестандартную себестоимость для списания.
После того как мы выяснили, что некорректные проводки вызваны заполнением служебных реквизитов в загружаемом документе, нам необходимо устранить это заполнение.
Наиболее правильным решением является корректировка правил обмена данными между 1С:Розница и 1С:Бухгалтерия. Необходимо изменить или дополнить правила таким образом, чтобы при выгрузке документа "Отчет о розничных продажах" из Розницы и загрузке его в Бухгалтерию, реквизит Себестоимость (или любые другие, которые не должны влиять на автоматический расчет себестоимости в БП) в табличной части "Товары" оставался незаполненным или был очищен.
В типовых конфигурациях 1С для обмена используются объекты конфигурации "Конвертация данных", "Универсальный обмен данными XML". Вам потребуется доступ к этим правилам (файлам формата .xml) и, возможно, помощь специалиста, если вы не знакомы с их редактированием.
Если изменение правил обмена затруднительно или невозможно в вашей ситуации (например, из-за типового обмена без возможности редактирования), можно рассмотреть вариант пост-обработки загруженных документов.
Разработайте небольшую внешнюю обработку или доработку конфигурации, которая будет запускаться после загрузки документа "Отчет о розничных продажах" (или, например, по расписанию) и очищать значение реквизита Себестоимость в табличной части "Товары" для всех новых или непроведенных загруженных документов. После этого документ можно будет корректно провести.
Пример кода для очистки реквизита в табличной части документа (в рамках обработки):
&НаСервере
Процедура ОчиститьСебестоимостьВДокументах()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОтчетОРозничныхПродажах.Ссылка
|ИЗ
| Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
|ГДЕ
| ОтчетОРозничныхПродажах.Проведен = ЛОЖЬ
| И ОтчетОРозничныхПродажах.Комментарий ПОДОБНО ""%Загружен из Розницы%"" // Пример фильтрации по комментарию обмена";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
// Проверяем, есть ли табличная часть Товары
Если ДокументОбъект.Метаданные().ТабличныеЧасти.Найти("Товары") <> Неопределено Тогда
Для Каждого СтрокаТЧ Из ДокументОбъект.Товары Цикл
// Проверяем, есть ли реквизит Себестоимость в строке табличной части
Если СтрокаТЧ.Метаданные().Реквизиты.Найти("Себестоимость") <> Неопределено Тогда
// Очищаем значение себестоимости
СтрокаТЧ.Себестоимость = 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение Как Искл
Сообщить("Не удалось провести документ " + ДокументОбъект.Номер + " от " + ДокументОбъект.Дата + ": " + Искл.Описание);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Важно: Всегда делайте резервные копии базы перед внесением изменений в правила обмена или код конфигурации.
Для предотвращения подобных ситуаций и обеспечения стабильного учета рекомендуем:
Тщательная проверка настроек, анализ данных, передаваемых при синхронизации, и, при необходимости, точечная корректировка правил обмена или логики проведения документов помогут вам восстановить корректный учет и избежать искажения финансовых показателей.