Обработка печать ценников. Есть необходимость выводить записи только со штрих-кодом.
Создал на форме флажек, и реквизит ТолькоСШтрихКодом - Булево
Так как кроме стандартных подборов есть ещё и дописанные (заполнение из документов ПоступлениеТоваровУслуг и РеализацияТоваровУслуг)
правильней создать отдельную процедуру.
//Отфильтруем товары только по штрих кодам
Процедура ОтфильтроватьПоШтрихКодам()
Если ЭтотОбъект.ТолькоСШтрихКодом Тогда
Для Каждого Строка ИЗ ЭтотОбъект.Товары Цикл
Если ЕстьШтрихКод(Строка.Номенклатура.Ссылка)=Ложь Тогда
Товары.Удалить(Строка.НомерСтроки);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
//Функция проверяет есть ли штрих-код у номенклатуры и возвращает значение Булево
Функция ЕстьШтрихКод(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Штрихкоды.Штрихкод
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Владелец.Ссылка = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Возврат Истина;
КонецЦикла;
Возврат Ложь;
КонецФункции
Вроде все нормально. Но вот получаются фокусы. При выводе удаляются не все записи, т.е. с 19 записей без штрих-кодов. Удаляет всего лишь 10.
Вывел уже отдельно кнопку вызывающую процедуру ОтфильтроватьПоШтрихКодам(). Та же картина. Далее ещё интересней. Вывел 19 записей, нажал кнопку отфильтровать, осталось 9 записей. Нажал ещё раз, осталось 5 записей, нажал ещё - 2 записи, ещё 1 запись, и потом пусто. Какая-то фантастика.
Попробовал по другому:
Для А=0 ПО Товары.Количество() Цикл
Строка=Товары.Получить(А);
Если ЕстьШтрихКод(Строка.Номенклатура.Ссылка)=Ложь Тогда
Товары.Удалить(А);
КонецЕсли;
А=А+1;
КонецЦикла;
Поставил точки останова, смотрю в конфигураторе, Товары.Количество()=19, продолжаю отладку, 10 раз проходит и дальше останавливается. Вообще непойму в чем проблема. Может кто-то сталкивался. Заранее спасибо за ответы.