Оператор Продолжить или как пропустить ошибку...

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. melyssa 09.10.14 18:45 Сейчас в теме
Всем добрый вечер!!!

Ситуация такая - есть таблица значений. В ней список номенклатуры, и иногда позиции повторяются. Так как позиций много и файл будет загружаться с изменениями каждый день, нужно не ручное решение.

При прохождении цикла, пока записи уникальны - все отлично. Как только запись повторяется, срабатывает исключительная ситуация (так как в регистр не запишутся две одинаковые записи) и оператор Продолжить отправляет действие в начало цикла. Так вот где крендель, вместо того, чтоб пропустить дублирующуюся запись и дальше делать все как надо, он перебирает все последующие записи, НО переходит к ИСКЛЮЧЕНИЮ и не записывает в регистр, хотя записи уникальны. Меняла в документе порядок записей - как только находит дубль - все, миру конец. Помогите, пожалуйста, - мне кажется, что тут какая-то мелочная недоработка, но уже голова пухнет((

Привожу код цикла:


Для Каждого стр из ТЗ Цикл
		Состояние("Загрузка данных... артикул " + Стр.Артикул);
		 						
		НоваяЗапись = НаборЗаписей.Добавить();
		НоваяЗапись.Период = ЭтаФорма.Период;
		НоваяЗапись.Поставщик = Справочники.Контрагенты.НайтиПоКоду("015531");
		НоваяЗапись.Номенклатура = Стр.Номенклатура;
		НоваяЗапись.КоличествоСкладСпб = Стр.ОстСПБ;
		НоваяЗапись.КоличествоСкладМск = Стр.ОстМск;
                НоваяЗапись.КоличествоСкладВыездной = Стр.ОстВыездной;
		НоваяЗапись.КоличествоОжидается = Стр.Ожидается;
 		НоваяЗапись.ЦенаРозничная = Стр.ЦенаРозничная;
		НоваяЗапись.ЦенаЗакупочная = Стр.ЦенаДляАтомик;
		НоваяЗапись.ВалютаЦен = Справочники.Валюты.НайтиПоКоду("643");
		НоваяЗапись.Дата = ЭтаФорма.Период;
			
				
	Попытка
		НаборЗаписей.Записать();
		Сообщить(НоваяЗапись.Номенклатура);
	Исключение
		Сообщить("Не получилось " + НоваяЗапись.Номенклатура);
		Продолжить;
		КонецПопытки;
	    
	КонецЦикла;
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DJDUH 17 09.10.14 18:56 Сейчас в теме
(1) melyssa, обрежь все данные перед записью в регистр
НоваяЗапись.Номенклатура = СокрЛП(Стр.Номенклатура);

добавь
.записат()
в исключение)
3. Salavat 13 09.10.14 19:03 Сейчас в теме
(2) DJDUH, а зачем запись() в исключение добавить?
если она в попытке не вышла.
4. melyssa 09.10.14 19:07 Сейчас в теме
(2) DJDUH, я не поняла про записать в исключении...
5. melyssa 09.10.14 19:26 Сейчас в теме
Для наглядности проблемы напишу результат сего деяния:
Есть товары: яблоки, груши, персик, персик, дыня, арбуз, тыква.
Сообщения:
яблоки
груши
персик
не получилось персик
не получилось дыня
не получилось арбуз
не получилось тыква
6. platon_ 10 09.10.14 19:31 Сейчас в теме
А не пробовали сначала искать запись в регистре, если есть то пропускать, а если нету то добавлять новую? Лучше всяких попыток и прочего будет работать.
ojiojiowka; melyssa; +2 Ответить
7. melyssa 09.10.14 20:42 Сейчас в теме
8. melyssa 10.10.14 00:25 Сейчас в теме
Предложенный вариант работает, но это сильно затягивает процесс - после 2000-го наименования, проверка занимает много времени и выполнение операции растягивается на часы, так что не подходит.
Нет идей что не так с оператором Продолжить?
9. miniogn 23 10.10.14 06:10 Сейчас в теме
Вместо
НоваяЗапись = НаборЗаписей.Добавить();

попробуй
НоваяЗапись = РегистрыСведений.МойРегистр.СоздатьМенеджерЗаписи();
11. melyssa 10.10.14 11:17 Сейчас в теме
(9) miniogn, Спасибо, менеджер записи внутри цикла помог.
10. miniogn 23 10.10.14 06:13 Сейчас в теме
Или создание набора помести в цикл
Для Каждого стр из ТЗ Цикл
        Состояние("Загрузка данных... артикул " + Стр.Артикул);
        НаборЗаписей = Регистр.СоздатьНаборЗаписей();
        НоваяЗапись = НаборЗаписей.Добавить();
        //все остальное
КонецЦикла
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот