При обновлении нетиповых или давно не обновлявшихся конфигураций 1С:Предприятие 8.2 (и выше) администраторы часто сталкиваются с критическим предупреждением: «Код счета не уникален: Хозрасчетный (69.02.7)». Рассмотрим ситуацию подробнее: за время отсутствия обновлений бухгалтеры самостоятельно добавили в план счетов новый счет (например, 69.02.7 для учета страховых взносов), а разработчики фирмы «1С» позже включили аналогичный предопределенный счет в стандартное обновление. В итоге система видит два элемента с одинаковым кодом, что блокирует корректную работу и обновление программы.
Проанализируем причины этой проблемы и разберем пошаговый алгоритм ее решения, который позволит сохранить все проводки и корректно перейти на использование стандартного плана счетов.
В системе 1С существует фундаментальное различие между типами объектов в планах счетов:
Когда мы накатываем обновление, система пытается создать предопределенный счет 69.02.7. Если в базе уже живет пользовательский счет с таким же кодом, возникает конфликт уникальности. 1С не может автоматически «склеить» их, так как не знает, являются ли они идентичными по смыслу.
Для решения задачи нам потребуется временно «развести» счета по разным кодам, обновить конфигурацию и программно перенести все движения с ручного счета на новый предопределенный. Разберем по шагам:
Шаг 1. Переименование конфликтующего счета.
Зайдем в план счетов Хозрасчетный и найдем счет, введенный вручную. Изменим его код на любой свободный, например, 69.02.8 или 69.02.77. Важно понимать: 1С хранит ссылки в документах не по коду счета, а по его внутреннему идентификатору (GUID). Поэтому простое изменение кода не «сломает» существующие проводки — все документы по-прежнему будут ссылаться на этот измененный счет.
Шаг 2. Обновление конфигурации.
Теперь, когда код 69.02.7 свободен, выполним обновление базы. В результате в плане счетов появится новый предопределенный счет 69.02.7 со значком «точки» (признак предопределенного элемента).
Шаг 3. Замена ссылок в базе данных.
На текущий момент у нас есть два счета: старый (с проводками, но «неправильным» кодом) и новый (пустой, но с «правильным» предопределенным именем). Нам нужно перебросить все движения. Рассмотрим использование специализированной обработки «Поиск и замена значений».
В обработке укажем:
69.02.8).69.02.7.Нажмем кнопку «Выполнить». Программа найдет все упоминания старого счета в проводках, документах, регистрах сведений и настройках, после чего заменит их на новый счет.
Если по каким-то причинам стандартные обработки недоступны, можно написать простую обработку самостоятельно. Посмотрим на пример кода, который иллюстрирует логику поиска ссылок, хотя для полноценной замены лучше использовать встроенный механизм НайтиПоСсылкам и замену в объектах:
// Пример логики поиска и подготовки к замене
СтарыйСчет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("69.02.8");
НовыйСчет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("69.02.7");
// Получаем массив ссылок на старый счет
ТаблицаСсылок = НайтиПоСсылкам(Новый Массив(СтарыйСчет));
Для Каждого СтрокаСсылок Из ТаблицаСсылок Цикл
// Здесь должна быть логика открытия объекта,
// замены реквизита и записи объекта
Сообщить("Найдена ссылка в объекте: " + СтрокаСсылок.Данные);
КонецЦикла;
Важный нюанс: при ручном написании кода необходимо учитывать Дату запрета редактирования. Если в базе есть закрытые периоды, обычная запись объекта (Объект.Записать()) может не сработать. В таких случаях обработка ПоискИЗаменаЗначений часто оказывается эффективнее, так как позволяет обходить некоторые проверки.
Если документов немного, проанализируем метод использования стандартной обработки «Групповая обработка справочников и документов»:
СчетКт (или СчетДт) Равно [Ваш старый счет].После замены счета крайне важно выполнить следующие действия, чтобы убедиться в целостности данных:
Резюме: Использование предопределенного счета из обновления является обязательным для корректной работы алгоритмов 1С. Метод с временным переименованием и последующей заменой через ПоискИЗаменаЗначений является самым безопасным и проверенным способом решения данного конфликта.