Документ «Операция (бухгалтерский и налоговый учёт)»
«Операция» — это ручной ввод проводок: бухгалтер сам задаёт Дт/Кт, субконто и суммы в двух таблицах — бухгалтерский учёт (регистр Типовой) и налоговый учёт (регистр Налоговый). В отличие от типовых документов, проводки не вычисляются программой — нет процедуры ОбработкаПроведения, движения вы вводите вручную. Используется для нестандартных операций, исправления ошибок, сторно и заполнения по шаблонам из справочника «Типовые операции». В разделе «Закрытие месяца» — это инструмент «дозаписать то, что не сделали типовые документы».
🎯 Что это и зачем
Большинство проводок в Бухгалтерии для Казахстана формируют типовые документы (реализация, поступление, начисление зарплаты, амортизация, закрытие месяца) — там Дт/Кт собирает программа по учётной политике. Но всегда остаётся хвост операций, которые ни один типовой документ не закрывает:
- списание расходов будущих периодов вручную;
- исправление ошибки прошлого периода (сторно неверной проводки);
- доначисление/корректировка налогов, перенос сальдо между счетами;
- редкие хозяйственные ситуации, под которые нет отдельного документа;
- повторяющиеся «полуавтоматические» проводки по шаблону (типовой операции).
Для всего этого служит документ «Операция (бухгалтерский и налоговый учёт)» (метаданные — Документ.ОперацияБух). Его ключевая особенность: счета Дт/Кт задаёт человек, а не алгоритм. Программа лишь помогает — подставляет субконто по видам субконто счёта, переносит проводки из БУ в НУ по таблице соответствия, ставит знак «минус» при сторно и проверяет заполнение.
Чем «Операция» отличается от «Закрытия месяца». «Закрытие месяца» (
Документ.ЗакрытиеМесяца) — это регламентный документ-дирижёр: он запускает набор регламентных операций (амортизация, переоценка валюты, расчёт себестоимости, финансовый результат, КПН) и формирует их проводки автоматически. «Операция» — это ручной документ для одной конкретной хозяйственной записи, которую вы вводите сами. Они дополняют друг друга: то, что не закрыл регламент, добивают «Операцией».
Кто работает: главный бухгалтер и опытные бухгалтеры — ручной ввод проводок требует понимания плана счетов и корреспонденций. Частота — по необходимости (чаще всего на закрытии периода).
🧭 Где найти
Раздел «Операции» → пункт «Операции (бухгалтерский и налоговый учёт)» (журнал операций). Новый документ — кнопкой «Создать». Список операций также доступен из «Журнала операций», где видны проводки всех документов.
navigation-map.json маршрут для Документ.ОперацияБух отсутствует (есть только Документ.ЗакрытиеМесяца → раздел «Операции»). Точное название пункта меню во Fresh нужно сверить в интерфейсе — оно может отличаться («Операции», «Операции, введённые вручную», «Журнал операций»). Раздел определён как «Операции» по принадлежности к подсистеме регламентированного учёта. См. поле issues.👤 Часть 1. Для пользователя
Проходим по шагам: от пустого документа до проведённой ручной операции, плюс сторно и заполнение по типовой операции.
Урок 1. Ручная операция (ввод проводок руками)
Когда: нужно внести проводку, которую не делает ни один типовой документ.
Шаг 1. Создаём документ
Раздел «Операции» → «Операции (бух. и налог. учёт)» → «Создать». Откроется форма операции с двумя вкладками движений: «Бухгалтерский учёт» (регистр Типовой) и «Налоговый учёт» (регистр Налоговый).
Шаг 2. Заполняем шапку
- Организация — подставится основная или выбираем вручную (обязательно).
- Дата — дата операции; определяет учётный период (по умолчанию — текущая).
- Содержание — текстовое описание («Списание РБП за июнь»). Попадёт в проводки и в печатную «Бухгалтерскую справку».
- Структурное подразделение — при необходимости (для аналитики и контроля доступа).
Шаг 3. Вводим проводки БУ (вкладка «Бухгалтерский учёт»)
Кнопкой «Добавить» создаём строку и заполняем: - Счёт Дт и Счёт Кт — из плана счетов КЗ (например, Дт 7210 «Административные расходы» — Кт 1610 «Краткосрочные авансы выданные»; банк — 1030, касса — 1010). - Субконто Дт 1–3 / Субконто Кт 1–3 — программа покажет только те субконто, которые заданы для выбранного счёта (контрагент, договор, статья затрат и т. д.). - Сумма — сумма проводки в тенге. - Количество, Валюта, Валютная сумма — появляются, только если счёт количественный/валютный.
Шаг 4. Налоговый учёт (вкладка «Налоговый учёт») — при необходимости
Если операция отражается и в НУ (учёт КПН), переходим на вкладку «Налоговый учёт». Можно ввести строки вручную или нажать «Заполнить НУ из БУ» — программа перенесёт проводки БУ в НУ по таблице соответствия счетов. - В НУ для каждого заполненного счёта обязателен вид учёта: Вид учёта Дт (если задан Счёт Дт) и Вид учёта Кт (если задан Счёт Кт). Это налоговые «виды учёта» (например, относимый/не относимый на вычеты) — без них документ не проведётся.
Шаг 5. Проводим
«Провести» или «Записать и закрыть». Сумма всех проводок по дебету БУ автоматически попадёт в реквизит «Сумма операции» в шапке (для контроля). Проверить результат — отчётами «Оборотно-сальдовая ведомость», «Карточка счёта» или печатной формой «Бухгалтерская справка (С-1)» (меню «Печать»).
Урок 2. Сторно / исправление ошибки
Когда: нужно отменить ошибочную проводку или скорректировать ранее проведённый документ.
- В журнале операций (или из исходного документа) выбираем команду создания сторно/корректировки ранее введённого документа.
- Программа создаёт новую операцию, заполняет реквизит «Сторнируемый документ» (он становится обязательным) и копирует проводки исходного документа.
- Суммы корректировки вводятся со знаком, отменяющим исходное движение (сторно «красным»), либо как разница до правильного значения.
- Проводим — движения исходной записи будут скорректированы в регистрах БУ и НУ.
Корректировка). Если вы заполняете операцию обычным способом «Вручную», ссылка на сторнируемый документ сбрасывается автоматически при записи.Урок 3. Заполнение по типовой операции (шаблон)
Когда: операция повторяется из месяца в месяц (списание, перераспределение) — её удобно описать один раз шаблоном.
- Открываем справочник «Типовые операции» → выбираем нужный шаблон → команда создания операции на основании.
- Программа спросит параметры (например, Контрагент, Договор, Сумма) — заполняем их в форме запрашиваемых параметров.
- По формулам шаблона программа сама заполнит проводки БУ и НУ, подставив параметры (см. Часть 2 — это делает процедура
ЗаполнитьНаОснованииТиповойОперации). - Проверяем заполненные проводки, при необходимости правим суммы/субконто и проводим.
🛠 Часть 2. Для программиста
Источник: реальный код релиза 3.0.72.1 (Documents/ОперацияБух/Ext/ObjectModule.bsl), плюс разбор objects/Документ_ОперацияБух.md и business-logic/Документ_ОперацияБух_*.md.
Структура объекта
Ключевой реквизит шапки (обязательный — ShowError): Организация. Условно обязательный (ShowError только в режиме корректировки): СторнируемыйДокумент. Прочие реквизиты — DontCheck: Дата, Номер, Содержание, СуммаОперации (вычисляемая, сумма по дебету БУ), ТиповаяОперация, СтруктурноеПодразделение, Ответственный, Автор, Комментарий, СпособЗаполнения (служебное: "Вручную" / "Корректировка" / др.).
Наборы движений (вводятся пользователем, НЕ вычисляются кодом):
- Движения.Типовой — регистр бухгалтерии РегистрБухгалтерии.Типовой (БУ): СчетДт, СчетКт, СубконтоДт1..3, СубконтоКт1..3, Сумма, Количество*, Валюта*, ВалютнаяСумма*, СтруктурноеПодразделениеДт/Кт, НомерЖурнала, Содержание.
- Движения.Налоговый — регистр бухгалтерии РегистрБухгалтерии.Налоговый (НУ): то же + обязательные ВидУчетаДт, ВидУчетаКт.
Служебные табличные части: ЗапрашиваемыеПараметры (Имя/Представление/Значение — для типовой операции), ТаблицаРегистровНакопления и ТаблицаРегистровСведений (актуализируемые списки имён регистров, по которым реально есть движения; заполняются в ПередЗаписью). Через форму настройки документ может писать в десятки прикладных регистров накопления/сведений (НДС, акциз, ОПВ/ИПН, амортизация ОС и т. д.), но это «конструктор» под нетиповые сценарии.
objects/Документ_ОперацияБух.md называет Типовой/Налоговый «AccumulationRegister». Реальный код оперирует ими как регистрами бухгалтерии: в ПередЗаписью стоит проверка ТипЗнч(НаборЗаписей) = Тип("РегистрБухгалтерииНаборЗаписей.Типовой"). Это РегистрБухгалтерии (Дт/Кт-проводки), а не регистр накопления. См. поле issues.Жизненный цикл (обработчики ObjectModule)
| Обработчик | Что делает (по реальному коду 3.0.72.1) |
|---|---|
ОбработкаЗаполнения |
Заполняет шапку (ЗаполнениеДокументов.ЗаполнитьШапкуДокумента + валюта регл. учёта). При основании-структуре — копирует свойства. При основании-документе — копирует реквизиты (кроме Дата/Номер/Проведён/Автор/Ответственный), формирует «Содержание: …», ставит СторнируемыйДокумент и СпособЗаполнения = "Корректировка" |
ПриКопировании |
Ставит Дата = НачалоДня(ТекущаяДатаПользователя()) |
ОбработкаПроверкиЗаполнения |
Если в НУ есть строки — построчная проверка: при заполненном СчётДт/СчётКт обязателен ВидУчётаДт/ВидУчётаКт. Вне режима корректировки из проверки исключается СторнируемыйДокумент |
ПередЗаписью |
Главная серверная логика (см. ниже): штампует Организацию/Период в наборы, чинит валюту проводок при выключенном валютном учёте, актуализирует списки регистров, сбрасывает СторнируемыйДокумент при способе «Вручную», синхронизирует активность движений с пометкой удаления |
ОбработкаПроведения |
Отсутствует. Документ не вычисляет проводки — движения формирует пользователь в табличных частях. Это принципиальное отличие от типовых документов |
Экспортная процедура ЗаполнитьНаОснованииТиповойОперации(ТО, Очистить = Истина) — движок заполнения проводок по шаблону типовой операции (формулы через Выполнить()).
Как формируется проведение — реальный код (3.0.72.1)
Главное и контринтуитивное: в модуле объекта нет ОбработкаПроведения. Проводки — это содержимое наборов Движения.Типовой и Движения.Налоговый, которое вводит пользователь (или заполняет типовая операция). Вся серверная «магия» при записи сосредоточена в ПередЗаписью — она готовит уже введённые движения к записи, но не придумывает счета Дт/Кт.
Источник: ObjectModule.bsl, процедура ПередЗаписью (стр. 96), сокращённо по ключевым ветвям:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат; // при загрузке обмена — пропуск логики
КонецЕсли;
Для Каждого НаборЗаписей ИЗ Движения Цикл
Если НаборЗаписей.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
ПустаяТаблица = НаборЗаписей.ВыгрузитьКолонки();
ЕстьОрганизация = ПустаяТаблица.Колонки.Найти("Организация") <> Неопределено;
ЕстьПериод = ПустаяТаблица.Колонки.Найти("Период") <> Неопределено;
Если НЕ (ЕстьОрганизация ИЛИ ЕстьПериод) Тогда
Продолжить;
КонецЕсли;
ТаблицаДвижений = НаборЗаписей.Выгрузить();
Если ЕстьОрганизация Тогда
ТаблицаДвижений.ЗаполнитьЗначения(Организация, "Организация"); // штамп организации
КонецЕсли;
Если ЕстьПериод Тогда
ТаблицаДвижений.ЗаполнитьЗначения(Дата, "Период"); // штамп периода = Дата документа
КонецЕсли;
// Для проводок БУ при ВЫКЛЮЧЕННОМ валютном учёте — проставить валюту регл. учёта
Если ТипЗнч(НаборЗаписей) = Тип("РегистрБухгалтерииНаборЗаписей.Типовой") Тогда
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьВалютныйУчет") Тогда
ВалютаУчета = ОбщегоНазначенияБКВызовСервераПовтИсп.ПолучитьВалютуРегламентированногоУчета();
Для Каждого Проводка Из ТаблицаДвижений Цикл
Если Проводка.СчетДт.Валютный Тогда
Проводка.ВалютаДт = ВалютаУчета;
Проводка.ВалютнаяСуммаДт = Проводка.Сумма;
КонецЕсли;
Если Проводка.СчетКт.Валютный Тогда
Проводка.ВалютаКт = ВалютаУчета;
Проводка.ВалютнаяСуммаКт = Проводка.Сумма;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
НаборЗаписей.Загрузить(ТаблицаДвижений);
// Актуализируем списки регистров, по которым реально есть движения
ИмяРегистра = НаборЗаписей.Метаданные().Имя;
Если Метаданные.РегистрыНакопления.Содержит(НаборЗаписей.Метаданные()) Тогда
ДобавитьРегистрНакопления(ИмяРегистра);
ИначеЕсли Метаданные.РегистрыСведений.Содержит(НаборЗаписей.Метаданные()) Тогда
ДобавитьРегистрСведений(ИмяРегистра);
КонецЕсли;
КонецЦикла;
Если СпособЗаполнения = "Вручную" Тогда
СторнируемыйДокумент = Неопределено; // ручной ввод не является корректировкой
КонецЕсли;
СинхронизироватьАктивностьДвиженийСПометкойУдаления();
КонецПроцедуры
Разбор по шагам:
- Штамп шапки в строки движений. В каждый набор, где есть колонки Организация/Период, проставляется Организация из шапки и Период = Дата документа. То есть пользователь вводит проводку, а привязку к организации/дате ставит код — единообразно для всех регистров.
- Валюта при выключенном валютном учёте. Если опция ИспользоватьВалютныйУчет выключена, но в проводке валютный счёт, код подставляет валюту регламентированного учёта и приравнивает валютную сумму к сумме. Это защита от «пустой валюты» на валютных счетах.
- Актуализация списков регистров. ДобавитьРегистрНакопления / ДобавитьРегистрСведений ведут ТаблицаРегистровНакопления / ТаблицаРегистровСведений — фиксируют, по каким регистрам реально записаны движения (без дублей).
- Сброс корректировки. При СпособЗаполнения = "Вручную" ссылка СторнируемыйДокумент обнуляется — обычная ручная операция не считается сторно.
- Активность ↔ пометка удаления. СинхронизироватьАктивностьДвиженийСПометкойУдаления() (стр. 43): помеченный на удаление документ получает неактивные движения, снятие пометки — активирует. Помеченный на удаление не должен иметь активных движений.
Движок типовых операций — ЗаполнитьНаОснованииТиповойОперации (стр. 402)
Заполнение по шаблону — это интерпретатор формул. Для каждой строки шаблона (ТО.Типовой и ТО.Налоговый) счёт, субконто, сумма, количество, валюта вычисляются процедурой ЗначениеПоля(...), которая либо берёт значение из шаблона, либо исполняет формулу через Выполнить():
// ЗначениеПоля: если в шаблоне задана формула — вычислить её, иначе взять значение шаблона
Стр = Стр + "Значение = " + ЗаменитьПараметры(Формула, Проводки) + ";";
Попытка
Выполнить(Стр); // вычисление формулы поля проводки
Исключение
...СообщитьПользователю("Ошибка при вычислении значения поля по формуле: %1 - %2", ...);
КонецПопытки;
Конструкции вида Проводка1.СубконтоДт1 в формулах препроцессятся ЗаменитьПараметры в обращения к набору записей по коду вида субконто (ПланыВидовХарактеристик.ВидыСубконтоТиповые.НайтиПоКоду(...)). Поддерживаются: АлгоритмПриВводе (до), АлгоритмПослеВвода (после), условие строки (ШаблонЗаписи.Условие — не прошедшие условие проводки удаляются), ФормулаСодержания, ФормулаСуммыОперации.
objects/Документ_ОперацияБух.md приписывает ПередЗаписью «обнуление начальных остатков». В реальном коде 3.0.72.1 такой логики нет — ПередЗаписью делает штамп Организации/Периода, фикс валюты, актуализацию регистров, сброс СторнируемыйДокумент и синхронизацию активности. Описание в objects/ неточно. См. поле issues.Движения по регистрам
Документ не имеет фиксированного «профиля движений» — он пишет туда, куда ввёл пользователь.
| Регистр | Тип / движение | Что пишет |
|---|---|---|
Типовой |
РегистрБухгалтерии (БУ) | Проводки Дт/Кт БУ, введённые пользователем (счета, субконто, сумма, валюта, кол-во) |
Налоговый |
РегистрБухгалтерии (НУ) | Проводки Дт/Кт НУ + обязательные ВидУчетаДт/ВидУчетаКт |
| Прикладные регистры накопления/сведений | Накопление / Сведения | Опционально, через форму настройки состава регистров (НДС, акциз, ОПВ/ИПН, амортизация ОС и др.) — для нетиповых сценариев |
Валидации (ОбработкаПроверкиЗаполнения)
- Организация обязательна (
ShowErrorна уровне реквизита). - НУ построчно: при заполненном
СчётДтобязателенВидУчётаДт; при заполненномСчётКтобязателенВидУчётаКт. Иначе — сообщение к полюТабличноеПолеДвиженияНУ[n].ВидУчётаДт/КтиОтказ. СторнируемыйДокументпроверяется на обязательность только в режиме корректировки (еслиСпособЗаполнениясодержит «Корректировка»); иначе исключается из проверяемых реквизитов.- Равенство Дт = Кт по сумме НЕ проверяется — баланс проводки на ответственности пользователя.
- Корректность субконто (соответствие виду субконто счёта) обеспечивается на форме (очистка субконто при смене счёта) — см.
ФормаДокумента.
Зависимости (общие модули)
ЗаполнениеДокументов (заполнение шапки), ОбщегоНазначения / ОбщегоНазначенияБК / ОбщегоНазначенияБКВызовСервераПовтИсп (реквизиты, валюта регл. учёта, наборы по организации/подразделению), СтроковыеФункцииКлиентСервер (парсинг/подстановка в формулах типовых операций), ПланыВидовХарактеристик.ВидыСубконтоТиповые (субконто в формулах), УправлениеДоступом / ОбщегоНазначенияБК.ЗаполнитьНаборыПоОрганизацииСтурктурномуПодразделению (RLS по организации и подразделению). В ManagerModule — печать «Бухгалтерская справка (С-1)» (УправлениеПечатью, привилегированный режим) и блокируемые реквизиты простой версии.
Документ.ЗакрытиеМесяца.
- Нет
ОбработкаПроведения. Не ищите её — движения формирует пользователь/форма. Программная запись операции = заполнитьДвижения.Типовой/Движения.Налоговый, выставитьЗаписывать = Истинанужным наборам, записать сРежимЗаписи = Проведение.ПередЗаписьюобязательна к учёту при программной записи: организация и период проставятся из шапки автоматически; для валютных счетов при выключенном валютном учёте валюта подставится сама.- Типовые операции исполняют код через
Выполнить()— это серверный интерпретатор формул. Любая ошибка формулы не падает, а выдаётся черезСообщитьПользователю. Будьте осторожны с источником формул (по сути — выполнение произвольного кода в шаблоне).- Активность ≠ пометка удаления. Движения можно деактивировать командой формы, не удаляя документ; помеченный на удаление документ обязан иметь неактивные движения (
СинхронизироватьАктивностьДвиженийСПометкойУдаления).- БУ↔НУ независимы, но синхронизируемы кнопкой «Заполнить НУ из БУ» (через регистр соответствия счетов БУ/НУ; логика — в
ФормаДокумента). При наличии данных в НУ запрашивается подтверждение очистки.
🔗 Связанные разделы
- zakrytie-mesyaca — регламентный документ закрытия периода (авто-проводки); «Операция» добивает то, что не закрыл регламент
- tipovye-operacii — справочник шаблонов для заполнения проводок операции по формулам
- buhgalterskaya-spravka-s1 — печатная форма операции (С-1)
- oborotno-saldovaya-vedomost — проверка результата проводок операции
🆕 Что нового
| Версия | Изменение | Тип |
|---|---|---|
| 3.0.72.1 | Первичное описание (на релизе 3.0.72.1) | 🆕 |