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

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

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
  • РЕПУТАЦИЯ: 40
  • КПД: 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
  • РЕПУТАЦИЯ: 40
  • КПД: 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
Просмотров: 9994
Последний ответ 14 Июн 2012, 17:44
от Alex1111
"ПОДОБНО" в условие связи запроса

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

Ответов: 8
Просмотров: 1849
Последний ответ 11 Май 2016, 15:29
от LexaK
Ошибка при выполнении запроса - "неоднозначное поле"

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

Ответов: 14
Просмотров: 10619
Последний ответ 21 Апр 2011, 16:00
от Marta_Li
Где найти вкладку "Параметры", в конструкторе запроса при создании динамического списка?

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

Ответов: 6
Просмотров: 355
Последний ответ 09 Мар 2017, 14:48
от LexaK
"Зависание" запроса после обращения к регистру бухгалтерии

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

Ответов: 4
Просмотров: 3857
Последний ответ 03 Ноя 2011, 14:06
от Shkerin

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

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

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


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

* Реклама

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

СМОТРЕТЬ >>

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
96 Сообщений
Dethmontt Dethmontt
71 Сообщений
alex0402
66 Сообщений
MuI_I_Ika MuI_I_Ika
61 Сообщений
wise wise
57 Сообщений
ilyay ilyay
39 Сообщений
Сергей Федоров Сергей Федоров
36 Сообщений
magnifico61
22 Сообщений
ilnur75
21 Сообщений
BuhRust
21 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal