Выход технологической платформы 1С:Предприятие 8.3.8 принес разработчикам и системным администраторам как долгожданные архитектурные новшества, так и ряд жестких ограничений и неочевидных ошибок. Проанализируем ключевые изменения платформы, разберем типичные проблемы при обновлении информационных баз и рассмотрим по шагам методы их устранения.
До версии 8.3.8 файловые информационные базы использовали размер страницы данных, равный 4096 байт. Архитектура внутреннего хранилища файла 1Cv8.1CD (где корневая страница ссылается на страницы индексов, а те — на страницы данных) ограничивала максимальный объем одной внутренней таблицы величиной приблизительно в 4 ГБ. Начиная с версии 8.3.8, реализована поддержка страниц переменного размера: 4096, 8192, 16384, 32768 и 65536 байт.
При использовании страницы размером 65 536 байт теоретический предел размера отдельной таблицы возрастает до 64 ГБ. Разберем, как выполнить изменение формата:
cnvdbfl.exe, расположенную в каталоге bin установленной платформы, указав путь к файлу базы данных и требуемый размер страницы.Важное ограничение: после конвертации на размер страницы более 4096 байт база данных физически не сможет открываться версиями платформы ниже 8.3.8. При попытке открытия прежними релизами система сообщит о несовместимости формата файла.
При переходе клиент-серверных баз на платформу 8.3.8 многие сталкиваются с ошибками СУБД при создании новой информационной базы или восстановлении из .dt, если сервер 1С и MS SQL Server физически разнесены на разные хосты. Выясним причину: начиная с этой версии, платформа прекратила использование устаревшего системного OLE DB провайдера SQLOLEDB и перешла на работу через Microsoft SQL Server Native Client (SQLNCLI11).
Для устранения проблемы разберем обязательные шаги:
sqlncli.msi соответствующей разрядности непосредственно на сервер, где запущены службы ragent и rphost.Кроме того, платформа изменила типы полей на стороне MS SQL: устаревший тип DATETIME заменен на DATETIME2(3), что устранило необходимость сдвига дат на 2000 лет и повысило точность, а типы IMAGE и TEXT заменены на VARBINARY(MAX) и NVARCHAR(MAX). Обратим внимание, что физическая смена типов колонок в СУБД происходит только при первой полной реструктуризации таблиц (например, при обновлении метаданных или через операцию реструктуризации в «Тестировании и исправлении»).
В платформе 8.3.8 без режима совместимости ужесточены правила работы клиентского интерфейса: в обработчиках событий ПередЗакрытием, ПриЗакрытии, ПередЗавершениемРаботыСистемы и ПриЗавершенииРаботыСистемы запрещено открывать окна и выполнять любые вызовы сервера. Попытка выполнить серверный вызов приводит к аварийной ошибке «Серверные вызовы при завершении работы запрещены».
Рассмотрим правильный паттерн реализации вопросов пользователю («Записать и закрыть») через прерывание стандартного потока событий с использованием неблокирующего метода ПоказатьВопрос():
&НаКлиенте
Переменная ДействиеПодтверждено;
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ДействиеПодтверждено = Истина Тогда
Возврат;
КонецЕсли;
Если Модифицированность Тогда
Отказ = Истина;
Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопросПередЗакрытием", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Сохранить изменения перед закрытием?", РежимДиалогаВопрос.ДаНетОтмена);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросПередЗакрытием(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ДействиеПодтверждено = Истина;
Записать();
Закрыть();
ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда
Модифицированность = Ложь;
ДействиеПодтверждено = Истина;
Закрыть();
КонецЕсли;
КонецПроцедуры
Если необходимо выполнять сохранение данных сеанса на сервере перед выходом, перенесем логику на периодический фоновый опрос или обработчики ожидания, так как закрытие формы больше не позволяет синхронно обращаться к базе данных.
Платформа 8.3.8 предоставила возможность использовать пакетные запросы с временными таблицами непосредственно в качестве источника динамического списка, а также добавила метод Запрос.ВыполнитьПакетСПромежуточнымиДанными() и коллекцию МенеджерВременныхТаблиц.Таблицы при отладке.
Проанализируем архитектурные правила и ограничения использования пакетов в динамических списках:
УНИЧТОЖИТЬ) или выгрузками запрещено.В сборках ветки 8.3.8 до версии 8.3.8.1964 проявилась критическая ошибка кластера: процессы rmngr и rphost при обмене служебными пакетами не освобождали сокеты протокола UDP. Это приводило к постепенному исчерпанию доступного пула портов операционной системы, после чего пользователи теряли связь с сервером, а фоновые рассылки почты и регламентные задания аварийно завершали рабочие процессы.
Разберем пути решения данной проблемы:
8.3.8.2027 или более поздние стабильные версии, где утечка сетевых дескрипторов официально устранена.MaxUserPort.В интерфейсе «Такси» на платформе 8.3.8 вертикальная полоса прокрутки в динамических списках была заменена кнопками навигации по страницам. Одновременно в обычных формах (например, в типовых решениях УПП 1.3 и КА 1.1) проявился баг с неработающей полосой прокрутки у элементов управления типа ТабличноеПоле со значением Список.
Для обычных форм проблема устраняется установкой обновлений платформы (начиная с релиза 8.3.8.1933 функциональность элементов списка полностью восстановлена). Если после обновления конфигурации границы таблиц отображаются черными рамками, исправим это через свойства основного стиля конфигурации, установив цвет рамок в значение Авто.