При переносе данных из 1С 7.7 в 1С 8 часто возникает необходимость сохранить связь между старыми и новыми объектами. Для этого в 1С 8 создают специальные реквизиты, например, Ид77, которые хранят идентификатор исходного объекта из 1С 7.7. Однако формат этого идентификатора может быть неочевидным, что затрудняет его использование для поиска соответствующих объектов в базе 1С 7.7. Рассмотрим, как понять структуру такого идентификатора и как по нему установить соответствие с объектом в 1С 7.7.
Для начала, давайте разберем, как формируется внутренний идентификатор объекта в 1С 7.7 с помощью функции ЗначениеВСтрокуВнутр(). Эта функция возвращает строковое системное представление значения, которое предназначено для внутреннего использования платформой, а не для непосредственного отображения пользователю.
Типичный вид внутреннего идентификатора в 1С 7.7 для конкретного элемента справочника, полученного через Спр.ТекущийЭлемент(), выглядит следующим образом:
{"B","0","0","172","0","0"," 20653100"}
Разберем основные части этого идентификатора:
СправочникОбъект), "D" – документ (ДокументОбъект), а "F" – набор записей регистра и т.д.Спр.ТекущийЭлемент()), этот параметр является внутренним идентификатором вида объекта или, иными словами, ID таблицы метаданных. Он уникален для каждого типа справочника (например, справочника "Номенклатура", "Контрагенты" и т.д.).Теперь рассмотрим, как выглядит реквизит Ид77 в базе 1С 8, который был получен при переносе:
МК{"B","0","0","0","0","0"," 493 11464100"}
Мы видим несколько отличий от стандартного представления 1С 7.7:
Эти изменения не случайны и говорят нам о том, как именно был сформирован идентификатор в 1С 7.7 перед переносом. Причиной такого формата является использование в 1С 7.7 ссылки неопределенного типа или generic-объекта Справочник вместо ссылки на конкретный элемент справочника.
Проведем эксперимент в 1С 7.7, чтобы лучше понять этот механизм. Рассмотрим два варианта получения строкового представления идентификатора:
Если мы получаем строковое представление для конкретного элемента, например, с формы справочника, где реквизит имеет тип "Справочник.Номенклатура", то функция ЗначениеВСтрокуВнутр() вернет нам привычный формат:
// Предположим, что Спр - это Справочник.Номенклатура.ТекущийЭлемент()
Объект = Спр.ТекущийЭлемент();
СтрокаИД = ЗначениеВСтрокуВнутр(Объект);
// Результат: {"B","0","0","84","0","0"," 110660001"}
// Где 84 - ID таблицы для Номенклатуры, 110660001 - ID элемента
Здесь четвертый параметр (в данном случае "84") содержит ID таблицы справочника, а седьмой параметр ("110660001") – ID самого элемента.
Если же мы получаем строковое представление для объекта, который имеет неопределенный вид, например, для переменной, объявленной как Справочник без указания конкретного типа, или для реквизита на форме "Неопределенный Справочник", то результат будет другим:
// Предположим, что Объект - это переменная типа "Справочник",
// в которую был присвоен элемент справочника "Номенклатура"
Объект = Справочники.Номенклатура.НайтиПоКоду("00001"); // Пример получения элемента
СтрокаИД = ЗначениеВСтрокуВнутр(Объект);
// Результат: {"B","0","0","0","0","0"," 84 110660001"}
// Где 0 - ID таблицы, а 84 и 110660001 объединены в седьмом параметре
В этом случае четвертый параметр становится "0", а ID таблицы ("84") и ID элемента ("110660001") объединяются в седьмом параметре. Именно такой формат мы и наблюдаем в реквизите Ид77 в 1С 8. Это означает, что при формировании Ид77 в 1С 7.7 использовался объект, который обрабатывался как "неопределенный справочник" или "справочник произвольного вида".
Теперь, когда мы поняли структуру Ид77, мы можем восстановить исходный идентификатор 1С 7.7 и использовать его для поиска объекта. Рассмотрим наш пример:
Ид77 = "МК{\"B\",\"0\",\"0\",\"0\",\"0\",\"0\",\" 493 11464100\"}"
Следуем шагам для восстановления:
Давайте разберем это на примере:
Исходный Ид77 в 1С 8:
МК{"B","0","0","0","0","0"," 493 11464100"}
Мы берем строковую часть без префикса: {"B","0","0","0","0","0"," 493 11464100"}
Разбираем седьмой параметр: " 493 11464100".
Извлекаем первые значащие цифры, которые являются ID таблицы: "493".
Извлекаем оставшуюся часть, которая является ID элемента: " 11464100".
Формируем корректную строку для 1С 7.7, где "493" становится четвертым параметром:
{"B","0","0","493","0","0"," 11464100"}
Теперь, имея эту строку, мы можем использовать функцию ЗначениеИзСтрокиВнутр() в 1С 7.7 для получения ссылки на исходный объект:
// Пример кода в 1С 7.7
СтрокаИД77 = "{\"B\",\"0\",\"0\",\"493\",\"0\",\"0\",\" 11464100\"}";
ОбъектИз77 = ЗначениеИзСтрокиВнутр(СтрокаИД77);
Если ТипЗначения(ОбъектИз77) = "Справочник" Тогда
Сообщить("Найден объект справочника: " + ОбъектИз77.Наименование);
Иначе
Сообщить("Объект не найден или имеет другой тип.");
КонецЕсли;
Таким образом, по преобразованной строке мы можем установить соответствие с объектом в 1С 7.7-базе.
Префиксы, такие как "МК", "ВЛ", "ОП", которые встречаются в начале Ид77, имеют важное значение. Вероятно, они указывают на источник данных. Это стандартная практика при переносе данных из нескольких различных информационных баз 1С 7.7 в одну объединенную базу 1С 8. Или же это может быть связано с использованием распределенных информационных баз (РИБ) в 1С 7.7.
Рассмотрим, почему используются префиксы:
Если вы столкнулись с такими префиксами, это с высокой вероятностью означает, что ваша 1С 8 база является результатом слияния или консолидации данных из нескольких разрозненных 1С 7.7 систем.
Перенос данных из 1С 7.7 в 1С 8.х обычно осуществляется с помощью специально разработанных правил обмена или обработок переноса данных. В рамках этих процессов:
Ид77), в который записывается внутренний идентификатор исходного объекта 1С 7.7. Это позволяет в будущем проверять полноту и корректность переноса, а также при необходимости восстанавливать связь с историческими данными.Именно для сохранения этой исторической связи и возможности ее восстановления и был создан реквизит Ид77 в 1С 8. Понимание его структуры позволяет эффективно использовать его для решения задач, связанных с данными 1С 7.7.
Мы выяснили, что формат реквизита Ид77, содержащего идентификатор объекта 1С 7.7 в базе 1С 8, отличается от стандартного представления ЗначениеВСтрокуВнутр(Спр.ТекущийЭлемент()) из-за способа его формирования в 1С 7.7 – через объект неопределенного типа. Мы также определили, что префиксы, такие как "МК", "ВЛ", "ОП", используются для обозначения источника данных или для обеспечения уникальности при консолидации нескольких баз.
Теперь мы обладаем всеми необходимыми знаниями для того, чтобы:
Ид77.ЗначениеИзСтрокиВнутр() в 1С 7.7.Этот подход позволяет нам эффективно работать с перенесенными данными и поддерживать целостность информации между разными версиями платформы 1С.