На написание данной статьи меня сподвигла проблема невозможности создать хранилище для конфигурации 1С:УПП и полное отсутствие описания причин / решений в интернете.
Отдельно спасибо хотел бы сказать пользователю на Инфостарте lupupa85, которая дала нужный вектор в поиске проблемы, и пользователю AKV77 за статью: //infostart.ru/public/251265/
ИССЛЕДОВАНИЕ.
Поняв, как все работает (даже в общих чертах), проще принимать решения и контролировать процесс.
Если посмотреть историю распухания конфигурации 1С:УПП, а именно, выгруженной в файл cf, то мы увидим следующую картину по версиям:
1.3.111.2 – чуть больше 300 мбайт;
1.3.112.1 – уже больше 500 мбайт;
1.3.115.2 – больше 550 мбайт.
Размеры конфигураций приведены с целью показать, какой произошел скачок размера конфигурации с версии 1.3.111.2 на версию 1.3.112.1 и дальнейшую динамику.
Казалось бы, причем тут размер самой конфигурации, тем более он не дотягивает даже до размера 1 Гб? Однако, мы не забываем, что если 1С:УПП работает на платформе 8.2, то она (платформа) является 32-битной со своими устаревшими ограничениями. И как ниже будет понятно, именно это, совместно с еще одним моментом и служит причиной вываливания платформы в ошибку при создании хранилища с ошибкой:
В результате поиска решения, было выявлено, что при создании хранилища платформа создает временный файл *.tmp в «C:\Users\...Пользователь...\AppData\Local\Temp» (для XP путь будет другим) и в случае достижения размера этого файла 2Гб, а если быть более точными по данным операционной системы Windows «2097мбайт» платформа как раз и валится в ошибку.
Видимо, какая-то компонента, которую использует платформа 8.2, являясь 32-битной, имеет ограничение на размер файла или на размер того, что хранится в tmp файле. Что хранится в tmp файле при создании хранилища мне выяснить не удалось, также не удалось выяснить и какая именно компонента виновата.
Хотя в логах Windows имеется запись об ошибке со ссылкой на компоненту, я не могу утверждать что виновата она. Замена этой компоненты на другие версии результата не принесло:
Путь сбойного приложения: C:\Program Files (x86)\1cv82\8.2.19.130\bin\1cv8.exe
Путь сбойного модуля: C:\WINDOWS\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.8387_none_5094ca96bcb6b2bb\MSVCR90.dll
Все попытки создания хранилища типовой 1С:УПП версии 1.3.115.2 были провальными и прерывались на 74% при достижении предельного размера tmp файла в 2Гб. На мысль натолкнула пользователь lupupa85, которая сказала, что в случае снятия конфигурации с поддержки, хранилище создается. Зная, что в обычном *.1CD (базе данных) при нахождении конфигурации на поддержке хранится сразу 2 конфигурации (текущая и конфигурация поставщика), а при снятии с поддержки конфигурация поставщика удаляется из базы, уменьшая общий объем таблиц в мбайтах, данное утверждение становится логичным. При проведении теста, из типовой конфигурации со снятой поддержкой действительно создалось хранилище, при этом предельный размер tmp файла достиг (второй файл):
Как видно, еще чуть-чуть (всего 100 мбайт) и хранилище не сможет создаться из типовой конфигурации даже при снятой поддержке.
Обрадовавшись, что, хотя бы так можно создать хранилище, я решил на своей конфигурации провести манипуляции, где меня постигло фиаско. Снятая с поддержки конфигурация при создании хранилища выдала ошибку на 99%. Тут нужно уточнить: что в нашей конфигурации объединены 1С:УПП + 1С:УАТ + свои доработки, соответственно общий размер таблиц в мбайтах превышает размер таблиц в типовой конфигурации.
Здесь я не буду описывать на скольких компьютерах, серверах с различными операционными системами (включая разрядность), объемами оперативной памяти и скоростями жестких дисков были попытки создать хранилище с отрицательным результатом, но можете поверить, за почти 7 дней – очень много. Можно сказать было испробовано почти все. Пожалуй, не было попыток только на Windows 10.
Также необходимо отметить, что для конфигурации "на поддержке" на платформе 8.3 (32-битной) хранилище создавалось без проблем.
Естественно о данной проблеме было сообщено в техническую поддержку 1С разработчикам и получен ожидаемый ответ: «Мы проверили, у нас все ОК». Поэтому не будем останавливаться на данном моменте, а пойдем дальше.
ВЫВОДЫ ИЗ ИССЛЕДОВАНИЯ.
Удалось выяснить:
1. Из-за какого файла, где расположенного и при каком объеме платформа 8.2 конфигурации 1С:УПП, начиная с 3.112.1 вываливается в ошибку:
- файл с расширением *.tmp;
- расположение «C:\Users\...Пользователь...\AppData\Local\Temp»;
- предельный размер «2097мбайт» (может в зависимости от операционной системы чуть-чуть отклоняться).
2. Замена компоненты «MSVCR90.dll» не дает никакого результата.
3. Оставшийся предельный размер *.tmp для создания хранилища из типовой конфигурации составляет в пределах 100 мбайт (если снята поддержка).
4. Если у Вас объединенная и доработанная конфигурация 1С:УПП, то даже со снятой поддержкой Ваш предел размера tmp файла может быть исчерпан.
5. Данная ошибка «неизвестна» / «известна, но не признается» технической поддержкой 1С.
6. На данную проблему не влияет версия или разрядность операционной системы, скорость и показатели железа. «Замедленная» проблема была заложена еще на этапе проектирования платформы, которая в версии 8.3 была устранена, а в 8.2 оставлена «как есть».
НЕ удалось выяснить:
1. Какая компонента 100% виновата в данной ошибке и причины ее поведения.
2. Что хранится в tmp файле.
РЕШЕНИЯ ПРОБЛЕМЫ.
1. Перевести работу сервера, клиентов и разработку на платформу версии 8.3 (с включенной / выключенной совместимостью).
Плюсы:
- Поскольку структура хранилища для платформы 8.3 переработана, то описанная ошибка исчезает сама по себе.
- Решена проблема платформы 8.2 с достижением одной таблицы в хранилище размера в 4Гб и невозможности подключения к хранилищу.
- По описаниям на форумах, скорость работы платформы 8.3 выше чем 8.2 (мною данное утверждение не проверено).
Минусы:
- На форумах имеется негативная информация о стабильности работы пользователей на ранних версиях платформы 8.3. О работе на последних версиях платформы (8.3.10 – 8.3.12) информация противоречивая, но более преобладает положительная, поэтому требуется проверка и тестирование.
- При наличии большого количества пользователей и особенно работы 24/7 требуется тщательная подготовка (установка платформы на клиентах, перевод на новую версию сервера и т.д.).
2. Постараться вынудить техническую поддержку 1С признать ошибку и исправить ее. Тут я не буду описывать минусы / плюсы, многие кто работает с 1С и так всё знают.
3. ВНИМАНИЕ!!!! НИЖЕОПИСАННОЕ РЕШЕНИЕ ПРОБЛЕМЫ ВЫПОЛНЯЕТСЯ ТОЛЬКО НА СВОЙ СТРАХ И РИСК И АВТОР НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА РЕЗУЛЬТАТ!!!
Данное решение необходимо применять только в случаях, когда Вам не подходит по каким-либо причинам 1 вариант.
Рекомендация: все манипуляции выполнить на копии, проверить, протестировать базу и только убедившись 100% в гарантированном результате применить на рабочей базе. Выполненные действия на рабочей базе НЕОБРАТИМЫ!!!
Предварительно, перед непосредственным выполнением всем операций необходимо:
- сделать копию рабочей базы и заблокировать от внесения изменений пользователями / программистами на период выполнения манипуляций;
- сделать файл cf из рабочей базы, сохранить в нескольких местах (вдруг по запарке затрете или удалите единственный);
- подготовить копию / копии рабочих баз для тестирования;
- подготовить «мощную тачку» с хорошим железом и обязательно на SSD (ОЗУ: 8 Гб, винт SSD SATA, а лучше M.2 от 250 Гб, процессор от 4 ядер, но с максимальной частотой на 1 ядро);
Для выполнения всех манипуляций у Вас должно быть достаточно времени, т.к. у меня в целом ушло на хорошем железе с учетом проверок и уже знания «как это делать» порядка 5 часов. Также все манипуляции по созданию хранилища рекомендую проводить на файловой чистой (без данных) конфигурации (это Вам сэкономит время на реструктуризации таблиц при обновлении конфигурации).
Третье решение разбивается на 2 подварианта. При этом желательно испробовать в начале вариант 3.1 и только в случае отрицательного результата перейти к варианту 3.2.
3.1. Данный вариант подходит, если конфигурация не сильно изменена и доработки не имеют огромных масштабов, соответственно и объемов в мбайтах. Итак, по порядку:
3.1.1. Снимаем конфигурацию с поддержки. Инструкция: //infostart.ru/public/251265/
3.1.2. Нажимаем «Обновить конфигурацию».
3.1.2. Создаем хранилище.
3.1.3. Подключаемся к хранилищу и захватываем все объекты для изменения. При необходимости нажимаем «Обновить конфигурацию».
3.1.4. Ставим конфигурацию на поддержку. Инструкция: //infostart.ru/public/251265/
3.1.5. Нажимаем «Обновить конфигурацию» и подливаем в хранилище (отпускаем объекты).
3.1.6. Подключаемся КОПИЕЙ к хранилищу, тестируем и проверяем на КОПИИ все ли в порядке с документами, движениями и т.д.
3.1.7. При необходимости повторяем на КОПИИ этапы 3.1.1-3.1.6 и только при 100% уверенности в результате подключаем к хранилищу РАБОЧУЮ БАЗУ и обновляем конфигурацию.
3.2. Если на этапе 3.1.2 платформа вывалилась в ошибку, то это говорит о том, что Ваша конфигурация слишком большая по объему и требуется что-то удалить. В моем случае, логично были выбраны общие модули, как имеющие огромный объем кода и при этом не имеющие критичных связей с другими элементами (за исключением подписок на события, но в этом случае мы просто оставляем модули в конфигурации). Итак, по этапам:
3.2.1. Снимаем конфигурацию с поддержки. Инструкция: //infostart.ru/public/251265/
3.2.2. Удаляем по одному общие модули из конфигурации. В случае, если конфигурация не дает удалить модуль из-за связанной подписки на события, то его просто пропускаем и удаляем следующие.
3.2.3. Нажимаем «Обновить конфигурацию».
3.2.4. Создаем хранилище. В случае, если при создании хранилища платформа опять вываливается в ошибку, то исходя из того, на каких % это произошло, необходимо вернуться на этап 3.2.2, но в этом случае уже подумать / почитать в интернете какие ОБЪЕМНЫЕ в мбайтах объекты можно с минимальным риском удалить. Необходимо исключить справочники, документы и любые другие элементы, ссылающиеся на другие объекты или имеющие ссылки с других объектов конфигурации. Если мы понимаем, что такие объекты уже исчерпаны, а платформа все равно валится в ошибку, то Ваша конфигурация слишком большая и в этом случае лучше вернуться к 1 варианту с переходом на платформу 8.3.
3.2.5. Подключаемся к хранилищу и захватываем все объекты для изменения. При необходимости нажимаем «Обновить конфигурацию».
3.2.6. Вот здесь понадобиться наша рабочая конфигурация из файла cf. Через «Сравнить и объединить конфигурации» мы подгружаем ранее удаленные на этапе 3.2.2. объекты конфигурации.
3.2.7. Нажимаем «Обновить конфигурацию» и помещаем объекты в хранилище, при этом оставляем их захваченными.
3.2.8. Ставим конфигурацию на поддержку. Инструкция: //infostart.ru/public/251265/
3.2.9. Нажимаем «Обновить конфигурацию» и подливаем в хранилище (отпускаем объекты).
3.2.10. Подключаемся КОПИЕЙ к хранилищу, тестируем и проверяем на КОПИИ все ли в порядке с документами, движениями и т.д.
3.2.11. При необходимости повторяем на КОПИИ этапы 3.2.1-3.2.10 и только при 100% уверенности в результате подключаем к хранилищу РАБОЧУЮ БАЗУ и обновляем конфигурацию.
Дальнейшее исследование данной проблемы я проводить не собираюсь, мне достаточно что работоспособность хранилища восстановлена.
В дальнейшем логичным вариантом видится подготовка и перевод работы на платформу 8.3 конфигурации 1С:УПП.
Если данная статья кому-то поможет и сократит Ваше драгоценное время, то я буду только рад.