| 
    
        
     
     | 
    
  | 
Вывод калькуляции из Excel | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        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; КонецЦикла; Конецесли; КонецПроцедуры  | 
|||
| 
    1
    
        regniws    
     21.12.17 
            ✎
    09:18 
 | 
         
        видимо не надо округлять строки
 
        стро.нормавремени= Окр(сокрлп(""+док.SHeets("Лист").Cells(номстр,22).value), 2);  | 
|||
| 
    2
    
        Mitka90    
     21.12.17 
            ✎
    09:33 
 | 
         
        Даже без округления та же самая ошибка появляется.     
         | 
|||
| 
    3
    
        Остап Сулейманович    
     21.12.17 
            ✎
    09:33 
 | 
         
        (1) Нифига. До округления строк дело еще не дошло. Оно не может понять что такое "Cells". Нужно смотреть, что возвращает 
 
        получитьComобъект(файл).  | 
|||
| 
    4
    
        Остап Сулейманович    
     21.12.17 
            ✎
    09:38 
 | 
         
        (3) /*Сторно*/.
 
        получитьComобъект возвращает все как нужно. Скорее всего в книге нет листа с именем "Лист". А проверка его существования возложена на дядю Пушкина.  | 
|||
| 
    5
    
        Mitka90    
     21.12.17 
            ✎
    09:47 
 | 
         
        Как раз лист такой в документе есть, специально даже его переименовал в "Лист".     
         | 
|||
| 
    6
    
        Остап Сулейманович    
     21.12.17 
            ✎
    09:49 
 | 
         
        (5) Если все так - отлично. Теперь подошли к конструкции "номстр=НачалоСтроки;". Чему равно "НачалоСтроки"? Что говорит отладчик?     
         | 
|||
| 
    7
    
        Mitka90    
     21.12.17 
            ✎
    10:23 
 | 
         
        Выводит значение "0".     
         | 
|||
| 
    8
    
        Остап Сулейманович    
     21.12.17 
            ✎
    10:30 
 | 
         
        (7) Ну так выставь в "1".     
         | 
|||
| 
    9
    
        Mitka90    
     21.12.17 
            ✎
    11:42 
 | 
         
        (8) спасибо, выводит!
 
        А как сделать так, чтобы выводились те данные, которых нет в справочнике "Прейскурант" (т.е. код и наименование)? Т.е. устроить "обратный" вывод.  | 
|||
| 
    10
    
        Остап Сулейманович    
     21.12.17 
            ✎
    11:45 
 | 
         
        (9) Не понятно. 
 
        "данные, которых нет в справочнике "Прейскурант" (т.е. код и наименование)?" А вот это где по коду ищет? спр=справочники.Прейскурант.НайтиПоКоду(СокрЛП(Зкод));  | 
|||
| 
    11
    
        Mitka90    
     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; КонецЦикла; Конецесли; КонецПроцедуры  | 
|||
| 
    12
    
        fleur    
     21.12.17 
            ✎
    15:28 
 | 
         
        Видимо, надо добавить:
 
        Стро.наименование=3наим;  | 
|||
| 
    13
    
        Mitka90    
     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; КонецЦикла; Конецесли; КонецПроцедуры  | 
|||
| 
    14
    
        Mitka90    
     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; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |