При работе в конфигурации 1С:Бухгалтерия предприятия 2.0 пользователи часто сталкиваются с ситуацией, когда стандартные механизмы корректировки реализации не позволяют выполнить последовательные изменения в документах. Типичный сценарий: в первой корректировке вы добавляете новую позицию номенклатуры, которой не было в исходной реализации, а во второй корректировке (созданной на основании первой) пытаетесь обнулить или уменьшить количество этой позиции. В этот момент система блокирует проведение документа с ошибкой вида: "Реализовано на ... ед. меньше, чем возвращается". Давайте разберем причины этой проблемы и рассмотрим все возможные способы её решения.
Для того чтобы понять, почему программа выдает ошибку, проанализируем внутреннюю логику проведения документа КорректировкаРеализации. В версии 2.0 архитектура документа жестко привязана к реквизиту ДокументРеализации, который всегда ссылается на самый первый, исходный документ РеализацияТоваровУслуг.
Когда мы создаем вторую корректировку на основании первой, система все равно обращается к корню цепочки. Алгоритм проверки остатков работает следующим образом:
РеализацияТоваровУслуг количество равно нулю, любая попытка установить значение 0 после того, как в первой корректировке было "1", воспринимается кодом проведения как попытка вернуть товар, который никогда не отгружался со склада по данному основанию.Рассмотрим подробнее пути обхода этого системного ограничения.
Если первая корректировка была создана ошибочно (например, товар добавили по ошибке или клиент сразу отказался от него), методологически более верно использовать не вторую корректировку "по согласованию сторон", а механизм исправления. Разберем по шагам, как это сделать:
Корректировка реализации №1 (тот, где мы добавили лишний товар).Корректировка реализации.Этот метод позволяет системе корректно сформировать Исправительный счет-фактуру, что часто является единственно верным решением с точки зрения налогового учета, если ошибка была технической.
В случаях, когда период закрыт или специфика учета требует именно корректировочного счета-фактуры (КСФ), а программа отказывается проводить документ автоматически, мы можем прибегнуть к ручному управлению регистрами. Проанализируем ситуацию: нам нужно, чтобы документ провелся и сформировал печатную форму, даже если алгоритм проверки "считает" иначе.
Для реализации этого метода выполним следующие действия:
41 (или 43) и 90.Важно: этот способ требует высокой квалификации бухгалтера, так как ошибки в ручных правках могут привести к расхождениям в декларации по НДС.
Если цепочка корректировок зашла в тупик, рассмотрим альтернативный вариант оформления — возврат. Технически документ Возврат товаров от покупателя в 1С:Бухгалтерия 2.0 более лоялен к отсутствию связи с конкретной партией реализации.
Алгоритм действий:
Возврат товаров от покупателя.Дт 62.01 Кт 90.01 (сторно) и Дт 90.02 Кт 41.01 (сторно), а также позволит принять НДС к вычету.Этот метод проще с технической точки зрения, так как не требует взлома программной логики проведения, однако он может потребовать ручного заполнения счета-фактуры для отражения в Книге покупок.
Если налоговый период еще не закрыт, самым "чистым" способом с точки зрения базы данных будет удаление промежуточных документов. Выясним причину, по которой это может быть эффективно: программа всегда корректно отрабатывает одну корректировку на основании одной реализации.
Рекомендуемая последовательность:
Реализация товаров и услуг.Таким образом, мы избегаем сложной цепочки зависимостей, в которой 1С:Бухгалтерия 2.0 начинает "путаться" в остатках.
Если вы имеете возможность вносить изменения в конфигурацию, обратите внимание на модуль проведения документа КорректировкаРеализации. В процедуре проверки остатков можно увидеть использование реквизита ДокументРеализации. Для решения проблемы в коде необходимо изменить логику так, чтобы система анализировала остатки не по исходному документу, а по актуальному состоянию регистра Продажи или с учетом всех предыдущих документов корректировки в цепочке.
Пример кода, который часто вызывает затруднения (упрощенно):
// В модуле проведения происходит обращение к исходному документу
Запрос.Текст = "ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Количество
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка = &СсылкаНаРеализацию";
Поскольку этот запрос игнорирует данные из КорректировкаРеализации №1, он возвращает 0 для новых товаров, что и приводит к ошибке при попытке уменьшения количества во втором документе корректировки. Для исправления ситуации без изменения кода используйте Способ 1 или Способ 4.