Имя: Пароль:
1C
 
УФ: Засунуть / вынуть файл .xml в реквизит типа ХранилищеЗначения справочника
,
0 bvb
 
17.12.19
13:23
Чего то нет могу разобраться как правильно сделать
реквизит типа ХранилищеЗначения недоступен в данных формы

и как в него сувать Новый ДвоичныеДанные(ПутьКФайлуXML) если это вообще новый элемент справочника ?
1 palsergeich
 
17.12.19
13:25
(0) РеквизитФормыВЗначение
и ЗначениеВРеквизитФормы
2 palsergeich
 
17.12.19
13:27
Как то так
Спробъект = РеквизитФормыВЗначение("объект");
Спробъект.имяРеквизитаХранилищеЗначений = ХранилищеЗначений;
ЗначениеВРеквизитФормы(Спробъект, "объект");
3 dka80
 
17.12.19
13:30
МояКартинка = Новый Картинка("C:\Мои документы\Картинка1.bmp");
ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка);

НовНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НовНоменклатура.Наименование = "Диван ""Маргарита""";
НовНоменклатура.Изображение = ХранилищеКартинки;
НовНоменклатура.Записать();

из СП
4 RomaH
 
naïve
17.12.19
13:34
... ща начоветуют

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    ТекущийОбъект.ИсторияБолезни = Новый ХранилищеЗначения(ИсторияБолезни);
КонецПроцедуры
5 palsergeich
 
17.12.19
13:39
(4) а кто сказал что надо перед записью?
6 RomaH
 
naïve
17.12.19
13:43
(5)а когда?
7 bvb
 
17.12.19
13:49
(3) Я в форме элемента.
Читаю файл в новом или существующем элементе .
Визуализирую его.
Затем нужно сохранить в реквизит существующего элемента справочника

(4) Это для нового. А для существующего ?
8 RomaH
 
naïve
17.12.19
13:50
(6) так пофиг
9 RomaH
 
naïve
17.12.19
13:50
(7) - так пофиг - если в форме элемента в который записываешь
10 bvb
 
17.12.19
13:51
(8) В смысле всегда перед записью ?

А читать его когда для визуализации приОткрытии или присозданииНаСервере ?
11 RomaH
 
naïve
17.12.19
13:52
(10) при чтении
при создании - оно выполняется и для новых - а там в хранилище еще ничего нет
12 bvb
 
17.12.19
13:53
Меня вообще терзают смутные сомнения : а уместно ли использовать ХЗ в УФ ?
13 RomaH
 
naïve
17.12.19
13:54
(12) а альтернатива?
14 RomanYS
 
17.12.19
13:55
(12) Как-будто есть какая-нибудь альтернатива...
15 RomaH
 
naïve
17.12.19
13:56
(12) и как бы ХЗ - к УФ (интерфейсу) не имеет отношения - это способ хранения информации
16 RomaH
 
naïve
17.12.19
13:57
(12) но мысль правильная - используй БСП и прикрепленные файлы
можно в любой момент из ХЗ свалить на хранение в каталоге
17 bvb
 
17.12.19
13:58
(11)При чтении на сервере ?
18 RomaH
 
naïve
17.12.19
13:58
+(16) но в ХЗ надо тогда хранить именно двоичные
у меня там, например, зачастую просто текст/текстовый документ
19 Радим1987
 
17.12.19
14:02
Вот пример


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Ключ.Пустая() Тогда
        
        ТекущийОбъект = РеквизитФормыВЗначение("Объект");
        СхемаКомпоновкиДанных = ТекущийОбъект.ПолучитьМакет("СхемаКомпоновкиДанных");     
        АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
        КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
        КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);    
        
        Если ЗначениеЗаполнено(ЭтаФорма.Параметры.ЗначениеКопирования) Тогда
            ОбъектКопирования = ЭтаФорма.Параметры.ЗначениеКопирования;
            СохраненныйКомпоновщикНастроек = ОбъектКопирования.ХранилищеЗначенияКомпоновщикНастроек.Получить();
            
            Если СохраненныйКомпоновщикНастроек <> Неопределено Тогда
                СкопироватьОтборКомпоновкиДанных(КомпоновщикНастроек.Настройки.Отбор, СохраненныйКомпоновщикНастроек.Отбор);           
            КонецЕсли;
        КонецЕсли;
        
    КонецЕсли;
    
    НастройкиКолонокОсновные = Новый Структура;
    НастройкиКолонокОсновные.Вставить("ФайлКонтрольныйНомерОтгрузки", 0);
    НастройкиКолонокОсновные.Вставить("ФайлЗаказПоставщику", 0);
    НастройкиКолонокОсновные.Вставить("ФайлИнвойсСчет", 0);
    НастройкиКолонокОсновные.Вставить("ФайлГруз", 0);
    НастройкиКолонокОсновные.Вставить("ОписаниеГруза", 0);
    НастройкиКолонокОсновные.Вставить("ФайлГрузМесто", 0);
    НастройкиКолонокОсновные.Вставить("ФайлЗаявкаНаПоставкуМатериалов", 0);
    НастройкиКолонокОсновные.Вставить("TAG", 0);
    НастройкиКолонокОсновные.Вставить("ФайлУсловиеПоставкиIncoterms", 0);
    НастройкиКолонокОсновные.Вставить("ФайлДатаГотовностиКОтправке", 0);
    НастройкиКолонокОсновные.Вставить("ФайлСтранаОтправки", 0);
    НастройкиКолонокОсновные.Вставить("ФайлРазмерГруза", 0);
    НастройкиКолонокОсновные.Вставить("ФайлТипКонтейнера", 0);
    НастройкиКолонокОсновные.Вставить("ФайлКонтейнер", 0);
    НастройкиКолонокОсновные.Вставить("КоличествоКонтейнеров", 0);
    НастройкиКолонокОсновные.Вставить("КоличествоМест", 0);
    НастройкиКолонокОсновные.Вставить("Длина", 0);
    НастройкиКолонокОсновные.Вставить("Ширина", 0);
    НастройкиКолонокОсновные.Вставить("Высота", 0);
    НастройкиКолонокОсновные.Вставить("ВесНетто", 0);
    НастройкиКолонокОсновные.Вставить("ВесБрутто", 0);
    НастройкиКолонокОсновные.Вставить("Объем", 0);
    НастройкиКолонокОсновные.Вставить("ПредварительнаяМассаДоставки", 0);
    НастройкиКолонокОсновные.Вставить("Комментарий", 0);
        
    Если Объект.НастройкиКолонокОсновная.Количество() = 0 Тогда
        
        Для каждого Строка Из НастройкиКолонокОсновные Цикл
            
            НоваяСтрока = Объект.НастройкиКолонокОсновная.Добавить();
            НоваяСтрока.Идентификатор = Строка.Ключ;
            НоваяСтрока.НомерКолонки = Строка.Значение;
            
        КонецЦикла;
        
    Иначе    
        
        Для каждого Строка Из НастройкиКолонокОсновные Цикл
            
            НайденныеСтроки = Объект.НастройкиКолонокОсновная.НайтиСтроки(Новый Структура("Идентификатор", Строка.Ключ));
            
            Если НайденныеСтроки.Количество() = 0 Тогда
                НоваяСтрока = Объект.НастройкиКолонокОсновная.Добавить();
                НоваяСтрока.Идентификатор = Строка.Ключ;
                НоваяСтрока.НомерКолонки = Строка.Значение;
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЕсли;
        
    Для каждого Строка Из Объект.НастройкиКолонокОсновная Цикл
        
        ИсключаемыеЗначения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(Строка.ИсключаемыеЗначения, ";");
        
        Для каждого ИсключаемоеЗначение Из ИсключаемыеЗначения Цикл
            
            Если Строка.ИсключаемыеЗначенияСписок.НайтиПоЗначению(ИсключаемоеЗначение) = Неопределено Тогда
                Строка.ИсключаемыеЗначенияСписок.Добавить(ИсключаемоеЗначение);
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЦикла;  
    
    НовыеРеквизитыИЭлементыНастройкиКолонокДляЭтапа();        
    
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
    СхемаКомпоновкиДанных = ТекущийОбъект.ПолучитьМакет("СхемаКомпоновкиДанных");     
    АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);    
    
    СохраненныйКомпоновщикНастроек = ТекущийОбъект.ХранилищеЗначенияКомпоновщикНастроек.Получить();
    
    Если СохраненныйКомпоновщикНастроек <> Неопределено Тогда
        СкопироватьОтборКомпоновкиДанных(КомпоновщикНастроек.Настройки.Отбор, СохраненныйКомпоновщикНастроек.Отбор);           
    КонецЕсли;
        
    
КонецПроцедуры

&НаСервере
Процедура СкопироватьОтборКомпоновкиДанных(ГруппаПриемник, ГруппаИсточник)
    
    КоллекцияИсточник = ГруппаИсточник.Элементы;
    КоллекцияПриемник = ГруппаПриемник.Элементы;
    Для Каждого Элемент Из КоллекцияИсточник Цикл
        ТипЭлемента  = ТипЗнч(Элемент);
        НовыйЭлемент = КоллекцияПриемник.Добавить(ТипЭлемента);
        
        ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент);
        Если ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
            СкопироватьОтборКомпоновкиДанных(НовыйЭлемент, Элемент)
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    
    Для каждого Строка Из Объект.НастройкиКолонокОсновная Цикл         
        
        ИсключаемыеЗначения = "";
        
        Для каждого ИсключаемоеЗначение Из Строка.ИсключаемыеЗначенияСписок Цикл
            ИсключаемыеЗначения = ИсключаемыеЗначения + ИсключаемоеЗначение + ";"
        КонецЦикла;
        
        Строка.ИсключаемыеЗначения = ИсключаемыеЗначения;              
        
    КонецЦикла;
    
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

    //Для каждого Строка Из Объект.НастройкиКолонокОсновная Цикл            
    //    
    //    ИсключаемыеЗначения = "";
    //    
    //    Для каждого ИсключаемоеЗначение Из Строка.ИсключаемыеЗначенияСписок Цикл
    //        ИсключаемыеЗначения = ИсключаемыеЗначения + ИсключаемоеЗначение + ";"
    //    КонецЦикла;
    //    
    //    Строка.ИсключаемыеЗначения = ИсключаемыеЗначения;              
    //    
    //КонецЦикла;
    
    ТекущийОбъект.НастройкиКолонокДляЭтапа.Очистить();    
    
    Для каждого ЭлементСписка Из СоответствиеЭтапов Цикл
        
        Для каждого Строка Из НастройкиКолонокДляЭтапа Цикл  
        
            НоваяСтрока = ТекущийОбъект.НастройкиКолонокДляЭтапа.Добавить();
            НоваяСтрока.ЭтапОтслеживания = ЭлементСписка.Значение;
            НоваяСтрока.Идентификатор = Строка.Идентификатор;
            НоваяСтрока.НомерКолонки = Строка[ЭлементСписка.Представление];
            
            ИсключаемыеЗначения = "";
            
            Для каждого ИсключаемоеЗначение Из Строка.ИсключаемыеЗначенияСписок Цикл
                ИсключаемыеЗначения = ИсключаемыеЗначения + ИсключаемоеЗначение + ";"
            КонецЦикла;
            
            НоваяСтрока.ИсключаемыеЗначения = ИсключаемыеЗначения;              
                
        КонецЦикла;
        
    КонецЦикла;
    
    ТекущийОбъект.ХранилищеЗначенияКомпоновщикНастроек = Новый ХранилищеЗначения(КомпоновщикНастроек.Настройки);
           
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
    
    Для каждого Строка Из Объект.НастройкиКолонокОсновная Цикл
        
        ИсключаемыеЗначения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(Строка.ИсключаемыеЗначения, ";");
        
        Для каждого ИсключаемоеЗначение Из ИсключаемыеЗначения Цикл
            
            Если Строка.ИсключаемыеЗначенияСписок.НайтиПоЗначению(ИсключаемоеЗначение) = Неопределено Тогда
                Строка.ИсключаемыеЗначенияСписок.Добавить(ИсключаемоеЗначение);
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЦикла;
    
    НовыеРеквизитыИЭлементыНастройкиКолонокДляЭтапа();
КонецПроцедуры
20 RomaH
 
naïve
17.12.19
14:05
(19) - если не секрет - это что? ... вижу что СКД - прикладной смысл какой?
21 bvb
 
17.12.19
14:05
(4) А Как передать в ПередЗаписьюНаСервере двоичные данные.

Через реквизит формы ?

ПутьКФайлуXML на недоступен

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    ТекущийОбъект.ФайлПоставщика = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПутьКФайлуXML));
    
КонецПроцедуры
22 RomaH
 
naïve
17.12.19
14:07
(21) ... ВременноеХранилище


понеслась...
23 Радим1987
 
17.12.19
14:09
(20) Это справочник настройка загрузки файлов Excel где отборы строк (какие строки грузить) устанавливается в режиме 1с предприятия
24 RomaH
 
naïve
17.12.19
14:11
адрес хранилища - реквизит формы
перед записью - помещаешь файл во временное
перед записью на сервере - получаешь из временного

а какова логика?
ПутьКФайлуXML - это выбор на клиенте готового файла

а вот при открытии уже записаного элемента - файл - это где?
25 Радим1987
 
17.12.19
14:11
(20) Я храню настройки компоновщика (всякие отборы) в этом справочнике в хранилище значений
26 bvb
 
17.12.19
14:27
(22) Осилил

&НаКлиенте
АдресДвоичныхДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлуXML), Новый УникальныйИдентификатор);


&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    ТекущийОбъект.ФайлПоставщика = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресДвоичныхДанных));
    
КонецПроцедуры
27 bvb
 
17.12.19
15:17
При открытии формы

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
    ИмяФайла = ПолучитьИмяВременногоФайла(".xml"); //Временный файл у нас на сервере
    ДД =  Объект.Ссылка.ФайлПоставщика.Получить();
    Если ТипЗнч(ДД) = Тип("ДвоичныеДанные") Тогда
        ДД.Записать(ИмяФайла);
        
        ЧтениеXML = Новый ЧтениеXML;
        ЧтениеXML.ОткрытьФайл(ИмяФайла);

//И понеслась...
        ПрочитатьФайлПоставщикаXML(ЧтениеXMLя);

    КонецЕсли;    
    
КонецПроцедуры
28 RomaH
 
naïve
17.12.19
15:25
(27)
посмотри в сторону
ДвоичныеДанные.ОткрытьПотокДляЧтения
(временный файл не нужен)
Объект.Ссылка.
ну ё-моё ...
ТекущийОбъект

Ссылка - тут зачем?
29 bvb
 
17.12.19
15:48
(28) Спасибо Исправился :

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
    ИмяФайла = ПолучитьИмяВременногоФайла(".xml"); //Временный файл у нас на сервере
    ДвоичныеДанные =  ТекущийОбъект.ФайлПоставщика.Получить();
    Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда
        
        ЧтениеXML = Новый ЧтениеXML;
        ЧтениеXML.ОткрытьПоток(ДвоичныеДанные.ОткрытьПотокДляЧтения());
        ПрочитатьФайлПоставщикаXML(ЧтениеXML);
30 bvb
 
17.12.19
15:50
Можно вопрос не по топику ?
Файл здоровый и при открытии элемента спр происходит подвисание

Как отобразить длительную операцию ?

Строка состояния то недоступна
31 Радим1987
 
17.12.19
15:55
(30) Никак