В практике администраторов и разработчиков 1С встречается крайне неприятная ситуация: после проведения штатной процедуры «Тестирования и исправления» (ТиС) или после очередного обновления конфигурации пользователи замечают, что из журналов (например, «Реестр торговых документов» в УТ 11 или «Журнал операций» в БП 3.0) исчезли старые документы. При этом сами документы физически присутствуют в базе данных, их можно найти через отчеты или консоль запросов, а новые созданные документы отображаются корректно. Рассмотрим подробно, почему так происходит и как восстановить работоспособность системы.
Проанализируем архитектуру современных конфигураций на базе БСП (УТ 11, ERP, КА 2, БП 3.0). Для ускорения работы динамических списков и обеспечения возможности быстрого поиска по разным типам документов разработчики 1С внедрили специальный вспомогательный механизм — регистр сведений РеестрДокументов. Именно данные из этого регистра отображаются в большинстве сводных журналов.
Разберем ситуацию: когда мы добавляем новые реквизиты в документы через расширения конфигурации, платформа создает дополнительные таблицы в базе данных для хранения этих данных. В версиях платформы 8.3.14, 8.3.15 и некоторых сборках 8.3.16 наблюдался критический баг: при выполнении реструктуризации (которая запускается во время ТиС) связь между основной таблицей документа и таблицей расширения могла обрабатываться некорректно. В результате записи в регистре РеестрДокументов, ссылающиеся на эти документы, либо удалялись, либо не могли быть обновлены, так как платформа «теряла» объект из-за конфликта метаданных расширения.
Если документы остались в базе, но пропали из журналов, нам необходимо заново заполнить регистр РеестрДокументов. Перепроведение документов вручную часто не помогает, так как механизмы БСП могут блокировать обновление регистра, если не видят изменений в «ключевых» полях. Посмотрим на программный способ решения задачи.
Мы можем создать внешнюю обработку и программно вызвать методы обновления данных. Для этого нам понадобится менеджер соответствующего регистра. Разберем пример кода для массового восстановления данных:
// Пример программного восстановления записей для типа документа "РеализацияТоваровУслуг"
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Проведен = ИСТИНА";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Вызываем экспортную процедуру из модуля менеджера регистра
// В разных версиях БСП название может отличаться:
// Либо ОбновитьДанныеОбъекта, либо ЗаписатьДанныеДокумента
РегистрыСведений.РеестрДокументов.ОбновитьДанныеОбъекта(Выборка.Ссылка);
КонецЦикла;
Этот метод является наиболее безопасным, так как он не затрагивает расширения и не требует удаления данных. Однако он требует наличия навыков программирования и доступа к консоли кода.
Как показывает практика многих специалистов, наиболее стабильное решение проблемы — это избавление от хранения данных в расширениях для критически важных объектов. Рассмотрим шаги по исправлению структуры базы:
Реструктуризация таблиц информационной базы и Проверка логической целостности.После выполнения этих действий и повторного ТиС платформа корректно пересоберет индексы, и документы снова появятся в реестрах. Это происходит потому, что исчезает необходимость «склеивать» таблицы из разных источников (основная база + расширение) при заполнении служебных регистров.
Проанализируем ситуацию с версией платформы. Ошибки реструктуризации были признаны разработчиками 1С и исправлены в более поздних версиях. Если вы используете платформу ниже 8.3.17.х, настоятельно рекомендуем выполнить обновление до актуальных релизов (например, 8.3.20 или 8.3.22).
Иногда записи в журналах не видны из-за некорректного кэша сервера приложений. Выполним следующие действия:
1C:Enterprise 8.3 Server Agent.C:\Program Files\1cv8\srvinfo).snccntx, reg_1541 и кэш сеансов).В некоторых случаях после обновления платформы и очистки кэша достаточно просто выполнить повторное ТиС (только «Исправление ссылочной целостности»), чтобы документы вернулись в списки.
В конфигурациях, использующих актуальные версии Библиотеки стандартных подсистем, предусмотрена встроенная обработка для обслуживания этого регистра. Чтобы найти её, выполним следующие шаги:
Подводя итог, можно сказать, что проблема «исчезновения» документов — это следствие конфликта механизма расширений и оптимизированных журналов (регистра РеестрДокументов). Чтобы избежать этого в будущем, старайтесь не добавлять в расширения реквизиты для документов с очень большим объемом данных (миллионы записей), либо своевременно обновляйте платформу до стабильных релизов. Самым эффективным «быстрым» лечением остается программный вызов ОбновитьДанныеОбъекта, а самым надежным — перенос реквизитов в основную конфигурацию.