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

Автор Тема: Сохранение уже сформированных отчетов в базе????  (Прочитано 6196 раз)

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

Оффлайн aleksey

  • *
  • Сообщений: 9
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2009-11-27
  • Сайт: 
Здравствуйте. Я разарбатываю собственную конфигурацию на платформе 8.1. подскажите пожалуйста, как сделать возможность сохранять уже сформированные отчеты в базе, чтобы потом их просматривать и т.д. Спасибо.


Оффлайн aleksey

  • *
  • Сообщений: 9
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2009-11-27
  • Сайт: 

Оффлайн Belgafood

  • **
  • Сообщений: 98
  • РЕПУТАЦИЯ: 17
  • КПД: 17%
  • Регистрация: 2008-07-10
  • Сайт: 
  • Профессия: Ученик 1С
Я так понял что не типовые отчеты, а совсем собственные?
И сохранять отчет уже сформированный по каким-то определенным настройкам?

Ну можно при создании отчета предусмотреть возможность сохранения различных вариантов настроек. Но при этом отчет конечно по ним будет переформировываться заново.

Или в файл сохранять:

Файл - Сохранить копию.
Там достаточно широкая линейка расширений с какими можно сохранить.
Обычно все так и делают.

Но теоретически, если надо сохранять именно в базе - можно написать обработку, которая по нажатию на кнопочку будет сохранять его в Хранилище  под заданным по определенным параметрам названием. И соответственно тогда удобный отчет для просмотра и редактирования данных файлов.
Подпись

Последний раз редактировалось: Belgafood; 27 Ноя 2009, 21:33

Оффлайн aleksey

  • *
  • Сообщений: 9
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2009-11-27
  • Сайт: 
Можно по подробнее по поводу обработки и хранилища.

Оффлайн Belgafood

  • **
  • Сообщений: 98
  • РЕПУТАЦИЯ: 17
  • КПД: 17%
  • Регистрация: 2008-07-10
  • Сайт: 
  • Профессия: Ученик 1С
Хранилище - это то где храняться например сами файлы фото сотрудников из карточки физического лица, схемы проезда из карточек контрагентов и т.д.

Вот почитайте по вашей теме:

К сожалению, 1С не позволяет хранить обработки и отчеты в переменных типа "Хранилище".
Приходится извращаться. Код основан на типовых конфигурациях (не мое изобретение).

Для начала рассмотрим две функции по сохранению файла в переменную хранилища и извлечения этого файла из хранилища.


//Сохраняет файл в хранилище значений
Функция обФайлВХранилищеЗначений(ИмяФайла, СтепеньСжатия=9) Экспорт
    Попытка
        ОбъектДляХранилища = Новый ДвоичныеДанные(ИмяФайла);
    Исключение
        ВызватьИсключение "Не удалось загрузить файл:"+ИмяФайла;
        Возврат Неопределено;
    КонецПопытки;
   
    ФайлХранилище = Новый ХранилищеЗначения(ОбъектДляХранилища, Новый СжатиеДанных(9));
    Возврат  ФайлХранилище;
КонецФункции


//Распаковывает хранилище во временный файл и вовращает его имя
Функция обФайлИзХранилищаЗначений(Хранилище, ПолноеИмяФайла=Неопределено, Расширение=Неопределено) Экспорт
    ХранимоеЗначение=Хранилище.Получить();
    Если ХранимоеЗначение=Неопределено Тогда
        ВызватьИсключение "В хранилище пустое значение!";
    КонецЕсли;
   
    Если ТипЗнч(ХранимоеЗначение)<>Тип("ДвоичныеДанные") Тогда
        ВызватьИсключение "В хранилище не хранится двоичный файл!";
        Возврат Неопределено;
    КонецЕсли;
   
    Если ПолноеИмяФайла=Неопределено Тогда
        ВремФайл = ПолучитьИмяВременногоФайла(Расширение);
    Иначе
        Ф=Новый Файл(ПолноеИмяФайла);
        Если Ф.Существует() Тогда
            УдалитьФайлы(ПолноеИмяФайла);
        КонецЕсли;
        ВремФайл = ПолноеИмяФайла;
    КонецЕсли;
   
   
    ХранимоеЗначение.Записать(ВремФайл);
    Возврат ВремФайл;
КонецФункции

Теперь методика сохранения обработок в хранилище понятна - используем временный файл, распаковываем в него обработку и запускаем внешнюю обработку.
Вот код:

//fixin 20061006 Для сохранения внешних обработок в хранилище значений
Функция обВнешняяОбработкаИзХранилищаЗначений(Хранилище) Экспорт
    ХранимоеЗначение=Хранилище.Получить();
    Если ХранимоеЗначение=Неопределено Тогда
        Сообщить("В хранилище пустое значение!");
        Возврат Неопределено;
    КонецЕсли;
    Если ТипЗнч(ХранимоеЗначение)<>Тип("ДвоичныеДанные") Тогда
        Сообщить("В хранилище не хранится двоичный файл!");
        Возврат Неопределено;
    КонецЕсли;
   
    ВремФайлВнешнегоОтчета = ПолучитьИмяВременногоФайла();
    Попытка
        ХранимоеЗначение.Записать(ВремФайлВнешнегоОтчета);
        ВнешняяОбработка=ВнешниеОбработки.Создать(ВремФайлВнешнегоОтчета);
        Возврат ВнешняяОбработка;
    Исключение
        ОписаниеОшибки=ОписаниеОшибки();
        Сообщить("При чтении файла обработки произошла ошибка: "+ОписаниеОшибки);
    КонецПопытки;
    Возврат Неопределено;
КонецФункции

//fixin 20061006 Для сохранения внешних обработок в хранилище значений
Функция обВнешняяОбработкаВХранилищеЗначений(ИмяФайла, СтепеньСжатия=9) Экспорт
    Попытка
        ОбъектДляХранилища = Новый ДвоичныеДанные(ИмяФайла);
    Исключение
        Сообщить("Не удалось загрузить внешний отчет!");
        Возврат Неопределено;
    КонецПопытки;
   
    ФайлХранилище = Новый ХранилищеЗначения(ОбъектДляХранилища, Новый СжатиеДанных(9));
    Возврат  ФайлХранилище;
КонецФункции

 
На одном из внедрений надо было вместе с обработками подключать справку по программе непосредственно к форме, также другие действия, связанные именно с открытой формой. Поэтому в хранилище находились и обработки и файлы других типов. Но типовые конфигурации старых редакций не позволяли хранить имя(и расширение файла).
Поэтому тип файла в хранилище мы определяли по "сигнатуре"(характерному набору байтов в заголовке).
Вот пример:

    
// Проверка сигнатур
    ФайлОбработки = Новый ТекстовыйДокумент;
    ФайлОбработки.Прочитать(ИмяФайла, КодировкаТекста.ANSI);
    ЗаголовокФайла = ФайлОбработки.ПолучитьСтроку(1);
    СигнатураОбработки = Строка(Символ(1103)+Символ(1103)+Символ(1103)+Символ(127)+Символ(0)+Символ(2)+Символ(0));
    СигнатураSWF = Строка(Символ(70)+Символ(87)+Символ(83)+Символ(5));
        //...............
    Если Найти(ЗаголовокФайла,СигнатураОбработки)=1 Тогда
        Попытка
       
            Форма = ВнешниеОбработки.Создать(ИмяФайла).ПолучитьФорму();
            Если НЕ ФормаВладелец = "" И ТипЗнч(ФормаВладелец) = Тип("Форма") Тогда
                Форма.ВладелецФормы = ФормаВладелец;
            КонецЕсли;       
            Форма.Открыть();
            Возврат Форма;
       
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    ИначеЕсли Найти(ЗаголовокФайла,СигнатураSWF)=1 Тогда
        ИмяФайла = КаталогВременныхФайлов() + "1c_help.swf";
        Попытка
       
            ДвоичныеДанные = ХранилищеВнешнейОбработки.Получить();
            ДвоичныеДанные.Записать(ИмяФайла);
            Форма = ПолучитьФорму("Демо");
            Форма.ЭлементыФормы.ПолеHTMLДокумента1.Перейти(ИмяФайла);
            Форма.Открыть();
       
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    // ИначеЕсли....
        Иначе
   
        Сообщить("Неизвестный формат файла");
        Возврат Неопределено;
   
    КонецЕсли;


Развить это решение можно например включением поиска по регулярным выражениям В 1С есть возможность искать строки вида "Ив*нов*", *-любой символ)


Для того, чтобы хранить не только сам файл, но и его описание (имя, расширение и т.п.) можно попробовать (за результат правда не ручаюсь), использовать примерно такой код:

Стр=Новый Структура();
Стр.Вставить("ДвоичныеДанные",ДвоичныеДанные);
Стр.Вставить("ИмяФайла",ИмяФайла);
Стр.Вставить("Расширение",Расширение);
Возврат Новый ХранилищеЗначения(Стр);
Т.е. хранить не просто файл, а структуру, которая описывает и включает файл. Правда нужно проверить, сумеет ли 1С упаковать в хранилище подобную струтуру!
Подпись

Оффлайн aleksey

  • *
  • Сообщений: 9
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2009-11-27
  • Сайт: 
Круто!!! Большое спасибо!!! Буду разбираться.

Оффлайн Belgafood

  • **
  • Сообщений: 98
  • РЕПУТАЦИЯ: 17
  • КПД: 17%
  • Регистрация: 2008-07-10
  • Сайт: 
  • Профессия: Ученик 1С
Ответ на сообщение в личке:

В БП и активах, пассивах и чистой стоимости собственного капитала фирмы или индивида на определенную дату.">Баланс и форма №2 тоже  прекрастно сохраняются и в формате mxl и в куче других форматов

Если кнопки сохранить и сохранить копию не активны, просто щелкните по табличной части и они активируются.
Табличные части в ваших отчетах есть? Значит сохранить встроенными возможностями платформы можно.
Подпись


Теги:
 


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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
145 Сообщений
ilyay ilyay
63 Сообщений
AIFrame
58 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
42 Сообщений
BuhRust
32 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
Golickoff Golickoff
28 Сообщений
alexandr_ll
24 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal