Решение проблемы при создании хранилища 1С:УПП

Поиск причины ошибки Runtime Error платформы 8.2 при создании хранилища для конфигурации 1С:УПП начиная с версии 1.3.112.1 и варианты решения.

На написание данной статьи меня сподвигла проблема невозможности создать хранилище для конфигурации 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…Пользователь…AppDataLocalTemp» (для XP путь будет другим) и в случае достижения размера этого файла 2Гб, а если быть более точными по данным операционной системы Windows «2097мбайт» платформа как раз и валится в ошибку.

Видимо, какая-то компонента, которую использует платформа 8.2, являясь 32-битной, имеет ограничение на размер файла или на размер того, что хранится в tmp файле. Что хранится в tmp файле при создании хранилища мне выяснить не удалось, также не удалось выяснить и какая именно компонента виновата.

Хотя в логах Windows имеется запись об ошибке со ссылкой на компоненту, я не могу утверждать что виновата она. Замена этой компоненты на другие версии результата не принесло:

Путь сбойного приложения: C:Program Files (x86)1cv828.2.19.130in1cv8.exe
Путь сбойного модуля: C:WINDOWSWinSxSx86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.8387_none_5094ca96bcb6b2bbMSVCR90.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…Пользователь…AppDataLocalTemp»;

— предельный размер «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С:УПП.

Если данная статья кому-то поможет и сократит Ваше драгоценное время, то я буду только рад.

17 Comments

  1. h00k

    Есть такой важный момент — не надо подключать к хранилищу рабочую базу. Лучше потратить лишние 15 минут на формирование файла поставки и обновления конфигурации, чем иметь потенциальную дыру в безопасности рабочей базы. Плюс базы с конфигурацией на «полном замке» стабильней работают на х32 серверах.

    Reply
  2. Rus_Tiger

    (1) У каждого свои задачи и свои бизнес-процессы. Всегда приходится искать баланс между скоростью / удобством / безопасностью, т.к. «безопасность удобной быть не может».

    На счет полной поддержки («на замке») — это хорошо в том случае, если ее использовать типовую, но в большинстве случае приходится адаптировать. 64 битный сервер 8.2.19 — вполне стабильно работает и нареканий не вызывает.

    В любом случае (подключать рабочую базу к хранилищу или нет), сейчас такая ситуация с конфой УПП на платформе 8.2, что хранилище можно создать только с полностью снятой поддержки. Ну и с точки зрения логики, все же правильнее вести разработку на той платформе, на которой потом будет работать конфигурация. Соответственно если сервер 8.2, то и разработку лучше вести на этой же платформе.

    Reply
  3. asved.ru

    (2)

    На счет полной поддержки («на замке») — это хорошо в том случае, если ее использовать типовую

    Вы не умеете формировать поставку для модифицированной конфигурации?

    (2)

    с точки зрения логики, все же правильнее вести разработку на той платформе, на которой потом будет работать конфигурация

    Кажется, правильнее все же держать продакшн на той платформе, на которой исходная конфигурация разрабатывается вендором. А это 8.3

    Reply
  4. Rus_Tiger

    (3) Формировать умеем.

    А где написано, что УПП вендором разрабатывается под 8.3?

    Reply
  5. Rus_Tiger

    Получил ответ от 1С, что «Данное поведение исправлено в версиях 8.3. Исправление в 8.2.19 не планируется.»

    Ну оно и понятно, возможно даже сильных разработчиков для платформы 8.2 и не осталось, а копнуть туда — можно получить еще большие проблемы со стабильностью. Так что платформа 8.2 тихонько хоронится, причем в т.ч. увеличением объема конфигурацией.

    Reply
  6. vursan

    Спасибо! Столкнулись с этим. Еще и в хранилище обновление не до конца положилось(конфигурация поставщика не уместилась) и при этом даже не ругнулось.

    Reply
  7. vursan

    (1) А в чем дыра?

    Reply
  8. Rus_Tiger

    (7) Одна из дыр.

    Обычно в основную конфигурацию обновления накатывает 1, максимум 2 человека, так скажем «супер администраторы — очень опытные разработчики», а разработку могут вести значительно большее количество сотрудников. Здесь проблема начиная от обычной ошибки неопытного разработчика, до возможности «внесения чего-нить нехорошего» разработчиком.

    Но с другой стороны, если такой специалист есть — то зачем он нужен?

    Но всегда нужно помнить: «Безопасность удобной быть не может!»

    Поэтому чем выше безопасность, тем больше манипуляций придется проделывать и больше времени на это затрачивать. И это во всех сферах.

    Reply
  9. Rus_Tiger

    (6) Если Вам помогло, то я рад! Возможно Вы сэкономите уйму времени и выберете оптимальный для вас путь.

    Reply
  10. ErshovAlex

    Благодарю. Очень помогла Ваша статья.

    Для создания хранилища пришлось удалить общие модули и обработки. После этого все прошло успешно.

    Reply
  11. Xershi

    В свое время УСО 1.2 перевел на 8.3.5. А вы до сих пор на 8.2 сидите. Нет слов!

    Reply
  12. Rus_Tiger

    (11) Зачем трогать то, что хорошо работает.

    Reply
  13. Xershi

    (12) затем, что хорошо не работает!

    Reply
  14. Rus_Tiger

    (13) У кого как.

    Reply
  15. Xershi

    (14) ну я бы посмотрел как у вас почта без костылей на безопасном протоколе работает, ну и другие фишки, которые появились с 8.3. А так если нужно только коробка, конечно можно на 8.2 и сидеть.

    Reply
  16. Rus_Tiger

    (15) за что так наказывать? почту на 1С…

    1С УПП у нее свои сильные стороны и нужно их использовать.

    И кто сказал, что используется только платформа 8.2?

    Reply
  17. Xershi

    (16) вот именно, режим совместимости 8.2 это ее слабая сторона подняв хотя бы до 8.3.5 конфа начинает играть другими красками!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *