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

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

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 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
68 Сообщений
LexaK
34 Сообщений
oooo800
30 Сообщений
Дмитрий Джей Дмитрий Джей
27 Сообщений
DmitriyF DmitriyF
17 Сообщений
antoneus antoneus
17 Сообщений
IL2016
16 Сообщений
Ann_
16 Сообщений
SoOliateR
15 Сообщений
мадам брошкина
13 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal