Имя: Пароль:
1C
1C 7.7
v7: Загрузка из файла xls
,
0 san4ez1008
 
31.01.18
09:51
Доброго времени суток! Чет сижу уже часа 3,понять не могу ничего, загружаю файлик в ТЗ, если пустая строка-продолжаем цикл, если 2 подряд-прерываем обработку. Спотыкается на пустой строке, говорит номер за пределами значения.. строки не соответствуют или что?  
[code]
    Лист=1;
    E = СоздатьОбъект("Excel.Application");
    E.WorkBooks.Open(ФайлСоотв);
       Строк=E.Sheets(Лист).Cells.SpecialCells(11).Row;    // строка последней ячейки
       //ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("ШтрихКод");
    ТЗ.НоваяКолонка("ЦЗак");
    ТЗ.НоваяКолонка("ЦОпт");
    Запомнить=0;    
       Для Стр=1 По Строк Цикл
           Если ПустоеЗначение(E.Sheets(Лист).Cells(Стр+10,10).Value)=1 тогда
               Запомнить=Запомнить+1;
               Если Запомнить>1 тогда
                   Прервать;
               иначе
                   продолжить;
               КОнецЕсли;
           иначе
            ТЗ.НоваяСтрока(Стр);                                                              
            ТЗ.УстановитьЗначение(Стр,"ШтрихКод",СокрЛП(E.Sheets(Лист).Cells(Стр+10,10).Value));
            ТЗ.УстановитьЗначение(Стр,"ЦЗак"    ,СокрЛП(E.Sheets(Лист).Cells(Стр+10,12).Value));
            ТЗ.УстановитьЗначение(Стр,"ЦОпт"    ,СокрЛП(E.Sheets(Лист).Cells(Стр+10,14).Value));
        КонецЕсли;
    КонецЦикла;
[/code]
1 PiterPrg
 
31.01.18
10:02
Что за "ТЗ.НоваяСтрока(Стр)" ?

ТЗ.НоваяСтрока();                                                              
            ТЗ.УстановитьЗначение(ТЗ.НомерСтроки,"ШтрихКод",СокрЛП(E.Sheets(Лист).Cells(Стр+10,10).Value));
2 PiterPrg
 
31.01.18
10:06
(1) Пардон, есть. забыл уже клюшки :-)

Но суть та-же. В ТЗ нет строк с количеством Стр
Либо сразу задавай количество строк ТЗ равное "Строк"
А потом просто ПолучитьСтрокуПоНомеру,
Либо как в (1)
3 Builder
 
31.01.18
10:08
(0) Сдается мне, цикл прервется на второй пустой строке, даже не подряд.
Ну и где конкретно ошибка то?
4 Builder
 
31.01.18
10:09
А так что, не модно уже писать?
ТЗ.НоваяСтрока();
ТЗ.ШтрихКод = СокрЛП(ЧтоТоТам);
5 Builder
 
31.01.18
10:15
(0) В условии Иначе добавь
Запомнить=0;
Надо сбросить счетчик.
6 san4ez1008
 
31.01.18
10:15
(1) во,так сработало..
(3) вы правы,это я не обдумал,надо проверить тогда на пустые строки подряд..как так замоделить?
(4) не пробовал еще)
7 PiterPrg
 
31.01.18
10:17
(3) Ошибка здесь:

ТЗ.УстановитьЗначение(Стр,"ШтрихКод",СокрЛП(E.Sheets(Лист).Cells(Стр+10,10).Value));

Предположим мы одну строку пропустили, например 3-ю

И на след. шаге
//Стр = 4
ТЗ.НоваяСтрока(Стр); //Стр игнорируется, вставленная строка третья (проверил :-))

В ТЗ 3 строки, Стр = 4, Установить значение вылетает
8 Builder
 
31.01.18
10:26
(7) Делай как в (4)
9 san4ez1008
 
31.01.18
10:29
(8) все получилось,спасибо!
10 vladko
 
31.01.18
10:37
а вообще говоря, в 7.7 тоже есть отладчик. И когда им пользуешься, тогда не возникает таких вопросов.