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