7.7 Выгрузка из excel

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем VIPOS, 29 ноя 2012.

  1. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Доброго всем времени суток.... Знаю что тема избитая, но необходима выгрузка из excel в 7.7
    написал обработку, все вроде ГУД, но выдает ошибку:
    СпрСотр = СоздатьОбъект("Сотрудники");
    {E:\ДЛЯООТИЗ.ERT(5)}: Неудачная попытка создания объекта (Сотрудники)
    Код:
    Процедура Сформировать()
    
    Excel = СоздатьОбъект("Excel.Application");
    СпрСотр = СоздатьОбъект("Сотрудники");
    Excel.Workbooks.Open(ИмяФайлаЗагрузки);
    Книга = Excel.ActiveWorkbook;
    Строк = Excel.Cells.CurrentRegion.Rows.Count;
    Сообщить(Строк)
    ТекЭлем = СпрСотр.ТекущийЭлемент();
    Для х = 1 По Строк Цикл
    
    Код	   = СокрЛП(Строка(Excel.Cells(х, 1).Value));
    Наименование = СокрЛП(Строка(Excel.Cells(х, 2).Value));
    КоэффициентВидаРабот= Число(Excel.Cells(х, 3).Value);
    ПовышениеЗаКатегорию=Число(Excel.Cells(х, 4).Value);
    Декрет_29=Число(Excel.Cells(х, 5).Value);
    ПоПроизводнойПрофессииСтарший=Число(Excel.Cells(х, 6).Value);
    ЗаСложностьИНапряженность=Число(Excel.Cells(х,7).Value);
    ВыслугаЛет=Число(Excel.Cells(х,7).Value);
    
    //Сначала ищем сорудника по коду, если не нашли по наименованию
    Если СпрСотр.НайтиПоКоду(Код) = 1 Тогда
    НайдСотр = СпрСотр.ТекущийЭлемент();
    Иначеесли СпрСотр.НайтиПоНаименованию(Наименование) = 1 Тогда
    НайдСотр = СпрСотр.ТекущийЭлемент();
    Иначе
    Сообщить("Сотрудник "+Код+ "Не найден");
    Продолжить;
    Конецесли;
    СпрСотр.Новый();
    СпрСотр.КоэффициентВидаРабот = КоэффициентВидаРабот;
    СпрСотр.ПовышениеЗаКатегорию = ПовышениеЗаКатегорию;
    СпрСотр.Декрет_29 = Декрет_29;
    СпрСотр.ПоПроизводнойПрофессииСтарший =ПоПроизводнойПрофессииСтарший;
    СпрСотр.ЗаСложностьИНапряженность= ЗаСложностьИНапряженность;
    СпрСотр.ВыслугаЛет= ВыслугаЛет;
    СпрСотр.Записать();  
    //.......	
    
    Конеццикла;
    
    //После загрузки зарываем соединение с Excel
    Excel.Workbooks.Close();
    КонецПроцедуры
    Процедура ВыбратьКат()
    Перем Стр;
    Стр=ИмяФайлаЗагрузки;
    ИмяФ=ИмяФайлаЗагрузки;
    Если ФС.ВыбратьФайл(0,ИмяФ,Стр,"Выбор файла для экспорта","XLS-файлы (*.xls) |*.xls") > 0 Тогда
    ИмяФайлаЗагрузки=Стр+ИмяФ;
    Иначе
    ИмяФайлаЗагрузки="";
    КонецЕсли;
    КонецПроцедуры
    
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    СоздатьОбъект("Справочник.Сотрудники");
  3. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Спасибо. споткнулся на мелочи....
    Но теперь вылезла еще одна проблема!

    СпрСотр.Записать();
    {E:\ДЛЯООТИЗ.ERT(38)}: Не определена дата! Элемент не может быть записан!
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    какой-то реквизит в справочнике - периодический. Нельзя устанавливать напрямую. Используйте метод Установить
  5. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Спасибо!
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
  7. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Т.е. если я вас правильно понял то будет следующее
    Код:
    СпрСотр.КоэффициентВидаРабот.Установить(МояДата, КоэффициентВидаРабот)
    вместо
    Код:
    СпрСотр.КоэффициентВидаРабот = КоэффициентВидаРабот;
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
  9. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Еще косяк...

    СпрСотр.КоэффициентВидаРабот.Установить(ДатаРеквизитов, КоэффициентВидаРабот);
    {E:\ДЛЯООТИЗ.ERT(31)}: Не выбран элемент!
    Я уже полностью запутался....
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    для установки значения периодического реквизита элемент должен уже существовать.
    Т.е. сначала запишите, а потом устанавливайте. Затем снова нужно записать....
  11. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Так они уже существуют, т.е. я хочу только обновить эти коэффициенты..
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    нет. вы создаете новый
    Код:
    СпрСотр.Новый();
  13. TopicStarter Overlay
    VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    затупил, согласен....
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Тогда уж надо делать так
    Код:
       
    Если СпрСотр.НайтиПоКоду(Код) = 1 Тогда
    СпрСотр= СпрСотр.ТекущийЭлемент();
    Иначеесли СпрСотр.НайтиПоНаименованию(Наименование) = 1 Тогда
    СпрСотр= СпрСотр.ТекущийЭлемент();
    Иначе      
    СпрСотр.Новый();
    СпрСотр.Код=Код;
    СпрСотр.Наименование=Наименование;
    //по идее тут бы еще родителя указать...
    СпрСотр.Записать();
    Продолжить;
    Конецесли;
    
    СпрСотр.КоэффициентВидаРабот = КоэффициентВидаРабот;
    

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