Хранить информацию надо так, как это проще и удобнее именно вам.

БЛОКНОТ

 

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

Реклама:

Реклама: