Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:57

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

Автор Яна93, 11 июл 2013, 21:12

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

Яна93

Всем Привет!:) Сегодня столкнулась с такой проблемой..в таблице эксель изменилось расположение данных, в обработке которую всегда использовала удалось понять немного код, и внесла небольшие изменения по части расположения обрабатываемых данных, но одну колонку "Держатель" применить уже не получится т.к. она уже пустая (в коде она записана как - КонтрагентID), но появилась колонка "Номер карты" которая ранее была записана не в виде колонки..так вот не могу придумать для нее условие, потому что не имела ранее дело с таким сложным кодом.. Подскажите пожалуйста


Процедура КнопкаВыполнитьНажатие(Кнопка)

   Попытка
      Excel = Новый COMОбъект("Excel.Application");
   Исключение
      Сообщить("Не удалось инициализировать Excel");
      Возврат;
   КонецПопытки;   
   Попытка
      ЗапросПоКонтрагентам = Новый Запрос;
      ЗапросПоКонтрагентам.Текст="ВЫБРАТЬ
      |   ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.Период,
      |   ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.Контрагент,
      |   ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.ДоговорПоСмартКартам,
      |   ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.Филиал.Код КАК КодФилиала,
      |   ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.КодПЦ
      |ИЗ
      |   РегистрСведений.Ю_ИнформацияПоРаботеКонтрагентовПоСмартКартам.СрезПоследних(&ДатаТранзакции, ) КАК ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних";
      ЗапросПоТО = Новый Запрос;
      ЗапросПоТО.Текст= "ВЫБРАТЬ
                        |   Ю_ТочкиОбслуживания.Ссылка КАК ТО,
                        |   Ю_ТочкиОбслуживания.Эмитент,
                        |   Ю_ТочкиОбслуживания.КодТО_ОЦ как НомерТО
                        |ИЗ
                        |   Справочник.Ю_ТочкиОбслуживания КАК Ю_ТочкиОбслуживания" ;
      
      Excel.Workbooks.Open(ПутьКФайлу);
      НомерКниги=Excel.Workbooks.count;
      Книга=Excel.Workbooks.Item(НомерКниги);
      Лист=Excel.Sheets(1);
      метка = ложь; номерСтроки=8; индекс=0;
      
      ВыборкаТранзакцийЗаОдинДень=Новый ТаблицаЗначений;
      ВыборкаТранзакцийЗаОдинДень.Очистить();
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("ID_OPERATION");
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("ID_CLIENT");
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("DATE_OF");
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("POS_EMITENT");
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("POS_NUMBER");
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("CARD_GRAF_NUM");
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("ID_SERVICE_FOR");
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("POS_PRICE");
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("SUM_AMOUNT");
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("BASE_SUM_DELTA");      
      ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("SERVICE_AMOUNT");
      
      Пока метка <> истина цикл
         значениеД =  Лист.Cells(номерСтроки,4).Value;
         значениеФ =  Лист.Cells(номерСтроки,6).Value;
         Если Не значениеД = Неопределено тогда
            индекс = 0;
            НомерКарты_ = "";
            длинаСтроки = СтрДлина(значениеД);
            Для к=1 по длинаСтроки Цикл
               СимволСтр = Сред(значениеД,к,1);
               Если СимволСтр = "0" или СимволСтр = "1" или СимволСтр = "2" или СимволСтр = "3" или СимволСтр = "4" или СимволСтр = "5" или СимволСтр = "6" или СимволСтр = "7" или СимволСтр = "8" или СимволСтр = "9" тогда
                  НомерКарты_ = НомерКарты_ + СимволСтр;
               КонецЕсли;
            КонецЦикла;
            НомерКарты  = НомерКарты_;
         ИначеЕсли Не значениеФ = Неопределено тогда
            ЗначениеДаты_  = СокрЛП(Лист.Cells(номерСтроки,5).Value);
            Попытка
               ДатаиВремя_ = Формат(ЗначениеДаты_,"ДЛФ=DT");
               ЗначениеДаты = Дата(ДатаиВремя_);
               индекс = 0;
               стр=ВыборкаТранзакцийЗаОдинДень.Добавить();
               стр.CARD_GRAF_NUM = НомерКарты;                         //номер карты
               стр.DATE_OF = СокрЛП(Лист.Cells(номерСтроки,5).Value); //дата
               ДатаНачалаЗагрузкиТранзакцийИзБДПетрол = Дата(стр.DATE_OF);
               значение = Лист.Cells(номерСтроки,6).Value;
               Эмитент = Сред(значение,2,4);
               номерСим_1 = Найти(значение,"]");
               к = 1;
               НомерТО_ = "";СимволСтр="";
               Пока СимволСтр<>"," Цикл
                  СимволСтр = Сред(значение,номерСим_1-к,1);
                  Если СимволСтр = "0" или СимволСтр = "1" или СимволСтр = "2" или СимволСтр = "3" или СимволСтр = "4" или СимволСтр = "5" или СимволСтр = "6" или СимволСтр = "7" или СимволСтр = "8" или СимволСтр = "9" тогда
                     НомерТО_ = СимволСтр + НомерТО_;
                  КонецЕсли;
                  к = к+1;
               КонецЦикла;
               стр.POS_EMITENT = Эмитент;                      //эмитент ТО
               стр.POS_NUMBER = Число(НомерТО_);               // Номер ТО
               попытка
                  КонтрагентID = Число(Лист.Cells(номерСтроки,9).Value);
                  стр.ID_CLIENT = КонтрагентID;                      //id
               Исключение
                  Сообщить("Не числовое значение держателя соответствующее ID клиента " + Лист.Cells(номерСтроки,9).Value);
               КонецПопытки;
               Операция_ = Лист.Cells(номерСтроки,10).Value;
               Если Операция_ = "Обсл." тогда Операция = 29
               ИначеЕсли Операция_ = "Возв. С." тогда Операция = 31
               Иначе
                  Операция = 100;
                  Сообщить("Не опознанная операция " + Операция_ +" по карте " + НомерКарты + " от " + стр.DATE_OF);
               КонецЕсли;
               стр.ID_OPERATION = Операция;                  // Операции
               Услуга_ = Лист.Cells(номерСтроки,11).Value;
               Если Услуга_ = "Бензин А-92" тогда Услуга = 15
               ИначеЕсли Услуга_ = "Аи-95" тогда Услуга = 17
               ИначеЕсли Услуга_ = "Аи-98" тогда Услуга = 18
               ИначеЕсли Услуга_ = "А-76" или Услуга_ = "А-76/80" тогда Услуга = 13
               ИначеЕсли Услуга_ = "ДТ летнее" тогда Услуга = 11
               ИначеЕсли Услуга_ = "ДТ зимнее" или Услуга_ = "ДТ" тогда Услуга = 12
               ИначеЕсли Услуга_ = "Газ пропан-бутан" тогда Услуга = 22
               Иначе
                  Услуга = 100;
                  Сообщить("Не опознанная услуга " + Услуга_ +" по карте " + НомерКарты + " от " + стр.DATE_OF);
               КонецЕсли;
               стр.ID_SERVICE_FOR = Услуга;                     // Номенклатура
               стр.SERVICE_AMOUNT = -Лист.Cells(номерСтроки,12).Value; // Количество
               стр.POS_PRICE = Лист.Cells(номерСтроки,13).Value;       // Цена ТО
               стр.SUM_AMOUNT = -Лист.Cells(номерСтроки,17).Value;    // Стоимость на ТО со скидкой
               стр.BASE_SUM_DELTA = -Лист.Cells(номерСтроки,16).Value; // скидка
               
            Исключение
               //Сообщить("бла бла Не удалось инициализировать Excel");
               //Возврат;
            КонецПопытки;
         Иначе индекс = индекс+1;   
         КонецЕсли;         
         номерСтроки=номерСтроки+1;
         Если индекс > 30 тогда метка = Истина; конецЕсли;
      КонецЦикла;
   Исключение
      Сообщить(ОписаниеОшибки());
      Excel.Quit();
   КонецПопытки;
   
   НачатьТранзакцию();
   ДокТранзакцииЗаСутки      = Документы.Ю_ТранзакцииЗаСуткиЭмитента1070.СоздатьДокумент();
   ДокТранзакцииЗаСутки.Дата   = КонецМесяца(ДатаНачалаЗагрузкиТранзакцийИзБДПетрол);
   ЗапросПоКонтрагентам.УстановитьПараметр("ДатаТранзакции",КонецДня(ДатаНачалаЗагрузкиТранзакцийИзБДПетрол));
   РезультатЗапросаПоКонтрагентам = ЗапросПоКонтрагентам.Выполнить();
   РезультатЗапросаПоТО = ЗапросПоТО.Выполнить();
   НомерСвоегоЭмитента = Константы.Ю_СвойЭмитент.Получить().Код;
   НомерСтроки=0;
   для каждого выборка из  ВыборкаТранзакцийЗаОдинДень цикл
         НастройкиФилиала = ПолучитьНастройкиФилиалаПетрол(Справочники.Ю_Филиалы.НайтиПоКоду("1"));
         Если НЕ НастройкиФилиала.СостояниеФилиала.Пустая() Тогда
            Если НомерЭмитента(Выборка.POS_EMITENT)<>НомерСвоегоЭмитента Тогда
               ЗаполнитьСтрокуТабЧастиДокТранзакции(ДокТранзакцииЗаСутки.ТранзакцииНаЧужихТО,ДокТранзакцииЗаСутки,НастройкиФилиала,Выборка,РезультатЗапросаПоКонтрагентам,РезультатЗапросаПоТО)
            Иначе
               ЗаполнитьСтрокуТабЧастиДокТранзакции(ДокТранзакцииЗаСутки.Транзакции,ДокТранзакцииЗаСутки,НастройкиФилиала,Выборка,РезультатЗапросаПоКонтрагентам,РезультатЗапросаПоТО)
            КонецЕсли;                                                               
         КонецЕсли;
   КонецЦикла;   
   //ЗапросПоДокументам   = Новый Запрос;
   //ЗапросПоДокументам.Текст   = "ВЫБРАТЬ
   //                       |   ТранзакцииЗаСутки.Ссылка,
   //                       |   ТранзакцииЗаСутки.Номер
   //                       |ИЗ
   //                       |   Документ.Ю_ТранзакцииЗаСуткиЭмитента412 КАК ТранзакцииЗаСутки
   //                       |ГДЕ
   //                       |   ТранзакцииЗаСутки.Дата = &НачПериодаУдаления";
   //ЗапросПоДокументам.УстановитьПараметр("НачПериодаУдаления",КонецМесяца(ДатаНачалаЗагрузкиТранзакцийИзБДПетрол));
   //РезультатЗапросаПоДокументам   = ЗапросПоДокументам.Выполнить();
   //ВыборкаЗапросаПоДокументам      = РезультатЗапросаПоДокументам.Выбрать();
   //НачатьТранзакцию();
   //Пока ВыборкаЗапросаПоДокументам.Следующий() Цикл
   //   ДокОбъект   = ВыборкаЗапросаПоДокументам.Ссылка.ПолучитьОбъект();
   //   ДокОбъект.Удалить();
   //КонецЦикла;   
   //ЗафиксироватьТранзакцию();
   //ОбновитьНумерациюОбъектов(Метаданные.Документы.Ю_ТранзакцииЗаСутки);

   //ДокТранзакцииЗаСутки.Записать(РежимЗаписиДокумента.Проведение);
   ДокТранзакцииЗаСутки.Записать(РежимЗаписиДокумента.Запись);
   ЗафиксироватьТранзакцию();
КонецПроцедуры

Яна93

На всякий случай прикрепила обработку и сам документ. Версия программы 1С 8.2 Бухгалтерия предприятия, редакция 1.6 (1.6.30.7)
Добавлено: 12 июл 2013, 13:33


Вот сейчас пыталась закомментировать код:
попытка
КонтрагентID = Число(Лист.Cells(номерСтроки,9).Value);
стр.ID_CLIENT = КонтрагентID;                      //id
Исключение
Сообщить("Не числовое значение держателя соответствующее ID клиента " + Лист.Cells(номерСтроки,9).Value);
КонецПопытки;


И обработка зависает..:(
Добавлено: 12 июл 2013, 15:40


Уже руки опускаются..уже многое перепробывала, чтобы избавится от этой ошибки "Не числовое значение держателя соответствующее ID клиента" т.к. колонка Держатели пустая.. Подскажите пожалуйста

GRADUS

Почему бухгалтер занимается программированием? :xfbnsdfb:

Яна93

Хочется облегчить работу..т.к. ни чего не успеваю в отчетный период.. Вакансия программиста свободна уже 4 месяца с ухода предыдущего сострудника..:(

Кроме Вас подсказать некому..

Я вот думаю поэкспериментировать в следующем:
Заокмментировать часть кода -

  попытка
                  КонтрагентID = Число(Лист.Cells(номерСтроки,9).Value);
                  стр.ID_CLIENT = КонтрагентID;                      //id
               Исключение
                  Сообщить("Не числовое значение держателя соответствующее ID клиента " + Лист.Cells(номерСтроки,9).Value);
               КонецПопытки;

И вместо него написать -
Попытка НомерКарты = Число(Лист.Cells(номерСтроки,8).Value);
стр.CARD_GRAF_NUM = НомерКарты;                             
Исключение
    Сообщить("Не числовое значение" + Лист.Cells(номерСтроки,8).Value);
КонецПопытки;

Должно получится..

Теги:

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

Рейтинг@Mail.ru

Поиск