Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
18 Янв 2018, 08:56
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Загрузка данных в 1С из Excel  (Прочитано 12892 раз)

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

Оффлайн Яна93

  • **
  • Сообщений: 97
  • РЕПУТАЦИЯ: 7
  • КПД: 7%
  • ангелы живут вечно! так что терпите )))
  • Регистрация: 2011-08-31
  • Сайт: 
  • Профессия: Ученик 1С
Всем Привет!:) Сегодня столкнулась с такой проблемой..в таблице эксель изменилось расположение данных, в обработке которую всегда использовала удалось понять немного код, и внесла небольшие изменения по части расположения обрабатываемых данных, но одну колонку "Держатель" применить уже не получится т.к. она уже пустая (в коде она записана как - Контрагент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

  • **
  • Сообщений: 97
  • РЕПУТАЦИЯ: 7
  • КПД: 7%
  • ангелы живут вечно! так что терпите )))
  • Регистрация: 2011-08-31
  • Сайт: 
  • Профессия: Ученик 1С
На всякий случай прикрепила обработку и сам документ. Версия программы 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 клиента" т.к. колонка Держатели пустая.. Подскажите пожалуйста

Последний раз редактировалось: Яна93; 12 Июл 2013, 15:40. Причина: Объединение сообщений

Оффлайн GRADUS

  • *****
  • Сообщений: 699
  • РЕПУТАЦИЯ: 51
  • КПД: 7%
  • Регистрация: 2013-06-08
  • Сайт: 
  • Профессия: Программист 1С
Почему бухгалтер занимается программированием? :xfbnsdfb:

Оффлайн Яна93

  • **
  • Сообщений: 97
  • РЕПУТАЦИЯ: 7
  • КПД: 7%
  • ангелы живут вечно! так что терпите )))
  • Регистрация: 2011-08-31
  • Сайт: 
  • Профессия: Ученик 1С
Хочется облегчить работу..т.к. ни чего не успеваю в отчетный период.. Вакансия программиста свободна уже 4 месяца с ухода предыдущего сострудника..:(

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

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

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

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

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


Теги:
 

Перенос данных из 1с 82 БП (базовая) в 1с 82 БГУ (базовая)

Автор Владимир87Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 7617
Последний ответ 06 Дек 2014, 17:40
от дфтын
Поиск по бае данных,(полнотекстовый поиск)

Автор kot_ooРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 3961
Последний ответ 19 Май 2014, 15:40
от kot_oo
Как исправить при обновлении ИБ: Ошибка в запросе набора данных по причине: {(58, 2)}: Несовместимые типы "ВЫБОР" <<?>>ВЫБОР

Автор dollРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 2223
Последний ответ 01 Янв 2017, 20:27
от Геннадий ОбьГЭС
"Задваивание" данных в отчете

Автор mashencev_antonРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 13
Просмотров: 7649
Последний ответ 15 Окт 2015, 11:21
от Mari_beginner
Куда сохраняются данные в режиме работы клиент при выгрузке данных обработкой "Универсальный обмен данными в формате XML"

Автор xDDРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 7130
Последний ответ 13 Ноя 2014, 08:23
от cska-fanat-kz

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
102 Сообщений
AIFrame
86 Сообщений
alex0402
34 Сообщений
pavl_vs
23 Сообщений
kiksi
19 Сообщений
alexandr_ll
17 Сообщений
andron81_81
16 Сообщений
Norfolk
15 Сообщений
Artibon
13 Сообщений
LexaK
13 Сообщений

* Кто онлайн

  • Точка Гостей: 607
  • Точка Скрытых: 0
  • Точка Пользователей: 10
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal