При настройке синхронизации данных между разными информационными базами 1С, особенно если задействовано несколько баз одного типа (например, две базы 1С:УНФ) и одна центральная (например, 1С:БП), возникает критически важный аспект – уникальность префиксов. В нашей ситуации, когда две базы 1С:Управление нашей фирмой (УНФ 3.0) должны обмениваться данными с одной и той же базой 1С:Бухгалтерия предприятия (БП 3.0), и у обеих баз УНФ установлен одинаковый префикс «НФ», мы сталкиваемся с потенциально очень серьезными проблемами. Рассмотрим эту ситуацию подробнее, выясним, чем она чревата, и разберем по шагам, как правильно поступить.
Фундаментальный принцип работы любой информационной системы, включая 1С, заключается в уникальной идентификации каждого объекта. Документы, элементы справочников, записи регистров – все должно иметь свой уникальный идентификатор, чтобы система могла однозначно ссылаться на них и корректно обрабатывать. В 1С, помимо внутреннего уникального идентификатора (GUID), для пользователей и отчетности активно используются номера документов и коды справочников. Именно для обеспечения уникальности этих пользовательских идентификаторов в распределенных системах и при синхронизации данных предназначены префиксы.
Представим, что у нас есть две базы УНФ, обе с префиксом «НФ». Документ «Реализация товаров и услуг» с номером «НФ-0000001» может быть создан как в первой УНФ, так и во второй. Когда эти документы будут выгружаться в центральную базу БП, возникнет конфликт. Давайте проанализируем основные риски, которые несет такая ситуация:
Таким образом, использование одинаковых префиксов при синхронизации – это не просто неудобство, а серьезная методологическая и техническая ошибка, которая ставит под угрозу целостность и достоверность учетных данных.
В типовых конфигурациях 1С, разработанных на основе Библиотеки Стандартных Подсистем (БСП), номера документов формируются с использованием нескольких видов префиксов, каждый из которых имеет свое назначение. Разберем их, чтобы лучше понимать, какой именно префикс нас интересует в контексте синхронизации.
Главное - Организации) и обычно является первым в номере документа. Его основная цель – обеспечить уникальность номеров документов в рамках одной базы для разных юридических лиц. Если префикс организации не установлен, по умолчанию часто используется «00».Администрирование - Синхронизация данных, как правило, в параметрах настройки обмена. Именно этот префикс должен быть уникальным для каждой участвующей в обмене информационной базы. Если префикс ИБ не установлен, то вместо него также могут использоваться «00» или он может отсутствовать, что и приводит к конфликтам при совпадении с другими префиксами.В нашем случае, когда две УНФ с одинаковым префиксом «НФ» пытаются синхронизироваться с одной БП, проблема кроется именно в префиксе информационной базы (ВВ). Система синхронизации 1С требует, чтобы этот префикс был уникальным для каждой из участвующих баз, чтобы однозначно идентифицировать источник данных и предотвратить конфликты нумерации.
Ответ однозначен: Да, обязательно! Игнорирование этого требования приведет к описанным выше критическим проблемам с данными и остановке обмена. Даже если сейчас обмен еще не настроен или работает, любые попытки синхронизации двух баз с одинаковым префиксом ИБ с третьей базой приведут к сбоям.
Автор вопроса упоминает, что на второй базе УНФ работают уже около месяца. Это относительно небольшой срок. Чем раньше будет произведена корректировка, тем меньше объем данных, который придется обрабатывать, и тем меньше потенциальных проблем с уже выданной первичной документацией. Перенос или перенумерация документов, накопленных за месяц, гораздо проще, чем за год или более длительный период.
Бывает соблазн прибегнуть к "хитростям", например, заменить русскую букву «Н» в префиксе на латинскую «H». Визуально это может быть незаметно, и система будет воспринимать их как разные префиксы. Однако, это крайне плохая идея, которая лишь создаст иллюзию решения. Такая подмена будет вводить в заблуждение пользователей, аудиторов и проверяющих. Это затруднит поиск, анализ и проверку документов, а также может вызвать вопросы к достоверности учета. В долгосрочной перспективе это принесет гораздо больше проблем, чем сэкономит усилий сейчас.
Изменение префикса и связанная с этим перенумерация документов – это ответственная операция. Подходить к ней следует системно и осторожно. Разберем шаги:
Прежде чем выполнять любые изменения, связанные с данными или настройками синхронизации, критически важно создать актуальную резервную копию обеих информационных баз (УНФ и БП). Это ваша страховка на случай непредвиденных ошибок, сбоев или некорректного выполнения операций. Если что-то пойдет не так, вы всегда сможете вернуться к исходному состоянию данных. Создайте полный архив базы данных (.dt файл) или используйте средства резервного копирования СУБД, если база клиент-серверная.
У нас есть две УНФ с одинаковым префиксом «НФ» и одна БП, с которой они будут синхронизироваться. Одна УНФ уже давно работает и синхронизируется с БП. Вторая УНФ – новая, работает всего месяц. Логично менять префикс во второй, новой базе УНФ. Это позволит минимизировать изменения в уже устоявшейся схеме обмена (УНФ1 – БП) и обрабатывать меньший объем документов. Например, можно установить префикс «НФ2» или «ФЛ1» (если это филиал) для новой УНФ.
В конфигурации 1С:УНФ перейдите в раздел Администрирование, затем выберите Синхронизация данных. Там вы найдете ссылку или команду для Изменение префикса информационной базы. Система предложит ввести новый префикс. Также может быть возможность указать период, за который новый префикс должен отражаться в документах.
Однако, важно понимать ограничения типового функционала: как показывает практика (и опыт, описанный в сообщении 8), встроенная функция изменения префикса в 1С может перенумеровывать не все объекты. Часто она работает только с новыми документами, которые будут создаваться после изменения, или с "последними" документами, имеющими максимальные номера. Она может не пройтись по всей истории документов и справочников, чтобы изменить их префиксы со старого на новый. Например, может перенумероваться только один Ордер на поступление (ОРП) из всех существующих. Это означает, что после использования типовой функции большинство документов, созданных за предыдущий месяц, сохранят старый префикс. Поэтому нам потребуется дополнительное действие.
Поскольку типовой функционал может не справиться со всеми документами, нам понадобится более мощный инструмент для массового изменения префиксов. Здесь возможно несколько подходов, например, использовать решение перенумерация документов:
Использование специализированных внешних обработок. Это наиболее рекомендуемый способ. Существуют сторонние или разработанные на заказ обработки, которые предназначены именно для массовой замены префиксов объектов (справочников и документов) в конфигурациях на управляемых формах. Такие обработки способны:
Номер или Код и записать объект, не вызывая при этом полную логику проведения документа, которая может быть ресурсоемкой и потенциально менять движения по регистрам. Например, вместо использования метода ДокументОбъект.Провести(), мы будем использовать ДокументОбъект.Записать(РежимЗаписиДокумента.Запись) или даже прямую модификацию свойства ДокументОбъект.Номер с последующей записью. В некоторых случаях могут использоваться служебные методы платформы 1С для установки нового номера.НомерДляПечати: Сообщение 6 справедливо указывает на реквизит НомерДляПечати. Если он используется в конфигурации, обработка должна также его учитывать и корректировать, если он содержит префикс.Пример концептуальной логики такой обработки:
// Примерный фрагмент кода для обработки документов
Для Каждого МетаданныеДокумента Из Метаданные.Документы Цикл
ИмяДокумента = МетаданныеДокумента.Имя;
МенеджерДокумента = Документы[ИмяДокумента];
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Документ." + ИмяДокумента + ".Ссылка КАК Ссылка,
| Документ." + ИмяДокумента + ".Номер КАК Номер
|ИЗ
| Документ." + ИмяДокумента + " КАК Документ." + ИмяДокумента + "
|ГДЕ
| НАЧАЛО(Документ." + ИмяДокумента + ".Номер, " + СтрДлина(СтарыйПрефикс) + ") = &СтарыйПрефикс";
Запрос.УстановитьПараметр("СтарыйПрефикс", СтарыйПрефикс);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Попытка
ОбъектДокумента = Выборка.Ссылка.ПолучитьОбъект();
Если ОбъектДокумента.Номер.НачинаетсяС(СтарыйПрефикс) Тогда
НовыйНомерБезПрефикса = СтрЗаменить(ОбъектДокумента.Номер, СтарыйПрефикс, "");
ОбъектДокумента.Номер = НовыйПрефикс + НовыйНомерБезПрефикса;
ОбъектДокумента.Записать(РежимЗаписиДокумента.Запись); // Важно: используем Запись, а не Провести
// Если есть НомерДляПечати и он используется
Если ОбъектДокумента.Метаданные().Реквизиты.Найти("НомерДляПечати") <> Неопределено Тогда
Если ОбъектДокумента.НомерДляПечати.НачинаетсяС(СтарыйПрефикс) Тогда
НовыйНомерДляПечатиБезПрефикса = СтрЗаменить(ОбъектДокумента.НомерДляПечати, СтарыйПрефикс, "");
ОбъектДокумента.НомерДляПечати = НовыйПрефикс + НовыйНомерДляПечатиБезПрефикса;
ОбъектДокумента.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Исключение
Сообщить("Ошибка при обработке документа " + Выборка.Ссылка + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецЦикла;
// Аналогичная логика для справочников
Для Каждого МетаданныеСправочника Из Метаданные.Справочники Цикл
ИмяСправочника = МетаданныеСправочника.Имя;
МенеджерСправочника = Справочники[ИмяСправочника];
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Справочник." + ИмяСправочника + ".Ссылка КАК Ссылка,
| Справочник." + ИмяСправочника + ".Код КАК Код
|ИЗ
| Справочник." + ИмяСправочника + " КАК Справочник." + ИмяСправочника + "
|ГДЕ
| НАЧАЛО(Справочник." + ИмяСправочника + ".Код, " + СтрДлина(СтарыйПрефикс) + ") = &СтарыйПрефикс";
Запрос.УстановитьПараметр("СтарыйПрефикс", СтарыйПрефикс);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Попытка
ОбъектСправочника = Выборка.Ссылка.ПолучитьОбъект();
Если ОбъектСправочника.Код.НачинаетсяС(СтарыйПрефикс) Тогда
НовыйКодБезПрефикса = СтрЗаменить(ОбъектСправочника.Код, СтарыйПрефикс, "");
ОбъектСправочника.Код = НовыйПрефикс + НовыйКодБезПрефикса;
ОбъектСправочника.Записать(); // Для справочников обычно достаточно обычной записи
КонецЕсли;
Исключение
Сообщить("Ошибка при обработке элемента справочника " + Выборка.Ссылка + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецЦикла;
Важно: Перед запуском такой обработки в рабочей базе, обязательно протестируйте её на копии базы! Убедитесь, что все документы и справочники переименованы корректно и что после этого не возникло никаких новых ошибок. Возможно, потребуется участие квалифицированного программиста 1С для доработки или использования проверенных внешних обработок.
Если за месяц работы новой УНФ были выданы внешним контрагентам документы (счета, накладные, акты) с номерами, содержащими старый префикс («НФ»), вам, возможно, придется перевыставить эти документы с новыми номерами (например, «НФ2-…»). Это особенно актуально, если партнеры ведут учет по вашим номерам. Если в печатных формах префикс не отображался, то, возможно, и перевыставление не потребуется, но это нужно тщательно проверить.
После всех изменений в префиксе и перенумерации документов, необходимо тщательно протестировать синхронизацию данных между новой УНФ и БП. Запустите обмен, проверьте логи, убедитесь, что все объекты корректно передаются, что нет ошибок уникальности и что данные в БП обновляются правильно. Желательно сначала провести тестовый обмен на небольшом объеме новых данных, а затем уже на полном объеме.
Чтобы избежать подобных проблем в будущем, рекомендуем придерживаться следующих правил:
Таким образом, проблема с одинаковыми префиксами решаема, но требует внимательного и методичного подхода. Главное – не игнорировать проблему и действовать последовательно, начиная с резервного копирования и заканчивая тщательным тестированием.