v7: Индекс не входит в границы списка значений, хотя должен #648402


#0 by NDIS HH
СписокТоваров - 3000 элементов. На 3000 циклов 2 раза: "ДопШтрихкод = СписокШтрихкодов.ПолучитьЗначение(Сч1) - Индекс не входит в границы списка значений". Как найти ошибку? Как сделать остановку отладчика по ошибке? Что происходит в момент такой ошибки? - то же что при Продолжить?
#1 by rphosts
точно нет ошибки в написании переменной РазмСпПодчШК ?
#2 by Злопчинский
. . Возникает вопрос: что имел в виду автор, оформялля внешний цикл, если "позиция" внешнего цикла нигде внутри цикла не используется...? или я что-то не понял..?
#3 by Злопчинский
странно... размер списка = 1, почему-то не обрабатывается... чем список с одним элементом отличается от списка с ЭН элементами..? ну да ладно - может для ЭН=1 список вообще отсутсвует...
#4 by Злопчинский
все очень просто - возможно (..что имел в виду автор, оформляя..) что СписокШтрихкодов - получен до внешнего цикла один раз... и успешно прошел внутри 2998 раз, а 2 раза вывалился.. потому что список СписокШтрихкодов нигде не меняется в соотв. с внешним циклом...?
#5 by Злопчинский
а может я хрень пишу... утро уже...
#6 by rphosts
да в обоих случаях, если в списке всего 1 элемент - код из не отраотает... стоит ещё код который модифицирует или список или pyfxtybt переменной РазмСпПодчШК ТС, будь мужиком! Или сделай контрольный вывод перед снутренним циклом: или посмотри на них в отладчике
#7 by rphosts
pyfxtybt  = значение
#8 by cw014
Ибо ты количество перебираешь, а получение идет по индексу (то есть первый элемент = 0)
#9 by NDIS HH
ПолучитьЗначение первый параметр - номер позиции в списке. Изменяется от 1 до РазмерСписка. То есть проблема не в этом.
#10 by NDIS HH
ПолучитьЗначение(<?>,) Синтаксис: ПолучитьЗначение(<Позиция>,<Строка>) Назначение: Получить значение из указанной позиции списка. Возвращает значение из списка. Параметры: <Позиция> - номер позиции в списке, из которой возвращается значение (изменяется от 1 до РазмерСписка);
#11 by NDIS HH
rphost, вы глубоко правы. Щас буду разбираться по вашей методике. =)    Сообщить("чего-нибудь"); И вот когда это условие не отработало а ошибка осталась - я запаниковал.
#12 by AntiBuh
кстати а РазмСпПодчШК не равен 0?
#13 by cw014
А вы попробуйте. Если не отработает - значит не судьба
#14 by NDIS HH
Продолжить; Не может быть меньше 2.
#15 by 1Сергей
не может быть больше одного ващето :)
#16 by cw014
+1
#17 by PALESIA
Ниже приведен "более скоростной" аналог твоего кода, вот только на кой он такой нужен - ХЗ:
#18 by NDIS HH
Если переменная РазмСпПодчШК < 2, то фрагмент на котором возникает ошибка вообще не отрабатывается - вместо этого начинается следующее повторение цикла. А моя проблема была в следующем Пока СписокТоваров.ПолучитьСтроку = 1 Цикл Переменная РазмСпПодчШК изменяется только если выполнено условие, но размер СписокШтрихкодов изменяется вне зависимости от условий на каждом витке. Таким образом если на текущем витке условие ни разу не сработало - то значение РазмСпПодчШК осталось от предыдущего витка. Сам себя премудрил - постеснялся выкладывать всю процедуру.
#19 by NDIS HH
(Вообще это "доработка" обработки выгрузки в фронт-офис  Штрих-М, с целью выгрузки не одного, а всех штрих-кодов подчиненных элементу номенклатуры.)
#20 by Злопчинский
товарищ  NDIS HH! ты понимаешь что включать какой-то код внутрь цикла и в этом коде никак не использовать данные самого цикла - это как-то сомнительно? . тебе понятно, что в твоем коде в можно безо всякого ущерба выкинуть последнюю и первую строки - и от этого результат исполнения кода практически никак не измениятся - он выполнится всего один раз, вместо того, чтобы СОВЕРШЕННО ОДИНАКОВО выполниться N раз..? . или я чего-то не понимаю?
#21 by NDIS HH
Злопчинский,   это же отрывок. Функция ЗагрузитьТовары(Объект, НомСекции, НомерККМ, КаталогОбмена, СписокТоваров)
#22 by Torquader
В УТ-шке я эту "кучу" копал, но там было интереснее, если штрих-код один, то получали значение, если несколько - то список. Соответственно, выгружались и штрих-коды и единицы. Но засада там в том, что если действительно есть единицы с другим количеством, то нужно их штрих-коды не перепутать - иначе потом "умная" программа запрашивает выбор из одинаковых штрих-кодов. P.S. а самое интересное там начинается с весовыми штрих-кодами, когда нужно выгрузить данные в весы и терминал, чтобы они друг-друга понимали.
#23 by Злопчинский
это тебя не спасает . от строчки заголовка цикла . . до блока кода внутри этого цикла . . нет ни одного определения переменных этого блока в связи с переменной/заголовком цикла... этот код может быть безболезненно вынесен наверх, перед заголовком цикла
#24 by Злопчинский
у меня стойкая уверенность что требуемую задачу при тех исходных данных которе есть в параметрах процедуры у ТС - можно решить гораздо проще по коду...
#25 by NDIS HH
Злопчинский, >нет ни одного определения переменных этого блока в связи с переменной/заголовком цикла... Таким образом Спр.НайтиПоКоду(СписокТоваров.Код, 0) определяет текущий элемент справочника Номенклатура, чтобы можно было получить отсутствующие в таблице значений СписокТоваров реквизиты. Вы об этом? Что касается оптимизации, то я додумался только сделать все подчиненные товару штрих-коды реквизитами справочника Номенклатура. Вполне допускаю возможность более изящного решения - у меня пока мало опыта.
#26 by NDIS HH
Если КодДляСравнения = Спр.Код Тогда Вот Спр.Код меняется на каждом витке "большого" цикла. Пока СписокТоваров.ПолучитьСтроку = 1 Цикл
#27 by Злопчинский
ок, сорри, недоглядел
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С