8.х Вывод из Excel цен

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Mitka90, 15 дек 2017.

  1. TopicStarter Overlay
    Mitka90
    Offline

    Mitka90

    Регистрация:
    9 ноя 2017
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте! Возник такой вопрос: как можно вывести из xls-файла (Excel 97-2003) данные из разных столбцов в табличную часть, при этом чтобы они не перебивались (например, в отчёте одного вида нужно вывести данные из столбца 29 в "Цены для физ.лиц" и "Цены для юр.лиц", а в другой - из 61 и 59 соответственно, но это должно выполняться всё в одном документе):

    Код:
    Процедура ДействияФормыГрузимЦены(Кнопка)
    Если ЗначениеЗаполнено(файл) тогда
    сообщить(файл);
    док=получитьComобъект(файл);
    номстр=1;
    ии=0;
    нн=0;
    Сообщить(сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value));
    пока сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value)<>"zzzzzz" цикл//смотрим код!!!
    ии=ии+1;
    Зкод=сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value);
    сообщить(Зкод);//код
    Знаим=сокрлп(""+док.SHeets("Лист").Cells(номстр,2).value);//наименование
    спр=справочники.Прейскурант.НайтиПоКоду(СокрЛП(Зкод));
    Если спр.Ссылка<>справочники.Прейскурант.ПустаяСсылка() Тогда
    стро=Работы.Добавить();
    стро.ПунктПрейскуранта=спр.Ссылка;
    стро.код=Зкод;
    стро.ценанас=сокрлп(""+док.SHeets("Лист").Cells(номстр,61).value);
    стро.ценаюл=сокрлп(""+док.SHeets("Лист").Cells(номстр,59).value);
    Иначе
      сообщить("не найден код="+Зкод);
    КонецЕсли; 
    номстр=номстр+1;
    КонецЦикла;
      Конецесли;
    КонецПроцедуры
    
    В общем, должно быть так:
    в отчёте "Прейскурант-1" должны выводиться цены из столбца 29 в столбцы табличной части под названиями "Цены для физ.лиц" и "Цены для юр.лиц" (два одинаковых значения из "29"), а в отчёте "Прейскурант-2" - из столбцов 61 для физ.лиц и 59 - для юр.лиц (для них в табличной части предусмотрены столбцы "Цены для физ.лиц" и "Цены для юр.лиц".
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.345
    Симпатии:
    973
    Баллы:
    204
    Лично я из описания мало что понял.
    В экселе накидать визуально можете?
  3. TopicStarter Overlay
    Mitka90
    Offline

    Mitka90

    Регистрация:
    9 ноя 2017
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    В общем, вот, как пример, 2 файла, из первого нужно вывести столбцы 61 и 59 в табличную часть ("Физ.лица" и "Юр.лица"), а из второго - из 29-го в оба поля одинаковые значения.

    По отдельности загрузка идёт успешно, а вместе - получается так, что одно перекрывает другое или просто цены не отображаются.

    Вложения:

  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.345
    Симпатии:
    973
    Баллы:
    204
    Что значит "одно перекрывает другое или просто цены не отображаются"?
  5. TopicStarter Overlay
    Mitka90
    Offline

    Mitka90

    Регистрация:
    9 ноя 2017
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    То есть, выводится либо только по 29 столбцу из обоих документов, если сделать часть кода вида
    Код:
    стро.ценанас=сокрлп(""+док.SHeets("Лист").Cells(номстр,29).value);
    стро.ценаюл=сокрлп(""+док.SHeets("Лист").Cells(номстр,29).value);
    , но там начинают выводится из первого документа данные из столбца 29, что неприемлемо, либо если оставить, как есть, но данных во втором документе в столбцах 61 и 59 нет, поэтому цены не отображаются (пустые поля).

    По отдельности всё работает (если в коде задать после "номстр" нужный номер), осталось как-то это объединить в одно, чтобы выводились, в зависимости от документа, данные либо с 29 столбца, либо с 61 и 59.
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.345
    Симпатии:
    973
    Баллы:
    204
    Я все равно категорически не понимаю, в чем проблемы взять значение из нужной ячейки и присвоить его нужному реквизиту?
    Почему нельзя работать сразу с двумя листами EXCEL?

    Код:
    стро.ценанас=док.SHeets("Лист").Cells(номстр,29).value;
    стро.ценаюл=док.SHeets("Лист").Cells(номстр,29).value;
    
    стро.ценанас=док1.SHeets("Лист").Cells(номстр1,61).value;
    стро.ценаюл=док1.SHeets("Лист").Cells(номстр1,59).value;
    
    Так же пока не понятно, для чего эта ересь "сокрлп(""+" при получении числового значения ячейки Excel.
  7. TopicStarter Overlay
    Mitka90
    Offline

    Mitka90

    Регистрация:
    9 ноя 2017
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Тогда лучше стоит, как я понял, сделать так, чтобы название листа в первом документе называлось "Лист", а во втором - "Лист2", чтобы вывод из столбцов не пересекался.
    И как можно это исправить в коде, чтобы не возник конфликт между выводами "Лист" и "Лист2"?
  8. TopicStarter Overlay
    Mitka90
    Offline

    Mitka90

    Регистрация:
    9 ноя 2017
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Можно сделать так:
    Код:
    Процедура ДействияФормыГрузимЦены(Кнопка)
    Если ЗначениеЗаполнено(файл) тогда
    сообщить(файл);
    док=получитьComобъект(файл);
    номстр=1;
    ии=0;
    нн=0;
    Сообщить(сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value));
    пока сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value)<>"zzzzzz" цикл//смотрим код!!!
    ии=ии+1;
    Зкод=сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value);
    сообщить(Зкод);//код
    Знаим=сокрлп(""+док.SHeets("Лист").Cells(номстр,2).value);//наименование
    спр=справочники.Прейскурант.НайтиПоКоду(СокрЛП(Зкод));
    Если спр.Ссылка<>справочники.Прейскурант.ПустаяСсылка() Тогда
    стро=Работы.Добавить();
    стро.ПунктПрейскуранта=спр.Ссылка;
    стро.код=Зкод;
    стро.ценанас=сокрлп(""+док.SHeets("Лист").Cells(номстр,61).value) + " " + сокрлп(""+док.SHeets("Лист").Cells(номстр,29).value);
    стро.ценаюл=сокрлп(""+док.SHeets("Лист").Cells(номстр,59).value) + " " + сокрлп(""+док.SHeets("Лист").Cells(номстр,29).value);
    Иначе
    сообщить("не найден код="+Зкод);
    КонецЕсли;
    номстр=номстр+1;
    КонецЦикла;
    Конецесли;
    КонецПроцедуры
    
    но получается в итоге то, что из отчёта "Прейскурант-2" всё выводится, как нужно, а из отчёта "Прейскурант-1" почти во всех полях, где цена, почему-то ничего не отображается.
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.345
    Симпатии:
    973
    Баллы:
    204
    Так понимаю, вас не смущает тот факт, что количество строк в листах Excel немного так разное и вы работаете с каким-то одним листом, на котором есть нужные вам значения либо в 29 колонке, либо в 59/61?

    вообще без разницы, как будут называться листы в разных книгах, главное - выбирать нужный лист.

    Открыть второй файл и работать с ним.

Поделиться этой страницей