HEXエディターを使用した1Cベースリカバリ

この記事は、すでに基盤を再構築することに絶望し、バックアップに取り組んでいる人を対象としています。 つまり、1Cベースが殺されたときの処理、いわゆる「データベース物理的整合性テストユーティリティ」 chdbfl.exeと彼女の友人1Cプラットフォーム。



誰も知らない、 chdbfl.exeは、プラットフォームパッケージに含まれている1Cデータベースの物理的整合性を復元およびテストするための標準プログラムです。 そして、多くの場合、 chdbfl.exeが事態を悪化させるだけであることは誰もが長い間知っていました (これはまさに私の実践の場合です)。



それはすべて非常にありふれた間違いから始まりました。 1Cのプログラマーは本当に頭がいいのが好きなので、1Cの次の更新中に次のことを説明します。







キャッシュをクリアすることでこのエラーが解消されることがわかりましたが、そのときはchdbfl.exeConfigurator (テストと修正)を使用しました。 エラーはなくなり、簡単に更新できました。 しかし、翌日、会計士のアラームが鳴りました:-おいで!



到着すると、「物品とサービスの領収書」という文書を開いたときに、ポップアップダンプで1Cに会いました。 上記の項目を再度行うことが決定されました。 そして見よ! 問題は解決されました。 私は誇らしげに組織を去りましたが、同時にコンピューターでのテストの基盤を取りました。 しかし、そこにはありませんでした。 今、別のドキュメントがダンプで落ちました。 明日まですべてを延期し、コンピューターで何かをしようとすることにしました。 今回は、以前と同じ手順が役立ちました。 「これで終わりです」と私は思いました。 しかし、そうではありません。



2週間後、別の電話が鳴りました:-報告が燃えています、緊急に来てください!



今回はもっと深刻でした。 結果を再集計すると、1Cは次の結果を生成しました。







合計が必要なレポートでは、次のものが生成されました。







前と同じように、前と同じユーティリティを使用しましたが、これは機能しませんでした。 すべてのアンロード/ロード/保存では結果が得られませんでした。 更新も不明な理由で失敗しました:







これは私を2日間困惑させました。 最近ではほとんどすべてが試されています。 多くは、勘定科目表を見て、この勘定科目から不要なサブコントを削除することを勧めました。 しかし! すべてが典型的なものであり、変更は行われませんでした。



決定は突然来て、この記事に触発されました。 記事からすべてのプログラムをダウンロードし、「ピッキング」を開始しました。 Tool_1CDでデータベースファイルを開き、30分喫煙して理解した結果、次のことがわかりました。



-_Acc-勘定科目表のメインチャート。

-_Acc_ExtDim-アカウントチャートのサブコントーのタイプのテーブルは、サブコントーの最大数がゼロより大きい場合にアカウントチャート用に作成されます。



私の場合、これらはそれぞれテーブル_ACC13_ACC13_EXTDIM446です:







だから、楽しみが始まります。 テーブル_13のアカウントの_IDRREFフィールドを覚えています:







_ACC13_EXTDIM446に移動し、フィールド_ACC13_IDRREFでこの識別子を見つけてください:







ここに、私たちの大切なサブコントがあります。 しかし、3つあるはずです! いくつかの不可解で奇妙な方法で、リストラクチャリングおよびchdbfl.exeの実行中にConfiguratorがこのアカウントのサブコントを2倍にしたため、エラーがポップアップしました。 余分なものは何らかの形で削除する必要があります。 これを行うには、同じテーブルの別のフィールド_KEYFIELDが必要です。 追加のサブコントのすべての値を覚えています。 以下を取得する必要があります。



5724b6a1-5590-484e-a7c1-920ebbd1a385 000001b0





5724b6a1-5590-484e-a7c1-920ebbd1a385 000001b1





5724b6a1-5590-484e-a7c1-920ebbd1a385 000001b2





次のステップには、HEXエディターが必要です。 データベースファイルを開きます。 それから私は少し遅くなりました。 できるだけ早く、可能な限り行5724b6a1-5590-484e-a7c1-920ebbd1a385を検索しました 。 真実はほとんどそこにありました。 すべてを検索するのではなく、数十年にわたって検索する必要がありました。 しかし、ここでもキャッチです。 そのような価値はたくさんありました。 そして、何らかのランダムな方法で、必要なものを見つけましたが、まったく異なる方法でした。 そのため、HEXエディターのシーケンス5724b6a1-5590-484e-a7c1-920ebbd1a385 000001b0は、 a7c1920ebbd1a385484e55905724b6a1000001b0のようになりました







そして、各サブコントとともに。 必要な行は次のとおりです。

a7c1920ebbd1a385484e55905724b6a1000001b0





a7c1920ebbd1a385484e55905724b6a1000001b1





a7c1920ebbd1a385484e55905724b6a1000001b2











小規模の場合はそのままです。 コードの最初の桁を9に変更し(他のものも使用できますが、このコードの一意性を制御する必要があります)、データベースファイルを保存します。 これらすべてを1C:Enterpriseで開き(確実に、 テストと修正およびchdbfl.exeをもう一度実行できます)、復元された作業中のデータベースを喜んでください。



All Articles