Отменяем автозаполнение документа: от очистки строк до отката базы

· 9 мин

Содержание

Нажали «Заполнить», а в табличную часть попало не то — пока документ не записан, просто закройте его и откажитесь от сохранения: данные вернутся к прежнему состоянию. Если документ уже записан, очистите строки вручную и при необходимости отмените проведение. А вот когда поверх правильных данных записались неверные и копии формы нет — выручит только восстановление базы из резервной копии.

Отмена заполнения — это не одна кнопка, а несколько сценариев: сброс незаписанного документа, очистка строк, снятие движений у проведённого документа и полный откат. Какой из них ваш — зависит от того, успела ли программа записать результат.

Разберём каждый способ: от самого безопасного (ничего не сохранять) к радикальному (откат всей базы).

Какой случай у вас: быстрая диагностика

Прежде чем что-то нажимать, ответьте на один вопрос — записан документ или ещё нет. От этого зависит, обратима ли операция.

  • 📄 Документ открыт, но не записан. Результат заполнения живёт только в форме. Закрыли без сохранения — и его нет. Самый лёгкий случай.
  • 💾 Документ записан, но не проведён. Данные уже в базе, но движений по регистрам ещё нет. Нужно очистить строки и перезаписать.
  • ✅ Документ записан и проведён. Кроме строк в базе есть ещё и движения: остатки, проводки, взаиморасчёты. Сначала отменяем проведение, потом правим строки.
  • 🗂️ Заполнение запустила внешняя обработка сразу по многим объектам. Отдельной кнопки «отменить» у такой операции нет — откат делают вручную или из копии.

Отдельно стоит понять, где именно оказались данные. Строки табличной части видно прямо в документе. Движения по регистрам в форме не видны — их показывает кнопка движений. А если заполнение шло через обработку, изменения могли попасть сразу в несколько документов, и каждый придётся смотреть отдельно. Чем раньше вы определите масштаб, тем проще выбрать способ отмены.

Что именно вы хотите отменить?

Отмена до записи: закрыть документ без сохранения

Это самый частый и самый безопасный сценарий. Пока вы не нажали «Записать» или «Провести», всё, что сделала кнопка «Заполнить», существует только в открытой форме.

Порядок действий:

  1. Нажмите крестик закрытия окна документа или Esc.
  2. Программа спросит: сохранять изменения? Ответьте «Нет».
  3. Документ закроется без записи. Заполнение отменено полностью.

Если это был новый документ, он вообще не попадёт в базу. Если вы открывали уже существующий документ и ошибочно нажали «Заполнить», отказ от записи вернёт его к тому виду, в котором он был сохранён в прошлый раз.

Привыкайте проверять результат заполнения до записи. На этом этапе любой сброс бесплатен — достаточно закрыть форму.

Чтобы не ошибаться второй раз, полезно понимать, что именно отменяете. За кнопкой «Заполнить» в большинстве документов скрывается несколько команд, и они делают разное:

  • Заполнить по основанию — переносит строки из документа-основания (заказа, поступления, реализации). Чаще всего ошибаются именно тут: выбрано не то основание.
  • Заполнить по остаткам — подтягивает номенклатуру по остаткам на складе или по долгам. Результат зависит от даты документа.
  • Заполнить / пересчитать — пересчитывает суммы, цены, налоги по уже введённым строкам, не меняя их состав.
  • Добавить из поступления — дописывает строки к имеющимся, а не заменяет их.

Если после отмены вы собираетесь заполнить документ заново, сверьтесь, какую из этих команд выбрать и какое основание указать. Многие откаты случаются из-за того, что команду заполнения выбрали не ту — перенесли строки не из того основания.

Отдельно про отмену длительной операции. Если обработка заполнения идёт долго и показывает индикатор выполнения, рядом обычно есть кнопка «Прервать» (или Ctrl+Break в толстом клиенте). Прерывание останавливает заполнение на полпути: часть строк может оказаться заполненной, часть — нет. После прерывания всё равно закройте документ без сохранения, чтобы не оставить его в половинчатом состоянии.

Как очистить заполненную табличную часть

Документ уже записан, и просто закрыть форму недостаточно — данные в базе. Нужно очистить строки вручную.

Самый универсальный способ, который работает в любой конфигурации на платформе 8.3:

  1. Встаньте в любую строку табличной части (например, «Товары» или «Услуги»).
  2. Выделите все строки сочетанием Ctrl+A.
  3. Нажмите Delete или команду удаления строки в командной панели табличной части.
  4. Запишите документ — теперь он сохранён с пустой табличной частью.

У многих документов в выпадающем меню кнопки «Заполнить» есть отдельная команда очистки — она убирает только строки, добавленные заполнением, не трогая остальное. Если такой команды нет, используйте удаление строк через Ctrl+A и Delete.

Проверьте, что чистите именно ту табличную часть. В документе их бывает несколько (товары, возвратная тара, платёжный календарь), и очистка не той секции создаст новую ошибку вместо исправления старой.

Если документ был проведён, сначала отмените проведение (следующий раздел). Иначе очистка строк оставит в базе «висящие» движения по регистрам, не соответствующие пустому документу.

Отмена проведения и снятие движений документа

Проведённый документ — это не только строки, но и движения: остатки на складе, проводки по счетам, взаиморасчёты с контрагентами, записи в регистрах накопления и бухгалтерии. Чтобы заполнение не оставило следов, эти движения надо снять.

Отмена проведения:

  1. Откройте документ.
  2. В командной панели нажмите «Отменить проведение». Если кнопки нет на виду — найдите её в меню «Ещё».
  3. Программа удалит все движения документа по регистрам. Сам документ останется в базе как непроведённый.

После отмены проведения табличная часть никуда не денется — её вы чистите отдельно, как описано выше. Порядок такой: сначала отмена проведения, потом очистка строк, затем запись.

Проверить, что движения действительно сняты, можно через отчёт по регистру или через кнопку движений документа (значок с дебетом-кредитом или списком регистров в командной панели) — после отмены проведения список движений должен быть пустым.

Если документ нужно не просто очистить, а полностью убрать из базы, пометьте его на удаление (Ctrl+Delete в списке), а затем удалите помеченные объекты через стандартную обработку удаления. Прямое удаление проведённого документа программа не даст — сначала снимутся движения.

Полный откат базы из резервной копии

Когда автозаполнение перезаписало правильные данные, а восстановить их вручную уже нельзя (вы не помните прежние значения, затронуто много документов), остаётся откат базы из копии.

Это тяжёлая артиллерия. Восстановление из копии возвращает к прошлому состоянию ВСЮ базу, а не один документ. Всё, что ввели в систему после момента копии, пропадёт.

Как восстанавливают, в зависимости от варианта базы:

Вариант базыКак откатить
ФайловаяОстановить работу всех пользователей, заменить файл базы данных на копию из архива, либо загрузить выгрузку .dt через Конфигуратор
Клиент-сервернаяВосстановить резервную копию СУБД средствами администратора сервера, либо загрузить .dt

Перед откатом убедитесь, что в базе никто не работает. Восстановление поверх активных сеансов приведёт к потере данных других пользователей и к конфликтам. Делайте это в технологическое окно или по согласованию с коллегами.

Поэтому к откату прибегают в последнюю очередь. Прежде чем восстанавливать, прикиньте: может, проще поправить строки вручную? Откат оправдан, только когда объём испорченных данных велик, а копия свежая.

Полезная привычка — делать копию (.dt или архив файловой базы) перед запуском массового заполнения. Тогда откат станет штатной операцией, а не катастрофой.

Если из всей базы испорчены данные по нескольким объектам, а остальное менять нельзя, полный откат не подходит — он затрёт свежие документы. В этом случае восстанавливают копию во вторую, отдельную базу, находят там нужные документы в прежнем виде и переносят значения в рабочую базу вручную или выгрузкой-загрузкой отдельных объектов. Способ трудоёмкий, но сохраняет всё, что ввели после копии.

Программная отмена: когда без кода не обойтись

Если заполнение запускает не кнопка в документе, а внешняя обработка, которая проходит по списку объектов, автоматической отмены у неё нет. Вариантов два: написать обработку, выполняющую обратное действие, либо восстановить базу из копии.

Разработчику пригодятся две операции на встроенном языке. Очистка табличной части документа:

Объект.Товары.Очистить();
Объект.Записать();

Снятие проведения без открытия формы:

ДокОбъект = Документ.Ссылка.ПолучитьОбъект();
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);

Метод Очистить() удаляет все строки указанной табличной части, а запись в режиме ОтменаПроведения снимает движения. Обе операции необратимы — запускайте их на копии базы, прежде чем прогонять на рабочей.

Если обработка должна пройти по набору документов, обходите их обычным циклом по выборке или по массиву ссылок. Для каждого документа получайте объект методом ПолучитьОбъект(), выполняйте нужное действие и записывайте. Не меняйте данные через запрос напрямую в таблицах СУБД, минуя объектную модель, — так вы оставите регистры и подчинённые объекты в рассогласованном состоянии, и база перестанет сходиться.

Ещё один штатный инструмент, без программирования, — групповое изменение реквизитов. Эта обработка позволяет массово присвоить реквизитам документов или элементам справочников нужное значение, в том числе пустое. Она не отменяет заполнение как таковое, но помогает быстро привести к одному виду поле, которое заполнение проставило неверно у множества объектов. Доступ к ней открывают из списка документов, обычно через меню «Ещё».

Про «очистку временных таблиц», которую иногда поминают в связи с заполнением: временные таблицы в запросах живут в пределах сеанса и уничтожаются методом Уничтожить() у менеджера временных таблиц либо автоматически при завершении работы. Вручную «отменять» их не нужно — к сохранённым данным документа они отношения не имеют.

Любой код, меняющий данные пачкой, сначала обкатывайте на копии рабочей базы. Ошибка в цикле по тысяче документов превращается в тысячу испорченных документов.

Как не повторять: права и профилактика

Чаще всего отменять заполнение приходится из-за спешки и неверно выбранного основания. Несколько приёмов, которые снимают проблему заранее.

Перед массовым заполнением проверьте
Выполнено: 0 / 4

Что ещё помогает:

  • 🔒 Ограничьте права. Массовые обработки и групповое изменение реквизитов — операции для опытных пользователей. В настройках прав пользователей (раздел Администрирование → Настройки пользователей и прав) уберите у рядовых сотрудников доступ к внешним обработкам и к групповому изменению.
  • 🧪 Тестируйте на копии. Прежде чем запускать заполнение на всей базе, прогоните его на тестовой копии. Увидите результат без риска для рабочих данных.
  • 👀 Проверяйте до записи. Пока документ не сохранён, любое заполнение отменяется закрытием формы. Это бесплатная страховка — пользуйтесь ей.

Разделение прав решает проблему в корне: если запустить массовое заполнение может только администратор, случайных откатов станет на порядок меньше.

Частые вопросы

Можно ли отменить заполнение через Ctrl+Z, как в текстовом редакторе?
Нет. В формах 1С нет универсальной отмены последнего действия для табличных частей. Единственный аналог «отмены» до записи — закрыть документ без сохранения.
Я отменил проведение, но остатки на складе не изменились. Почему?
Отмена проведения снимает движения именно этого документа. Если остаток формируют и другие документы, он пересчитается с учётом оставшихся. Проверьте движения кнопкой движений документа — они должны быть пустыми.
Заполнение затронуло 200 документов. Есть способ быстрее, чем править каждый?
Автоматического отката для такой операции нет. Если есть копия базы на момент до запуска — восстановление из неё быстрее ручной правки. Если копии нет, обратную операцию придётся писать обработкой.
После очистки табличной части документ не записывается, ругается на пустые строки.
Скорее всего, у документа есть обязательные реквизиты в шапке или в других секциях. Очистка товаров их не заполнит — проверьте, что заполнены остальные обязательные поля, либо пометьте документ на удаление целиком.
Чем отличается очистка строк от пометки документа на удаление?
Очистка оставляет документ в базе с пустой табличной частью — он продолжает существовать. Пометка на удаление с последующим удалением убирает документ целиком вместе с его номером и движениями.