Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подскажите, как можно организовать хранение фалов в базе.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
kostya77
Добрый день. Подскажите, как можно организовать хранение фалов в базе. например подписаный договор в справочнике Контрагентов?
sava1
или в каталогах - с привязкой файла
или на СКЛ - организовать хранилище двоичных данных, а ссылку в справочник
denis84
kostya77 @ Сегодня, 9:16 необходимо зарегистрироваться для просмотра ссылки ,
Такое реализовано у нас для договоров через обработку прикрепленные файлы. Создан каталог для хранения файлов. Выбераем файл
//1 строка - тип
//2 строка - длина
//3 строка - точность
//4 строка - ИД вида объекта
//5 строка - флаг неотр. (?)
//6 строка - флаг разделения триад (?)
//7 строка - ИД объекта
Функция ПолучитьИДобъекта(Объект)
    Перем Стр;
    Стр=ЗначениеВСтрокуВнутр(Объект);
    СЗ=СоздатьОбъект("СписокЗначений");
    СЗ.ИзСтрокиСРазделителями(Сред(Стр,2,СтрДлина(Стр)-2));
    Для Сч=1 По 7 Цикл
        Если (Сч=4) или (Сч=7) Тогда
            ДесИД=СЗ.ПолучитьЗначение(Сч);
            СЗ.УстановитьЗначение(Сч,_IdToStr(ДесИД));
        КонецЕсли;
    КонецЦикла;
    Возврат СЗ;
КонецФункции


//*******************************************
Процедура СоздатьКаталогОбъекта()
    СЗ=ПолучитьИДобъекта(Объект);
    //Проверим, существует ли каталог для прикрепляемых файлов
    КаталогФайлов=КаталогИБ()+"Files\";
    // "1MZ" - док.Договор
    Если СокрЛП(СЗ.ПолучитьЗначение(4)) = "1MZ" Тогда
        КаталогФайлов=КаталогИБ()+"Files\";
    КонецЕсли;
    Если ФС.СуществуетФайл(КаталогФайлов)=0 Тогда //Если каталога нет,
        ФС.СоздатьКаталог(КаталогФайлов);         //то создадим его.
    КонецЕсли;
    //Проверим, существует ли каталог для записи файлов объектов данного типа
    КаталогТипаОбъекта=КаталогФайлов+СокрЛП(СЗ.ПолучитьЗначение(1))+"\";
    Если ФС.СуществуетФайл(КаталогТипаОбъекта)=0 Тогда //Если каталога нет,
        ФС.СоздатьКаталог(КаталогТипаОбъекта);         //то создадим его.
    КонецЕсли;
    //Проверим, существует ли каталог для записи файлов объектов данного вида
    КаталогВидаОбъекта=КаталогТипаОбъекта+СокрЛП(СЗ.ПолучитьЗначение(4))+"\";
    Если ФС.СуществуетФайл(КаталогВидаОбъекта)=0 Тогда //Если каталога нет,
        ФС.СоздатьКаталог(КаталогВидаОбъекта);         //то создадим его.
    КонецЕсли;
    //Проверим, существует ли каталог для записи файлов этого объекта
    КаталогОбъекта=КаталогВидаОбъекта+СокрЛП(СЗ.ПолучитьЗначение(7))+"\";
    Если ФС.СуществуетФайл(КаталогОбъекта)=0 Тогда //Если каталога нет,
        ФС.СоздатьКаталог(КаталогОбъекта);         //то создадим его.
    КонецЕсли;
КонецПроцедуры

//*********************************************
Процедура ВыбратьФайл()
    ТекКат="";
    ИмяФайла="";
    ИмяФайла1="";
    Если ФС.ВыбратьФайл(0,ИмяФайла,ТекКат,"Выберите файл:",,,120)=1 Тогда
        Если ФС.СуществуетФайл(КаталогОбъекта)=0 Тогда
            СоздатьКаталогОбъекта();
        КонецЕсли;
        //Приведём длину имени файла в соответствие...
        МаксДлИмениФайла=120;
        ПозРасш=НайтиПослВх(ИмяФайла,".");
        РасшФайла=Прав(ИмяФайла,СтрДлина(ИмяФайла)-ПозРасш);
        НазвФайла=Лев(ИмяФайла,Мин(ПозРасш-1,МаксДлИмениФайла-СтрДлина(РасшФайла)-1));
        ИмяФайла1=НазвФайла+"."+РасшФайла;
        //Проверим, есть ли такой файл в папке...
        Если ФС.СуществуетФайл(КаталогОбъекта+ИмяФайла)=1 Тогда //Проверим наличие файла с таким же именем в каталоге приёмнике
            Если Не(Вопрос("Файл с именем "+ИмяФайла+"
            |в каталоге "+КаталогОбъекта+" уже существует!
            |Перезаписать файл "+ИмяФайла+"?","Да+Нет+Отмена",30)="Да") Тогда
                Возврат;
            КонецЕсли;
        КонецЕсли;
        Если ФС.СуществуетФайл(КаталогОбъекта+"files.vtf")=0 Тогда
            СоздатьКаталогОбъекта();
        КонецЕсли;
        //Копируем файл в папку...
        ФС.КопироватьФайл(ТекКат+ИмяФайла,КаталогОбъекта+ИмяФайла1,0);
    Иначе
        Возврат;
    КонецЕсли;
КонецПроцедуры


Есль такой вариант (но я не проверял):
Добавь в док реквизит текстовый и кнопку на форму для выбора файла, при выборе файла в реквизит попадает путь + имя файла , а на кнопку открытия вешай :
 ЗапуститьПриложение(Путь+ИмяФайла);
kostya77
denis84 @ Сегодня, 9:30 необходимо зарегистрироваться для просмотра ссылки ,
Спасибо. буду пробовать
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.