Забавная ошибка удаления строк в БП3
Вот типовой код в модуле РеализацияТоваровУслуг и мой патч к нему:
&ИзменениеИКонтроль("ТоварыУслугиКРеализацииПоСчету") Функция Дор_ТоварыУслугиКРеализацииПоСчету(СчетНаОплату, РеализацииПоСчету, ЗаполнятьПризнакПрослеживаемости) ... ОтгруженныеПолностью = Новый Массив; // первый проход по цене, второй - без цены Для Проход = 0 По 1 Цикл Для Каждого СтрокаСчета Из ТоварыУслуги Цикл // Если количество не указано, считаем, что услуга оказывается один раз КоличествоВСчете = ?(СтрокаСчета.ЭтоУслуга И СтрокаСчета.Количество = 0, 1, СтрокаСчета.Количество); ЗаполнитьЗначенияСвойств(Отбор, СтрокаСчета); НайденныеСтроки = РеализованнаяНоменклатура.НайтиСтроки(Отбор); Для каждого СтрокаОтгрузки Из НайденныеСтроки Цикл РеализованоРанее = СтрокаОтгрузки.Количество; Если РеализованоРанее < КоличествоВСчете Тогда // Товар реализован частично Количество = Макс(КоличествоВСчете - РеализованоРанее, 0); СтрокаСчета.Количество = Количество; КоличествоВСчете = КоличествоВСчете - Количество; ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуТабЧасти(СтрокаСчета, РеквизитыСчета.СуммаВключаетНДС); ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуНДСТабЧасти(СтрокаСчета, РеквизитыСчета.СуммаВключаетНДС); ИначеЕсли КоличествоВСчете = 0 Тогда Прервать; Иначе ОтгруженныеПолностью.Добавить(СтрокаСчета); КонецЕсли; СтрокаОтгрузки.Количество = Макс(РеализованоРанее - КоличествоВСчете, 0); КонецЦикла; КонецЦикла; Отбор.Удалить("Цена"); КонецЦикла; ВГраница = ОтгруженныеПолностью.Количество() - 1; Для Индекс = 0 По ВГраница Цикл #Вставка Попытка #КонецВставки ТоварыУслуги.Удалить(ОтгруженныеПолностью[ВГраница - Индекс]); #Вставка Исключение КонецПопытки; #КонецВставки КонецЦикла; Возврат ТоварыУслуги; КонецФункции
Ничего не смущает? В цикле два прохода, поэтому существует потенциальная возможность дважды добавить одну и ту же строку.
Соответственно, она будет пытаться дважды удается и получаем ошибку:
Писатели типовых — такие студенты… Кто ж так пишет…
Среда: БП 3.0.138.25. Объем 0.5 час.
1 комментарий
[…] Забавная ошибка удаления строк в БП3 Пришлось применять расширение с типом «Контроль изменений» и вот при новом обновлении у меня этот контроль сработал. […]