Решая задачу клиента по настройке синхронизации БП и ЗУП, столкнулся с "Ошибкой формата потока". В этой статье расскажу вам, как эту проблему удалось решить.
Немного о себе.
Начну с небольшой истории о том, как оказался в «мире программирования 1С», если не интересно, можешь пропустить.
Наверное, всем в детстве задавали этот вопрос «кем ты хочешь стать, когда вырастешь»? Так вот лично я никогда не хотел быть программистом, я и до сих пор им не стал, но двигаюсь в этом направлении.
Спокойно рос и не думал кем-то становиться, как и большинство молодежи сейчас. Закончил школу и пришло время выбирать себе специальность в университете. На тот момент я понимал, что не хочу идти учится как все остальные на менеджеров, управленцев и экономистов. И вот я вижу специальность «бизнес-информатика», недолго думая, выбираю ее!
Что такое эта бизнес-информатика я понял уже на самой первой паре, это самое настоящее программирование, правда не 1С, а с#. У нас был очень хороший преподаватель, учил многим полезным фишкам, но идти в направлении с# я не хотел. Был и другой предмет – 1С, он мне понравился больше и ему я уделял больше внимания. Даже диплом писал на 1С «Управление гостиницей», это сам придумал, писал конфигурацию с нуля, помогали, конечно, в итоге диплом получил.
А вот работать в сферу 1С не пошел, кругом очень много вакансий по продажам, да и зарплата там больше, решил попробовать продажи!
Работал в компании где надо было продавать интернет, там я задержался года на полтора, не скажу, что много зарабатывал, но этого хватало. А потом случилось, наверное, «выгорание», не хотелось снова и снова звонить людям и пытаться что-то продать. После поработал даже официантом в ресторане, но это прям совсем не то, чего хотелось. Потом работал в салоне сотовой связи и вот это было последней каплей, думаю, в 2020 году мало кому было бы приятно получить 12 тысяч рублей зарплату за месяц.
Так вот, дорогие мои, продажи это полное «г», лично для меня, я неплохо продавал, даже хорошо, но, наверное, все компании своих сотрудников не ценят и постоянно пытаются в чем-то урезать, обделить. Да и карьерный рост это все лажа, возможно, у кого-то получилось, и я очень за вас рад.
Было решено, пока не поздно, устроить свою жизнь, научиться чему-то и стать ценным специалистом с возможностью много зарабатывать. Ну и карьерный рост, желательно. И вот нашел вакансию «стажер-программист 1С». Прошел собеседование и вот я тут, совсем ничего не зная, или давно забыв про 1С.
Ну что сказать, сначала читал книжку «Радченко», потом решал какие-то задачи не сложные, но для меня казались сложными. А потом меня посадили работать с «ERP», шутка – с «УМЦ». Поработал с «УМЦ» месяца 2 и понял, что это не перспективно, наверное, потому что легко.
И вот наконец то перешел в отдел к Ивану Белокаменцеву, который и по сей день многому меня учит и помогает стать программистом.
А теперь «Ошибочка».
Ошибка формата потока ЗУП 3.1.16.77
Недавно получил задачу "настроить типовую синхронизацию у клиента между БП и ЗУП". Задача совсем несложная, как мне тогда казалось. Недолго думая, решил настроить синхронизацию через общую папку, тем более база файловая. Обе базы файловые и настроены на компьютере клиента, но БП расположена на этом компьютере, а ЗУП на другом. Предприятие открывалось с обеих баз, поэтому сначала я совсем ничего не заподозрил.
Синхронизацию настроил, проверяю. В БП никаких проблем - "синхронизация данных выполнена", а вот ЗУП при окончании синхронизации выдает ошибку "Ошибка СУБД: В таблице "_Document370_VT13757" отсутствует индекс "0". Возможно, обновление конфигурации базы данных или загрузка информационной базы из файла закончилась с ошибкой". Ниже фото. За качество фото, прошу простить...
С такой ошибкой столкнулся впервые, хотя, синхронизацию настраивал уже не мало раз. Месяц назад, примерно, сисадмин этому клиенту переустанавливал винду, так как у них, почему то, в течении дня компьютер мог выключаться раз по 10, кто-то посоветовал переустановить винду… Предварительно договорились, что я буду выгружать dt и потом разворачивать базы, но почему-то выгрузку dt поручили их сисадмину, возможно, подумал я, он их как-то коряво выгрузил, но когда уже я разворачивал базы, и заходил, конечно же в предприятие, чтобы проверить что все ок, никаких ошибок не было…
Посоветовавшись с коллегами, решил настроить новую синхронизацию на копиях баз. Выгрузил прям на компьютере клиента dt и БП, и ЗУПа. И тут начинается огромная проблема "Ошибка формата потока"!
Загрузил dt БП и она спокойно открылась, а вот ЗУП при запуске предприятия выдает "Ошибка формата потока", причем в сам конфигуратор пускает, но, при нажатии открыть конфигурацию, выдает "ошибку формата потока".
Стало очень интересно, как же тогда клиент спокойно работает в сломанной базе, которая эту ошибку не выдает? Причем этот же ЗУП, который расположен на другом компьютере, также выдает ошибку и не запускается, то есть ЗУП запускается только на одном компьютере, куда протянут через общую папку. Если кто-то сможет объяснить в комментариях почему ОНО ТАК РАБОТАЕТ, буду рад выслушать.
По итогу было принято решение, срочно отремонтировать клиенту базу, пока у них все окончательно не сломалось, и не пропали все данные. Про синхронизацию речи уже нет, синхронизировать пока нечего…
Ошибка формата потока
Наверное, каждый программист 1С сталкивался этой страшной ошибкой, выскакивает окно, нажимаешь «Завершить работу» и идешь искать решение в интернете. Однако очень странно что про эту ошибку так много всего написано в интернете, но появляется она у всех в разных случаях и решается тоже по-разному.
Сама 1С создана таким образом, что в процессе работы постоянно стремится оптимизировать скорость работы. Для этого на компьютере создается кеш в котором хранятся: расположения и формы окон, служебные данные пользователя, настройка отборов, шрифтов и тд. Кеширование помогает сократить количество обращений к серверу и, тем самым, повышает скорость работы. Но если кеш был записан с ошибкой или был какой-то сбой, появится та самая ошибка. Это пишет сама 1С.
Пошагал в интернет в поисках решения этой ошибки. Как-то раз такая ошибка уже была. Пришел к выводу, что скорее всего ошибка была из-за «обновить динамически» или «демонически», но это не точно, и вряд ли когда-нибудь кто-нибудь это узнает. Решить эту ошибку удалось с помощью создания копия серверной базы и выгрузкой xml с копии бекапа, который у клиента делался автоматически каждый вечер, после окончания работы всех пользователей. Потом загрузил xml в копию, ну а потом сделал копию рабочей базой. Правда, клиент немного ругался, что не все документы перенеслись, но это было не так важно, потому что базу удалось починить. Но тут база уже файловая, поэтому надо искать что-то другое.
В интернете много пишут про то, как эту ошибку исправить, но в основном, это больше рекомендация, потому что в разных случаях, эту ошибку удается решить по-разному.
Неудачные способы решения.
!) Начал, естественно, с чистки кеша, наверное, все знают, как это делать, а если не знаете, в интернете полно информации на эту тему. Чистка кеша не помогла, ошибка осталась.
2) Потом решил перенести базу на другой диск, так как она файловая. Недавно тоже у какого-то клиента была ошибка «нарушение целостности системы» и там перенос базы помог, правда, не совсем понимаю, как. На этот раз это не помогло.
3) Дальше решил запустить "тестирование и исправление" через конфигуратор, но через минуту после запуска появляется та же самая "ошибка формата потока".
4) Дальше решил запустить «chdbfl» и там починить базу, минуты 2 шел поиск, но потом выскочила «ошибка формата потока».
5) После череды поражений, решил воспользоваться выгрузкой XML из того ЗУПа, который почему-то работает. Долго ждал, пока данные выгрузятся, примерно около двух часов. Пока ждал, скачал и развернул новенький ЗУП этого же релиза. Начал загружать данные, загрузка идет минут 15, прерывается и выдает какие-то странные ошибки, по типу "файл выгрузки был поврежден". Это очень расстроило, так как ждать еще два часа это уже слишком, но решил выгрузить данные еще раз. Ошибка также выходит минут через 15.
6) В интернете этого нет, но все же решил попробовать обновить платформу, вдруг поможет. Ну естественно и это не помогло.
Ничего не помогает, думал я. Руководитель на работе попросил скинуть ему dt, сказал, дома посмотрит, вдруг что придумает. Отдельную благодарность хочу выразить ему, спасибо, Иван Белокаменцев!
Теперь, решение которое помогло!
Рассказываю решение проблемы! Но, не факт, что это вам поможет, так как у этой ошибки, повторюсь, разные варианты решения в зависимости от ситуаций возникновение, наверное, понятно объяснил. Возможно я ошибаюсь.
Не сомневаюсь, что существует такая ошибка, которую всеми этими манипуляциями не решить. И вряд ли удастся решить какими-то другими из интернета. Я вам искренне соболезную и надеюсь, что все-таки у вас получится ее решить.
Решение.
1. Скачиваем тот же релиз ЗУПа, который был с ошибкой.
2. Ставим пустую базу с типовой конфигурацией.
3. Открываем в ней конфигурацию.
4. Грузим туда наш "проблемный" dt.
5. Перезапускаем конфигуратор, и конфигурация открывается! Правда, предприятие все равно не работает. Но не расстраиваемся и идем дальше.
6. Так как конфигурация открылась, делаем тестирование и исправление, ставим все максимально жестко (очищать ссылки на несуществующие, удалять битые и тд.).
7. Скачиваем следующий релиз ЗУПа и делаем стандартное обновление через конфигуратор, релиз был выбран 3.1.16.134.
7. Обновляем конфигурацию БД, запускаем предприятие, все работает!
Ну наконец то удалось решить эту ошибку! После всех этих манипуляций уже до настроил клиенту синхронизацию, все заработало!
Если будут вопросы по пунктам, можете спрашивать в комментариях, всем отвечу.
Также заранее прошу прощения за ошибки и запятые, я не писатель и это моя первая статья, в будущем буду исправлять.
Если вам помогла статья и вы справились с этой страшной ошибкой, буду благодарен вашим плюсам! Если же не помогла, пишите в комментариях как вам удалось решить вашу «ошибку формата потока».
Если в работе буду сталкиваться с какими-то, по моему мнению, трудностями, обязательно буду делиться с вами решениями этих трудностей.
Всем спасибо, всем до встречи!