|
Вывод калькуляции из 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; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |