Ошибка формата потока. Решение с описанием проблемы

23.07.19

Задачи пользователя - Корректировка данных

Ошибка формата потока. Страшная, но симпатишная своей загадочностью. 1С ничего толком не объясняет и не подсказывает. Ниже решение, которое мне помогает решать данную проблему на 100%. Всё очень просто. Данная ошибка возникает (на моей практике) только у клиент серверного варианта. просто потому что с другим форматом не работаю. Рекомендация: Старайтесь избегать динамического обновления, особенно если у вас возможны кратковременные проблемы с 220 и LAN. Далее описание лечения:

Специально написал методику устранения ошибки в виде программы. Думаю, так проще читать самую суть, не отвлекаясь на лирику и переживания.

// Config - основная конфигурация информационной базы. 
// Эта конфигурация соответствует реальной структуре данных и используется 1С:Предприятием 8.0 в режиме Предприятия.
// ConfigSave - конфигурация, редактируемая Конфигуратором. 
// Конфигурация из ConfigSave переписывается в Config при выполнении "Обновления конфигурации базы данных" в Конфигураторе, 
// а наоборот - при выполнении в Конфигураторе операции "Конфигурация - Конфигурация базы данных - Вернуться к конфигурации БД".
Если ОшибкаФорматаПотокаПриЗапускеПредприятия() Тогда
	СделатьАрхивПоврежденнойБазы(Средствами1С = Истина, СредствамиСУБД = Ложь);
	СделатьАрхивПоврежденнойБазы(Средствами1С = Ложь, СредствамиСУБД = Истина);
	Если СУБД = "MS SQL" Тогда
		// Необходимо развернуть ближайший бэкап базы на том же сервере что и поврежденная. 
		// Со времени публикации статьи поля таблицы могут измениться, поэтому посмотрите состав полей и скорректируйте скрипт
		// Если перевести на русский язык: Скрипт удаляет сбойную таблицу config поврежденной базы и затем создает копию таблицы 
		// из рабочей базы в поврежденной.
		GO
		DROP TABLE [ПОВРЕЖДЕННАЯ_БАЗА].[dbo].[config]
		GO
		SET ANSI_NULLS ON
		GO
		SET QUOTED_IDENTIFIER ON
		GO
		CREATE TABLE [ПОВРЕЖДЕННАЯ_БАЗА].[dbo].[config](
		[FileName] [nvarchar](128) NOT NULL,
		[Creation] [datetime] NOT NULL,
		[Modified] [datetime] NOT NULL,
		[Attributes] [smallint] NOT NULL,
		[DataSize] [int] NOT NULL,
		[BinaryData] [image] NOT NULL,
		PRIMARY KEY CLUSTERED
		(
		[FileName] ASC
		)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
		) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
		GO
		INSERT INTO [ПОВРЕЖДЕННАЯ_БАЗА].[dbo].[config]
		SELECT * FROM [БЭКАПНАЯ_БАЗА].[dbo].[config]
		GO 	
	ИначеЕсли СУБД = "PostgreSQL" Тогда
		copy config to '/home/user/config_err.txt в поврежденной базе
		copy config to '/home/user/config_backup.txt в базе поднятой из последнего бэкапа
		delete from config в поврежденной базе
		copy config from '/home/user/config_backup.txt в поврежденной базе
	КонецЕсли;
ИначеЕсли ОшибкаФорматаПотокаПриЗапускеКонфигуратора() Тогда
	// Ошибка возникает при прерванном сохранении конфигурации в БД.
	СделатьАрхивПоврежденнойБазы(Средствами1С = Ложь, СредствамиСУБД = Истина);
	// Полностью очищаем таблицу
	Если СУБД = "MS SQL" Тогда
		GO
		DELETE FROM [ПОВРЕЖДЕННАЯ_БАЗА].[dbo].[configsave]
	ИначеЕсли СУБД = "PostgreSQL" Тогда
		// Сохраним сбойную таблицу
		copy configsave to '/home/user/configsave_err.txt 
		// Очистим
		delete from configsave	
	КонецЕсли;	
КонецЕсли;

Используемые ресурсы:
Информация по таблицам: https://helpf.pro/faq/view/673.htm
Информация по скриптам: //infostart.ru/public/116123/

В полемику о целесообразности написания сей статьи на данном ресурсе вступать не желаю. Много различной информации по данной теме, посчитал необходимостью для сообщества консолидировать свои наработки в данной теме и преподнести её наиболее читабельно.

Если есть вопросы, то в личку пожалуйста. По возможности отвечу.

Искренне не желаю встречаться Вам с ситуацией, когда данная статья придет на выручку.

Оригинал статьи на моём ресурсе - ЗДЕСЬ >>

Ошибка формата потока config configsave не запускается конфигуратор в режиме предприятия

См. также

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    32666    106    152    

73

SALE! 20%

Корректировка данных Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 2880 руб.

10.02.2017    110496    662    174    

702

Закрытие периода Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 Оперативный учет 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

4800 руб.

27.10.2021    23918    241    35    

78

Корректировка данных Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет НДС Платные (руб)

Обработка предназначена для корректировки входящего НДС при смене системы налогообложения индивидуального предпринимателя с УСН на ОСНО в 1С:Бухгалтерия предприятия 3.0

4000 руб.

18.07.2024    688    1    0    

1

Корректировка данных Зарплата Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    1680    11    5    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. jusper 06.09.19 13:14 Сейчас в теме
Полезная статья. Спасибо
2. Aspire1C 869 10.06.20 15:28 Сейчас в теме
Спасибо. Помогло. А то уже думал придется снова все писать, что в хранилище не поместил за пару дней)
3. Rashid80 32 26.06.20 10:25 Сейчас в теме
Для последних версий:

Если СУБД = "MS SQL" Тогда
// Необходимо развернуть ближайший бэкап базы на том же сервере что и поврежденная.
// Со времени публикации статьи поля таблицы могут измениться, поэтому посмотрите состав полей и скорректируйте скрипт
// Если перевести на русский язык: Скрипт удаляет сбойную таблицу config поврежденной базы и затем создает копию таблицы
// из рабочей базы в поврежденной.
GO
DROP TABLE [ПОВРЕЖДЕННАЯ_БАЗА].[dbo].[config]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [ПОВРЕЖДЕННАЯ_БАЗА].[dbo].[config](
[FileName] [nvarchar](128) NOT NULL,
[Creation] [datetime] NOT NULL,
[Modified] [datetime] NOT NULL,
[Attributes] [smallint] NOT NULL,
[DataSize] [int] NOT NULL,
[BinaryData] [image] NOT NULL,
[PartNo] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[FileName] ASC,
[PartNo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
INSERT INTO [ПОВРЕЖДЕННАЯ_БАЗА].[dbo].[config]
SELECT * FROM [БЭКАПНАЯ_БАЗА].[dbo].[config]
GO
Юрий3; +1 Ответить
4. arvin 01.10.20 10:53 Сейчас в теме
Спасибо. Помогла очистка configsave.
5. John_Dow 15.10.20 13:23 Сейчас в теме
Столкнулся тут хитрой ситуацией.

Грубо говоря: начали утром обновлять с добавлением метаданных, вроде обновили, но вылетели в ошибку... ок развернули ночной бакап, сделали по изложенному методу выше.. вроде работает. Но неспокойной душе (душа была выявлена, расскаялась, но была приговорена к 3х недельному эцику с гвоздями ) приспичило динамический обновиться....и все приплыли.

Как итог база работает, в конфигуратор заходит, конфигурацию выгрузить можно, но сохранить любые изменения конфигурации не дает, хоть монопольно хоть динамический вываливается с ошибкой "Нарушена целостность структуры конфигурации".
Реструктуризация и проверка логической целостности не помогало - вываливалось с ошибками.
Загрузка рабочей конфигурации из ночного бакапа тоже не помогала.

Как итог выяснилось что в базе поля от первого обновления остались, таблица добавилась, но в структуре метаданных о них информации нет. ПолучитьСтруктуруХраненияБазыДанных возвращает наличие таблиц и полей, но с пустыми описаниями.


Сравнил что же у нас добавилось

use WorkBase

SEL ECT     sc.TABLE_NAME, sc.COLUMN_NAME, 'Deleted columns' AS EXPR1
FR OM          INFORMATION_SCHEMA.COLUMNS sc
WHERE     (NOT EXISTS
          (SELECT     sc2.TABLE_NAME, sc2.COLUMN_NAME
           FR OM       BackupBase.INFORMATION_SCHEMA.COLUMNS sc2
           WH ERE     sc2.TABLE_NAME = sc.TABLE_NAME AND sc2.COLUMN_NAME = sc.COLUMN_NAME))
ORDER BY LOWER(sc.TABLE_NAME), LOWER(sc.COLUMN_NAME)
Показать


лучше проверить в обе стороны, ну или делать через джойн двух таблиц


Определили какая таблица добавилась и какие поля. Проверили что они пустые.
Удалили эти объекты
   -  убираем реигстр полностью ошибочный
	DR OP   TABLE [WorkBase].[dbo].[_InfoRg36682]
	-- убираем поля из справочника1
	ALT ER   TABLE [WorkBase].[dbo].[_Reference86] DROP COLUMN _Fld36690; 
	-- убираем поля из справочника2
	ALT ER   TABLE [WorkBase].[dbo].[_Reference229] DROP COLUMN _Fld36691; 
	ALT ER   TABLE [WorkBase].[dbo].[_Reference229] DROP COLUMN _Fld36692;  
	ALT ER   TABLE [WorkBase].[dbo].[_Reference229] DROP COLUMN _Fld36693RRef; 

Показать

Далее на всякий случай почистил серверный кэш данной базы (не знаю играло роль или нет но факт есть факт)
И затем описанным в статье способом подменил не только таблицу config, но и таблицы Files и Params. В остальных служебных таблицах разницы в содержимом не было.

После этого конфигурация начала сохраняться. Для проверки были добавлены и удалены тестовые реквизиты и тестовый регистр сведений.

Может кому то поможет.
P.S. Позднее возникло предположение что возможно помогла бы не чистая загрузка конфигурации, а сравнение и объединение с бакапной конфигураций, но проверять не было возможности.
6. websamson 307 20.11.20 05:57 Сейчас в теме
Вылетала ошибка формата потока при печати внешней печатной формы. Сохранил ее на диск, добавил произвольный реквизит, сохранил. Ошибка ушла
7. enzito 08.12.20 09:35 Сейчас в теме
Зачем городить. Делаю в таком порядке. Все действия делаются в sql:

1.DELETE FROM [ИмяБазы].[dbo].[ConfigSave]

Если бага не ушла, разворачиваю РАБОЧУЮ копию. И перехожу к пункту 2

2.
use ИмяБазы
go

truncate table [dbo].[Config]
truncate table [dbo].[ConfigSave]
truncate table [dbo].[DBSchema]
truncate table [dbo].[Params]
--truncate table [dbo].[Files]
go

ins ert into [dbo].[Config] sel ect * from [КопияБазы].[dbo].[Config]
ins ert in to [dbo].[DBSchema] sel ect * fr om [КопияБазы].[dbo].[DBSchema]
ins ert in to [dbo].[Params] sele ct * fr om [КопияБазы].[dbo].[Params]
go
garik79; Nicholas; cleaner_it; Slypower; dammit666; гвость; Sergafan10; +7 Ответить
8. user681872_kuleshov.av 19.01.21 12:49 Сейчас в теме
(7)
use ИмяБазы
go

truncate table [dbo].[Config]
truncate table [dbo].[ConfigSave]
truncate table [dbo].[DBSchema]
truncate table [dbo].[Params]
--truncate table [dbo].[Files]
go

ins ert into [dbo].[Config] sel ect * from [КопияБазы].[dbo].[Config]
ins ert in to [dbo].[DBSchema] sel ect * fr om [КопияБазы].[dbo].[DBSchema]
ins ert in to [dbo].[Params] sele ct * fr om [КопияБазы].[dbo].[Params]
Показать


Механизм рабочий.
НО, рабочая копия базы имеется со старой версией конфигуратара, а при выполнеии этого запроса версия конфигуратора откатывается назад.
На счёт данных проверяю, всё ли работает должным образом
13. sas95 09.04.22 20:54 Сейчас в теме
При выполнения.

ins ert into [dbo].[Config] sel ect * from [КопияБазы].[dbo].[Config]
ins ert in to [dbo].[DBSchema] sel ect * fr om [КопияБазы].[dbo].[DBSchema]
ins ert in to [dbo].[Params] sel ect * fr om [КопияБазы].[dbo].[Params]

Конфигуратор запускался но сама база уже не запускалась.
А при переносе чисто Config

ins ert in to [dbo].[Config] sel ect * fr om [КопияБазы].[dbo].[Config]

завелась база, так как на тот момент от резерва конфа не сильно была доработана из резерва перенес Config и только после база ожила.
9. nature2002 14 25.01.21 16:00 Сейчас в теме
ИначеЕсли ОшибкаФорматаПотокаПриЗапускеКонфигуратора() Тогда
// Ошибка возникает при прерванном сохранении конфигурации в БД.
СделатьАрхивПоврежденнойБазы(Средствами1С = Ложь, СредствамиСУБД = Истина);
// Полностью очищаем таблицу
Если СУБД = "MS SQL" Тогда
GO
DELETE FROM [ПОВРЕЖДЕННАЯ_БАЗА].[dbo].[configsave]

не помогло. написал что в configsave 0 строк изменено (таблица пустая)
10. hzhz 14 10.02.21 14:48 Сейчас в теме
Есть более простой способ. Просто загрузить файл конфигурации cf предварительно выгрузив его из рабочей конфигурации.
12. buzzzard 51 11.10.21 23:12 Сейчас в теме
(10) Как загрузить CF если конфигуратор не запускается?
11. vl-sher1 43 25.07.21 21:56 Сейчас в теме
Серверная БД, EDT 2021.1.5, платформа 8.3.18.1289. "Ошибка формата потока" после очередного обновления конфы при ее запуске из EDT. Расширений нет, меняли объекты конфы. Помогло
truncate table configsave
После этого поднял EDT и все заработало.
14. juker 254 10.04.22 14:00 Сейчас в теме
(11)Вы динамическое обновление делали?
15. vl-sher1 43 26.05.22 14:55 Сейчас в теме
16. ValeriyZ 19 28.09.22 10:10 Сейчас в теме
Стрельнула проблема с потоком на скуль базе. Причем очень странно стрельнула. Все работает, но если очистить кэш - конфигуратор открывается, а конфигурация в нем нет - ошибка формата потока. Помогла такая последовательность действий.
1) В чистой базе восстановил дт из рабочей копии. Заходим в конфигуратор, открываем конфигурацию.
2) Выгружаем конфигурацию.
3) В эту же базу восстановил дт битой текущей базы, конфигурация при этом осталась открытой.
4) Загрузил в нее выгруженную ранее на п.3 конфигурацию.
19. user1424302 21.01.23 13:36 Сейчас в теме
(16)
осстановил дт из рабочей копии. Заходим в конфигуратор, открываем конфигурацию.
2) Выгружаем конфигурацию.
3) В эту же базу восстановил дт


Было так же, чистил кэш, платформу сносил не помогло, зашел под другим user , все работает )
17. Nicholas 902 21.11.22 14:08 Сейчас в теме
(7) Второй способ помог. Не запускался конфигуратор вообще.
18. Nicholas 902 21.11.22 15:17 Сейчас в теме
Мой метод решения.

Не запускался конфигуратор, но пользователи в базе могли работать.

Рабочей резервной копии не оказалось. Поэтому сделал CF ровно того же релиза, что и рабочая база. Развернул пустую базу на том же SQL сервере, загрузил в нее получившийся CF.

Затем на SQL выполнил скрипт как в (7), но только для таблицы Config:

use ИмяБазы

truncate table [dbo].[Config]
truncate table [dbo].[ConfigSave]

ins ert in to [dbo].[Config] sel ect * fr om [ПустаяБаза].[dbo].[Config]
go


Параметры, в этом случае, копировать нельзя, т.к. копия базы пустая.
Оставьте свое сообщение