|
---|
1С 7.7 Лечение КЛАДР
Симптомы проблемы:После добавления справочника адресов в 1С 7.7 ТиС, при выборе города после региона - поле региона очищается.
Причины:
у ИТС-ного КЛАДР длина каких-то полей 12 символов (если мне не изменяет склероз), а у КЛАДР с сайта ГНИ - 16 символов.
Решение:
Создать внешнюю обработку.
На форму повесить: поле ввода с кнопкой выбора значений и кнопку.
Поле выбора значения обрабатывает выбор файла справочника KLADR.DBF (Процедура "ПриНачалеВыбораЗначения").
Кнопка "Лечить" выполняет непосредственно лечение файла справочника KLADR.DBF
Процедура Подобрать()
.ФайлКПоУм = "" + КаталогИБ() + "ExtDB _ Kladr.dbf";
.Если ФС.СуществуетФайл(файлКПоУм) = 1 Тогда
. . ФайлК = ФайлКПоУм;
.Иначе
. . Предупреждение("Файл " + ФайлКПоУм + " не найден");
.КонецЕсли;
КонецПроцедуры
Процедура ПриНачалеВыбораЗначения(Ид, Фл)
.Если Ид = "ФайлК" Тогда
. . ИмяФайла = "Kladr.dbf";
. . КаталогФайла = "";
. . Если ФС.ВыбратьФайл(0, ИмяФайла, КаталогФайла, "Выберите файл Kladr.dbf", "DBF|*.dbf", "Kladr.dbf", 60) = 1 Тогда
. . . ФайлК = КаталогФайла + ИмяФайла;
. . КонецЕсли;
.КонецЕсли;
КонецПроцедуры
Процедура Лечить()
Если ФС.СуществуетФайл(ФайлК) = 0 Тогда
Предупреждение("Выбранный файл не существует");
Возврат;
КонецЕсли;
ФайлИмя = СокрЛП(ФайлК);
ФайлТ = Лев(ФайлИмя, СтрДлина(ФайлИмя)-4) + "tmp" + Прав(ФайлИмя, 4);
Из = СоздатьОбъект("XBase");
Из.ОткрытьФайл(ФайлИмя, , 0);
Если Из.Открыта() = 0 Тогда
Предупреждение("Не могу открыть файл " + ФайлИмя);
Возврат;
КонецЕсли;
В = СоздатьОбъект("XBase");
В.ДобавитьПоле("NAME","S",40,0);
В.ДобавитьПоле("SOCR","S",10,0);
В.ДобавитьПоле("CODE","S",11,0);
В.ДобавитьПоле("INDEX","S",6,0);
В.ДобавитьПоле("GNINMB","S",4,0);
В.ДобавитьПоле("UNO","S",4,0);
В.ДобавитьПоле("OCATD","S",11,0);
В.ДобавитьПоле("STATUS","S",1,0);
В.СоздатьФайл(ФайлТ,);
В.ЗакрытьФайл();
В.ОткрытьФайл(ФайлТ, ,0);
Если В.Открыта() = 0 Тогда
Предупреждение("Не могу открыть файл " + ФайлТ);
Возврат;
КонецЕсли;
ВсегоЗаписей = Из.КоличествоЗаписей();
Из.Первая();
НомерЗаписи = 0;
Пока Из.Следующая() = 1 Цикл
В.Добавить();
В.УстановитьЗначениеПоля("NAME", Из.NAME);
В.УстановитьЗначениеПоля("SOCR", Из.SOCR);
В.УстановитьЗначениеПоля("CODE", Лев(Из.CODE, 11));
В.УстановитьЗначениеПоля("INDEX", Из.INDEX);
В.УстановитьЗначениеПоля("GNINMB", Из.GNINMB);
В.УстановитьЗначениеПоля("UNO", Из.UNO);
В.УстановитьЗначениеПоля("OCATD", Из.OCATD);
В.УстановитьЗначениеПоля("STATUS", Из.STATUS);
В.Записать();
НомерЗаписи = НомерЗаписи + 1;
Если НомерЗаписи % 100 = 0 Тогда
Состояние("Обработано " + НомерЗаписи + " записей из " + ВсегоЗаписей);
КонецЕсли;
КонецЦикла;
Из.ЗакрытьФайл();
В.ЗакрытьФайл();
ФС.УдалитьФайл(ФайлИмя);
ФС.ПереименоватьФайл(ФайлТ, ФайлИмя, 0);
ФайлИндекса = Лев(ФайлИмя, СтрДлина(ФайлИмя) - 4) + "1.cdx";
Если ФС.СуществуетФайл(ФайлИндекса) = 1 Тогда
ФС.УдалитьФайл(ФайлИндекса);
КонецЕсли;
Предупреждение("Обработка завершена");
КонецПроцедуры
Опубликовано по матералам сайта MISTA.RU