Работа в программных продуктах на платформе 1С:Предприятие 7.7, особенно в поздних релизах конфигурации «Бухгалтерский учет» (таких как 7.70.650), имеет свои нюансы, связанные с жесткой логикой алгоритмов НДС. Одной из самых неприятных ситуаций является момент, когда при нажатии кнопки «Заполнить» в документе Формирование книги продаж табличная часть остается абсолютно пустой, хотя все счета-фактуры в журнале присутствуют и проведены. Разберем детально, почему это происходит и как мы можем решить эту проблему, особенно если данные были перенесены из сторонних программ (например, из «1С:Торговля и Склад 7.7») некорректно.
Проанализируем ситуацию. В типовой конфигурации 1С 7.7 алгоритм автоматического заполнения книги продаж (процедура Заполнить) опирается на несколько критически важных условий. Главным камнем преткновения часто становится реквизит ДокументОснование в счете-фактуре. Если этот реквизит пуст, стандартный запрос, встроенный в программный код документа, просто «не видит» такие счета-фактуры.
Это происходит потому, что программа пытается восстановить цепочку событий: отгрузка товаров или оказание услуг (первичный документ) → выставление счета-фактуры. Именно из документа-основания система берет данные о ставках НДС, суммах и, что немаловажно, определяет правомерность включения записи в книгу продаж в конкретном периоде. Если при переносе данных из «Торговли» вы перенесли только счета-фактуры и бухгалтерские проводки по счету 68.2, но не перенесли сами документы реализации (акты, накладные), то для системы связь разорвана.
Прежде чем приступать к исправлению кода, проанализируем состояние вспомогательных счетов. В 1С 7.7 учет НДС для книги продаж ведется на специальном забалансовом счете ЗПР («Записи книги продаж»). Рассмотрим алгоритм:
Формирование книги продаж при нажатии кнопки «Заполнить» анализирует остатки и обороты по счету ЗПР в разрезе контрагентов, договоров и счетов-фактур.Выясним причину отсутствия проводок по ЗПР: скорее всего, ваши счета-фактуры были просто записаны или перенесены без проведения, либо их проведение без «Основания» не инициирует запись в этот регистр (счет). Проверить это можно через «Отчет по проводкам», выбрав счет ЗПР за нужный период.
Если документов реализации в базе действительно нет и восстанавливать их вручную не представляется возможным, мы можем применить программную хитрость. Тип реквизита ДокументОснование в счете-фактуре часто позволяет хранить ссылку на саму себя. Рассмотрим, как это реализовать с помощью небольшой внешней обработки:
Нам необходимо создать файл .ert, который переберет все счета-фактуры и пропишет в поле «Документ-основание» ссылку на этот же документ. Посмотрим на пример кода:
Процедура Выполнить()
СФ = СоздатьОбъект("Документ.СчетФактураВыданный");
СФ.ВыбратьДокументы(ДатаНач, ДатаКон);
Пока СФ.ПолучитьДокумент() = 1 Цикл
Если СФ.ДокументОснование.Выбран() = 0 Тогда
СФ.ДокументОснование = СФ.ТекущийДокумент();
СФ.Записать();
// Попробуем перепровести, чтобы сформировались проводки по ЗПР
Попытка
СФ.Провести();
Исключение
Сообщить("Не удалось провести документ: " + СФ);
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важно: Перед выполнением такой операции обязательно создайте резервную копию базы данных! После того как в счетах-фактурах появится хоть какое-то основание, стандартная процедура заполнения книги продаж начнет «видеть» эти документы.
Если мы не хотим «портить» данные в счетах-фактурах сомнительными основаниями, проанализируем второй вариант — создание внешней обработки, которая будет заполнять табличную часть документа Формирование книги продаж напрямую, игнорируя стандартные фильтры. Это более «чистый» путь с точки зрения методологии 1С.
Рассмотрим пошагово, что должна делать такая обработка:
Формирование книги продаж.СчетФактураВыданный за период.Книги продаж.Пример кода для такой обработки:
Процедура ЗаполнитьКнигу(ДокКнигаПродаж)
ДокСФ = СоздатьОбъект("Документ.СчетФактураВыданный");
ДокСФ.ВыбратьДокументы(ДатаНач, ДатаКон);
ДокКнигаПродаж.УдалитьСтроки(); // Очищаем старые записи
Пока ДокСФ.ПолучитьДокумент() = 1 Цикл
// Проверяем, чтобы СФ была проведена
Если ДокСФ.Проведен() = 0 Тогда
Продолжить;
КонецЕсли;
ДокКнигаПродаж.НоваяСтрока();
ДокКнигаПродаж.СчетФактура = ДокСФ.ТекущийДокумент();
ДокКнигаПродаж.ДатаОплаты = ДокСФ.ДатаДок; // Условно ставим дату документа
ДокКнигаПродаж.ВидОперации = "01"; // Обычная реализация
// Заполняем остальные реквизиты из СФ
ДокКнигаПродаж.Всего = ДокСФ.Итого;
ДокКнигаПродаж.НДС = ДокСФ.ИтогоНДС;
ДокКнигаПродаж.ПродажиБезНДС = ДокСФ.Итого - ДокСФ.ИтогоНДС;
КонецЦикла;
ДокКнигаПродаж.Записать();
Сообщить("Табличная часть заполнена успешно!");
КонецПроцедуры
Проанализируем еще один важный момент. В поздних релизах 7.7 (включая .650) критически важен Код вида операции. Даже если вы добавите счета-фактуры вручную или обработкой, убедитесь, что в каждой строке проставлен код (обычно «01» для реализации товаров и услуг). Без этого кода книга продаж может сформироваться корректно «на глаз», но при выгрузке налоговой декларации по НДС возникнут ошибки, так как выгрузка требует наличия КВО для каждой записи в книге.
Выясним еще одну возможную причину. В сообщении автора упоминалось, что галочки «Автообработка НДС» в договорах стоят. Однако в 1С 7.7 существует тонкий момент: если в учетной политике или в константах установлен метод определения налоговой базы «По оплате» (хотя это давно неактуально, настройки могли переехать из старых баз), то Формирование книги продаж будет искать не отгрузки, а факты поступления денежных средств, связанные со счетами-фактурами через основание. Убедитесь, что везде установлен метод «По отгрузке».
Если вы столкнулись с такой ситуацией, рекомендуем следующий алгоритм действий:
Формирование книги продаж напрямую из журнала счетов-фактур.Таким образом, мы выяснили, что отсутствие документов-оснований является критическим препятствием для типовых алгоритмов 1С 7.7, но эта проблема успешно решается с помощью небольших доработок или внешних обработок, позволяющих обойти стандартные ограничения системы.