При работе в 1С:Розница 8.3 пользователи часто сталкиваются с ситуацией, когда необходимо удалить чеки ККМ, но система выдает сообщение: "Чек имеет статус "Архивный". Операции над этим документом запрещены." Это происходит потому, что после закрытия кассовой смены чеки получают статус "Архивный" и их данные уже попадают в "Отчет о розничных продажах". Система блокирует операции над такими чеками для сохранения целостности данных и корректности отчетов. В данном руководстве мы подробно разберем, как решить эту проблему, особенно если физической ККМ нет, и чеки нужно удалить только из базы 1С.
Прежде чем перейти к решению, выясним причину, по которой 1С накладывает такие ограничения. Основная цель — защита целостности данных. Архивные чеки ККМ являются частью закрытой кассовой смены и уже агрегированы в документе "Отчет о розничных продажах". Любое прямое изменение или удаление таких чеков может привести к расхождениям между данными чеков и данными отчетов, нарушению последовательности документов и некорректному учету розничных продаж.
Система 1С имеет строгие механизмы контроля, которые препятствуют прямому изменению статуса "Архивный" или удалению таких документов через стандартные пользовательские функции. Даже попытки изменить статус на "Отложенный" с помощью типовых инструментов, таких как "Групповое изменение реквизитов", часто заканчиваются ошибкой "Не удалось провести", что подтверждает уровень защиты данных.
На первый взгляд, кажется логичным использовать встроенные в 1С механизмы для массового изменения данных. Рассмотрим эти подходы.
Многие пользователи и специалисты в первую очередь обращаются к функционалу "Групповое изменение реквизитов". Этот инструмент доступен через раздел "Администрирование" или "НСИ и администрирование" → "Поддержка и обслуживание" → "Групповое изменение реквизитов".
Администрирование (или НСИ и администрирование).Поддержка и обслуживание.Групповое изменение реквизитов.Изменять выберите тип объекта Документ.ЧекККМ.Добавить отбор и установите отбор по полю СтатусЧекаККМ со значением Архивный, чтобы выбрать только нужные чеки.СтатусЧекаККМ.Отложенный.Изменить реквизиты.Почему это может не сработать для архивных чеков: Как мы уже упоминали, при попытке изменить статус архивного чека таким способом, система, скорее всего, выдаст ошибку "Не удалось провести". Это происходит из-за внутренней бизнес-логики конфигурации, которая запрещает изменение статуса документа, уже зафиксированного в отчетах, даже если вы обладаете полными административными правами.
В некоторых версиях конфигурации 1С:Розница может существовать похожий функционал, например, через Администрирование → Обслуживание → Групповое редактирование → Чеки. Однако, принцип действия и ограничения будут аналогичны "Групповому изменению реквизитов". Попытка изменить статус с "Архивный" на "Отложенный" приведет к той же ошибке "Не удалось провести".
Для решения проблемы с архивными чеками, когда стандартные средства бессильны, наиболее эффективным и часто применяемым способом является использование специализированных внешних обработок. Эти инструменты позволяют программно отключить часть проверок системы. Вы можете написать код самостоятельно или воспользоваться готовыми решениями, такими как универсальное удаление любых документов без пометки на удаление или специализированное удаление пробитых чеков ККМ (включая чеки ЕГАИС и возвраты).
Ключевым моментом в таких обработках является использование программного флага ОбменДанными.Загрузка = Истина. Рассмотрим, как это работает:
ОбменДанными.Загрузка установлена в значение Истина, платформа 1С временно отключает ряд стандартных проверок и бизнес-логики, которые обычно выполняются при записи объектов.ОбменДанными.Загрузка = Ложь, чтобы вернуть систему к стандартному режиму работы и восстановить все проверки.Важно: Применение этого метода требует осторожности и понимания возможных последствий. Всегда создавайте резервную копию базы данных перед использованием подобных обработок, а также тестируйте их на копии базы.
Мы разберем шаги по созданию простой внешней обработки, которая поможет изменить статус архивных чеков и пометить их на удаление.
Откройте конфигуратор (обычно через меню "Конфигурация" → "Открыть конфигурацию"). Перейдите в меню "Файл" → "Новый" → "Внешняя обработка". Сохраните пустую обработку на диске, например, "УдалениеАрхивныхЧеков.epf".
Добавьте на форму обработки кнопку, при нажатии на которую будет выполняться код. В модуле объекта или модуле формы обработки разместите следующий код:
// Этот код размещается в модуле формы или модуле объекта обработки
// (если используется вариант "Модуль объекта" для команды, то ее нужно вынести в команду)
&НаСервере
Функция ИзменитьСтатусИПометитьЧек(СсылкаНаЧек)
Попытка
// Получаем объект документа по ссылке
ОбъектЧек = СсылкаНаЧек.ПолучитьОбъект();
// Проверяем, является ли чек архивным
Если ОбъектЧек.СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Архивный Тогда
Сообщить("Обрабатываем чек " + СсылкаНаЧек + " со статусом 'Архивный'...");
// *** КРИТИЧЕСКИ ВАЖНО: Отключаем проверки платформы ***
ОбменДанными.Загрузка = Истина;
// Меняем статус чека на "Отложенный" или на пустой (неопределенный)
// Вы можете выбрать любой статус, который не блокирует удаление
// Для Розницы чаще всего подходит "Отложенный", но иногда
// проще установить неопределенное значение, если позволяет структура
// конфигурации (например, СтатусЧекаККМ = Неопределено).
// В данном примере мы меняем на "Отложенный".
ОбъектЧек.СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Отложенный;
// Записываем измененный объект
ОбъектЧек.Записать();
// *** Важно: Возвращаем проверки платформы в обычный режим ***
ОбменДанными.Загрузка = Ложь;
Сообщить("Статус чека " + СсылкаНаЧек + " успешно изменен на 'Отложенный'.");
// Теперь, когда статус изменен, мы можем пометить документ на удаление
// Это делается после изменения статуса, чтобы обойти проверки.
ОбъектЧек.УстановитьПометкуУдаления(Истина);
Сообщить("Чек " + СсылкаНаЧек + " помечен на удаление.");
Возврат Истина;
ИначеЕсли ОбъектЧек.ПометкаУдаления Тогда
Сообщить("Чек " + СсылкаНаЧек + " уже помечен на удаление. Пропускаем.");
Возврат Истина;
Иначе
// Если чек не архивный, но не помечен на удаление, все равно помечаем его
Сообщить("Чек " + СсылкаНаЧек + " имеет статус '" + ОбъектЧек.СтатусЧекаККМ + "'. Помечаем на удаление.");
ОбъектЧек.УстановитьПометкуУдаления(Истина);
Сообщить("Чек " + СсылкаНаЧек + " помечен на удаление.");
Возврат Истина;
КонецЕсли;
Исключение
Сообщить("Ошибка при обработке чека " + СсылкаНаЧек + ": " + ОписаниеОшибки());
// В случае ошибки также крайне важно вернуть ОбменДанными.Загрузка в Ложь!
ОбменДанными.Загрузка = Ложь;
Возврат Ложь;
КонецПопытки;
КонецФункции
&НаКлиенте
Процедура УдалитьВыбранныеЧеки(Команда)
// Перед началом работы всегда предупреждаем о резервном копировании
Если Вопрос("Перед выполнением этой операции КРАЙНЕ РЕКОМЕНДУЕТСЯ сделать полную резервную копию базы данных. Продолжить?", РежимДиалогаВопрос.ДаНет, 0) = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Сообщить("Начинаем поиск и обработку архивных чеков...");
// Создаем запрос для получения всех архивных чеков, которые не помечены на удаление
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЧекККМ.Ссылка
|ИЗ
| Документ.ЧекККМ КАК ЧекККМ
|ГДЕ
| ЧекККМ.СтатусЧекаККМ = &СтатусАрхивный
| И НЕ ЧекККМ.ПометкаУдаления"; // Исключаем уже помеченные на удаление
Запрос.УстановитьПараметр("СтатусАрхивный", Перечисления.СтатусыЧековККМ.Архивный);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Вызываем серверную функцию для изменения статуса и пометки
ИзменитьСтатусИПометитьЧек(Выборка.Ссылка);
КонецЦикла;
Сообщить("Обработка чеков завершена. Теперь необходимо выполнить 'Удаление помеченных объектов'.");
Сообщить("Перейдите в Администрирование -> Поддержка и обслуживание -> Удаление помеченных объектов.");
КонецПроцедуры
Сохраните обработку. Откройте 1С:Предприятие в пользовательском режиме. Перейдите в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Добавьте вашу обработку в список, указав ее местоположение на диске. После этого вы сможете запустить ее из списка дополнительных обработок.
После того как обработка отработает и пометит все необходимые чеки на удаление, вам нужно будет выполнить стандартную процедуру удаления помеченных объектов. Для этого перейдите в Администрирование → Поддержка и обслуживание → Удаление помеченных объектов. Вы можете выбрать режим "Выборочное удаление", чтобы убедиться, что удаляются только нужные вам чеки. Если объектов слишком много и стандартный механизм работает медленно, можно использовать фоновое удаление документов с контролем ссылочной целостности — удобнее через универсальный поиск и безопасное удаление данных и документов.
В контексте удаления чеков часто возникает вопрос об автоматической очистке устаревших данных.
В 1С:Рознице предусмотрен функционал для автоматического удаления непробитых чеков (тех, которые были созданы, но не пробиты через ККМ) при закрытии кассовой смены. Эту опцию можно найти в настройках программы:
Настройки.Еще больше возможностей.Продажи.Розничные продажи установите галочку напротив "Удалять непробитые чеки ККМ".Это полезно для поддержания порядка в базе, но не относится к архивным чекам, которые уже прошли стадию пробития и закрытия смены.
Для автоматического удаления именно *архивных* чеков по расписанию типового механизма в 1С:Розница не предусмотрено. В таких случаях обычно используются регламентные задания, которые запускают специально разработанные внешние обработки. Примером может служить обработка для удаления Чеков ККМ, которая поддерживает запуск по расписанию, или более комплексное регламентное задание по архивации чеков ККМ (удобно через обработка свертки базы и управляемого удаления документов), которое также может заполнять пустые отчеты о розничных продажах. Такая обработка может быть настроена для физического удаления документов или для их архивации (например, переноса в отдельную базу) за определенный период. При этом, как и при ручном удалении, крайне важно понимать, что физическое удаление объектов необратимо и требует тщательного планирования и резервного копирования.
Удаление архивных чеков ККМ в 1С:Розница 8.3 — задача, требующая обхода стандартных механизмов защиты данных. Хотя типовые средства, такие как "Групповое изменение реквизитов", могут быть неэффективны для архивных чеков, использование внешних обработок с программным отключением проверок (через ОбменДанными.Загрузка = Истина) предоставляет надежное решение — для этих целей подойдёт групповая обработка документов для проведения и изменения статусов.
Мы настоятельно рекомендуем всегда начинать любые операции по изменению или удалению данных с создания полной резервной копии информационной базы и, при необходимости, консультироваться с опытным специалистом по 1С.