Вход | Регистрация

1С:Предприятие ::

Метки: 

Загрузить изображения в справочник Основные средства

Я
   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();    //выполение запроса 

        
    Исключение
        Сообщить("" + ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;
    
    Возврат Истина;    
конецфункции

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


Список тем форума
Рекламное место пустует   Рекламное место пустует
2 + 2 = 3.9999999999999999999999999999999...
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует