Назначение
В некоторых случаях, в конфигурации требуется массово заменить (либо назначить, удалить) префиксы справочников и документов. Например:
- при переходе с предыдущего поколения конфигураций (например с БП 2.0, где использовались двузначные префиксы на БП 3.0, где используются обязательные четырехзначные), если хочется сохранить единообразие префиксов в архивном и рабочем периоде, или добавлять документы в архивный период;
- при настройке обмена между двумя информационными базами (например, ЗУП 3.1 и БП 3.0), если ранее учет велся независимо, и префиксы информационных баз не были назначены (т.е., фактически, использовался 00), либо были назначены неправильно, либо у одной и той же организации в двух базах назначены разные префиксы;
- при добавлении организации и необходимости назначить префикс уже существующей организации;
- в иных случаях, связанных с наведением порядка.
Для решения такой задачи была создана данная внешняя обработка, которую я применяю почти у каждого клиента. Чаще всего приходится это делать, настраивая связку "БП 3.0 - ЗУП 3.1". Обработка позволяет массово отобрать объекты, префикс которых подлежит замене, а затем:
а) составить список, чтобы оценить масштаб проблем и возможные "подводные камни";
б) заменить исходный префикс на явно введенное значение;
в) заменить исходный префикс на префикс, генерируемый штатными механизмами информационной базы (т.е. для типовых конфигураций - составленный префиксом организации и/или префиксом информационной базы).
При этом, предусмотрена замена в тестовом режиме (когда действия в базе реально не выполняются), замена в режиме загрузки (для отключения контроля уникальности, дат запрета редактирования и т.п.). При выполнении действий ведется протоколирование обработанных объектов (в протоколе указывается представление объекта, старые и новые номера/коды).
Обработка может быть подключена в "Дополнительные обработки" библиотеки стандартных подсистем, однако я настоятельно не рекомендую предоставлять широкому кругу пользователей этот, достаточно опасный, инструмент.
Интерфейс
Все действия осуществляются в единственной форме, внешний вид которой представлен на рисунке (обработка запущена в конфигурации "Бухгалтерия предприятия 3.0"):
В верхней части формы указывается искомый префикс, по которому будут отбираться объекты, подлежащие обработке.
В средней части формы имеется возможность отобрать типы обрабатываемых справочников и документов (при открытии формы эти списки будут заполнены теми видами объектов, для которых используется код (номер)). Документы, при этом, можно отобрать по периоду.
В нижней части формы размещены кнопки действий, которые возможно предпринять.
На закладке "Протокол" отображается результат выполнения команд в текстовом виде, доступным для копирования. Пример протокола замены префикса "БП-" на "00-" в тестовом режиме представлен на рисунке:
Порядок использования
Для использования обработки, прежде всего, требуется осознать имеющиеся, с точки зрения пользователя, проблемы префиксов в информационной базе и наметить план и порядок обработки для каждой из них, т.к. порядок обработки может влиять на отборы следующего этапа. Неправильное применение обработки крайне опасно, т.к. можно необратимо испортить номера (коды) объектов в информационной базе, необратимо смешав, например, правильную нумерацию и неправильную.
Настоятельно рекомендуется предварительно сделать резервную копию базы, а в процессе использования обработки не допускать в нее других пользователей.
1. В первую очередь, требуется задаться шаблоном исходного (подлежащего замене) префикса для отбора объектов.
Шаблон, введенный в поле "маска искомого префикса" будет применяться "буквально", с левой стороны кода (номера) объекта.
Если, допустим, нужно найти и обработать объекты с кодом вида "0000000001", но в базе есть также объекты с кодом вида "0000-00001," которые обрабатывать не нужно, то в данном поле необходимо указать "00000", чтобы в выборку не попали объекты с "нормальным" префиксом "0000-". Справочники и документы рекомендуется обрабатывать отдельно, т.к. документы обычно имеют более широкий префикс, зависящий не только от префикса ИБ, но и организации.
Следует также отдельно отобрать и обработать зависящие от организации справочники (например, "Сотрудники"), у которых префикс тоже включает префикс организации, не зависящие от организации документы.
В маске можно использовать символ "_", который означает подстановку любого символа.
2. Затем следует отметить требуемые виды объектов.
Кнопка "Отметить префиксуемые" взводит флаг обработки на тех типах объектов, у которых предусмотрена процедура присвоения префикса при создании объекта или переносе его на другую дату (определяется по наличию подписки на событие вида "ПриУстановкеНовогоНомера", что рассчитано, прежде всего, на работу в конфигурациях, основанных на Библиотеке стандартных подсистем, но может сработать и в произвольных). Типы объектов, также, могут быть отмечены вручную.
Для документов дополнительно предусмотрен отбор по периоду.
3. Желательно использовать команду "Сформировать список", чтобы осмотреть пространство объектов, которые будут обработаны, их текущий код (номер), и убедиться, что отбор назначен верно.
4. Далее, рекомендуется прогнать какую-либо обработку замены сначала в тестовом режиме, и только потом, - осмотрев протокол, и убедившись в корректности замены, - в "боевом".
В ходе обработки можно заменить искомый префикс на конкретный, заданный эксплуатантом (кнопка "Заменить на целевой префикс", ввести целевой префикс справа).
Можно задействовать штатный, предусмотренный разработчиком конфигурации, механизм назначения префикса (кнопка "Сформировать правильный префикс"), который сработает только в том случае, если он для данного типа объектов назначен через подписку на событие "ПриУстановкеНовогоНомера", или аналогичную функцию в модуле объекта.
В ряде случаев, при замене префикса, образуются объекты с одинаковым номером, в результате чего, записи очередного объекта не произойдет. Это может быть как следствием ошибочного применения обработки, так и запланированным поведением.
Так, при переходе с БП 2.0 на БП 3.0, все архивные объекты сохраняют старые префиксы, но списках некоторых видов документов создаются не проведенные "документы-заглушки", у которых префикс назначен в соответствии с новой системой, а числовое значение номера повторяет значение последнего архивного документа - для того, чтобы нумерация очередного введенного в новой базе документа продолжилась, хоть и с новым префиксом, а не началась с нуля.
РК-00000001 - из БП 2.0 РК-00000002 - из БП 2.0 РК-00000003 - из БП 2.0 0000-000003 - заведен процедурой перехода, чтобы "застолбить" нумерацию, не проведен 0000-000004 - введен оператором в новой базе
При замене префикса РК- на 0000- образуется два объекта с номером 0000-0000003, что приведет к ошибке записи.
В некоторых случаях, заменить префикс помешает дата запрета редактирования или иные контрольные механизмы.
Для уклонения от таких ошибок предусмотрен флаг "Режим загрузки при обмене данными", которой отключит большую часть проверок, включая проверку на уникальность номера. Возникшие "задвоения" можно устранить вручную, удалив лишние объекты или скорректировав номера.
Обработка большого количества объектов может занять длительное время. На время выполнения замены интерфейс будет заблокирован.
Примеры использования
1. После перехода с конфигурации "Бухгалтерия предприятия 2.0" на "3.0" в информационной базе образовался архив объектов без префиксов, при этом, новые объекты всегда будут иметь префиксы 00- (в объектах, не зависящих от организации) и 0000- (в объектах, зависящих от организации), или иные (в соответствии с заданными префиксами ИБ и организаций). Требуется привести архив объектов в соответствие с новой системой.
1) "Отметить все префиксуемые" справочники (и затем снять флаг с "Сотрудников"), указать маску префикса "000" и использовать кнопку "Сформировать правильный префикс". Затем снять отметки со справочников.
2) "Отметить все префиксуемые" документы, добавить справочник "Сотрудники", указать маску префикса 00000 и использовать кнопку "Сформировать правильный префикс".
Выполнять в "режиме загрузки при обмене", т.к. вследствие обстоятельств, описанных в этой сноске, документы-заглушки встраиваются в общую нумерацию, и начинают конфликтовать с текущими документами. Их, впрочем, можно предварительно удалить вручную.
Задвоенные номера также могут образоваться если пользователи, до применения обработки, начали вводить документы прошлых лет (нумерация которых начнется с №1 в новых префиксах, т.к. заглушки для прошлых лет процедурой перехода не вводятся) и не учли этот момент вручную, назначив номер для первого такого введенного документа каждого вида.
Что касается справочников, то их нумерация, после перехода, всегда начинается с №1 в новых префиксах, т.к. "заглушки" для них не предусмотрены, и если пользователи, до применения данной обработки, успели ввести элементы, то, после ее применения, образуются элементы с дублирующимися номерами (новые, введенные пользователями 00-0000001 и старые, которые пришли из исходной базы в виде 0000000001 и заменены на 00-0000001 данной обработкой).
Две последние ситуации нужно обработать:
а) ДО применения данной обработки (выведя номера новых объектов выше старых, т.е. если старый заканчивался на 0000000256, то заведенные в этой базе начать с 00-00000257, в чем может помочь обработка "Универсальная обработка справочников и документов" с ИТС, которая позволяет отобрать и перенумеровать объекты с произвольного номера),
б) после - вручную,
в) или смириться с дубликатными номерами, что, впрочем, может помешать пользователям редактировать карточки таких объектов в будущем.
2. Тоже самое, что в примере №1, но в исходной базе был какой-либо префикс без дефиса (допустим, "ЩФ"), или с таковым.
1) "Отметить все префиксуемые" справочники (и затем снять флаг с "Сотрудников"), указать маску префикса "ЩФ", или "ЩФ0" и выполнить команду "Сформировать правильный префикс". Затем снять отметки со справочников.
2) "Отметить все префиксуемые" документы, добавить справочник "Сотрудники", указать маску префикса "ЩФ", или "ЩФ0" и выполнить команду "Сформировать правильный префикс".
Если дефис был, то использовать маски "ЩФ-" или "ЩФ-0"
3. В "Бухгалтерии предприятия 3.0" используется префикс информационной базы "БП". В результате, в базе заводятся справочники с кодом вида "БП-000..." и документы вида "00БП-00...". Пользователь желает заменить "БП" на "00" (чтобы номера содержали только цифры). Или наоборот.
То же самое применимо к любой другой замене префикса ИБ (например, заменить префикс ИБ "00" на "01" в ЗУП при первоначальной настройке синхронизации с БП)
1) "Отметить все префиксуемые" справочники, кроме "Сотрудники", указать маску искомого префикса "БП-", и выполнить команду "Сформировать правильный префикс". Снять отметки со справочников.
2) "Отметить все префиксуемые" документы, вручную добавить справочник "Сотрудники", указать маску "00БП-" и выполнить команду "Сформировать правильный префикс".
После этого следует зайти в Администрирование - Синхронизация данных и назначить новый префикс ИБ.
Если, при этом, ранее уже была настроена синхронизация, то, в ряде случаев, может потребоваться замена префиксов ИБ в планах обмена этой и корреспондирующей баз, а также следует убедиться, что объекты с измененным префиксом пометились на выгрузку и корректно принялись корреспондирующей базой. Этот порядок действий находится за пределами данной статьи.
Аналогично можно произвести обратные замены, т.к предпочтения по назначению префиксов организаций и информационных баз у всех свои.
4. В "Бухгалтерии предприятия 3.0" требуется заменить префикс организации (или назначить его, что, фактически, подразумевает замену с префикса "00").
1) Открыть карточку организации и задать для нее новый префикс.
2) "Отметить все префиксуемые" документы, вручную добавить справочник "Сотрудники". Указать маску искомого префикса "__00-" (00- для примера назначения префикса, тут может быть старый префикс организации), и выполнить команду "Сформировать правильный префикс".
5. В информационной базе у какого-либо типа объектов вообще отсутствуют префиксы, номера начинаются с нулей без дефиса (например, после разовой загрузки данных из конфигураций на базе 1С 7.7 или других систем), требуется назначить префикс:
а) фиксированный, например, "01-".
Отметить нужный тип объекта. Указать маску "00000" (или меньшую по длине, в соответствии с этим замечанием). Выполнить команду "Заменить на целевой префикс", предварительно указав в поле напротив "01-".
б) в соответствии с правилами, принятыми для этой базы, вписав загруженные объекты в единый порядок нумерации.
1) Предварительно "отвести" нумерацию загруженных объектов с помощью "Универсальной обработки справочников и документов", перенумеровав их с последнего номера объекта, введенного в эту информационную базу, и получившего нормальный префикс (чтобы не возникло конфликта нумерации)
2) Отметить нужный тип объекта. Указать маску "00000" (или меньшую по длине, в соответствии с этим замечанием). Выполнить команду "Сформировать правильный префикс".
6. Требуется удалить префикс из объектов (оставить в начале номера нули без дефиса)
С учетом ранее указанных замечаний, указать шаблон исходного префикса. Выбрать объекты необходимых типов. Затем выполнить команду "Заменить на целевой префикс", предварительно очистив поле целевого префикса.
7. Прочее...
Существует огромное количество возможных кейсов использования данной обработки. К сожалению, вспомнить все варианты и перечислить их в этой статье - невозможно. Предлагаю задать интересующие вопросы в комментариях, а я, по мере возможности, постараюсь отвечать на них, что сформирует некую дополнительную базу знаний.
Совместимость
Обработка действует в типовых и самописных конфигурациях, разработанных на управляемых формах, вне зависимости от версии. Совместима с платформой от версии 8.3.12.
Примеры, представленные в статье, тестировались на конфигурациях "Бухгалтерия предприятия 3.0.88" и "Зарплата и управление персоналом 3.1.16".