8.х Сохранить запрос в Excel

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем koshelevdmitry, 31 май 2012.

  1. TopicStarter Overlay
    koshelevdmitry
    Offline

    koshelevdmitry

    Регистрация:
    20 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Внешняя обработка, где по нажатию на волшебную кнопку "выполнить" происходит сохранение в файл Excel.

    Что необходимо подправить в коде, чтобы после выполнения запроса сразу появлялось окно сохранения данных и что не мало важно - выполнялось сохранение? А то, если сохраняет, то пустой файл, либо вообще не хочет.

    P.s.: Я начинающий программер в 1С, так что не судите строго.


    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка, ПолноеИмяФайла = "")
    СписокЗначений = Новый СписокЗначений; // Список значений для параметра ОЗ_ТипДоговорногоДокумента
    СписокЗначений.Добавить(Справочники.ОЗ_ТипыДоговоров.ДоговорАренды);
    СписокЗначений.Добавить(Справочники.ОЗ_ТипыДоговоров.ДоговорАрендыНежилыхПомещений);
    СписокЗначений.Добавить(Справочники.ОЗ_ТипыДоговоров.ДоговорАрендыОборудования);
    ЗапросАренда = Новый Запрос;
    ЗапросАренда.Текст = "ВЫБРАТЬ
    | РеализацияТоваровУслуг.Контрагент,
    | РеализацияТоваровУслуг.ДоговорКонтрагента,
    | РеализацияТоваровУслуг.Дата,
    | РеализацияТоваровУслуг.ДоговорКонтрагента.ОЗ_Подразделение,
    | РеализацияТоваровУслуг.Ссылка КАК Ссылка,
    | ВЫБОР
    | КОГДА РеализацияТоваровУслуг.СуммаВключаетНДС = &ВключаетНДС
    | ТОГДА РеализацияТоваровУслугУслуги.Сумма
    | ИНАЧЕ РеализацияТоваровУслугУслуги.Сумма + РеализацияТоваровУслугУслуги.СуммаНДС
    | КОНЕЦ КАК Сумма1,
    | РеализацияТоваровУслугУслуги.Номенклатура,
    | РеализацияТоваровУслуг.ДоговорКонтрагента.ОЗ_ТипДоговорногоДокумента
    |ИЗ
    | РегистрНакопления.ОЗ_ВзаиморасчетыПоРеализации КАК ОЗ_ВзаиморасчетыПоРеализации
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
    | ПО РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугУслуги.Ссылка.Ссылка
    | ПО ОЗ_ВзаиморасчетыПоРеализации.Регистратор = РеализацияТоваровУслуг.Ссылка
    | И ОЗ_ВзаиморасчетыПоРеализации.ДокументРасчетовСКонтрагентом = РеализацияТоваровУслуг.Ссылка
    |ГДЕ
    | РеализацияТоваровУслуг.ДоговорКонтрагента.ОЗ_ТипДоговорногоДокумента В(&ОЗ_ТипДоговорногоДокумента)
    |
    |СГРУППИРОВАТЬ ПО
    | РеализацияТоваровУслуг.Контрагент,
    | РеализацияТоваровУслуг.ДоговорКонтрагента,
    | РеализацияТоваровУслуг.Дата,
    | РеализацияТоваровУслуг.ДоговорКонтрагента.ОЗ_Подразделение,
    | РеализацияТоваровУслуг.Ссылка,
    | РеализацияТоваровУслугУслуги.Номенклатура,
    | ВЫБОР
    | КОГДА РеализацияТоваровУслуг.СуммаВключаетНДС = &ВключаетНДС
    | ТОГДА РеализацияТоваровУслугУслуги.Сумма
    | ИНАЧЕ РеализацияТоваровУслугУслуги.Сумма + РеализацияТоваровУслугУслуги.СуммаНДС
    | КОНЕЦ,
    | РеализацияТоваровУслуг.ДоговорКонтрагента.ОЗ_ТипДоговорногоДокумента
    |
    |УПОРЯДОЧИТЬ ПО
    | Ссылка";
    ЗапросАренда.УстановитьПараметр("ОЗ_ТипДоговорногоДокумента", СписокЗначений);
    ЗапросАренда.УстановитьПараметр("ВключаетНДС", Истина);
    Результат = ЗапросАренда.Выполнить().Выгрузить();
    // Сохранение
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Заголовок = "Save as (Аренда)";
    ПолноеИмяФайла = "Аренда";//ОбработкаОбъект.Метаданные().Синоним;
    ПолноеИмяФайла = РаботаСФайлами.УдалитьЗапрещенныеСимволыИмени(ПолноеИмяФайла);
    Диалог.ПолноеИмяФайла = ПолноеИмяФайла;//"Титульный лист - " + ПолноеИмяФайла;
    Диалог.ПредварительныйПросмотр = Ложь;
    Диалог.Фильтр = "Документ Microsoft Excel (*.xls)|*.xls|";
    Если Диалог.Выбрать() Тогда
    ИмяФайла = Диалог.ПолноеИмяФайла;
    Попытка
    // ВОПРОС: Как прописать запись запроса, не обращаясь к ТабДок???
    //ТабДок.Записать(ИмяФайла, ?(Прав(ИмяФайла,3) = "xls",
    // ТипФайлаТабличногоДокумента.XLS, ТипФайлаТабличногоДокумента.MXL));
    Исключение
    Предупреждение("Ошибка при записи. Файл не записан.");
    КонецПопытки;
    КонецЕсли;
    КонецПроцедуры
  2. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Нужно не запрос сохранять, а табличный документ. Выводите результат запроса в таб.док.(посмотреть можно в типовых или в любых других отчетах). У табличного документа есть метод - Записать(), почитайте в СП.
  3. Allizar
    Offline

    Allizar Опытный в 1С

    Регистрация:
    24 сен 2006
    Сообщения:
    413
    Симпатии:
    0
    Баллы:
    26
    Результат запроса нужно не в таблица значений выгружать, а вывести в табличный документ. Метод табличного документа "Записать()" сохраняет документ в Excel. Ну а вопрос о сохранении можно задавать с помощью стандартной функции "Вопрос()".

    Опоздал немного....
  4. TopicStarter Overlay
    koshelevdmitry
    Offline

    koshelevdmitry

    Регистрация:
    20 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    А без создания макета никак не обойтись?
  5. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Можно и без макета. Берете создаете файл, обрабатываете результат запроса, записываете нужные данные в файл, сохраняете файл.
  6. TopicStarter Overlay
    koshelevdmitry
    Offline

    koshelevdmitry

    Регистрация:
    20 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    А без создания макета никак не обойтись? Необходимо побыстрее сделать, потому что в итоге при нажатии будут сохраняться около 30 документов, и создавать 30 макетов ооооочень долго.
  7. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    :))))))))))))))))))) точно, пятница. У вас документы разного типа ?

    Какие нафиг 30 макетов? Или вам каждый вид документа в отдельный файл нужно с определенной структурой ?
  8. TopicStarter Overlay
    koshelevdmitry
    Offline

    koshelevdmitry

    Регистрация:
    20 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    В общем суть в чем. Есть прога QlikView. Она работает с различными данными. В основном sql, xls, txt и др..
    В принципе, если есть способ выгрузить не в excel, а в другой формат более быстрым способом, то с радостью приму помощь.

    Все выгружаемое должно быть сохранено в разных файлах. В каждой таблице свои поля и свои заголовки.

    Данные будут выгружаться из справочников, документов, журналов, регистров, планов счетов...в общем из всего. Из этого следует, что "да"...документы разного типа)))

    Запросы уже все накромсал, а вот макеты делать уже время нет. Поэтому и обращаюсь.

    По Гуглу ползал...везде примеры с макетом.
  9. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Потому как если хотите форматированный документ получить на выходе, нужно использовать макет, где эти форматы и настраиваются.
    Можно, например тупо в тектстовый или dbf выгружать, но опять же, все это программным способом. Если нужно накладные выгружать в ексель, можно подредактировать функцию печати, создать обработку, которая будет подключаться к этой функции и сохранять в ексель.
    Как видите, вариантов решений море, остальное дело вкуса.
  10. TopicStarter Overlay
    koshelevdmitry
    Offline

    koshelevdmitry

    Регистрация:
    20 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Ясно) Спасибо за советы. Будем искать решение и пробовать)
  11. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Проще всего создать один макет, и грузить туда необходимые данные. Но если вам нужен для каждого вида дока свой-уже объясняли:)
  12. TopicStarter Overlay
    koshelevdmitry
    Offline

    koshelevdmitry

    Регистрация:
    20 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Я уже подумал об этом. Сегодня убью время и сделаю шикарно огромный макет, а потом просто что-то заполнять буду, а что-то нет) Да и в запросах просто имена некоторых полей переименую, чтобы совпадений больше было и будет на моей улице праздник)))

    Главное не запутаться)))
  13. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    спешу обломать надежды.. седня четверг..

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