Процедура Добавить()
Длина=8;
Спр=СоздатьОбъект("Справочник.Номенклатура");
Спр.ПорядокНаименований();
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
ТекДл=СтрДлина(Спр.Код);
Если ТекДл=Длина Тогда
Продолжить;
КонецЕсли;
Спр.Код=Лев("00000000",Длина-ТекДл)+Спр.Код;
Спр.Записать();
КонецЦикла;
КонецПроцедуры
Все работает. Но не всегда. :)
Иногда в отдельных случаях выдает что код не уникален.
Как бы так определить какой именно код не уникален, или вообще обойти эту проблему?
Заранее спасибо!
Длина=8;
Спр=СоздатьОбъект("Справочник.Номенклатура");
Спр.ПорядокНаименований();
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
ТекДл=СтрДлина(Спр.Код);
Если ТекДл=Длина Тогда
Продолжить;
КонецЕсли;
Спр.Код=Лев("00000000",Длина-ТекДл)+Спр.Код;
Спр.Записать();
КонецЦикла;
КонецПроцедуры
Все работает. Но не всегда. :)
Иногда в отдельных случаях выдает что код не уникален.
Как бы так определить какой именно код не уникален, или вообще обойти эту проблему?
Заранее спасибо!
По теме из базы знаний
- 1С8:борьба - личный опыт работы с платформой 1с8
- Выдержки из книги Чистый код
- Как читать чужой код? Часть 4. Программный интерфейс. Исправление чужих доработок
- Как читать чужой код? Часть 1. Общие вопросы. Доработка чужого кода. Code review
- Как читать чужой код? Часть 2. Доработка типовой конфигурации. Обновление доработанной типовой конфигурации
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1. Мне больше нравится Спр.Код=Прав("00000000"+Спр.Код,Длина)
2. Ты уже сам почти определил. Вставивь Попытку перед "Запись" и обрабатывай ошибку. Или создай еще объект Номенклатура и в нем ищи по вычисленному коду.
3. Проблемы не обходят, их решают :). Определись, что хочешь сделать с Кодом, который после преобразования стал неуникальным и все. Решения могут быть самые разные: от поиска наименьшего "правильного" кода до установки кода = Фигня01, Фигня02...
2. Ты уже сам почти определил. Вставивь Попытку перед "Запись" и обрабатывай ошибку. Или создай еще объект Номенклатура и в нем ищи по вычисленному коду.
3. Проблемы не обходят, их решают :). Определись, что хочешь сделать с Кодом, который после преобразования стал неуникальным и все. Решения могут быть самые разные: от поиска наименьшего "правильного" кода до установки кода = Фигня01, Фигня02...
(0) пример для твоего , с присваиванием неуникальному коду очередного кода, то есть того который был бы присвоен следующему элементу при интерактивном создании
Процедура Добавить()
Длина=8;
Спр=СоздатьОбъект("Справочник.Номенклатура");
Спр.ПорядокНаименований();
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
ТекЭлем = Спр.ТекущийЭлемент();
ТекДл=СтрДлина(ТекЭлем.Код);
Если ТекДл=Длина Тогда
Продолжить;
КонецЕсли;
ТекКод = Лев("00000000",Длина-ТекДл)+ТекЭлем.Код;
ТекЭлем.Код=ТекКод;
Попытка
ТекЭлем.Записать();
Исключение
Спр.НайтиПоКоду(ТекКод);
Сообщить("Код "+ТекКод+" уже используется у элемента "+Спр.ТекущийЭлемент());
//Воспользуемся автоматически присваиваевым кодом
НовЭлем = Спр.НовыйЭлемент();
НовКод = Спр.Код;
//не записываем его, поэтому элемент не сохраняется
//но мы узнали новый код
ТекЭлем.Код = НовКод;
ТекЭлем.Записать();
Сообщить(" элементу "+ТекЭлем+" присовен новый код "+НовКод);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот