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

Автор Тема: Экспорт запроса из 1с в Exele  (Прочитано 960 раз)

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

Оффлайн anonim1

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-06-16
  • Сайт: 
  • Профессия: Ученик 1С
Добрый вечер.Помогите пожалуйста решить проблему. Необходимо сделать внешнюю обработку, которая осуществляет запрос на выборку данных из 1С83-УТ11 и выводит отчет в табличное поле формы и экспортирует в exel. Отчет должен содержать столбцы номер заказа, дата заказа, код товара, артикул, бренд, наименование, цена закупки, цена продажи, доставка, итого себестоимость. Я сделал внешнюю обработку, программный код которой:
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Попытка Эксель=Новый COMОбъект("Excel.Application")
      Исключение Сообщить(ОписаниеОшибки());
      КонецПопытки;
      Книга=Эксель.WorkBooks.Add();
      Лист=Книга.WorkSheets(1);
      
      Запрос=Новый Запрос;
      Запрос.Текст="ВЫБРАТЬ
                   |   ЗаказКлиента.Номер,
                   |   ЗаказКлиента.Дата,
                   |   Номенклатура.Артикул,
                   |   Номенклатура.Код,
                   |   Номенклатура.Наименование,
                   |   ЗаказКлиента.ЦенаВключаетНДС,
                   |   ВидыЦенПоставщиков.ЦенаВключаетНДС КАК ЦенаВключаетНДС1
                   |ИЗ
                   |   Документ.ЗаказКлиента КАК ЗаказКлиента,
                   |   Справочник.Номенклатура КАК Номенклатура,
                   |   Справочник.ВидыЦенПоставщиков КАК ВидыЦенПоставщиков" ;
    Выборка=Запрос.Выполнить().Выгрузить();
    ТабличноеПоле1.Очистить();
                Для Каждого Стр из Выборка Цикл
                   НоваяСтрока=ТабличноеПоле1.Добавить();
                   НоваяСтрока.НомерЗаказа=Стр.Номер;
                   НоваяСтрока.ДатаЗаказа=Стр.Дата;
                   НоваяСтрока.КодТовара=Стр.Код;
                   НоваяСтрока.Артикул=Стр.Артикул;
                   //НоваяСтрока.Бренд=Стр.
                   НоваяСтрока.Наименование=Стр.Наименование;
                   НоваяСтрока.ЦенаЗакупки=Стр.ЦенаВключаетНДС;
                   НоваяСтрока.ЦенаПродажи=Стр.ЦенаВключаетНДС1;
                   //НоваяСтрока.Доставка=Стр.
                   //НоваяСтрока.ИтогоСебестоимость=Стр.ЦенаЗакупки+Стр.Доставка;
КонецЦикла;
НомерСтроки=1;
               Для Каждого Строка Из ТабличноеПоле1 Цикл

Лист.Cells(НомерСтроки, 1).Value = Выборка.Номер;
Лист.Cells(НомерСтроки, 2).Value = Выборка.Дата;
Лист.Cells(НомерСтроки, 3).Value = Выборка.Код;
Лист.Cells(НомерСтроки, 4).Value = Выборка.Артикул;
//Лист.Cells(НомерСтроки, 5).Value = Выборка.Бренд;
Лист.Cells(НомерСтроки, 6).Value = Выборка.Наименование;
Лист.Cells(НомерСтроки, 7).Value = Выборка.ЦенаВключаетНДС;
Лист.Cells(НомерСтроки, 8).Value = Выборка.ЦенаВключаетНДС1;
//Лист.Cells(НомерСтроки, 9).Value = Выборка.Доставка;
 //Лист.Cells(НомерСтроки, 10).Value = Выборка.ИтогоСебестоимость;

НомерСтроки=НомерСтроки+1;
КонецЦикла;               
 диалог= новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

если диалог.Выбрать() тогда
               Попытка               
   Книга.SaveAs(диалог.ПолноеИмяФайла);
Исключение
   Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;
КонецЕсли;
Эксель.Application.Quit();

КонецПроцедуры
(Закоментированны те данные, которые я не смог найти в БД). При запуске внешней обработки появляется сообщение об ошибке Поле объекта не собнаруженно (Номер){Форма.Форма.Форма(40)}: Поле объекта не обнаружено (Номер)
Лист.Cells(НомерСтроки, 1).Value = Выборка.Номер;
Причем если закрыть сообщение об ошибке, поля дата заказа, артикул, наименование, цена выводятся в табличное поле, но диалог сохранения файла не открывается и файл эксель не создается , а если закомментировать (удалить) фрагмент программного кода, на который возникает ошибка, то диалог сохранения файла открывается и файл создаётся, но совершенно пустой и табличное поле обработки не заполняется. 


Оффлайн Luzer1C

  • ****
  • Сообщений: 411
  • РЕПУТАЦИЯ: 41
  • КПД: 10%
  • Регистрация: 2014-02-17
  • Сайт: 
  • Профессия: Программист 1С
Какой смысл в ТабличноеПоле1?
Когда можно сразу написать: Выборка = Запрос.Выполнить().Выбрать();
А затем:
Пока Выборка.Следующий() Цикл
Лист.Cells(НомерСтроки, 1).Value = Выборка.Номер;
... и пошел файлик эксель заполнять.
Помочь мне очень сложно. Но можно.
Помогаю просто так...
Матёрый разработчик УПП + Бит Финанс

Оффлайн anonim1

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-06-16
  • Сайт: 
  • Профессия: Ученик 1С
Благодарю за ответ, исправил как вы посоветовали, правда пришлось удалить табличное поле, но, в принципе, оно не обязательно нужно. Но возникла другая проблема, при нажатии на кнопку "выполнить" почему то программа (внешняя обработка) зависает:
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Попытка Эксель=Новый COMОбъект("Excel.Application")
      Исключение Сообщить(ОписаниеОшибки());
      КонецПопытки;
      Книга=Эксель.WorkBooks.Add();
      Лист=Книга.WorkSheets(1);
      
      Запрос=Новый Запрос;
      Запрос.Текст="ВЫБРАТЬ
                   |   ЗаказКлиента.Номер,
                   |   ЗаказКлиента.Дата,
                   |   Номенклатура.Артикул,
                   |   Номенклатура.Код,
                   |   Номенклатура.Наименование,
                   |   ЗаказКлиента.ЦенаВключаетНДС,
                   |   ВидыЦенПоставщиков.ЦенаВключаетНДС КАК ЦенаВключаетНДС1
                   |ИЗ
                   |   Документ.ЗаказКлиента КАК ЗаказКлиента,
                   |   Справочник.Номенклатура КАК Номенклатура,
                   |   Справочник.ВидыЦенПоставщиков КАК ВидыЦенПоставщиков" ;
Выборка = Запрос.Выполнить().Выбрать();
     НомерСтроки=1;   
Пока Выборка.Следующий() Цикл
Лист.Cells(НомерСтроки, 1).Value =Выборка.Номер;
Лист.Cells(НомерСтроки, 2).Value =Выборка.Дата;
Лист.Cells(НомерСтроки, 3).Value =Выборка.Код;
Лист.Cells(НомерСтроки, 4).Value =Выборка.Артикул;
//Лист.Cells(НомерСтроки, 5).Value = Выборка.Бренд;
Лист.Cells(НомерСтроки, 6).Value =Выборка.Наименование;
Лист.Cells(НомерСтроки, 7).Value =Выборка.ЦенаВключаетНДС;
Лист.Cells(НомерСтроки, 8).Value =Выборка.ЦенаВключаетНДС1;
//Лист.Cells(НомерСтроки, 9).Value = Выборка.Доставка;
 //Лист.Cells(НомерСтроки, 10).Value = Выборка.ИтогоСебестоимость;
НомерСтроки=НомерСтроки+1;
КонецЦикла;               
 диалог= новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

если диалог.Выбрать() тогда
               Попытка               
   Книга.SaveAs(диалог.ПолноеИмяФайла);
Исключение
   Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;
Эксель.Application.Quit();
КонецЕсли;
КонецПроцедуры
Подскажите пожалуйста, может что то не так с циклом?
 

Оффлайн Rasty

  • *****
  • Сообщений: 976
  • РЕПУТАЦИЯ: 137
  • КПД: 14%
  • Регистрация: 2015-03-25
    • Skype: alex1cbit
  • Сайт: 
  • Профессия: Программист 1С
вы выбираете каждому документ каждую номенклатура т.е.
документ1 номенклатура 1
документ1 номенклатура 2
....
....
....
....
документ1 номенклатура n
документ2 номенклатура 1
....
....
....
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Оффлайн Luzer1C

  • ****
  • Сообщений: 411
  • РЕПУТАЦИЯ: 41
  • КПД: 10%
  • Регистрация: 2014-02-17
  • Сайт: 
  • Профессия: Программист 1С
Для наглядности можно прописать так:
ВсегоВыборка = Выборка.Количество();
Пока Выборка.Следующий() Цикл
Состояние(Строка(НомерСтроки) + "/" + Строка(ВсегоВыборка));
И сидеть наблюдать как увеличивается счетчик.
Помочь мне очень сложно. Но можно.
Помогаю просто так...
Матёрый разработчик УПП + Бит Финанс

Оффлайн anonim1

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-06-16
  • Сайт: 
  • Профессия: Ученик 1С
Благодарю за помощь, в обычном приложении работает, но подскажите пожалуйста, можно как то сделать так, чтобы этот код работал в управляемом приложении. Пробовал переделать разными способами:
1 способ:
&НаКлиенте

Процедура ВыполнениеЗапроса(Элемент, ДанныеВыбора, СтандартнаяОбработка) 
   ОткрытьФайл()
КонецПроцедуры

&НаСервере
Процедура ОткрытьФайл()
Попытка Эксель=Новый COMОбъект("Excel.Application")
      Исключение Сообщить(ОписаниеОшибки());
      КонецПопытки;
      Книга=Эксель.WorkBooks.Add();
      Лист=Книга.WorkSheets(1);
      
      Запрос=Новый Запрос;
      Запрос.Текст="ВЫБРАТЬ
                   |   ЗаказКлиента.Номер,
                   |   ЗаказКлиента.Дата,
                   |   Номенклатура.Артикул,
                   |   Номенклатура.Код,
                   |   Номенклатура.Наименование,
                   |   ВидыЦенПоставщиков.ЦенаВключаетНДС КАК ЦенаВключаетНДС1,
                   |   ЗаказКлиента.СуммаДокумента
                   |ИЗ
                   |   Документ.ЗаказКлиента КАК ЗаказКлиента,
                   |   Справочник.Номенклатура КАК Номенклатура,
                   |   Справочник.ВидыЦенПоставщиков КАК ВидыЦенПоставщиков" ;
Выборка = Запрос.Выполнить().Выбрать();
     НомерСтроки=1;   
ВсегоВыборка = Выборка.Количество();
Пока Выборка.Следующий() Цикл
Состояние(Строка(НомерСтроки) + "/" + Строка(ВсегоВыборка));
Лист.Cells(НомерСтроки, 1).Value =Выборка.Номер;
Лист.Cells(НомерСтроки, 2).Value =Выборка.Дата;
Лист.Cells(НомерСтроки, 3).Value =Выборка.Код;
Лист.Cells(НомерСтроки, 4).Value =Выборка.Артикул;
//Лист.Cells(НомерСтроки, 5).Value = Выборка.Бренд;
Лист.Cells(НомерСтроки, 6).Value =Выборка.Наименование;
Лист.Cells(НомерСтроки, 7).Value =Выборка.ЦенаВключаетНДС1;
Лист.Cells(НомерСтроки, 8).Value =Выборка.СуммаДокумента;
//Лист.Cells(НомерСтроки, 9).Value = Выборка.Доставка;
 //Лист.Cells(НомерСтроки, 10).Value = Выборка.ИтогоСебестоимость;
НомерСтроки=НомерСтроки+1;
КонецЦикла;   


 диалог= новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

если диалог.Выбрать() тогда
               Попытка               
   Книга.SaveAs(диалог.ПолноеИмяФайла);
Исключение
   Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;
Эксель.Application.Quit();
КонецЕсли;
КонецПроцедуры
Появляется ошибка Тип не определен (ДиалогВыбораФайла)
 диалог= новый <<?>>ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); (Проверка: Сервер)
 затем пробовал 2 м способом:
&НаКлиенте

Процедура ВыполнениеЗапроса(Элемент, ДанныеВыбора, СтандартнаяОбработка) 
   ОткрытьФайл()
КонецПроцедуры

&НаСервере
Процедура ОткрытьФайл()
      
      Запрос=Новый Запрос;
      Запрос.Текст="ВЫБРАТЬ
                   |   ЗаказКлиента.Номер,
                   |   ЗаказКлиента.Дата,
                   |   Номенклатура.Артикул,
                   |   Номенклатура.Код,
                   |   Номенклатура.Наименование,
                   |   ВидыЦенПоставщиков.ЦенаВключаетНДС КАК ЦенаВключаетНДС1,
                   |   ЗаказКлиента.СуммаДокумента
                   |ИЗ
                   |   Документ.ЗаказКлиента КАК ЗаказКлиента,
                   |   Справочник.Номенклатура КАК Номенклатура,
                   |   Справочник.ВидыЦенПоставщиков КАК ВидыЦенПоставщиков" ;
Выборка = Запрос.Выполнить().Выбрать();

Таблица.Очистить();
                Для Каждого Стр из Выборка Цикл
                   НоваяСтрока=ТабличноеПоле1.Добавить();
                   НоваяСтрока.НомерЗаказа=Стр.Номер;
                   НоваяСтрока.ДатаЗаказа=Стр.Дата;
                   НоваяСтрока.КодТовара=Стр.Код;
                   НоваяСтрока.Артикул=Стр.Артикул;
                   //НоваяСтрока.Бренд=Стр.
                   НоваяСтрока.Наименование=Стр.Наименование;
                   НоваяСтрока.ЦенаЗакупки=Стр.СуммаДокумента;
                   НоваяСтрока.ЦенаПродажи=Стр.ЦенаВключаетНДС1;
                   //НоваяСтрока.Доставка=Стр.
                   //НоваяСтрока.ИтогоСебестоимость=Стр.ЦенаЗакупки+Стр.Доставка;
КонецЦикла;

КонецПроцедуры


&НаКлиенте

Процедура СохранениеФайла(Элемент, ДанныеВыбора, СтандартнаяОбработка) 
   СохранитьФайлВExele(Команда)
КонецПроцедуры


&НаСервере

Процедура СохранитьФайлВExele()
   Попытка Эксель=Новый COMОбъект("Excel.Application")
      Исключение Сообщить(ОписаниеОшибки());
      КонецПопытки;
      Книга=Эксель.WorkBooks.Add();
      Лист=Книга.WorkSheets(1);

       НомерСтроки=1;   
ВсегоВыборка = Выборка.Количество();
Пока Выборка.Следующий() Цикл
Состояние(Строка(НомерСтроки) + "/" + Строка(ВсегоВыборка));
Лист.Cells(НомерСтроки, 1).Value =Выборка.Номер;
Лист.Cells(НомерСтроки, 2).Value =Выборка.Дата;
Лист.Cells(НомерСтроки, 3).Value =Выборка.Код;
Лист.Cells(НомерСтроки, 4).Value =Выборка.Артикул;
//Лист.Cells(НомерСтроки, 5).Value = Выборка.Бренд;
Лист.Cells(НомерСтроки, 6).Value =Выборка.Наименование;
Лист.Cells(НомерСтроки, 7).Value =Выборка.ЦенаВключаетНДС1;
Лист.Cells(НомерСтроки, 8).Value =Выборка.СуммаДокумента;
//Лист.Cells(НомерСтроки, 9).Value = Выборка.Доставка;
 //Лист.Cells(НомерСтроки, 10).Value = Выборка.ИтогоСебестоимость;
НомерСтроки=НомерСтроки+1;
КонецЦикла;   

 диалог= новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

если диалог.Выбрать() тогда
               Попытка               
   Книга.SaveAs(диалог.ПолноеИмяФайла);
Исключение
   Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;
Эксель.Application.Quit();
КонецЕсли;
   
КонецПроцедуры
Появляется ошибка  Тип не определен (ДиалогВыбораФайла)

Оффлайн Rasty

  • *****
  • Сообщений: 976
  • РЕПУТАЦИЯ: 137
  • КПД: 14%
  • Регистрация: 2015-03-25
    • Skype: alex1cbit
  • Сайт: 
  • Профессия: Программист 1С
файл выбирается на клиенте, а не на сервере
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Оффлайн anonim1

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-06-16
  • Сайт: 
  • Профессия: Ученик 1С
Благодарю за ответ, но у меня еще проблема в том, что, как я понимаю, запрос работает только на сервере, а диалог выбора файла только на клиенте, сначала я сделал одну процедуру, которая сначала делала запрос, а затем результат выборки экспортировался в эксель, открывался диалог выбора файла и документ сохранялся в указанный каталог. В обычном приложении все работало хорошо, но у меня потребовали сделать так, чтобы работало в управляемом приложении, и возникло противоречие, если сделать на сервере, то запрос работает, а диалог выбора файла нет, а если сделать на клиенте, то диалог работает, но запрос нет. Я пытался разделить процедуру , чтобы была отдельная процедура на сервере для запроса, и другая на клиенте для открытия диалога выбора файла, и совсем запутался. Подскажите пожалуйста, как сделать так, чтобы сначала выполнялся запрос, результат которого копировался в эксель.


Теги:
 

Из запроса не выводятся значения полей - выводятся пустые значения

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

Ответов: 24
Просмотров: 10646
Последний ответ 14 Июн 2012, 17:44
от Alex1111
"ПОДОБНО" в условие связи запроса

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

Ответов: 8
Просмотров: 2200
Последний ответ 11 Май 2016, 15:29
от LexaK
"Таблица значений" в результате запроса - 1С

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

Ответов: 8
Просмотров: 282
Последний ответ 15 Июн 2017, 07:53
от mvk843
Возможно ли языком запросов без конкатенации текста запроса и без СКД преобразовать строки таблицы в столбцы (колонки) выходной таблицы?

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

Ответов: 3
Просмотров: 204
Последний ответ 29 Май 2017, 15:29
от alex0402
Ошибка при выполнении запроса - "неоднозначное поле"

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

Ответов: 14
Просмотров: 11016
Последний ответ 21 Апр 2011, 16:00
от Marta_Li

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

oleg-x
116 Сообщений
alex0402
102 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
73 Сообщений
AIFrame
51 Сообщений
ilyay ilyay
49 Сообщений
Golickoff Golickoff
49 Сообщений
ab30ru
38 Сообщений
wise wise
34 Сообщений
Амал
30 Сообщений
lansy
22 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal