Восстановление 1SJOURNAL.DBF для ТиС и Бухгалтерии

24.12.08

База данных - Инструменты администратора БД

Тут описан метод пересоздания 1SJOURNAL.DBF в случае его разрушения.

И так начнем с того, что восстановление данных для ТиС не всегда сработает. Сработает 100% если все документы введены либо на основании либо являются основании т.к. все на это и строиться. Для Бухгалтерии все строиться на файле с проводками.

Все началось с того что клиент позвонил и сказал что база не запускается и пишет что 1SJOURNAL.DBF кердык. Конечно я попытался тестировать, выгружать и т.д. но не помогло.

И так создаем новый отчет. На кнопку сформировать вешаем функцию Выполнить() и добавляем 2 радио кнопки с идентификатором Конфа. Первая кнопка Бухгалтерия а вторая ТиС. И еще кидаем на форму Текст в формуле которого пишем Mess. А ниже код вставляем в модуль.

Да этот отчет надо запустить в той нофе что грохнулась в разделенном режиме. Для того чтобы запустить базу надо удалить битый файл 1SJOURNAL.DBF и пересохранить конфу в конфигураторе. после этого заходите и запускайте отчет. Он создаст файл __temp.dbf после чего вы его переименовываете на 1SJOURNAL.DBF и вот и все.

Кстати вот этот кусок кода я указал руками название колонок - это коды таблиц отборов и общих реквизитов. Так что учтите это для ТиС.

    Если Конфа = 2 Тогда

        Ф1.ДобавитьПоле("SP74",  "C",  9, 0);

        Ф1.ДобавитьПоле("SP798",  "C",  9, 0);

        Ф1.ДобавитьПоле("SP4056",  "C",  9, 0);

        Ф1.ДобавитьПоле("SP5365",  "C",  9, 0);

        Ф1.ДобавитьПоле("DS1946",  "N",  1, 0);

        Ф1.ДобавитьПоле("DS4757",  "N",  1, 0);

        Ф1.ДобавитьПоле("DS5722",  "N",  1, 0);    

    КонецЕсли;




И вот сам код:

Перем Mess;



Функция Догнать(Стр, Длина, Символ = " ")

    Пока СтрДлина(Стр) < Длина Цикл

        Стр = Символ + Стр;

    КонецЦикла;

    Возврат Стр;

КонецФункции



Функция ДогнатьПрав(Стр, Длина, Символ = " ")

    Пока СтрДлина(Стр) < Длина Цикл

        Стр =  Стр + Символ;

    КонецЦикла;

    Возврат Стр;

КонецФункции



Процедура Выполнить()

    // ---------------------------------------------------------------------------------------------------

    Mess = "Инициализация данных ...";

    Форма.Обновить();

    R = СоздатьОбъект("RainbowService");

    M = СоздатьОбъект("MetaDataWork");

    ТЗ0 = СоздатьОбъект("ТаблицаЗначений");  // сопоставление журналов

    ТЗ0.НоваяКолонка("IDDOCDEF");

    ТЗ0.НоваяКолонка("IDJOURNAL");

    ТЗ0.НоваяКолонка("NUMBERPERIOD");

    ТЗ0.НоваяКолонка("NUMBERTYPE");

    ТЗ0.НоваяКолонка("NUMBERLEN", "Число", 5);

    ТЗ1 = СоздатьОбъект("ТаблицаЗначений");  // сопоставление даты и времени

    ТЗ1.НоваяКолонка("IDDOC");

    ТЗ1.НоваяКолонка("DATE", "Дата", 8);

    ТЗ1.НоваяКолонка("TIME");

    ТЗ1.НоваяКолонка("STATUS","Число");  

    Если Конфа = 2 Тогда

        Для инд = 1 По Метаданные.Регистр() Цикл

            ТЗ1.НоваяКолонка("RF"+СокрЛП(M.GetMetaDataID(Метаданные.Регистр(инд))),"Число");

        КонецЦикла;    

    КонецЕсли;  

    ТЗ2 = СоздатьОбъект("ТаблицаЗначений");  // нумерация по периодам

    ТЗ2.НоваяКолонка("DNPREFIX", "Строка", 18);

    ТЗ2.НоваяКолонка("LASTNUMBER", "Число", 20);

    Ф = СоздатьОбъект("XBase");     // dh*.dbf

    Ф0 = СоздатьОбъект("XBase");    // 1sentry.dbf

    Ф1 = СоздатьОбъект("XBase");    // __temp.dbf (1sjourn.dbf)

    Ф2 = СоздатьОбъект("XBase");    // ra*.dbf

    // ---------------------------------------------------------------------------------------------------

    Для инд = 1 По Метаданные.Документ() Цикл

        ТЗ0.НоваяСтрока();

        ID10 = M.GetMetaDataID(Метаданные.Документ(инд));

        ТЗ0.IDDOCDEF = ВРег(СокрЛП(R.IntToBase(ID10, 36)));

        ТЗ0.NUMBERPERIOD = Метаданные.Документ(инд).ПериодичностьНомера;

        ТЗ0.NUMBERTYPE = Метаданные.Документ(инд).ТипНомера;

        ТЗ0.NUMBERLEN = Число(Метаданные.Документ(инд).ДлинаНомера);

        ID10 = 0;

        ТЗ0.IDJOURNAL = СокрЛП(0);

        Для инд1 = 1 По Метаданные.Журнал() Цикл

            Если Метаданные.Журнал(инд1).Представление() = 

            Метаданные.Документ(инд).Журнал.Представление() Тогда

                ID10 = M.GetMetaDataID(Метаданные.Журнал(инд1));

                ТЗ0.IDJOURNAL = ВРег(СокрЛП(R.IntToBase(ID10, 36)));

                Прервать;

            КонецЕсли;

        КонецЦикла;

    КонецЦикла;

    // ---------------------------------------------------------------------------------------------------

    Если Конфа = 2 Тогда

        //ТОРГОВЛЯ

        Mess = "Считываем данные о времени и дате документа из 1SCRDOC.dbf";

        Форма.Обновить();

        Ф0.ОткрытьФайл(КаталогИБ() + "1SCRDOC.dbf", КаталогИБ() + "1SCRDOC.cdx", 1);

        Ф0.Первая();

        Пока Ф0.ВКонце() = 0 Цикл

            стр = 0;

            Если ТЗ1.НайтиЗначение(СокрЛП(Ф0.CHILDID), стр, "IDDOC") = 0 Тогда

                ТЗ1.НоваяСтрока();

                ТЗ1.IDDOC = СокрЛП(Ф0.CHILDID);

                ТЗ1.DATE = Ф0.CHILDDATE;

                ТЗ1.TIME = Ф0.CHILDTIME;  

                ТЗ1.STATUS = 0;

            КонецЕсли;

            Ф0.Следующая();

        КонецЦикла;            

        

        //Считывем из регистров документы и понимаем что они проведены

        ТекФайл = ФС.НайтиПервыйФайл(КаталогИБ() + "ra*.dbf");

        Пока ПустоеЗначение(ТекФайл) = 0 Цикл  

            Форма.Обновить();

            Mess = "Считываем данные из "+ТекФайл;

            Ф2.ОткрытьФайл(КаталогИБ() + ТекФайл,, 1);

            Ф2.Первая();

            Пока Ф2.ВКонце() = 0 Цикл

                стр1 = 0;

                Если ТЗ1.НайтиЗначение(СокрЛП(Ф2.IDDOC), стр1, "IDDOC") = 1 Тогда

                    ТЗ1.УстановитьЗначение(стр1,"STATUS",1);   

                    ИДРегистра = СтрЗаменить(ТекФайл,"RA","");

                    ИДРегистра = СтрЗаменить(ИДРегистра,".DBF","");

                    ТЗ1.УстановитьЗначение(стр1,"RF"+ИДРегистра,1);   

                КонецЕсли;

                Ф2.Следующая();

            КонецЦикла;

            Ф2.ЗакрытьФайл();

            ТекФайл = ФС.НайтиСледующийФайл();

        КонецЦикла;

        

    ИначеЕсли Конфа = 1 Тогда    

        //БУХГЕЛТЕРИЯ

        Форма.Обновить();

        Mess = "Считываем данные о времени и дате документа из 1sentry.dbf";

        Ф0.ОткрытьФайл(КаталогИБ() + "1sentry.dbf", КаталогИБ() + "1sentry.cdx", 1);

        Ф0.ТекущийИндекс("DATETIME");

        Ф0.Первая();

        Пока Ф0.ВКонце() = 0 Цикл

            стр = 0;

            Если ТЗ1.НайтиЗначение(СокрЛП(Ф0.DOCID), стр, "IDDOC") = 0 Тогда

                ТЗ1.НоваяСтрока();

                ТЗ1.IDDOC = СокрЛП(Ф0.DOCID);

                ТЗ1.DATE = Ф0.DATE;

                ТЗ1.TIME = Ф0.TIME;     

                ТЗ1.STATUS = 0;

            КонецЕсли;

            Ф0.Следующая();

        КонецЦикла;

    КонецЕсли; 

    Сообщить("Удалось найти дату и время у "+ТЗ1.КоличествоСтрок()+" документов","!");

    // ---------------------------------------------------------------------------------------------------

    Mess = "Создаем структуру __temp.dbf ...";

    Форма.Обновить();

    Ф1.ДобавитьПоле("IDJOURNAL", "C",  4, 0);

    Ф1.ДобавитьПоле("IDDOC",     "C",  9, 0);

    Ф1.ДобавитьПоле("IDDOCDEF",  "C",  4, 0);

    Ф1.ДобавитьПоле("APPCODE",   "N",  3, 0);

    Ф1.ДобавитьПоле("DATE",      "D",  8, 0);

    Ф1.ДобавитьПоле("TIME",      "C",  6, 0);

    Ф1.ДобавитьПоле("DNPREFIX",  "C", 18, 0);

    Ф1.ДобавитьПоле("DOCNO",     "C", 10, 0);

    Ф1.ДобавитьПоле("CLOSED",    "N",  1, 0);

    Ф1.ДобавитьПоле("ISMARK",    "C",  1, 0);

    Ф1.ДобавитьПоле("ACTCNT",    "C",  6, 0);

    Ф1.ДобавитьПоле("VERSTAMP",  "C",  6, 0);

    Для инд = 1 По Метаданные.Регистр() Цикл

        Ф1.ДобавитьПоле("RF" + СокрЛП(M.GetMetaDataID(Метаданные.Регистр(инд))), 

        "N",  1, 0);

    КонецЦикла;    



    Если Конфа = 2 Тогда

        Ф1.ДобавитьПоле("SP74",  "C",  9, 0);

        Ф1.ДобавитьПоле("SP798",  "C",  9, 0);

        Ф1.ДобавитьПоле("SP4056",  "C",  9, 0);

        Ф1.ДобавитьПоле("SP5365",  "C",  9, 0);

        Ф1.ДобавитьПоле("DS1946",  "N",  1, 0);

        Ф1.ДобавитьПоле("DS4757",  "N",  1, 0);

        Ф1.ДобавитьПоле("DS5722",  "N",  1, 0);    

    КонецЕсли;

    

    Ф1.СоздатьФайл("__temp.dbf");

    // ---------------------------------------------------------------------------------------------------

    Mess = "Сохраняем структуру __temp.dbf ...";

    Форма.Обновить();

    ТекФайл = ФС.НайтиПервыйФайл(КаталогИБ() + "dh*.dbf");

    _ТекВрем = ТекущееВремя();

    _Час = Число(Сред(_ТекВрем,1,2));

    _Мин = Число(Сред(_ТекВрем,4,2));

    _Сек = Число(Сред(_ТекВрем,7,2));

    _ТекВрем = _Час * 3600 + _Мин * 60 + _Сек;

    Пока ПустоеЗначение(ТекФайл) = 0 Цикл  

        Форма.Обновить();

        Mess = "Считываем данные из "+ТекФайл;

        Ф.ОткрытьФайл(КаталогИБ() + ТекФайл,, 1);

        Ф.Первая();

        Пока Ф.ВКонце() = 0 Цикл

            стр1 = 0;    

            Проведен = 0;

            Если ТЗ1.НайтиЗначение(СокрЛП(Ф.IDDOC), стр1, "IDDOC") = 1 Тогда

                _Дата = ТЗ1.ПолучитьЗначение(стр1, "DATE");

                _Время = ТЗ1.ПолучитьЗначение(стр1, "TIME"); 

                Проведен = ТЗ1.ПолучитьЗначение(стр1, "STATUS");

            Иначе

                _Дата = РабочаяДата();

                _ТекВрем = _ТекВрем + 1;

                _Время = ВРег(СокрЛП(R.IntToBase(_ТекВрем * 10000, 36)));

                Сообщить("Не удалось найти дату и время для документа "+Ф.IDDOC+". У него будет дата "+_Дата+" и время "+_Время,"!!");

            КонецЕсли;

            Ф1.Добавить();

            Ф1.УстановитьЗначениеПоля("IDDOC", Догнать(Ф.IDDOC, 6));

            Ф1.УстановитьЗначениеПоля("DATE", _Дата);

            Ф1.УстановитьЗначениеПоля("TIME", _Время); 

            Ф1.УстановитьЗначениеПоля("CLOSED", Проведен); 

        

            Если Конфа = 2 Тогда

                Если стр1<>0 Тогда

                    Для инд = 1 По Метаданные.Регистр() Цикл

                        Ф1.УстановитьЗначениеПоля("RF" + СокрЛП(M.GetMetaDataID(Метаданные.Регистр(инд))), ТЗ1.ПолучитьЗначение(стр1,"RF" + СокрЛП(M.GetMetaDataID(Метаданные.Регистр(инд))))); 

                    КонецЦикла;    

                КонецЕсли;

            КонецЕсли;

            

            _IDDOCDEF = Врег(R.IntToBase(Число(Сред(ТекФайл, 3, СтрДлина(ТекФайл) - 

            6)), 36));

            Ф1.УстановитьЗначениеПоля("IDDOCDEF", Догнать(_IDDOCDEF, 4));

            стр0 = 0;

            Если ТЗ0.НайтиЗначение(СокрЛП(_IDDOCDEF), стр0, "IDDOCDEF") = 1 Тогда

                _DNPREFIX = Сред(ТекФайл, 3, СтрДлина(ТекФайл) - 6);

                Если СокрЛП(ТЗ0.ПолучитьЗначение(стр0, "NUMBERPERIOD")) = "Год" Тогда

                    _DNPREFIX = Догнать(_DNPREFIX + СокрЛП(ДатаГод(_Дата)), 14);

                ИначеЕсли СокрЛП(ТЗ0.ПолучитьЗначение(стр0, "NUMBERPERIOD")) = "Квартал" 

                Тогда

                    _DNPREFIX = Догнать(_DNPREFIX + СокрЛП(ДатаГод(_Дата)) + 

                    СокрЛП(ДатаМесяц(НачКвартала(_Дата))), 16);

                ИначеЕсли СокрЛП(ТЗ0.ПолучитьЗначение(стр0, "NUMBERPERIOD")) = "Месяц" 

                Тогда

                    _DNPREFIX = Догнать(_DNPREFIX + СокрЛП(ДатаГод(_Дата)) + 

                    СокрЛП(ДатаМесяц(_Дата)), 16);

                ИначеЕсли СокрЛП(ТЗ0.ПолучитьЗначение(стр0, "NUMBERPERIOD")) = "День" 

                Тогда

                    _DNPREFIX = Догнать(_DNPREFIX + СокрЛП(ДатаГод(_Дата)) + 

                    СокрЛП(ДатаМесяц(_Дата)) + СокрЛП(ДатаЧисло(_Дата)), 18);

                Иначе

                    _DNPREFIX = Догнать(_DNPREFIX, 10);

                КонецЕсли;

                Ф1.УстановитьЗначениеПоля("DNPREFIX", _DNPREFIX);

                стр2 = 0;

                Если ТЗ2.НайтиЗначение(ДогнатьПрав(_DNPREFIX, 18), стр2, "DNPREFIX") = 0 

                Тогда

                    ТЗ2.НоваяСтрока();

                    ТЗ2.DNPREFIX = _DNPREFIX;

                    ТЗ2.LASTNUMBER = 1;

                    стр2 = ТЗ2.КоличествоСтрок();

                Иначе

                    ТЗ2.УстановитьЗначение(стр2, "LASTNUMBER", ТЗ2.ПолучитьЗначение(стр2, 

                    "LASTNUMBER") + 1);

                КонецЕсли;

                Если ТЗ0.ПолучитьЗначение(стр0, "NUMBERTYPE") = "Текстовый" Тогда

                    Ф1.УстановитьЗначениеПоля("DOCNO", 

                    Догнать(СокрЛП(ТЗ2.ПолучитьЗначение(стр2, "LASTNUMBER")), 

                    ТЗ0.ПолучитьЗначение(стр0, "NUMBERLEN"), "0"));

                Иначе

                    Ф1.УстановитьЗначениеПоля("DOCNO", ТЗ2.ПолучитьЗначение(стр2, 

                    "LASTNUMBER"));

                КонецЕсли;

                Ф1.УстановитьЗначениеПоля("IDJOURNAL", 

                Догнать(ТЗ0.ПолучитьЗначение(стр0, "IDJOURNAL"), 4));

            КонецЕсли;

            Ф1.Записать();

            Ф.Следующая();

        КонецЦикла;

        Ф.ЗакрытьФайл();

        ТекФайл = ФС.НайтиСледующийФайл();

    КонецЦикла;

    Ф.ЗакрытьФайл();

    // ---------------------------------------------------------------------------------------------------

    Mess = "Закончили. Переименуйте __temp.dbf в 1SJOURNAL.DBF и замените !";

    Форма.Обновить();

КонецПроцедуры



Процедура ПриОткрытии()

    Mess = "Для начала восоздания 1SJOURNAL.DBF необходимо зайти в разделенном режиме !!!";

КонецПроцедуры



Попытка

    ЗагрузитьВнешнююКомпоненту("rainbow.dll");

Исключение

    Сообщить("Не удается загрузить внешнюю компоненту.","!");

    Сообщить("Проверьте расположение необходимых библиотек:

    |"+КаталогПрограммы()+"Rainbow.dll или "+КаталогИБ()+"Rainbow.dll

    |"+ФС.WindowsКаталог()+"system\mfc42.dll

    |"+ФС.WindowsКаталог()+"system\msvcrt.dll");

    Форма.Закрыть();

КонецПопытки;

                         

Конфа = 1;

См. также

Монопольное открытие формы обработки 1с77

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Блокировка открытия формы обработки одним пользователем.

1 стартмани

24.05.2023    583    igor7777    1    

0

Групповое переименование файлов для 1С 7.7

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

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

1 стартмани

18.02.2022    3780    0    igor7777    6    

2

[7.7 ТиС. СТОП-БАРДАК] Автоперенос непроведенных документов на текущий день

Инструменты администратора БД Оперативный учет 7.7 1С:Торговля и склад 7.7 Управленческий учет Абонемент ($m)

Боремся с бардаком. Работы в прошлых датах запрещены. Непроведенные документы (по разным причинам) - автоматом переносятся в начало текущего дня при запуске любого первого сеанса 1С в текущем дне. Задержка старта 1С - практически незначима. Не требует настройки, не требует допрограммирования (исключая один оператор вставки в процедуру старта системы). Можно обработку выполнять вручную с любой периодичностью.

2 стартмани

25.05.2020    5684    2    CheBurator    3    

2

Анализ 1С: Предприятие 7.7 с помощью ELK стека

Журнал регистрации Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Рассмотрим систему на базе Elasticsearch, Logstash и Kibana (ELK Stack) для анализа логов 1С Предприятие 7.7 с целью визуализации и анализа событий 1С.

22.01.2019    11092    phsin    20    

27

Автоматическое объединение конфигураций 1С 7.7

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Скрипт позволяет выполнить объединение конфигураций и реструктуризацию из командной строки. Объединение выполняется штатными средствами конфигуратора 1С 7.7, взаимодействие с которым происходит путем посылки нажатий клавиш. Пригодится, если есть необходимость обновить или постоянно обновлять множество ИБ.

1 стартмани

22.04.2017    15662    4    devlabnn    2    

6

Перепроведение по счету

Инструменты администратора БД Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Украина Бухгалтерский учет Абонемент ($m)

Перепроведение по счету для конфигурации Бухгалтерский учет для Украины, 1С: Предприятие 7.7

1 стартмани

23.09.2016    3745    1    Genyak    1    

0

Решение проблем с печатью, предварительным просмотром печати, пакетной печатью 1С: 7.7 в терминале

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Периодически сталкивался со следующими проблемами при печати в 1С: 7.7 работающей под терминалом: 1) После замены принтера на клиентской машине 1С пытается печатать на старый принтер. 2) Отсутствует предварительный просмотр при печати. 3) Не работает печать без предварительного просмотра (пакетная печать документов). 4) В некоторых формах печатает, в некоторых нет.

1 стартмани

09.06.2016    27125    18    tux    3    

1

Логирование в 1С

Инструменты администратора БД Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Часто бывает необходимо отслеживать состояние часто повторяющихся регламентных заданий. Например, синхронизация данных с IP-телефонией, которая может производиться каждую минуту, синхронизация с сайтами, синхронизация данных с различными системами. Использовать для этих целей логирование 1С чрезвычайно неэффективно и не удобно. В таких случаях удобно использовать подход, применяемый в Unix-системах: писать логи в обычные текстовые файлы, а потом делать их обработку через эффективно работающие Unix-команды: grep, tail, cat, less и т.п.

18.05.2016    34929    rudjuk    21    

33
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1448 24.12.08 13:26 Сейчас в теме
Где-то на этом сайте что-то подобное уже было вроде бы :)
kasperok; +1 Ответить
2. kasperok 31 24.12.08 14:04 Сейчас в теме
Ну я поиском посмотрел и не чего не нашел.
3. LenaTorpeda 24.12.08 16:46 Сейчас в теме
R = СоздатьОбъект("RainbowService");
{C:\DOCUMENTS AND SETTINGS\TORPEDA\РАБОЧИЙ СТОЛ\ВОССТАНОВЛЕНИЕ ЖУРНАЛА.ERT(39)}: Неудачная попытка создания объекта (RainbowService)
4. LenaTorpeda 24.12.08 16:48 Сейчас в теме
У меня такой dll нет. Жаль .Штука наверное хорошая.
5. fAngel 371 24.12.08 18:31 Сейчас в теме
кому как но помойму на my 1C: http://www.sinor.ru:8100/~my1c/knowhow.html
где то была.
6. LenaTorpeda 24.12.08 19:01 Сейчас в теме
fAngel ,там вот это: Sorry, no matches were found containing rainbow.dll

7. kasperok 31 25.12.08 11:47 Сейчас в теме
8. Tolpinski 65 25.12.08 13:22 Сейчас в теме
Артур, ты в ворде Описьки проверяй :)
9. Ёпрст 1063 03.01.09 10:59 Сейчас в теме
10. PovAndy 07.10.13 16:10 Сейчас в теме
Если честно, не совсем понял, как привязать обработку к 1С 7.7 УСН 1,3

Может кто-нибудь подсказать?

Пробовал использовать обработку http://1c.proclub.ru/modules/mydownloads/personal.php?lid=439&cid=76 , она всё создаёт, но в резуйльтате файл журнала система распознаёт как битый "Таблица - 1SJOURN. Длина записи не соотвествует ожидаемой
Проверка физической целостности таблиц ИБ. Неисправимая ошибка."
11. Ёпрст 1063 07.10.13 18:28 Сейчас в теме
Дык откройте его любым дбф редактором и посмотрите что унутри..
Тем более, все поделки по восстановлению 1сджоурн не усё восстанавливають.
12. Gtrby2008 27.02.20 12:13 Сейчас в теме
Добрый день! Может не сюда, простите.
Файл 1SENTRY.DBF "обнулился". Т.е. его размер стал 0 кб. Но Файл 1SENTRY.CDX остался. Можно ли как-то восстановить 1SENTRY.DBF? Перепроведение не поможет, много ручных проводок.
Оставьте свое сообщение