Имя: Пароль:
1C
1С v8
Выгрузка файлов из хранилище базы источник в томе на диске базы приемника
0 zippygrill
 
12.12.17
23:59
Всем привет!
Нужен свежий взгляд по проблеме.
В ИБ источник (УПП 1.3) есть некий на-сканированные и прикрепленные файлы к сериям. Обычно это 2-3 файлы с сертификатами соответствия или справки А,Б. Как сказал - все они хранятся в справочнике ХранилищеДопИнформации, т.е. в самом sql по большому счету.
Конвертацией 2 эти файлы не смог загрузить в приемнике из за размера файла ..около 30 гигов. Пробовал сократить размер путем актуализации сертификатов. Пробовал выгружать порциями по 8 гигов. 1С даже на сервере приложения не может его грузить. Доходит до того что из адреса во временное хранилище при попытке сохранить двоичные данные - получает фигу. Подозреваю что адрес во вх имеет ограниченный срок жизни.

В общем, хочу попробовать в обход конвертации< перетащить все файлы из хранилище из одной базы в другую базу в томе на диске.
Придется мучится с сохранением в хранилище из источника самого файла и его чтение по COM из приемника.
Есть кто имел опыт переноса файлов? Прокатит или нет такой вариант? И где выполнять лучше эту обработку (подключение по com) - в приемнике или в источнике
1 tesseract
 
13.12.17
00:15
Com даже не вздумай использовать. Он и так формально похоронен. Можно попробовать выгрузить эти файлики через самописную обработку с именем {GUID}.{номер файла}. расширение.   Обработку лучше писать самому - BLOB стандартная выгрузка ну очень не любит, возможны частые сбои по тайм-аутам записи.
2 tesseract
 
13.12.17
00:16
Если платформа 8.3 - можно через двоичные данные быстро написать.
3 zippygrill
 
13.12.17
00:29
Да платформа 83
Я так понимаю что полученное из хранилище значение надо сохранить в двоичные данные в темповский файл в каталоге временных файлов 1С. ДАлее этот темповский файл с двоичными данными можно обработать на стороне приемника?
4 tesseract
 
13.12.17
00:32
(3) Да все верно понимаешь. Только хранилище может содержать все что угодно. Надо по типу разобрать.
5 zippygrill
 
13.12.17
00:35
(4) Есть такие дополнительные отборы в запросе

ГДЕ
    |    ХранилищеДополнительнойИнформации.Объект <> НЕОПРЕДЕЛЕНО
    |    И НЕ ВЫРАЗИТЬ(ХранилищеДополнительнойИнформации.Объект КАК Справочник.СерииНоменклатуры) ЕСТЬ NULL
    |    И ВЫРАЗИТЬ(ХранилищеДополнительнойИнформации.Объект КАК Справочник.СерииНоменклатуры) В
    |            (ВЫБРАТЬ
    |                т.СерияНоменклатуры
    |            ИЗ
    |                втОстатки КАК т)
    |    И НЕ ХранилищеДополнительнойИнформации.ПометкаУдаления
    |    И ХранилищеДополнительнойИнформации.ВидДанных = Значение(Перечисление.ВидыДополнительнойИнформацииОбъектов.Файл)
6 tesseract
 
13.12.17
00:41
BLOB через запрос получать точно не стоит. Или это самописка, либо 1С совсем шибанулась.
7 zippygrill
 
13.12.17
00:46
Ну вот такую строку имел в КД2

      ДанныеХранилища = ВыборкаФайл.Ссылка.Хранилище.Получить();

Т.е. через ссылку из результата запроса идет обращение к реквизиту Хранилище и далее ПОлучить()

Ее по сути надо на COM перевести
8 tesseract
 
13.12.17
00:52
(7) лучше в папки по GUID, com на больших файлах может отваливаться, ведя за собой весь кластер.
9 zippygrill
 
13.12.17
00:57
(8) не понял
10 zippygrill
 
13.12.17
01:57
Вопрос: Поскольку объем данных большой..COM соединение не накроется по истечению там...30 минут?
11 tesseract
 
13.12.17
02:05
(10) Зависит от пары сотен мелочей. Например настроек сервера. Com/Dcom может накрыться.
12 zippygrill
 
13.12.17
22:03
(11) Вот блин

Для добавления файлов использую встроенную функцию в ЕРП

    СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ПрисоединенныйФайл.ФайлХранилище.Получить(), ПрисоединенныйФайл.ДатаМодификацииУниверсальная,
    ПрисоединенныйФайл.Наименование, ПрисоединенныйФайл.Расширение, "",    Ложь,
    // Чтобы все файлы не попали в одну папку за сегодняшний день - подставляем дату создания файла.
    НачалоГода(ПрисоединенныйФайл.ДатаМодификацииУниверсальная));

Как бы проверить существование такого файла дабы не создавать дубли..
13 zippygrill
 
13.12.17
22:04
Наверное создавать папку для каждого владельца файлов. Ведь например у серии могут быть несколько файлов.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший