Имя: Пароль:
1C
1С v8
Проблема с созданием записей в регистре сведений.
0 НачинающийВ1С
 
30.04.19
15:56
Добрый день.
Документооборот 2.1.11.5

Столкнулся с проблемой. Я вытаскиваю данные из другой системы через одату. К каждому элементу справочника (ссылку на который я в процедуру передаю) могут быть прикреплены файлы. До вызова этой процедуры я выясняю есть ли эти файлы (если есть, то получаю их расширение, наименование, дату) и в эту процедуру уже передаю готовый json, содержащий base64data. Процедура находит строковое представление файла, создает файл (справочник файлы), создает версию (справочник версиифайлов) и запись в регистре сведений (именно там в документообороте хранятся файлы, как я понял).
Если файл к документу прикреплен один, то все работает как надо. А вот если файлов несколько, то в регистре сведений по итогу со ссылкой на наш элемент справочника только одна запись почему-то. Интерактивно файлы я вижу, но открывается только последний, а при попытке открыть другие появляется сообщение "Неправильный путь к файлу '/e1cib/data/РегистрСведений.ХранимыеФайлыВерсий.ХранимыйФайл?ВерсияФайла=8daa001e673baedb11e96b4707264ccd'".
При этом если менять порядок в источнике, то всегда открывается корректно именно последний документ, хотя если ставить точки останова, мы при каждом документе этот код проходим.
Возможно кто-то сможет подсказать, что я делаю не так в коде?


&НаСервере
Процедура СозданиеФайловВБазеДанных(Ответ, Ссылка, Расширение, ПолноеНаименование, ДатаСоздания)
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ);
    ТекущееСвойство = "";
    ЕстьПрикрепленныеФайлы = Ложь;
    Пока ЧтениеJSON.Прочитать() Цикл
        ТипJSON = ЧтениеJSON.ТипТекущегоЗначения;
        Если ТипJSON = ТипЗначенияJSON.Строка и ТекущееСвойство = "ХранимыйФайл_Base64Data" тогда
            НовыйФайл = Справочники.Файлы.СоздатьЭлемент();
            НовыйФайл.ВладелецФайла = Ссылка;
            НовыйФайл.ПолноеНаименование = ПолноеНаименование;
            двоичныеДанные = Base64Значение(ЧтениеJSON.ТекущееЗначение);
            Хранилище = Новый ХранилищеЗначения(ДвоичныеДанные);
            НовыйФайл.ДатаСоздания = ДатаСоздания;
            НовыйФайл.ТекущаяВерсияРасширение = Расширение;
            НовыйФайл.Записать();
            
            НоваяВерсия = Справочники.ВерсииФайлов.СоздатьЭлемент();
            НоваяВерсия.Владелец = НовыйФайл.Ссылка;
            НоваяВерсия.Расширение = НовыйФайл.ТекущаяВерсияРасширение;
            НоваяВерсия.ДатаСоздания = НовыйФайл.ДатаСоздания;
            НоваяВерсия.ПолноеНаименование = НовыйФайл.Наименование;
            НоваяВерсия.Наименование = НовыйФайл.ПолноеНаименование;
            НоваяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
            НоваяВерсия.НомерВерсии = 1;
            НоваяВерсия.Автор = Пользователи.ТекущийПользователь();
            НоваяВерсия.ДатаСоздания = ДатаСоздания;
            НоваяВерсия.Размер = двоичныеДанные.Размер();
            НоваяВерсия.Записать();
            
            СсылкаНаОб = НовыйФайл.Ссылка;
            ФайлОБ = СсылкаНаОб.ПолучитьОбъект();
            файлОб.ТекущаяВерсия = НоваяВерсия.Ссылка;
            ФайлОб.Записать();
            ХранимыеФайлыВерсий = РегистрыСведений.ХранимыеФайлыВерсий;
            НаборЗаписей = ХранимыеФайлыВерсий.СоздатьНаборЗаписей();
            НоваяЗапись = НаборЗаписей.Добавить();
            НоваяЗапись.ВерсияФайла = НоваяВерсия.Ссылка;
            НоваяЗапись.ХранимыйФайл = ХРАНИЛИЩЕ;
            НаборЗаписей.Записать();
            
    КонецЕсли;
        Если ТипJSON = ТипЗначенияJSON.ИмяСвойства тогда
            ТекущееСвойство = ЧтениеJSON.ТекущееЗначение;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
1 Mort
 
30.04.19
16:05
Ну так набор надо записывать с параметром (ложь) если хочешь без удаления предыдущих.
2 НачинающийВ1С
 
30.04.19
16:08
(1) Спасибо большое. Все заработало как нужно.
3 ptiz
 
30.04.19
16:27
(2) Всегда устанавливай отбор:
НаборЗаписей.Отбор.ВерсияФайла.Установить(НоваяВерсия.Ссылка);

И никогда не записывай Набор без отбора, иначе затрешь весь регистр в один прекрасный момент.
4 НачинающийВ1С
 
30.04.19
16:53
(3) Ок, спасибо за совет.