Документ «Кассовая смена»
«Кассовая смена» — это сервисный (регистрационный) документ фискального учёта: он фиксирует факт открытия и закрытия смены на контрольно-кассовой машине (ККМ/ККТ), число пробитых чеков и фискальных документов, состояние фискального накопителя (ФН) и связь с ОФД. Бухгалтерских проводок не делает и по регистрам не движется — это «карточка» Z-отчёта внутри 1С, а не платёжный документ.
🎯 Что это и зачем
По закону РК розничная торговля за наличный расчёт (и часто — безналичный) ведётся через ККМ с фискальным накопителем, подключённую к оператору фискальных данных (ОФД). Каждый рабочий день кассир открывает смену, в течение дня пробивает чеки, а в конце дня закрывает смену — печатает Z-отчёт. Документ «Кассовая смена» — это отражение этого цикла внутри 1С: на каждую смену ККМ заводится один документ.
Что в нём хранится:
- когда смена открыта и закрыта (НачалоКассовойСмены, ОкончаниеКассовойСмены);
- сколько чеков и фискальных документов пробито (КоличествоЧеков, КоличествоФД);
- что с передачей в ОФД — есть ли непереданные ФД и с какой даты (КоличествоНепереданныхФД, ДатаПервогоНепереданногоФД);
- здоровье ФН — не переполнена ли память, не исчерпан ли ресурс, не пора ли менять накопитель (ПамятьФНПереполнена, РесурсФНИсчерпан, НеобходимаСтрочнаяЗаменаФН);
- полный Z-отчёт в виде XML от ККМ (ФДОЗакрытииСмены) — для аудита и сверки.
Кто работает: кассиры и старшие кассиры/администраторы торговых точек — ежедневно. Документ почти не заполняется руками: его поля приходят из ответа ККМ через подсистему подключаемого оборудования.
🧭 Где найти в программе
Документ относится к подсистеме «Банк и касса» и к подсистеме подключаемого оборудования. В типовой конфигурации он открывается не через обычный журнал в левом меню, а из рабочего места управления кассовыми сменами / подключаемым оборудованием (там, где настроена ККМ). Оттуда видны открытые и закрытые смены, и оттуда же инициируется закрытие активной смены.
navigation-map.json) маршрут для Документ.КассоваяСмена не задан, и в стандартном командном интерфейсе у документа нет фиксированного пункта меню — он открывается из формы списка кассовых смен/рабочего места ККМ. Точный путь в конкретной базе зависит от настроек интерфейса и роли пользователя. Значение fresh_nav во фронтматтере — ориентировочное («Банк и касса» → «Кассовые смены»), проверьте по своей конфигурации и при необходимости поправьте карту навигации.👤 Часть 1. Для пользователя
Идём по жизненному циклу смены: открыли → работали → закрыли → посмотрели Z-отчёт. Большинство шагов выполняет сама ККМ — 1С их регистрирует.
Урок 1. Открытие кассовой смены
Когда: в начале рабочего дня кассира или при первом включении ККМ после закрытия предыдущей смены.
Шаг 1. Открываем смену на ККМ
Открытие смены — это операция на самом фискальном устройстве (через подсистему подключаемого оборудования 1С либо на кассе). ККМ печатает отчёт об открытии смены и возвращает в 1С номер смены и фискальную дату.
Шаг 2. В 1С появляется документ «Кассовая смена»
Документ создаётся (автоматически из ответа ККМ либо вручную в списке) и заполняется: - Организация — владелец ККМ; - КассаККМ — рабочее место/касса, к которой привязана смена; - ФискальноеУстройство — конкретная ККМ из справочника Подключаемое оборудование; - НачалоКассовойСмены — текущие дата и время; - НомерСменыККТ, ДатаСменыККТ — из ответа устройства; - Статус = Открыта.
Шаг 3. Сохраняем
Документ записывается кнопкой «Записать» (или «Записать и закрыть»). Кнопки «Провести» у документа нет — он не проводится.
Урок 2. Закрытие кассовой смены (Z-отчёт)
Когда: в конце рабочего дня/смены кассира, при снятии Z-отчёта.
Шаг 1. Открываем активную смену
Из списка кассовых смен открываем документ со статусом Открыта.
Шаг 2. Нажимаем «Закрыть смену»
На форме документа — кнопка «Закрыть смену». Система спросит подтверждение: «Закрыть кассовую смену?».
Шаг 3. 1С обращается к ККМ
После подтверждения: - документ при необходимости записывается; - 1С определяет имя кассира (через переопределяемый обработчик конфигурации) и отправляет команду закрытия смены на ККМ; - ККМ печатает Z-отчёт и возвращает фискальные данные о закрытии.
Шаг 4. Документ заполняется итогами смены
Из ответа ККМ заполняются: - ОкончаниеКассовойСмены — дата/время закрытия; - КоличествоЧеков, КоличествоФД, КоличествоНепереданныхФД, ДатаПервогоНепереданногоФД; - признаки состояния ФН: ПамятьФНПереполнена, РесурсФНИсчерпан, НеобходимаСтрочнаяЗаменаФН, ПревышеноВремяОжиданияОтветаОФД; - ФДОЗакрытииСмены — полный XML Z-отчёта; - Статус → Закрыта.
После этого документ перечитывается, форма обновляется, появляется уведомление «Смена закрыта».
Урок 3. Просмотр полных фискальных данных (Z-отчёт в деталях)
Когда: нужно свериться по составу Z-отчёта, разобрать расхождение или проверить фискальные реквизиты.
Шаги
- Открываем закрытую смену (Статус = Закрыта).
- Нажимаем «Полные фискальные данные» — кнопка доступна только если смена закрыта и заполнено
ФДОЗакрытииСмены. - Откроется форма с деревом XML-структуры Z-отчёта: узлы, реквизиты, значения, атрибуты.
Урок 4. Поиск и фильтрация смен в списке
Когда: старший кассир/администратор ищет открытые смены или смотрит историю по конкретной кассе.
Шаги
- Открываем форму списка кассовых смен.
- Выбираем Рабочее место (касса) — список фильтруется по нему.
- Выбираем Фискальное устройство — список дополнительно сужается до конкретной ККМ; 1С тут же проверяет, закрыта ли последняя смена на этом устройстве, и при необходимости показывает предупреждение о незакрытой смене.
🛠 Часть 2. Для программиста
Источник истины: реальный код релиза 3.0.72.1 — Documents/КассоваяСмена/Ext/ObjectModule.bsl (26 строк) и переопределяемый модуль CommonModules/КассовыеСменыПереопределяемый/Ext/Module.bsl (52 строки), плюс разбор objects/ и business-logic/. Печатная форма (ManagerModule) в рамках этой логики не используется.
Структура объекта
Документ очень «тонкий»: вся содержательная информация — в реквизитах шапки, табличных частей нет.
Реквизиты шапки (по разбору objects/):
| Реквизит | Тип | Назначение |
|---|---|---|
Статус |
EnumRef.СтатусыКассовойСмены |
Открыта / Закрыта — управляет жизненным циклом и видимостью UI |
ФискальноеУстройство |
CatalogRef.ПодключаемоеОборудование |
Конкретная ККМ; ключ для закрытия смены |
КассаККМ |
Справочник (касса/рабочее место) | Группировка смен, отбор в списке |
Организация |
Справочник | Разделение учёта по юрлицам |
НачалоКассовойСмены / ОкончаниеКассовойСмены |
Дата |
Открытие/закрытие смены на ККМ |
НомерСменыККТ / ДатаСменыККТ |
Число / Дата |
Фискальный номер и дата смены в ФН |
КоличествоЧеков / КоличествоФД |
Число |
Счётчики чеков и фискальных документов |
КоличествоНепереданныхФД / ДатаПервогоНепереданногоФД |
Число / Дата |
Контроль передачи в ОФД |
ПамятьФНПереполнена, РесурсФНИсчерпан, НеобходимаСтрочнаяЗаменаФН, ПревышеноВремяОжиданияОтветаОФД |
Булево |
Признаки состояния ФН и канала ОФД |
ФДОЗакрытииСмены |
ХранилищеЗначения (XML) |
Полный Z-отчёт для аудита/детализации |
Комментарий |
Строка |
Произвольные пояснения |
objects/ все реквизиты помечены как «обязательность — не проверяется». Это подтверждается реальным кодом: стандартная проверка заполнения у документа пустая (см. ниже). То есть формально обязательных реквизитов на платформенном уровне у документа нет — фактическую обязательность (ФискальноеУстройство, Организация, КассаККМ) обеспечивает либо сценарий заполнения из ККМ, либо доработка в переопределяемом модуле.Формы: ФормаДокумента (основная, кнопки «Закрыть смену» и «Полные фискальные данные»), ФормаСписка (фильтры по рабочему месту/устройству), ФормаВыбора (выбор смены с фильтром по статусу), ФормаФискальныхДанных (дерево XML Z-отчёта).
Жизненный цикл (обработчики ObjectModule)
Модуль объекта — делегирующий: каждый обработчик лишь вызывает одноимённую процедуру переопределяемого модуля КассовыеСменыПереопределяемый. Своей логики в ObjectModule нет.
| Обработчик | Что делает (по факту) | Куда делегирует |
|---|---|---|
ПриУстановкеНовогоНомера |
Точка расширения нумерации (префиксы) | КассовыеСменыПереопределяемый.ПриУстановкеНовогоНомера |
ОбработкаПроверкиЗаполнения |
Точка расширения валидации | КассовыеСменыПереопределяемый.ОбработкаПроверкиЗаполнения |
ОбработкаЗаполнения |
Точка расширения заполнения (в т.ч. «на основании») | КассовыеСменыПереопределяемый.ОбработкаЗаполнения |
ОбработкаПроведения |
Отсутствует — документ не проводится | — |
ОбработкаУдаленияПроведения |
Отсутствует | — |
Реальный код: модуль объекта (3.0.72.1)
Весь ObjectModule.bsl целиком — он действительно такой короткий:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
КассовыеСменыПереопределяемый.ПриУстановкеНовогоНомера(ЭтотОбъект, СтандартнаяОбработка, Префикс);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
КассовыеСменыПереопределяемый.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
КассовыеСменыПереопределяемый.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#КонецЕсли
Разбор:
- Нет ОбработкаПроведения — подтверждение, что документ не формирует движений ни по бухгалтерским, ни по оперативным регистрам.
- Все три обработчика — «обёртки» над переопределяемым модулем. Это типовой паттерн БСП/типовых конфигураций: ядро документа стабильно, а вся настраиваемая логика выносится в *Переопределяемый.
- Директива #Если Сервер Или … — обработчики выполняются на стороне сервера/толстого клиента, что нормально для серверных событий документа.
Реальный код: куда ведёт делегирование (3.0.72.1)
Самое важное для внедренца — что лежит в переопределяемом модуле по умолчанию. Ответ: пустые тела процедур. Вот целиком значимая часть CommonModules/КассовыеСменыПереопределяемый/Ext/Module.bsl:
#Область ПрограммныйИнтерфейс
// Обработчик события вызывается на сервере при установке номера кассовой смены.
Процедура ПриУстановкеНовогоНомера(Объект, СтандартнаяОбработка, Префикс) Экспорт
КонецПроцедуры
// Обработчик события вызывается на сервере при необходимости проверки корректности заполнения.
Процедура ОбработкаПроверкиЗаполнения(Объект, Отказ, ПроверяемыеРеквизиты) Экспорт
КонецПроцедуры
// Обработчик события вызывается на сервере при вводе документа кассовая смена на основании.
Процедура ОбработкаЗаполнения(Объект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт
КонецПроцедуры
// Обработчик события вызывается на сервере при создании на сервере формы списка.
Процедура ФормаСпискаПриСозданииНаСервере(Форма) Экспорт
КонецПроцедуры
// Обработчик события вызывается на сервере при создании на сервере формы документа.
Процедура ФормаДокументаПриСозданииНаСервере(Форма) Экспорт
КонецПроцедуры
#КонецОбласти
Вывод (источник истины — этот код): «из коробки» в релизе 3.0.72.1 у документа нет ни автозаполнения, ни валидации, ни кастомной нумерации, ни ввода на основании. Это чистые точки расширения. Поэтому:
- любые «обязательные поля» появляются только если их добавить в ОбработкаПроверкиЗаполнения (либо они навязываются сценарием заполнения из подсистемы оборудования);
- ввод «на основании» возможен технически, но логики заполнения по умолчанию нет;
- комментарий к ОбработкаЗаполнения («…при вводе на основании») описывает сигнатуру обработчика, а не наличие готовой логики.
Движения по регистрам
Документ не делает движений — ни бухгалтерских проводок (ОбработкаПроведения отсутствует), ни записей в регистры накопления/сведений. У него нет регистраторов в метаданных.
Что выполняет роль «движений» вместо проводок:
- Статус (Открыта/Закрыта) — фактическое состояние жизненного цикла смены;
- реквизиты-итоги Z-отчёта (счётчики чеков/ФД, признаки ФН) — «зафиксированные» в шапке данные;
- ФДОЗакрытииСмены — полный фискальный «снимок» закрытия (XML);
- связи по запросу — другие объекты узнают состояние смены не через регистр, а запросом к документу (см. КассовыеСменыВызовСервера ниже).
ОбработкаПроведения в ObjectModule.bsl. Сверять — по отчёту «Движения документа» на проведённом ПКО/РКО, а не на смене.Жизненный цикл смены в коде: «активна / закрыта»
Состояние смены вычисляется не флагом в регистре, а функциями общего модуля КассовыеСменыВызовСервера. Реальный код (3.0.72.1), функция определения активности:
// Смена активна, если: не закрыта И с момента открытия прошло не более 24 часов.
Функция СменаАктивна(КассоваяСмена) Экспорт
ОписаниеСмены = КассовыеСменыВызовСервера.ОписаниеКассовойСмены(КассоваяСмена);
Если ОписаниеСмены = Неопределено Тогда
Возврат Ложь;
ИначеЕсли ОписаниеСмены.Статус = Перечисления.СтатусыКассовойСмены.Открыта
и ОписаниеСмены.ДатаИстеченияСрокаДействия > МенеджерОборудованияВызовСервера.ПолучитьДатаСеанса() Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
А «срок действия» берётся прямо в запросе ОписаниеКассовойСмены как НачалоКассовойСмены + 1 день:
| ДОБАВИТЬКДАТЕ(КассоваяСмена.НачалоКассовойСмены, ДЕНЬ, 1) КАК ДатаИстеченияСрокаДействия,
Разбор:
- 24 часа — «жёсткая» бизнес-граница смены ККМ. Даже если статус ещё Открыта, по истечении суток с момента открытия СменаАктивна вернёт Ложь — это соответствует фискальному требованию: смена не может длиться дольше 24 часов.
- Функция СменаЗакрыта проще: считает закрытой любую смену, чей статус не Открыта (а также несуществующую/Неопределено).
- Запрос идёт в привилегированном режиме (УстановитьПривилегированныйРежим(Истина)) — статус смены доступен независимо от прав текущего пользователя; учитывайте это при анализе ролей.
Логика форм (где живёт «настоящая» работа)
Поскольку модуль объекта пуст, основное поведение реализовано в формах:
| Форма / обработчик | Что делает |
|---|---|
ФормаДокумента.ПриСозданииНаСервере |
По типу устройства (МенеджерОборудованияКлиентСервер.ЭтоККТ) управляет видимостью группы фискальных полей |
ФормаДокумента.ПриЧтенииНаСервере |
Десериализует ФДОЗакрытииСмены; включает/выключает кнопку «Полные фискальные данные» |
ФормаДокумента команда ЗакрытьСмену → …Выполнить → …ПослеЗакрытияСмены |
Асинхронная цепочка: подтверждение → запись → имя кассира → команда на ККМ → перечитывание и обновление формы |
ФормаСписка.ФискальноеУстройствоШапкаПриИзменении |
Обновляет отбор и зовёт КассовыеСменыВызовСервера.ПоследняяСменаЗакрыта() |
ФормаФискальныхДанных.ПриСозданииНаСервере |
Запросом достаёт ФДОЗакрытииСмены, парсит XML в дерево значений |
Валидации
- Стандартная
ОбработкаПроверкиЗаполнения— пустая (см. код переопределяемого модуля). Платформенных обязательных проверок нет. - Логические ограничения (
НачалоКассовойСмены < ОкончаниеКассовойСмены, корректность счётчиков) на уровне типового кода не реализованы — их при необходимости добавляет внедренец. - Контроль «нельзя закрыть дважды» обеспечивается состоянием статуса и логикой формы (кнопка/команда закрытия), а не проверкой заполнения.
- Контроль «24 часа» — в
КассовыеСменыВызовСервера.СменаАктивна(см. выше), используется вызывающими подсистемами, а не самим документом при записи.
Зависимости (общие модули)
| Модуль | Роль |
|---|---|
КассовыеСменыПереопределяемый |
Точки расширения серверной логики (нумерация, проверка, заполнение, события форм) — по умолчанию пусты |
КассовыеСменыКлиентПереопределяемый |
Клиентские точки расширения; получение имени кассира при закрытии |
КассовыеСменыВызовСервера |
Серверные функции состояния смены: СменаАктивна, СменаЗакрыта, ОписаниеКассовойСмены, ПоследняяСменаЗакрыта |
КассовыеСменыВызовСервераПереопределяемый |
Переопределяемые серверные вызовы (расширение) |
МенеджерОборудованияКлиент / МенеджерОборудованияКлиентСервер / МенеджерОборудованияВызовСервера |
Взаимодействие с ККМ: команды, тип устройства, дата сеанса |
ОбщегоНазначения |
Утилиты доступа к реквизитам объектов |
- «Документ ничего не проверяет/не заполняет» — это норма для типовой 3.0.72.1: вся логика вынесена в
КассовыеСменыПереопределяемый(по умолчанию пуст). Нужны обязательные поля, автоподстановка организации/кассы, нумерация по префиксам — реализуйте это там, не трогаяObjectModule.- «Не закрывается смена» — почти всегда проблема на стороне ККМ/подключаемого оборудования (нет связи с устройством, не получено имя кассира, драйвер). Документ при ошибке устройства корректно оставляет статус
Открыта. Диагностику ведите в подсистеме подключаемого оборудования и вКассовыеСменыКлиентПереопределяемый.ПолучитьИмяКассира.- «Висят непереданные ФД» — это про связь ККМ↔ОФД, а не про учёт в 1С. В документе это лишь индикатор (
КоличествоНепереданныхФД,ДатаПервогоНепереданногоФД). Решение — на уровне ОФД/сети.- Навигация: если клиенту нужен прямой пункт меню «Кассовые смены» — добавьте команду/раздел в интерфейс и зафиксируйте маршрут в карте навигации (сейчас он не задан, см. [KS-0003]).
- Не ищите проводки — их нет. Состояние смены читайте функциями
КассовыеСменыВызовСервера(запросом), а не через регистры.- Закрытие смены — асинхронная клиентская цепочка с
ОписаниеОповещения. Не рассчитывайте на синхронный результат; завершение ловите в callbackЗакрытьСменуПослеЗакрытияСмены.- Помните про правило 24 часов: даже открытая по статусу смена считается неактивной спустя сутки (
СменаАктивна). Это влияет на привязку чеков/операций.ФДОЗакрытииСмены—ХранилищеЗначенияс XML. Парсинг и дерево строятся на сервере вФормаФискальныхДанных.ПриСозданииНаСервере; при параметреАвтоТестинициализация пропускается.- Запрос
ОписаниеКассовойСменывыполняется в привилегированном режиме — учитывайте при проектировании ролей и RLS.
🔗 Связанные разделы
- prihodnyy-kassovyy-order — Приходный кассовый ордер: оформляет поступление денег в кассу и формирует проводки (в отличие от смены)
- rashodnyy-kassovyy-order — Расходный кассовый ордер: выдача денег из кассы, проводки и кассовая книга
- kassovaya-kniga — отчёт «Кассовая книга»: сводка движения наличных по ПКО/РКО
🆕 Что нового
| Версия | Изменение | Тип |
|---|---|---|
| 3.0.72.1 | Первичное описание (на релизе 3.0.72.1) | 🆕 |