обработка
22.10.2007
02:22
#21
Вот мне и нужен контроль уникальности.
Если использовать Если "СтрДлина(а)>СтрДлина(б)", то цикл очень быстро заканчивается и ничего не меняет. Если использовать "а<>б", то на каком-то шаге возникает ошибка "код не уникален". Может нужно еще какая-нибудь проверка на уникальность?
Если использовать Если "СтрДлина(а)>СтрДлина(б)", то цикл очень быстро заканчивается и ничего не меняет. Если использовать "а<>б", то на каком-то шаге возникает ошибка "код не уникален". Может нужно еще какая-нибудь проверка на уникальность?
22.10.2007
05:16
#22
>Если использовать Если "СтрДлина(а)>СтрДлина(б)", то цикл очень быстро заканчивается и ничего не меняет.
>
Стоит такое предположить, так как если реквизиты "Код" и "НомерИнвКарт" одинаковой длины, то это
условие просто никогда не выполняется.
>Может нужно еще какая-нибудь проверка на уникальность?
>
А вот это зависит от того, какие данные вы вводили. Тут если таких элементов не много
то просто руками изменить номер инв. карты и соответственно переправить нумерацию инвентарных
карт, если требеутся. Тогда обработка пройдёт нормально.
Так же стоит подумать, а нельзя ли данное сделать другими путями.
А изменять или отключать контроль уникальности у справочника не стои вообще.
так как проблем потом какие-нибудь возникнуть могут
>
Стоит такое предположить, так как если реквизиты "Код" и "НомерИнвКарт" одинаковой длины, то это
условие просто никогда не выполняется.
>Может нужно еще какая-нибудь проверка на уникальность?
>
А вот это зависит от того, какие данные вы вводили. Тут если таких элементов не много
то просто руками изменить номер инв. карты и соответственно переправить нумерацию инвентарных
карт, если требеутся. Тогда обработка пройдёт нормально.
Так же стоит подумать, а нельзя ли данное сделать другими путями.
А изменять или отключать контроль уникальности у справочника не стои вообще.
так как проблем потом какие-нибудь возникнуть могут
24.10.2007
07:21
#23
"Можно попробовать что-то вроде:
Для Д = 1 по Спис.РазмерСписка() Цикл
ОС = Спис.ПолучитьЗначение(Д);
Состояние("2. " + ОС.Наименование);
а = Лев(ОС.Код, СтрДлина(ОС.НомерИнвКарт));
б = Лев(ОС.НомерИнвКарт, СтрДлина(ОС.Код));
Если ПустоеЗначение(б) = 0 Тогда
Если Спр.НайтиПоКоду(б)=1 Тогда
//Тут чего-нибудь делаем если такой код уже есть
//Можно просто сообщать о таких элементах и потом руками переправить
КонецЕсли;
Спр.НайтиЭлемент(ОС);
Спр.Код = б;
Спр.НомерИнвКарт = а;
Спр.Записать();
Сообщить("Обмен: " + ОС.Код + " " + ОС.Наименование+" "+ ОС.НомерИнвКарт);
КонецЕсли;
КонецЦикла;
КонецПроцедуры"
Для Д = 1 по Спис.РазмерСписка() Цикл
ОС = Спис.ПолучитьЗначение(Д);
Состояние("2. " + ОС.Наименование);
а = Лев(ОС.Код, СтрДлина(ОС.НомерИнвКарт));
б = Лев(ОС.НомерИнвКарт, СтрДлина(ОС.Код));
Если ПустоеЗначение(б) = 0 Тогда
Если Спр.НайтиПоКоду(б)=1 Тогда
//Тут чего-нибудь делаем если такой код уже есть
//Можно просто сообщать о таких элементах и потом руками переправить
КонецЕсли;
Спр.НайтиЭлемент(ОС);
Спр.Код = б;
Спр.НомерИнвКарт = а;
Спр.Записать();
Сообщить("Обмен: " + ОС.Код + " " + ОС.Наименование+" "+ ОС.НомерИнвКарт);
КонецЕсли;
КонецЦикла;
КонецПроцедуры"
Читают тему
(гостей: 1)