Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Ошибка при переборе записей в таблице значений , 1С:Предприятие 8.2 (8.2.16.352) УТ для Украины (2.3.18.1)          
Fabri Подменю пользователя
сообщение 21.12.12, 11:19
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 55 раз
Рейтинг: 0

Обработка печать ценников. Есть необходимость выводить записи только со штрих-кодом.
Создал на форме флажек, и реквизит ТолькоСШтрихКодом - Булево
Так как кроме стандартных подборов есть ещё и дописанные (заполнение из документов ПоступлениеТоваровУслуг и РеализацияТоваровУслуг)
правильней создать отдельную процедуру.

//Отфильтруем товары только по штрих кодам
Процедура ОтфильтроватьПоШтрихКодам()
    
Если ЭтотОбъект.ТолькоСШтрихКодом Тогда
        
    Для Каждого Строка ИЗ ЭтотОбъект.Товары Цикл
            
        Если ЕстьШтрихКод(Строка.Номенклатура.Ссылка)=Ложь Тогда
            Товары.Удалить(Строка.НомерСтроки);
        КонецЕсли;
                
    КонецЦикла;

КонецЕсли;

КонецПроцедуры

//Функция проверяет есть ли штрих-код у номенклатуры и возвращает значение Булево
Функция ЕстьШтрихКод(Номенклатура)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    Штрихкоды.Штрихкод
        |ИЗ
        |    РегистрСведений.Штрихкоды КАК Штрихкоды
        |ГДЕ
        |    Штрихкоды.Владелец.Ссылка = &Номенклатура";

    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Возврат Истина;
    КонецЦикла;

    Возврат Ложь;
       
КонецФункции


Вроде все нормально. Но вот получаются фокусы. При выводе удаляются не все записи, т.е. с 19 записей без штрих-кодов. Удаляет всего лишь 10.
Вывел уже отдельно кнопку вызывающую процедуру ОтфильтроватьПоШтрихКодам(). Та же картина. Далее ещё интересней. Вывел 19 записей, нажал кнопку отфильтровать, осталось 9 записей. Нажал ещё раз, осталось 5 записей, нажал ещё - 2 записи, ещё 1 запись, и потом пусто. Какая-то фантастика.

Попробовал по другому:
    
Для А=0 ПО Товары.Количество() Цикл
    
Строка=Товары.Получить(А);

      Если ЕстьШтрихКод(Строка.Номенклатура.Ссылка)=Ложь Тогда
             Товары.Удалить(А);
      КонецЕсли;

      А=А+1;        

КонецЦикла;


Поставил точки останова, смотрю в конфигураторе, Товары.Количество()=19, продолжаю отладку, 10 раз проходит и дальше останавливается. Вообще непойму в чем проблема. Может кто-то сталкивался. Заранее спасибо за ответы.

sava1 Подменю пользователя
сообщение 21.12.12, 11:48
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

что есть Товары ?
Если ТаблПоле проще установить отбор чем удалять.

Спасибо сказали: Fabri,

Fabri Подменю пользователя
сообщение 21.12.12, 12:16
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 55 раз
Рейтинг: 0

Цитата(sava1 @ 21.12.12, 11:48) *
что есть Товары ?
Если ТаблПоле проще установить отбор чем удалять.


да, Табличное поле. Щас попробую.

Если можете, подскажите как использовать отбор, или ссылочку где можно почитать. Спасибо.

sava1 Подменю пользователя
сообщение 21.12.12, 12:20
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Если внешняя обработка - лучше сразу в запросе выбрать только товары со штрихкодом

ЭлементыФормы.ТабличноеПоле.ОтборСтрок.Колонка.Установить(Значение)

Fabri Подменю пользователя
сообщение 21.12.12, 12:49
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 55 раз
Рейтинг: 0

Я писал выше:
Так как кроме стандартных подборов есть ещё и дописанные (заполнение из документов ПоступлениеТоваровУслуг и РеализацияТоваровУслуг)
правильней создать отдельную процедуру.

Процедура подбора не одна и запрос естесно не один. Это щас каждый надо переделывать. Проще отдельной процедурой.


Все равно, отбором ничего неполучается. Мне надо отобрать только ту номенклатуру, которая имеется в РегистреСведений - Штрихкоды, а как это отбором в табличном поле осуществить?

sava1 Подменю пользователя
сообщение 21.12.12, 13:01
Сообщение #6

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Или получать в ТЧ поле Штрихкод (левое соединение по номенклатуре) или отдельно заполнять ТЧ с отбором в запросе

Пример отбора по полю ТМЦ
тОтбор = ЭлементыФормы.тФил.ОтборСтрок;
    Если тОтбор.Найти("ТМЦ") = Неопределено Тогда тОтбор.Добавить("ТМЦ");
    КонецЕсли;
    тОтбор["ТМЦ"].Значение = текТМЦ;
    тОтбор["ТМЦ"].ВидСравнения  = ВидСравнения.Равно;
    тОтбор["ТМЦ"].Использование = Истина;


Для этого нужно чтобы поле Штрихкод было в ТЧ (точне наличиеШтрихкода=1/0)

Спасибо сказали: Fabri,

Fabri Подменю пользователя
сообщение 21.12.12, 13:08
Сообщение #7

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 55 раз
Рейтинг: 0

Спасибо. Я сделал другим способом. Я раньше дописывал параметр Печатать(Булево) в табличной части, который, если флажек установлен выводит элемент на печать, если нет - нет. Я просто установкой этого параметра решил вопрос.

Zaval Подменю пользователя
сообщение 21.12.12, 16:02
Сообщение #8

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Классические грабли ))

Когда Вы удаляете строку, что происходит с номерами строк, лежащих ниже?
Поэтому:
Для удаления строк ТаблицуЗначений нужно перебирать в обратном порядке.

Vofka Подменю пользователя
сообщение 22.12.12, 13:53
Сообщение #9

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Проблема уже 100500 раз обсуждалась на форуме. Люди, читайте форум, найдете много интересного.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 26.04.24, 23:29
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!