Вход | Регистрация


Вывод калькуляции из Excel

Вывод калькуляции из Excel
Я
   Mitka90
 
21.12.17 - 09:02
Здравствуйте!
Возникает такая проблема.
При загрузке данных из файла Excel при нажатии на кнопку "Грузим калькуляции" возникает ошибка.

{Документ.ПриказНаКалькуляцию.Форма.ФормаДокумента.Форма(610)}: Ошибка при вызове метода контекста (Cells)
    пока сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value)<>"zzzzzz" цикл//смотрим код!!!

по причине:
Произошла исключительная ситуация (0x800a03ec)

Код:
Процедура ГрузимКалькуляции(Кнопка)
    Если ЗначениеЗаполнено(файл) тогда
    сообщить(файл);
    док=получитьComобъект(файл);
    номстр=НачалоСтроки;
      ии=0;
      нн=0;
    пока сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value)<>"zzzzzz" цикл//смотрим код!!!

        ии=ии+1;
        Зкод=сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value);
        сообщить(Зкод);//код 

        Знаим=сокрлп(""+док.SHeets("Лист").Cells(номстр,2).value);//наименование

        спр=справочники.Прейскурант.НайтиПоКоду(СокрЛП(Зкод));
        Если спр.Ссылка<>справочники.Прейскурант.ПустаяСсылка()  Тогда
            стро=Работы.Добавить();
            стро.ПунктПрейскуранта=спр.Ссылка;
            стро.код=Зкод;
            стро.ценанас=сокрлп(""+док.SHeets("Лист").Cells(номстр,24).value);
            стро.ценаюл=сокрлп(""+док.SHeets("Лист").Cells(номстр,24).value);
            стро.нормавремени= Окр(сокрлп(""+док.SHeets("Лист").Cells(номстр,22).value),   2); 
            стрразр=сокрлп(""+док.SHeets("Лист").Cells(номстр,4).value);
            цр=ДайЦиферкуИзРазряда(стрразр);
            стро.Разряд= ДайРазрядПоНомеру(цр);            
        Иначе    
             сообщить("не найден код="+Зкод);
        КонецЕсли;         
            номстр=номстр+1;        
        КонецЦикла;
       Конецесли;
КонецПроцедуры
 
 
   regniws
 
1 - 21.12.17 - 09:18
видимо не надо округлять строки

 стро.нормавремени= Окр(сокрлп(""+док.SHeets("Лист").Cells(номстр,22).value),   2);
   Mitka90
 
2 - 21.12.17 - 09:33
Даже без округления та же самая ошибка появляется.
   Остап Сулейманович
 
3 - 21.12.17 - 09:33
(1) Нифига. До округления строк дело еще не дошло. Оно не может понять что такое "Cells". Нужно смотреть, что возвращает
получитьComобъект(файл).
   Остап Сулейманович
 
4 - 21.12.17 - 09:38
(3) /*Сторно*/.
получитьComобъект возвращает все как нужно. Скорее всего в книге нет листа с именем "Лист". А проверка его существования возложена на дядю Пушкина.
   Mitka90
 
5 - 21.12.17 - 09:47
Как раз лист такой в документе есть, специально даже его переименовал в "Лист".
   Остап Сулейманович
 
6 - 21.12.17 - 09:49
(5) Если все так - отлично. Теперь подошли к конструкции "номстр=НачалоСтроки;". Чему равно "НачалоСтроки"? Что говорит отладчик?
   Mitka90
 
7 - 21.12.17 - 10:23
Выводит значение "0".
   Остап Сулейманович
 
8 - 21.12.17 - 10:30
(7) Ну так выставь в "1".
   Mitka90
 
9 - 21.12.17 - 11:42
(8) спасибо, выводит!

А как сделать так, чтобы выводились те данные, которых нет в справочнике "Прейскурант" (т.е. код и наименование)? Т.е. устроить "обратный" вывод.
   Остап Сулейманович
 
10 - 21.12.17 - 11:45
(9) Не понятно.
"данные, которых нет в справочнике "Прейскурант" (т.е. код и наименование)?"

А вот это где по коду ищет?
спр=справочники.Прейскурант.НайтиПоКоду(СокрЛП(Зкод));
 
 Рекламное место пустует
   Mitka90
 
11 - 21.12.17 - 13:43
(10)
То есть, существует в конфигурации справочник "Прейскурант", в котором есть код, наименование, цена и т.д.
И в этом справочнике существуют данные, которые данной процедурой 1С "проверяются" на то, что они есть или в этом справочнике, соответственно, выводятся данные, которых нет там.

То есть, "спр" - это то, что проверяется по справочнику (в данном случае - по столбцу "Код") и выводится или нет.

У меня получилось переделать так, но при этом в столбец "Наименование" ничего не выводится, а также в таблице появляются пустые строки, причём их много заносится после вывода всех данных:

Процедура ГрузимКалькуляции(Кнопка)
    Если ЗначениеЗаполнено(файл) тогда
    сообщить(файл);
    док=получитьComобъект(файл);
    номстр=1;
      ии=0;
      нн=0;
    пока сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value)<>"zzzzzz" цикл//смотрим код!!!

        ии=ии+1;
        Зкод=сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value);
        сообщить(Зкод);//код 

        Знаим=сокрлп(""+док.SHeets("Лист").Cells(номстр,2).value);//наименование

        спр=справочники.Прейскурант.НайтиПоКоду(СокрЛП(Зкод));
        Если спр.Ссылка=справочники.Прейскурант.ПустаяСсылка()  Тогда
            стро=Работы.Добавить();
            стро.ПунктПрейскуранта=спр.Ссылка;
            стро.код=Зкод;
            стро.ценанас=сокрлп(""+док.SHeets("Лист").Cells(номстр,29).value);
            стро.ценаюл=сокрлп(""+док.SHeets("Лист").Cells(номстр,29).value);
        Иначе    
             сообщить("не найден код="+Зкод);
        КонецЕсли;
            номстр=номстр+1;    
        КонецЦикла;
       Конецесли;
КонецПроцедуры
   fleur
 
12 - 21.12.17 - 15:28
Видимо, надо добавить:
Стро.наименование=3наим;
   Mitka90
 
13 - 22.12.17 - 08:40
Исправил на вот этот вариант (плюс устранил лишние пустые строки в конце), но всё равно наименование не отображается:

Процедура ГрузимКалькуляции(Кнопка)
    Если ЗначениеЗаполнено(файл) тогда
    сообщить(файл);
    док=получитьComобъект(файл);
    номстр=1;
      ии=0;
      нн=0;
    пока сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value)<>"zzzzzz" цикл//смотрим код!!!

        ии=ии+1;
        Зкод=сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value);
        сообщить(Зкод);//код 

        Знаим=сокрлп(""+док.SHeets("Лист").Cells(номстр,2).value);//наименование

        спр=справочники.Прейскурант.НайтиПоКоду(СокрЛП(Зкод));
        спр2=справочники.Прейскурант.НайтиПоНаименованию(СокрЛП(Знаим));
        Если спр.Ссылка=справочники.Прейскурант.ПустаяСсылка()  Тогда
            стро=Работы.Добавить();
            стро.ПунктПрейскуранта=Знаим;
            стро.код=Зкод;
            стро.ценанас=сокрлп(""+док.SHeets("Лист").Cells(номстр,61).value);
            стро.ценаюл=сокрлп(""+док.SHeets("Лист").Cells(номстр,59).value);
        Иначе    
             сообщить("не найден код="+Зкод);
        КонецЕсли;
            номстр=номстр+1;
    КонецЦикла;
Конецесли;
КонецПроцедуры
   Mitka90
 
14 - 22.12.17 - 08:42
Точнее, вот такой код получается (наименование не отображается):

Процедура ГрузимКалькуляции(Кнопка)
    Если ЗначениеЗаполнено(файл) тогда
    сообщить(файл);
    док=получитьComобъект(файл);
    номстр=1;
      ии=0;
      нн=0;
    пока сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value)<>"zzzzzz" цикл//смотрим код!!!

        ии=ии+1;
        Зкод=сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value);
        сообщить(Зкод);//код 

        Знаим=сокрлп(""+док.SHeets("Лист").Cells(номстр,2).value);//наименование

        спр=справочники.Прейскурант.НайтиПоКоду(СокрЛП(Зкод));
        спр2=справочники.Прейскурант.НайтиПоНаименованию(СокрЛП(Знаим));
        Если спр.Ссылка=справочники.Прейскурант.ПустаяСсылка()  Тогда
        Если спр2.Ссылка=справочники.Прейскурант.ПустаяСсылка()  Тогда
            стро=Работы.Добавить();
            стро.ПунктПрейскуранта=Знаим;
            стро.код=Зкод;
            стро.ценанас=сокрлп(""+док.SHeets("Лист").Cells(номстр,29).value);
            стро.ценаюл=сокрлп(""+док.SHeets("Лист").Cells(номстр,29).value);
        Иначе    
             сообщить("не найден код="+Зкод);
        КонецЕсли;
            номстр=номстр+1;
    КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует