Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
03 июл 2022, 21:28

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

Автор Mitka90, 21 дек 2017, 10:17

0 Пользователей и 1 гость просматривают эту тему.

Mitka90

Здравствуйте!
Возникает такая проблема.
При загрузке данных из файла 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;
КонецЦикла;
  Конецесли;
КонецПроцедуры

AIFrame

// Откроем таблицу
Excel = Новый COMОбъект("Excel.Application");
Excel.Visible=0;
Книга = Excel.WorkBooks.Open(ИмяФайла);
Лист = Книга.WorkSheets(1);

ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
ПерваяСтрокаТовара  = 1;

Для Строка = ПерваяСтрокаТовара По ВсегоСтрок Цикл
            // фоырвлфоырвлофырв
КонецЦикла;
Excel.Quit();

Mitka90

Спасибо, получилось вот так:

Но вот ещё не получается сделать кое-что другое:

Существует в конфигурации справочник "Прейскурант", в котором есть код, наименование, цена и т.д.
И в этом справочнике существуют данные, которые данной процедурой 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;   
        КонецЦикла;
       Конецесли;
КонецПроцедуры


В чём может быть "неправильность" кода в данной процедуре?

AIFrame

Цитата: Mitka90 от 21 дек 2017, 14:47В чём может быть "неправильность" кода в данной процедуре?

Если спр.Ссылка=справочники.Прейскурант.ПустаяСсылка()  Тогда
    стро.ПунктПрейскуранта=спр.Ссылка;
:kmtu:

Mitka90

Исправил на вот этот вариант (плюс устранил лишние пустые строки в конце), но всё равно наименование не отображается:

Процедура ГрузимКалькуляции(Кнопка)
Если ЗначениеЗаполнено(файл) тогда
сообщить(файл);
док=получить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;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

AIFrame

У вас Колонка ПунктПрейскуранта то ссылкасправочника Прейкурант, то строка произвольная. Вы уж или определитесь, или укажите для этой колонки составной тип данных.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск