8.х Сделать выгрузку данных из внешнего отчета

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем DimaZagaynov, 30 дек 2010.

  1. TopicStarter Overlay
    DimaZagaynov
    Offline

    DimaZagaynov Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Имеется внешний отчет. Вот его код
    Код:
    Процедура КнопкаСформироватьНажатие(Кнопка)
    
    заг = "";
    струслном = "";
    Если ЗначениеЗаполнено(ВыбНоменклатура) Тогда
    Если ТипЗнч(ВыбНоменклатура) = Тип("СписокЗначений") Тогда
    струслном = "Субконто1 В (&ВыбНом)";
    заг = "По номенклатуре: "+Строка(ВыбНоменклатура);
    ИначеЕсли ВыбНоменклатура.ЭтоГруппа Тогда
    струслном = "Субконто1 В ИЕРАРХИИ (&ВыбНом)";
    заг = "По группе "+Строка(ВыбНоменклатура);
    Иначе
    струслном = "Субконто1 = &ВыбНом";
    заг = "По номенклатуре "+Строка(ВыбНоменклатура);
    КонецЕсли;
    КонецЕсли;	
    струсл = струслном;
    Если ЗначениеЗаполнено(ВыбСклад) Тогда
    Если струслном="" Тогда
    заг = "По складу "+ВыбСклад;
    струсл = "Субконто2 = &ВыбСклад";
    Иначе
    заг = заг + ", по складу "+ВыбСклад;
    струсл = струслном+" И Субконто2 = &ВыбСклад";
    КонецЕсли;	
    КонецЕсли;	
    
    Запрос = Новый Запрос("ВЫБРАТЬ
    |	ХозрасчетныйОстатки.Субконто2 КАК Склад,
    |	ХозрасчетныйОстатки.Субконто2.Наименование КАК СкладПредставление,
    |	ХозрасчетныйОстатки.Счет КАК Счет,
    |	ХозрасчетныйОстатки.Счет.Код КАК КодСчета,
    |	ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
    |	ХозрасчетныйОстатки.Субконто1.Наименование КАК НоменклатураПредставление,
    |	ХозрасчетныйОстатки.Субконто1.Код КАК Код,
    |	ЕСТЬNULL(СрЦеныНоменклатуры.СрЦена, 0) КАК СрЦена,
    |	ХозрасчетныйОстатки.КоличествоОстатокДт КАК КолОстаток,
    |	ЕСТЬNULL(СрЦеныНоменклатуры.СрЦена, 0) * ХозрасчетныйОстатки.КоличествоОстатокДт КАК СумОстаток
    |ИЗ
    |	РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В (&СписокСчетов), , "+струсл+ ") КАК ХозрасчетныйОстатки
    |		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |			ХозрасчетныйОстатки.Счет КАК Счет,
    |			ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
    |			СРЕДНЕЕ(ВЫБОР
    |					КОГДА ХозрасчетныйОстатки.КоличествоОстатокДт = 0
    |						ТОГДА 0
    |					ИНАЧЕ ХозрасчетныйОстатки.СуммаОстатокДт / ХозрасчетныйОстатки.КоличествоОстатокДт
    |				КОНЕЦ) КАК СрЦена
    |		ИЗ
    |			РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В (&СписокСчетов), , "+струслном+ ") КАК ХозрасчетныйОстатки
    |		
    |		СГРУППИРОВАТЬ ПО
    |			ХозрасчетныйОстатки.Субконто1,
    |			ХозрасчетныйОстатки.Счет,
    |			ХозрасчетныйОстатки.СуммаОстатокДт) КАК СрЦеныНоменклатуры
    |		ПО СрЦеныНоменклатуры.Номенклатура = ХозрасчетныйОстатки.Субконто1
    |			И СрЦеныНоменклатуры.Счет = ХозрасчетныйОстатки.Счет
    |
    |УПОРЯДОЧИТЬ ПО
    |	ХозрасчетныйОстатки.Субконто2.Код,
    |	КодСчета,
    |	Код
    |ИТОГИ
    |	СУММА(КолОстаток),
    |	СУММА(СумОстаток)
    |ПО
    |	ОБЩИЕ,
    |	Склад,
    |	Счет");
    
    Запрос.УстановитьПараметр("ДатаКон",Новый Граница(КонецДня(ДатаКон),ВидГраницы.Включая));
    СписокСчетов = новый СписокЗначений;
    для каждого стр из ТЗСчетов Цикл
    если стр.ФлИспользования Тогда
    СписокСчетов.Добавить(стр.Счет);
    КонецЕсли;	
    КонецЦикла;	
    
    Запрос.УстановитьПараметр("СписокСчетов",СписокСчетов);
    Если ЗначениеЗаполнено(ВыбСклад) Тогда
    Запрос.УстановитьПараметр("ВыбСклад",ВыбСклад);
    КонецЕсли;
    Если ЗначениеЗаполнено(ВыбНоменклатура) Тогда
    Запрос.УстановитьПараметр("ВыбНом",ВыбНоменклатура);
    КонецЕсли;	
    
    Таб = Новый ТабличныйДокумент;
    Таб.ТолькоПросмотр = Истина;
    таб.ОтображатьЗаголовки = ложь;
    таб.ОтображатьСетку = ложь;
    Макет = ПолучитьМакет("Макет");
    ОблЗ = макет.ПолучитьОбласть("Заголовок");
    ОблЗ.Параметры.ДатаКон = Формат(ДатаКон,"ДФ=dd.MM.yyyy");
    ОблЗ.Параметры.Заг = Заг;
    ОблЗ.Параметры.ДатаСоставления = Формат(РабочаяДата,"ДФ=dd.MM.yyyy");
    ОблЗ.Параметры.ВремяСоставления = Формат(ТекущаяДата(), "ДЛФ=В");
    
    
    ОблШ =  Макет.ПолучитьОбласть("Шапка");
    ОблСклад = Макет.ПолучитьОбласть("Склад");
    ОблСтрока = Макет.ПолучитьОбласть("Строка");
    ОблИтог = Макет.ПолучитьОбласть("Итог");
    ОблСчет = Макет.ПолучитьОбласть("Счет");
    
    выбобщие = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Если выбобщие.Следующий() Тогда
    ОблИтог.Параметры.Заполнить(выбобщие);
    Иначе
    Сообщить("Пустой результат запроса!");
    возврат;
    КонецЕсли;	
    Состояние("Заполенение выходной таблицы...");
    Таб.Вывести(ОблЗ);
    Таб.Вывести(ОблШ);
    открыта = 0;
    выбСклады = выбобщие.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока выбСклады.Следующий() Цикл
    ОблСклад.Параметры.Заполнить(выбСклады);
    таб.Вывести(ОблСклад);
    //Если открыта = 1 Тогда
    //	таб.ЗакончитьГруппуСтрок();
    //КонецЕСли;
    таб.НачатьГруппуСтрок("Склад");
    открыта = 1;
    выбСчет = выбСклады.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока выбСчет.Следующий() Цикл
    ОблСчет.Параметры.Заполнить(выбСчет);
    таб.Вывести(ОблСчет);
    таб.НачатьГруппуСтрок("Счет");
    выб = выбСчет.Выбрать();
    Пока выб.Следующий() Цикл
    ОблСтрока.Параметры.Заполнить(выб);
    таб.Вывести(ОблСтрока);
    КонецЦикла;	
    таб.ЗакончитьГруппуСтрок();
    КонецЦикла;		
    таб.ЗакончитьГруппуСтрок();
    КонецЦикла;	
    Таб.Вывести(ОблИтог);
    Таб.Показать();
    
    
    Нужно из него сделать выгрузку данных в файл с расширением dbf. Как это сделать
  2. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Взять результат запроса и его выгрузить. В чем именно проблема?
  3. vartanet
    Offline

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

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    1) если это 1 раз надо, то можно сохранить результат как excel файл, затем excel как dbf. в этом случаем ничего программировать ненадо.

    2) если это нужно проделывать постоянно, то логично проходить по результату запроса и сохранять его в dbf, в 1С есть объект для работы с dbf.
  4. TopicStarter Overlay
    DimaZagaynov
    Offline

    DimaZagaynov Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    нужно просто, чтобы не выводился отчет, а происходила выгрузка в файл dbf. Не на один раз, а постоянно.
  5. TopicStarter Overlay
    DimaZagaynov
    Offline

    DimaZagaynov Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Каким образом?
  6. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Выгрузить каким образом? В 1С есть объект Xbase для работы с dbf-файлами. Инфы в инете достаточно. Попробуйте, если что-то не получиться спрашивайте.
  7. TopicStarter Overlay
    DimaZagaynov
    Offline

    DimaZagaynov Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Если я добавляю в существующий код Внешнего отчета код выгрузки в файл dbf, то потом получившийся код не открывается ни внешним отчетом (пишет мол файл не является внешним отчетом), ни внешней обработкой.
  8. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Тогда это должна быть обработка, а не отчет. Т.е. переносите код в обработку, только вместо вывода на печать формируете файл dbf.
Похожие темы
  1. Зайка
    Ответов:
    21
    Просмотров:
    21.212
  2. Tramp
    Ответов:
    1
    Просмотров:
    2.539
  3. rishhh
    Ответов:
    1
    Просмотров:
    420
  4. amt779
    Ответов:
    5
    Просмотров:
    1.112
  5. binx
    Ответов:
    11
    Просмотров:
    1.586
Загрузка...

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