Имя: Пароль:
1C
1С v8
Загрузить изображения в справочник Основные средства
0 1c-programm
 
25.07.18
10:33
Добрый день!

Никак не могу загрузить картинку из диска С
есть папки, название папок переименованы как Инвентарный номер ОС. в каждой папке картинки.
Есть реквизит Путь, там я указываю путь к этим папкам.
еще есть табличная часть, туда я перебираю все папки по Инвентарному номеру.

перем Подключение;

Процедура КнопкаВыполнитьНажатие(Кнопка)
    ТЗФайлов = Новый ТаблицаЗначений;
    КвалификаторыСтроки = Новый КвалификаторыСтроки(9);
    ОписаниеСтроки = Новый ОписаниеТипов("Строка", ,КвалификаторыСтроки);
    
    ТЗФайлов.Колонки.Добавить("ПолноеИмяФайла", Новый ОписаниеТипов("Строка"));
    ТЗФайлов.Колонки.Добавить("ИнвентарныйНомер", ОписаниеСтроки);
        
    Путь = Путь;
        
    МассивФайлов = НайтиФайлы(Путь, "*.*", Истина);
    Если Путь = Неопределено Тогда
        Сообщить("Укажите путь файла!")
    КонецЕсли;
    Для Каждого НайденныйФайл Из МассивФайлов Цикл
        Если НайденныйФайл.ЭтоКаталог() Тогда
            НоваяСтрока = ТЗФайлов.Добавить();
            НоваяСтрока.ИнвентарныйНомер = НайденныйФайл.Имя;
            НоваяСтрока.ПолноеИмяФайла = НайденныйФайл.ПолноеИмя;
        КонецЕсли;
    КонецЦикла;    
    
    Запрос = Новый Запрос();
    Запрос.Текст ="ВЫБРАТЬ
                  |    ТЗФото.ПолноеИмяФайла,
                  |    ТЗФото.ИнвентарныйНомер
                  |ПОМЕСТИТЬ ВТ_ТЗФото
                  |ИЗ
                  |    &ТЗФото КАК ТЗФото
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ИнвентарныйНомер,
                  |    ВТ_ТЗФото.ПолноеИмяФайла,
                  |    ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство
                  |ИЗ
                  |    ВТ_ТЗФото КАК ВТ_ТЗФото
                  |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних КАК ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних
                  |        ПО ВТ_ТЗФото.ИнвентарныйНомер = ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ИнвентарныйНомер";
    
    Запрос.УстановитьПараметр("ТЗФото",ТЗФайлов);
    
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
        СтрокаТЧ = ОС.Добавить();
        ЗаполнитьЗначенияСвойств(СтрокаТЧ,Результат);
    КонецЦикла;
    
    
    Для Каждого Файл из МассивФайлов Цикл
        
        Если Файл.ЭтоФайл() Тогда
            Сообщить(Файл.ПолноеИмя);
        КонецЕсли;    
    КонецЦикла;    
        
КонецПроцедуры


Функция ЗагрузитьФайл(Подключение, ИмяФайлаСПутем, ИнвентарныйНомер)
    Попытка    
        // проверяем, существует ли таблица и если нет, создаем
        ТекстЗапроса = "if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Files]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
                        |
                        |CREATE TABLE [dbo].[Files] (
                        |    [InventarnyiNomer]         [char] (9)     COLLATE Cyrillic_General_CI_AS NULL ,
                        |    [PolnoeImya]               [char] (36)     COLLATE Cyrillic_General_CI_AS NULL ,
                        |    [OsnovnoeSredstvo]         [char] (100)     COLLATE Cyrillic_General_CI_AS NULL

                        |) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]";
        
        Подключение.Execute(ТекстЗапроса);
        
        ФайлНаДиске = Новый Файл(ИмяФайлаСПутем);
        
        //В таблице tImage поле Data имеет тип image (бинарный тип данных), в этом поле и будут храниться двоичные данные.
        ТекстЗапроса = "insert into Files (InventarnyiNomer, PolnoeImya, OsnovnoeSredstvo) values ('" + ОС.ИнвентарныйНомер +  "',GETDATE())";
        
        Команда = Новый COMОбъект("ADODB.Command");
        Команда.ActiveConnection    = Подключение;   //задается строка подключения к БД
        Команда.CommandTimeout      = 900;
        Команда.CommandText         = ТекстЗапроса;
        Команда.CommandType         = 1;
        Команда.NamedParameters     = true;

        Поток = СоздатьПоток(ИмяФайлаСПутем);
        локПотокБайт = Новый ComSafeArray(Поток.Read());   //поток двоичных данных
        Параметр = СоздатьПараметр("@fFile", 205, локПотокБайт); //205 - adLongVarBinary
        Параметр.Size = локПотокБайт.GetLength();
        Команда.Parameters.Append(Параметр);
        
        Команда.Execute();     //выполение запроса
        
    Исключение
        Сообщить("" + ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;
    
    Возврат Истина;    
конецфункции

Все файлы получила, теперь не могу сохранить в базу, и не знаю куда сохранить. Помогите пжл!
1 Cyberhawk
 
25.07.18
10:42
В реквизит типа "ХранилищеЗначения" сохраняй. Обычно это справочник с таким реквизитом, а связь с объектом БД либо через подчинение, либо через регистр сведений