Забавная ошибка удаления строк в БП3

Вот типовой код в модуле РеализацияТоваровУслуг и мой патч к нему:

&ИзменениеИКонтроль("ТоварыУслугиКРеализацииПоСчету")
Функция Дор_ТоварыУслугиКРеализацииПоСчету(СчетНаОплату, РеализацииПоСчету, ЗаполнятьПризнакПрослеживаемости)

	...
	ОтгруженныеПолностью = Новый Массив;

	// первый проход по цене, второй - без цены
	Для Проход = 0 По 1 Цикл
		Для Каждого СтрокаСчета Из ТоварыУслуги Цикл

			// Если количество не указано, считаем, что услуга оказывается один раз
			КоличествоВСчете = ?(СтрокаСчета.ЭтоУслуга И СтрокаСчета.Количество = 0, 1, СтрокаСчета.Количество);

			ЗаполнитьЗначенияСвойств(Отбор, СтрокаСчета);
			НайденныеСтроки = РеализованнаяНоменклатура.НайтиСтроки(Отбор);

			Для каждого СтрокаОтгрузки Из НайденныеСтроки Цикл

				РеализованоРанее = СтрокаОтгрузки.Количество;

				Если РеализованоРанее < КоличествоВСчете Тогда
					// Товар реализован частично
					Количество = Макс(КоличествоВСчете - РеализованоРанее, 0);
					СтрокаСчета.Количество = Количество;
					КоличествоВСчете  = КоличествоВСчете - Количество;

					ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуТабЧасти(СтрокаСчета, РеквизитыСчета.СуммаВключаетНДС);
					ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуНДСТабЧасти(СтрокаСчета, РеквизитыСчета.СуммаВключаетНДС);
				ИначеЕсли КоличествоВСчете = 0 Тогда
					Прервать;
				Иначе
					ОтгруженныеПолностью.Добавить(СтрокаСчета);
				КонецЕсли;

				СтрокаОтгрузки.Количество = Макс(РеализованоРанее - КоличествоВСчете, 0);
			КонецЦикла;
		КонецЦикла;

		Отбор.Удалить("Цена");
	КонецЦикла;

	ВГраница = ОтгруженныеПолностью.Количество() - 1;
	Для Индекс = 0 По ВГраница Цикл
#Вставка
	Попытка
#КонецВставки
		ТоварыУслуги.Удалить(ОтгруженныеПолностью[ВГраница - Индекс]);
#Вставка
	Исключение
	КонецПопытки;
#КонецВставки
	КонецЦикла;

	Возврат ТоварыУслуги;

КонецФункции

Ничего не смущает? В цикле два прохода, поэтому существует потенциальная возможность дважды добавить одну и ту же строку.

Соответственно, она будет пытаться дважды удается и получаем ошибку:

Писатели типовых — такие студенты… Кто ж так пишет…

Среда: БП 3.0.138.25. Объем 0.5 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

1 комментарий

  1. 22.09.2023

    […] Забавная ошибка удаления строк в БП3 Пришлось применять расширение с типом «Контроль изменений» и вот при новом обновлении у меня этот контроль сработал. […]

Добавить комментарий

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