8.х Загрузка данных из Excel в 1С 8.3

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Reclaim, 13 ноя 2015.

  1. TopicStarter Overlay
    Reclaim
    Offline

    Reclaim

    Регистрация:
    13 ноя 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Задача стоит такая: если ИНН в Excel равен какому-то значению, то нужно записать его в реквизит Справочники.ФизическиеЛица, если значения нет, то выдать сообщение ("ИНН в строке " + НомерСтроки + " не найден")
    ------------------------------------------------------------------
    Для НомерСтроки = 2 ПО КоличествоСтрок Цикл

    ОбработкаПрерыванияПользователя();

    ФизЛицоСсылка = Справочники.ФизическиеЛица.НайтиПоНаименованию(СокрЛП(Excel.Cells(НомерСтроки,2).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,3).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,4).Text));

    ИНН = СокрЛП(Excel.Cells(НомерСтроки,5).Text);

    ФизЛицоОбъект = ФизЛицоСсылка.ПолучитьОбъект();
    Если ЗначениеЗаполнено(ИНН) Тогда
    ФизЛицоОбъект.ИНН = ИНН;
    ФизЛицоОбъект.Наименование = ФизЛицоСсылка;
    ФизЛицоОбъект.Записать();
    КонецЕсли;
    КонецЦикла;


    Выдает ошибку: {Форма.Форма.Форма(34)}: Ошибка при вызове метода контекста (ПолучитьОбъект)
    ФизЛицоОбъект = ФизЛицоСсылка.ПолучитьОбъект();
    по причине: Элемент не выбран!

    Подскажите в каком направлении стоит думать или почему выводится эта ошибка.
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    ошибка говорит о том, что ФизЛицоСсылка = Справочники.ФизическиеЛица.ПустаяСсылка(), т.е. элемент в БД не найден по наименованию.
  3. TopicStarter Overlay
    Reclaim
    Offline

    Reclaim

    Регистрация:
    13 ноя 2015
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Спасибо, ответ нашел. Может кому-то пригодиться посмотреть в чем было дело.

    Для НомерСтроки = 2 ПО КоличествоСтрок Цикл
    ОбработкаПрерыванияПользователя();
    ФизЛицоСсылка = Справочники.ФизическиеЛица.НайтиПоНаименованию(СокрЛП(Excel.Cells(НомерСтроки,2).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,3).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,4).Text));
    Если Не ЗначениеЗаполнено(ФизЛицоСсылка) Тогда

    Сообщить("Не найдено физлицо: " + СокрЛП(Excel.Cells(НомерСтроки,2).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,3).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,4).Text));
    Продолжить;
    КонецЕсли; //Нужно было добавить проверку на наименование физического лица

    ИНН = СокрЛП(Excel.Cells(НомерСтроки,5).Text);
    ФизЛицоОбъект = ФизЛицоСсылка.ПолучитьОбъект();
    Если ЗначениеЗаполнено(ИНН) Тогда
    ФизЛицоОбъект.ИНН = ИНН;
    ФизЛицоОбъект.Наименование = ФизЛицоСсылка;
    ФизЛицоОбъект.Записать();
    КонецЕсли;
    КонецЦикла;
    --- Объединение сообщений, 13 ноя 2015 ---
    Но возникла еще одна задачка, которую пытаюсь разрешить.

    Задача стоит такая: если Дата в Excel равна какому-то значению, то нужно записать его в реквизит Справочники.ФизическиеЛица
    ---------------------------------------------------------------------

    Для НомерСтроки = 2 ПО КоличествоСтрок Цикл
    ОбработкаПрерыванияПользователя();

    ФизЛицоСсылка = Справочники.ФизическиеЛица.НайтиПоНаименованию(СокрЛП(Excel.Cells(НомерСтроки,2).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,3).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,4).Text));

    Если НЕ ЗначениеЗаполнено(ФизЛицоСсылка) Тогда
    Сообщить("Не найдено физлицо: " + СокрЛП(Excel.Cells(НомерСтроки,2).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,3).Text) + " " + СокрЛП(Excel.Cells(НомерСтроки,4).Text));
    Продолжить;
    КонецЕсли;

    ИНН = СокрЛП(Excel.Cells(НомерСтроки,5).Text);
    ДатаРождения = СокрЛП(Excel.Cells(НомерСтроки,14).Text);//В экселе дата представлена в таком формате "08.02.1984"
    СтрокаДатаРождения = СтрЗаменить(СокрЛП(Excel.Cells(НомерСтроки,14).Text), ".", "");
    ДатаРоджения = Формат(СтрокаДатаРождения, "ДЛФ=Д");//Тут я предполагаю что дата будет записываться в таком формате "08.02.1984" в реквизит физического лица
    МестоРождения = СокрЛП(Excel.Cells(НомерСтроки,15).Text);

    ФизЛицоОбъект = ФизЛицоСсылка.ПолучитьОбъект();
    Если ЗначениеЗаполнено(ИНН) ИЛИ ЗначениеЗаполнено(МестоРождения) ИЛИ ЗначениеЗаполнено(ДатаРождения) Тогда//
    ФизЛицоОбъект.ИНН = ИНН;
    ФизЛицоОбъект.ДатаРождения = ДатаРождения;//В итоге дата вообще не заносится в реквизит
    ФизЛицоОбъект.МестоРождения = МестоРождения;
    ФизЛицоОбъект.Наименование = ФизЛицоСсылка;
    ФизЛицоОбъект.Записать();
    КонецЕсли;
    КонецЦикла;


    Никаких ошибок не выдает, а просто не записывает дату в реквизит.

    Подскажите правильно ли я задаю преобразование даты из экселя.
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Реквизит справочника, скорее всего, имеет тип Дата, следовательно нужно либо преобразовывать текст в дату(подробнее об этом можно прочитать в синтаксис-помощнике 1С), либо использовать значение ячейки EXCEL, при условии, что тип ячейки - дата:

    Excel.Cells(НомерСтроки,14).value

    вместо

    СокрЛП(Excel.Cells(НомерСтроки,14).Text)

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