Как исправить некорректную выгрузку НДС при обмене 1С:Торговля и Склад 7.7 с 1С:Бухгалтерия 3.0?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Обмен данными между устаревшими конфигурациями на платформе 1С:Предприятие 7.7 и современными базами на платформе 1С:Предприятие 8.3 — это классическая задача, с которой до сих пор сталкиваются многие специалисты. Одним из самых популярных направлений является перенос документов из 1С:Торговля и Склад 7.7 (ТиС) в 1С:Бухгалтерия предприятия 3.0 (БП).

Очень часто при таком обмене возникает неприятная проблема: в документах поступления или реализации, которые в ТиС 7.7 были оформлены без налога (со статусом «Без НДС»), после загрузки в БП 3.0 автоматически устанавливается ставка 18% или 20%, и программа начинает рассчитывать сумму налога. Давайте детально проанализируем ситуацию, выясним техническую причину этой ошибки и разберем по шагам, как исправить ее раз и навсегда с помощью настройки правил обмена.

Выясняем техническую причину проблемы

Для начала рассмотрим, как устроены механизмы работы с НДС в конфигурации Торговля и Склад 7.7. В документах поступления и реализации за расчет налогов отвечают флаги в шапке документа: УчитыватьНДС и СуммаВключаетНДС.

Когда пользователь в интерфейсе 1С 7.7 снимает флаг «Учитывать НДС» (или выбирает режим «Без НДС»), форма документа визуально скрывает колонку со ставками и суммами НДС. Однако на уровне базы данных автоматической очистки табличной части не происходит! В строках документа в реквизите СтавкаНДС физически остаются ранее выбранные значения (например, ссылка на ставку 18% или 20%).

Стандартные правила обмена (типовые правила от релиза 997 и аналогичные) выгружают табличные части документов построчно. Правило конвертации свойства (ПКС) для реквизита СтавкаНДС считывает данные напрямую из базы 1С 7.7. Поскольку там осталось старое значение «18%» или «20%», именно оно записывается в файл выгрузки XML. При импорте в Бухгалтерию предприятия 3.0 объект создается с этой ставкой, и принимающая конфигурация честно рассчитывает сумму налога, игнорируя тот факт, что в исходном документе НДС не учитывался.

Решение проблемы через «1С:Конвертация данных 2.1» (КД 2.1)

Чтобы исправить это поведение правил обмена, нам потребуется внести изменения в ПКС (Правила конвертации свойств) для документов. Нам нужно добавить проверку флага УчитыватьНДС в обработчик события при выгрузке строк табличной части. Выполним этот процесс по шагам.

Шаг 1. Загрузка правил обмена в КД 2.1

  1. Запустите информационную базу «Конвертация данных 2.1».
  2. Перейдите в меню «Загрузка правил обмена» и выберите ваш XML-файл правил (обычно это типовые правила, используемые обработкой выгрузки).
  3. Выполните чтение правил в конфигурацию КД.

Шаг 2. Поиск целевых документов и их свойств

Нам необходимо отредактировать ПКО (Правила конвертации объектов) для всех документов, где возникает данная проблема. Чаще всего это касается следующих пар объектов:

Рассмотрим процедуру изменения на примере документа ПоступлениеТМЦ:

  1. В КД 2.1 перейдите в список «Правила конвертации объектов».
  2. Найдите ПКО для документа ПоступлениеТМЦ и откройте его.
  3. Перейдите на вкладку «Правила конвертации свойств».
  4. Найдите группу свойств табличной части (обычно это Товары).
  5. Внутри этой табличной части найдите строку свойства СтавкаНДС (где Источник: СтавкаНДС, а Приемник: СтавкаНДС).
  6. Двойным кликом откройте настройки этого ПКС.

Шаг 3. Написание кода обработчика события «Перед выгрузкой»

Поскольку выгрузка данных инициируется на стороне старой платформы 1С 7.7, код обработчика должен быть написан строго на встроенном языке версии 7.7. Перейдите на вкладку «Перед выгрузкой» в свойствах ПКС и вставьте следующий программный код:


// ОбъектИсточник — это контекст выгружаемого документа 7.7
Если ОбъектИсточник.УчитыватьНДС = 0 Тогда
    // Если в документе НДС не учитывается, принудительно подставляем "Без НДС"
    СпрСтавки = СоздатьОбъект("Справочник.СтавкиНДС");
    Если СпрСтавки.НайтиПоНаименованию("Без НДС", 0, 1) = 1 Тогда
        Значение = СпрСтавки.ТекущийЭлемент();
    Иначе
        // На случай, если элемент называется иначе, передаем пустое значение
        Значение = ПолучитьПустоеЗначение("Справочник.СтавкиНДС");
    КонецЕсли;
КонецЕсли;

Проанализируем этот код подробнее. Переменная ОбъектИсточник хранит ссылку на выгружаемый документ. Мы проверяем реквизит шапки УчитыватьНДС. Если он равен 0, мы переопределяем выгружаемое значение переменной Значение (именно она отвечает за то, что пойдет в XML-файл). Мы ищем в справочнике ставок элемент с наименованием «Без НДС» и передаем его. Если элемент не найден, передается пустое значение, которое система на стороне приемника сможет правильно интерпретировать.

Повторите эти действия для всех остальных документов продажи и поступления, где наблюдается аналогичное поведение.

Шаг 4. Настройка сопоставления значений справочника и перечисления

Чтобы переданное из 1С 7.7 значение «Без НДС» было корректно распознано в 1С 8.3, необходимо проверить правила конвертации самих значений:

  1. В КД 2.1 найдите ПКО для справочника ставок: СтавкиНДС (ТиС 7.7) → СтавкиНДС (БП 3.0, в восьмерке это перечисление).
  2. Перейдите во вкладку «Конвертация значений».
  3. Убедитесь, что значение справочника 7.7 "Без НДС" сопоставлено со значением перечисления 8.3 — БезНДС. Если этого сопоставления нет, обязательно добавьте его вручную, иначе при импорте программа 1С 8.3 подставит дефолтную ставку по умолчанию.

Корректировка суммовых показателей при выгрузке

Принудительное изменение ставки НДС в правилах обмена может повлечь за собой расхождения в копейках или итоговых суммах документов. Например, если в исходном документе ТиС 7.7 был установлен флаг СуммаВключаетНДС = 1, но при этом НДС не должен учитываться, в БП 3.0 могут некорректно рассчитаться поля Сумма и Всего в табличной части.

Чтобы этого избежать, рекомендуется настроить ПКС для свойства Сумма (из ТЧ документа). Откройте свойства ПКС Сумма и в обработчике «Перед выгрузкой» пропишите следующую логику:


// Если НДС убирается, то Сумма должна быть равна Всего (сумме с НДС)
Если (ОбъектИсточник.УчитыватьНДС = 1) И (ОбъектИсточник.СуммаВключаетНДС = 0) Тогда
    // Стандартный расчет, если НДС начисляется сверху
    Значение = Источник.Сумма;
ИначеЕсли ОбъектИсточник.УчитыватьНДС = 0 Тогда
    // Если НДС нет, то сумма в БП 3.0 должна идти без выделения налога 
    // и быть равной полной стоимости строки (в ТиС 7.7 это реквизит "Всего")
    Значение = Источник.Всего; 
КонецЕсли;

Этот простой шаг гарантирует, что итоговые суммы в документах обеих баз сойдутся с точностью до копейки, исключая расхождения из-за округлений.

Альтернативный быстрый метод (модификация V77Exp.ert)

Если у вас нет возможности использовать конфигурацию «Конвертация данных 2.1» (например, нет под рукой чистой базы или программист не умеет работать в КД), вы можете внести изменения напрямую во внешнюю обработку выгрузки (обычно это файл V77Exp.ert или специализированная выгрузка из ТиС).

В кодовой части обработки найдите место, где происходит выборка строк табличной части документа и заполнение структуры для экспорта. Перед выгрузкой реквизита ставки добавьте аналогичное условие:


// Прямая корректировка переменной перед записью в XML-поток
Если Документ.УчитыватьНДС = 0 Тогда
    ВыгружаемаяСтавка = ПолучитьПустоеЗначение("Справочник.СтавкиНДС");
Иначе
    ВыгружаемаяСтавка = ТабличнаяЧасть.СтавкаНДС;
КонецЕсли;

Этот способ является более быстрым («костылем»), но учтите, что при любом обновлении типовой обработки выгрузки ваши изменения затрутся. Поэтому наиболее правильным и надежным методом остается редактирование правил обмена в КД 2.1.

После внесения правок обязательно сохраните правила из КД 2.1 в XML-файл, укажите его в обработке выгрузки в ТиС 7.7 и проведите тестовый обмен на копиях баз данных. Теперь документы со снятым флагом НДС будут загружаться в Бухгалтерию 3.0 корректно.

← На главную