Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 23:42

Не уникальный

Автор Ermak1985, 24 фев 2016, 16:41

0 Пользователей и 1 гость просматривают эту тему.

Ermak1985

Добрый день! С толкнулся с такой глупой ошибкой
{Форма.Форма.Форма(120)}: Ошибка при вызове метода контекста (Записать)
         НовЭл.Записать();
по причине:
Значение "101000014" поля "Код" не уникально

и не могу понять почему?

ИмяФайлаДанных="\\Ftp\ftp\ExportWindows\export.dbf";
ФайлДБФ = Новый XBASE;
ФайлДБФ.Кодировка = КодировкаXBase.OEM;
ФайлДБФ.ОткрытьФайл(ИмяФайлаДанных);
ФайлДБФ.Первая();
Номер=0;
ТЗ=Новый ТаблицаЗначений;
Запрос = Новый Запрос("ВЫБРАТЬ
| ЛицевыеСчетаАбонентовГРО.Код,
| ЛицевыеСчетаАбонентовГРО.Наименование,
| ЛицевыеСчетаАбонентовГРО.ФИО,
| ЛицевыеСчетаАбонентовГРО.Телефон,
| ЛицевыеСчетаАбонентовГРО.КороткийАдрес,
| ЛицевыеСчетаАбонентовГРО.Персонал,
| ЛицевыеСчетаАбонентовГРО.Участок,
| ЛицевыеСчетаАбонентовГРО.Оборудование.(
| Ссылка,
| НомерСтроки,
| Тип,
| Модель,
| Дата
| ),
| ЛицевыеСчетаАбонентовГРО.Долги.(
| Ссылка,
| НомерСтроки,
| Услуга,
| СуммаОстаток
| ),
| ЛицевыеСчетаАбонентовГРО.Ссылка
|ИЗ
| Справочник.ЛицевыеСчетаАбонентовГРО КАК ЛицевыеСчетаАбонентовГРО");
ТЗ = Запрос.Выполнить().Выгрузить();

Пока НЕ ФайлДБФ.ВКонце() Цикл
Номер=Номер+1;
ЛС = ФайлДБФ.ПолучитьЗначениеПоля("LSHET");
Если ТЗ.Найти(ЛС,"Код")=Неопределено Тогда
НовЭл = Справочники.ЛицевыеСчетаАбонентовГРО.СоздатьЭлемент();
НовЭл.Код=ЛС;
НовЭл.Записать();
КонецЕсли;
ФайлДБФ.Следующая();
КонецЦикла;
ФайлДБФ.ЗакрытьФайл();

Rasty

наверное такой элемент с таким кодом уже есть в базе
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Kironten

Проверь длины кодов в справочнике базы и в дбф-е.
Возможно при попытке записи код обрезается, и из-за этого становится не уникальным

Ermak1985

Цитата: Rasty от 24 фев 2016, 16:50
наверное такой элемент с таким кодом уже есть в базе
да он есть но у меня же условие стоит Если ТЗ.Найти(ЛС,"Код")=Неопределено Тогда, если он уже есть значит мы не создаем, почему он создает?
Добавлено: 24 фев 2016, 16:57


А влияет если у них разный тип? Я переводил в один тип
...
Для Каждого СтрТЗ из ТЗ Цикл
КодЛС=Формат(СтрТЗ.Код,"ЧГ=0");
Если КодЛС<>ЛС Тогда
...

и все равно он выводил ошибку. В отладчике проверял не обрезает

Kironten

Цитата: Ermak1985 от 24 фев 2016, 16:55
А влияет если у них разный тип? Я переводил в один тип
Должно влиять.
Обычно Код в базе это строковое значение.
Поэтому переводите значение из иксбейз в тип кода в базе, и уже так ищите.
Причем если в базе код - строка, то заодно и через СокрЛП прогоните и там и там, и уже потом ищите.

Rasty

СтрЗаменить(СокрЛП(ЛС),Символы.НПП,"")
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Ermak1985

Цитата: Rasty от 24 фев 2016, 17:18
СтрЗаменить(СокрЛП(ЛС),Символы.НПП,"")
все равно выводит ошибку, что еще может быть не так?
КодЛС=СтрЗаменить(СокрЛП(ЛС),Символы.НПП,"");
Если ТЗ.Найти(КодЛС,"Код")=Неопределено Тогда


Rasty

может типы разные?
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Ermak1985

В отладчике посмотрел Тип Строка и без пробелов, почему тогда условие не работает?

Rasty

а тип кода в табличке?
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск