Загрузка данных из DBF в справочник!
Док = ПолучитьИзВременногоХранилища(Хранение);
ВрФайл = ПолучитьИмяВременногоФайла("dbf");
Док.Записать(ВрФайл);
//Файл = Новый Файл(ИмяФайла);
Если ЭтоАдресВременногоХранилища(Хранение) Тогда
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("dbf");
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Хранение);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
РабФайл = Новый Файл(ИмяВременногоФайла);
ВременныеФайлы.Добавить(ИмяВременногоФайла);
Иначе
РабФайл = ВрФайл;
КонецЕсли;
//Получаем первые 8-мь симовол имени нашего исходного файла
НашеИмяФайла = Лев(РабФайл.ИмяБезРасширения,8)+".dbf";
//Копируем наш исходный файл во временный каталог с нормальным именем
НашПолныйПутьФайла = КаталогВременныхФайлов()+НашеИмяФайла;
КопироватьФайл( ВрФайл,НашПолныйПутьФайла);
Сообщить (НашПолныйПутьФайла);
База = Новый XBase;
База.Кодировка=КодировкаXBase.OEM;
База.ОткрытьФайл(НашПолныйПутьФайла);
Если База.Открыта()=Ложь Тогда
Возврат;
КонецЕсли;
База.ОтображатьУдаленные=Ложь;
Записей=База.КоличествоЗаписей();
Для й=1 По Записей Цикл
База.Перейти(й);
Код = СокрЛП(База.LS);
Наименование = СокрЛП(База.FIO);
Город = СокрЛП(База.NPUNKT);
Улица = СокрЛП(База.UL);
Дом = СокрЛП(База.NDOM);
Владелец = СокрЛП(База.POD);
Квартира = СокрЛП(База.NKVAR);
НовыйДокумент = Справочники.ЛицевыеСчета.СоздатьЭлемент();
МассивОснований = Новый Массив;
МассивОснований.Добавить(НовыйДокумент.Ссылка);
СтрокаТаблицыДок="";
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Наименование",Справочники.ЛицевыеСчета.НайтиПоКоду(Код));
Наименование=Справочники.ЛицевыеСчета.НайтиПоКоду(Код);
НайденныеСтроки = НовыйДокумент.Наименование;
НовыйДокумент.Владелец = Владелец;
НовыйДокумент.Код = Код;
НовыйДокумент.Наименование = СокрЛП(База.FIO);
// НомерДокПров=НомерДок;
НовыйДокумент.Записать();
КонецЦикла;
УдалитьФайлы(ВрФайл);
ПоказатьДобрый день! Имеется конфа, необходимо загрузить данные из .dbf в поле наименование. Элементы справочника заведены. Синхронизация планируется по полю Код. Выходит ошибка - Значение поля "Владелец" не заполнено или заполнено неверно! Поле владелец заполнено.
По теме из базы знаний
- Загрузка данных из DBF
- Универсальная обработка для загрузки данных в справочники из Еxcel + Управляемые формы
- Выгрузка и загрузка данных XML (только справочников) - метод синхронизации зависимых справочников по коду, наименованию и владельцу
- Загрузка данных из F3 TAIL 3 (еФарма 2) в 1С: Бухгалтерия 3.0 (базовая, ПРОФ, КОРП, ФРЕШ)
- [Расширение] Возможность указывать ссылку на файл в обработке загрузки данных из внешнего источника
Найденные решения
Нашла верное решение.) Всем спасибо! Решила выложить фрагмент кода. Вдруг кому пригодится.
НашПолныйПутьФайла = КаталогВременныхФайлов()+НашеИмяФайла;
КопироватьФайл( ВрФайл,НашПолныйПутьФайла);
Сообщить (НашПолныйПутьФайла);
База = Новый XBase;
База.Кодировка=КодировкаXBase.OEM;
База.ОткрытьФайл(НашПолныйПутьФайла);
Если База.Открыта()=Ложь Тогда
Возврат;
КонецЕсли;
База.ОтображатьУдаленные=Ложь;
Записей=База.КоличествоЗаписей();
Для й=1 По Записей Цикл
База.Перейти(й);
Код = СокрЛП(База.LS);
// Наим = СтрЗаменить(СокрЛП(База.FIO),"","");
Стр = Справочники.ЛицевыеСчета.НайтиПоКоду(Код);
НовыйДокумент = Стр.ПолучитьОбъект();
Если Стр.Пустая()Тогда
Сообщить("Пусто!");
Иначе
НовыйДокумент.Наименование = База.FIO;
НовыйДокумент.Записать();
Сообщить ("Запись обновлена");
КонецЕсли;
КонецЦикла;
УдалитьФайлы(ВрФайл);
База.ЗакрытьФайл();
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Владелец = СокрЛП(База.POD);
НовыйДокумент.Владелец = Владелец;
Владелец в данном коде это строка. А должна быть Ссылка.
Квартира = СокрЛП(База.NKVAR);
НовыйДокумент = Справочники.ЛицевыеСчета.СоздатьЭлемент();
МассивОснований = Новый Массив;
МассивОснований.Добавить(НовыйДокумент.Ссылка);
СтрокаТаблицыДок="";
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Наименование",Справочники.ЛицевыеСчета.НайтиПоКоду(Код));
Наименование=Справочники.ЛицевыеСчета.НайтиПоКоду(Код);
НайденныеСтроки = НовыйДокумент.Наименование;
ПоказатьНовыйДокумент.Владелец = Владелец;
Владелец в данном коде это строка. А должна быть Ссылка.
(4) Спасибо. Владельца убрала, это заполненный элемент. Теперь на метод Записать() ругается((
Для й=1 По Записей Цикл
База.Перейти(й);
Код = СокрЛП(База.LS);
Наим = СокрЛП(База.FIO);
Город = СокрЛП(База.NPUNKT);
Улица = СокрЛП(База.UL);
Дом = СокрЛП(База.NDOM);
//Владелец = СокрЛП(База.POD);
Квартира = СокрЛП(База.NKVAR);
НовыйДокумент = Справочники.ЛицевыеСчета.Выбрать(Код);
МассивОснований = Новый Массив;
МассивОснований.Добавить(НовыйДокумент.Ссылка);
СтрокаТаблицыДок="";
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Наименование",Справочники.ЛицевыеСчета.НайтиПоКоду(Код));
Наименование=Справочники.ЛицевыеСчета.НайтиПоКоду(Код);
Пока НовыйДокумент.Следующий() Цикл
Наим = НовыйДокумент.Наименование;
НовыйДокумент.Записать();
КонецЦикла;
КонецЦикла;
УдалитьФайлы(ВрФайл);
База.ЗакрытьФайл();
ПоказатьДля й=1 По Записей Цикл
База.Перейти(й);
Код = СокрЛП(База.LS);
НовыйДокумент = Справочники.ЛицевыеСчета.Выбрать();
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Код",Справочники.ЛицевыеСчета.НайтиПоКоду(Код));
Код = Справочники.ЛицевыеСчета.НайтиПоКоду(Код);
Если Не Код.Пустая()Тогда
НовыйДокумент = Код.ПолучитьОбъект();
НовыйДокумент.Наименование = СокрЛП(База.FIO);
НовыйДокумент.Записать();
КонецЕсли;
КонецЦикла;
УдалитьФайлы(ВрФайл);
База.ЗакрытьФайл();
Показатьизменила код. Ошибок нет, но Наименование так и не записывается из dbf((
Ну вот сейчас верно. Для записи нужно получить объект и с ним работать.
Но при этом.
Трудно понять.
Код - это справочникссылка. НовыйДокумент это СправочникОбъект.
Как в этом коде понять что можно то?
Сделайте через попытку Запись и посмотрите через ОписаниеОшибки(). Может ошибка какая. Посмотрите Журнал регистрации.
Но при этом.
Трудно понять.
Код - это справочникссылка. НовыйДокумент это СправочникОбъект.
Как в этом коде понять что можно то?
Для й=1 По Записей Цикл
База.Перейти(й);
Код = СокрЛП(База.LS);
НовыйДокумент = Справочники.ЛицевыеСчета.Выбрать(); // Это выборка. И потом не используется. Зачем?
ПараметрыОтбора = Новый Структура; // это вообще зачем?
ПараметрыОтбора.Вставить("Код",Справочники.ЛицевыеСчета.НайтиПоКоду(Код)); // это вообще зачем?
Код = Справочники.ЛицевыеСчета.НайтиПоКоду(Код); // это понятно, теперь это СправочникСсылка
Если Не Код.Пустая()Тогда
НовыйДокумент = Код.ПолучитьОбъект(); // это понятно. Получение СправочникаОбъект
НовыйДокумент.Наименование = СокрЛП(База.FIO); А тут точно что-то есть. Может тут пустота?
НовыйДокумент.Записать(); ну и тут верно.
КонецЕсли;
КонецЦикла;
УдалитьФайлы(ВрФайл);
База.ЗакрытьФайл();
ПоказатьСделайте через попытку Запись и посмотрите через ОписаниеОшибки(). Может ошибка какая. Посмотрите Журнал регистрации.
(8) [IS-QUOTE]НовыйДокумент = Справочники.ЛицевыеСчета.Выбрать(); // Это выборка. И потом не используется. Зачем? А как прописать, в справочнике заведены элементы, код и в dbf и в справочнике идентичен.Поэтому ж и НайтиПоКоду(Код) Обработка должна только Выбрать() - по идее и заменить наименование из файла НовыйДокумент.Наименование = СокрЛП(База.FIO); ?!
Код = Справочники.ЛицевыеСчета.НайтиПоКоду(Код);
Вот тут то и находится как раз элемент код, которого соответствует коду из ДБФ.
Выбрать() используется для открытия выборки. Это Следующий(), Получить(). Это перебор элементов. Это другое в вашем случае.
Вот тут то и находится как раз элемент код, которого соответствует коду из ДБФ.
Выбрать() используется для открытия выборки. Это Следующий(), Получить(). Это перебор элементов. Это другое в вашем случае.
Нашла верное решение.) Всем спасибо! Решила выложить фрагмент кода. Вдруг кому пригодится.
НашПолныйПутьФайла = КаталогВременныхФайлов()+НашеИмяФайла;
КопироватьФайл( ВрФайл,НашПолныйПутьФайла);
Сообщить (НашПолныйПутьФайла);
База = Новый XBase;
База.Кодировка=КодировкаXBase.OEM;
База.ОткрытьФайл(НашПолныйПутьФайла);
Если База.Открыта()=Ложь Тогда
Возврат;
КонецЕсли;
База.ОтображатьУдаленные=Ложь;
Записей=База.КоличествоЗаписей();
Для й=1 По Записей Цикл
База.Перейти(й);
Код = СокрЛП(База.LS);
// Наим = СтрЗаменить(СокрЛП(База.FIO),"","");
Стр = Справочники.ЛицевыеСчета.НайтиПоКоду(Код);
НовыйДокумент = Стр.ПолучитьОбъект();
Если Стр.Пустая()Тогда
Сообщить("Пусто!");
Иначе
НовыйДокумент.Наименование = База.FIO;
НовыйДокумент.Записать();
Сообщить ("Запись обновлена");
КонецЕсли;
КонецЦикла;
УдалитьФайлы(ВрФайл);
База.ЗакрытьФайл();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот