Регистры под контролем: правка регистров 1С с предпросмотром и откатом, поиск неуникальных записей
Задачи пользователя - Корректировка данных
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Правка записей регистров в 1С обычно устроена как «изменил ячейку и сразу записал»: непонятно, что именно ушло в базу, а вернуть прежнее значение нечем. «Регистры под контролем» работает наоборот: любое изменение сначала показывается построчно в виде «было → станет», записывается только после вашего подтверждения, попадает в журнал и откатывается одним действием. Второй блок обработки находит записи регистров сведений с одинаковым ключом — причину ошибки «Записи регистра сведений стали неуникальными» при обновлении конфигурации — и исправляет их тем же безопасным способом.
Одна правка — четыре шага
- Откройте регистр и задайте отбор по периоду, измерениям, регистратору. По умолчанию обработка только читает данные: пока не включён флажок «Разрешить правку», кнопки записи недоступны.
- Измените ячейки прямо в таблице, добавьте или скопируйте строку, пометьте строку к удалению — или задайте массовую замену значения в колонке (в том числе только там, где сейчас стоит нужное значение).
- Откроется «Предпросмотр»: по каждой записи видно, что было и что станет, строки можно снять галочкой. На этом этапе в базе ничего не изменено.
- «Записать в базу» — вопрос, запись, строка в журнале. Если после этого понадобилось вернуть всё как было, на вкладке «Журнал и откат» есть кнопка отката операции.
Что именно записывается
| Регистр | Единица записи | Режим |
| Сведений, независимый | одна запись по ключу (период и измерения) | чтение и правка |
| Сведений, подчинённый регистратору; накопления | все строки регистратора одним набором | чтение и правка, с подтверждением |
| Бухгалтерии, расчёта | — | только просмотр |
Запись идёт через наборы записей платформы, без прямых обращений к таблицам СУБД. Перед записью обработка заново читает затронутые записи: если за время предпросмотра их изменил кто-то другой, операция отклоняется. Данные и строка журнала фиксируются одной транзакцией. Откат тоже проверяет, что сейчас в базе именно то, что записала операция; иначе он отказывает, чтобы не затереть чужие изменения.
Для движений (регистры накопления, подчинённые сведений) обработка пишет набор по регистратору, не трогая сам документ. Это нужно знать: документ остаётся проведённым, контроль остатков не выполняется, а при перепроведении ваша правка исчезнет. Поэтому для таких регистров нужен отдельный флажок подтверждения, а в предпросмотре перечислены непроведённые документы-регистраторы.
Неуникальные записи: два ключа
Платформа не даёт записать два набора с одинаковым ключом, поэтому «текущий» поиск по всем регистрам сведений служит контролем целостности: на здоровой базе он ничего не находит. Ошибка при обновлении возникает иначе: новый релиз меняет ключ регистра (убирает измерение, укрупняет периодичность), и записи, которые различались по секунде или по измерению, сливаются в одну. Такой ключ можно задать заранее: выбрать, до какого периода усекать (секунда … год или «не учитывать») и какие измерения исключить.
Пример из тестовой базы: регистр с периодичностью «секунда» и измерением «номер пакета» хранит четыре записи. По текущему ключу групп нет; при усечении до дня образуется одна группа из двух записей (один номер, разные часы того же дня); если ещё и исключить измерение — группа из трёх. Для группы можно выбрать, что оставить:
| Способ | Что останется |
| Последняя / первая | запись с самым поздним / самым ранним периодом |
| Объединить | последняя запись; пустые ресурсы и реквизиты заполняются из остальных |
| Вручную | запись, отмеченная галочкой «Оставить» |
Исправление проходит тот же путь: предпросмотр, журнал, откат.
Что проверено
| Проверка | Результат |
| УНФ 3.0.14.140: открытие всех 1317 регистров, поиск по 1179 регистрам сведений | без ошибок; на текущем ключе групп нет |
| БП 3.0.205: открытие всех 1474 регистров, поиск по 1365 регистрам сведений | без ошибок; на текущем ключе групп нет |
| Сценарии записи (независимый РС с периодом и без, подчинённый РС, регистр накопления): добавление, правка ключа, замена с условием, удаление, откат, отказ при чужой правке и при устаревшем предпросмотре | автотест на копии УНФ — все проверки пройдены |
| Сценарий «добавить, заменить, откатить» на копии БП | пройден |
| Форма в тонком клиенте 8.5 на копии УНФ: открытие регистров, правка ячейки, пометка удаления, предпросмотр, запись, журнал, откат, поиск неуникальных записей и их исправление, массовая замена с условием (до предпросмотра) | пройдено кликами; ввод новой записи вручную и запись массовой замены кликами не проверялись (проверены автотестом) |
Вопросы и ответы
Можно ли настоящие дубли на уровне СУБД исправить? Платформа не записывает такие данные, поэтому воспроизвести их на тестовой базе нельзя: логика исправления проверена на группах «ужесточённого» ключа, а текущий ключ — как контроль «ноль групп». Если в вашей базе дубли есть, они будут показаны при поиске по текущему ключу.
Нужны ли особые права? Нет, обработка работает под вашей учётной записью и не обходит права доступа: записать можно то, что вы вправе записать. Для всех регистров удобнее роль администратора.
Что с регистрами, у которых составной тип в измерении? В таблице такие колонки открыты только для просмотра, а изменить их значение можно массовой заменой. Новая запись для движений создаётся копированием существующей. Регистры с полями типа «Хранилище значения» открываются только для чтения.
Работает ли в обычных формах и на платформе 8.3? Нет, обработка рассчитана на управляемые формы и платформу 1С:Предприятие 8.5; на других конфигурациях и релизах она не проверялась.
Проверено на следующих конфигурациях и релизах:
- Управление нашей фирмой, редакция 3.0, релизы 3.0.14.140
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.205.22
Вступайте в нашу телеграмм-группу Инфостарт