Имя: Пароль:
1C
1С v8
УФ. Как записать хранилище значений в строку табличной части?
,
0 megabax
 
27.03.15
14:04
Добрый день.
Делаю так:
&НаКлиенте
Процедура ДокументацияНаименованиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ТекущаяСтрока = Элементы.Документация.ТекущиеДанные;
    
    ДиалогФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогФайла.Фильтр = ПолучитьФильтрДиалога(ТекущаяСтрока.ТипДокумента);
    
    Если ДиалогФайла.Выбрать() Тогда
        ПолноеИмяФайлаОбработки = ДиалогФайла.ПолноеИмяФайла;
    Иначе
        ПолноеИмяФайлаОбработки = "";
    КонецЕсли;
    
    Файл = Новый Файл(ДиалогФайла.ПолноеИмяФайла);
    
    КомментарийКФайлуИсточнику = Файл.ПолноеИмя+";" + Символы.ПС + "размер:" + Файл.Размер()+"; изменен:" + Файл.ПолучитьВремяИзменения() + "; сохранен в ИБ:" + ТекущаяДата();
    
    ТекущаяСтрока.Комментарий=КомментарийКФайлуИсточнику;
    ТекущаяСтрока.Документ = ПолучитьХранилище(Файл.ПолноеИмя);

    
    Сообщ=СоздатьПриложение(ТекущаяСтрока.ТипДокумента,Файл.ПолноеИмя,ТекущаяСтрока.Наименование, ТекущаяСтрока.Документ);
    если Сообщ=""  тогда
        Предупреждение(сообщ);
    конецесли;
    
КонецПроцедуры

говорит что не такого поля Документ.
Пытаюсь перетащить его на форму, а не получаетсЯ, говорит, что хранилище значенйи не доступно в данных формы.
И как теперь быть?
1 megabax
 
27.03.15
14:27
up
2 Dmitriy_76
 
27.03.15
14:30
в котором месте говорит про ошибку ?
3 Dmitriy_76
 
27.03.15
14:30
ТекущаяСтрока.Документ = ПолучитьХранилище(Файл.ПолноеИмя); тут ?
4 DrShad
 
27.03.15
14:31
ХЗ действительно недоступно на форме
5 megabax
 
27.03.15
14:33
(3) Да, здесь
6 NcSteel
 
27.03.15
14:34
(4) Доступно
7 megabax
 
27.03.15
14:35
Ну вообще звездец с этими уФ
Сделал вот так:
&НаСервере
процедура УстанвоитьХранилище(НомерСтроки, Хранилище)
    Объект.Документация[НомерСтроки-1].Документ=Хранилище;        
конецпроцедуры

&НаКлиенте
Процедура ДокументацияНаименованиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ТекущаяСтрока = Элементы.Документация.ТекущиеДанные;
    
    ДиалогФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогФайла.Фильтр = ПолучитьФильтрДиалога(ТекущаяСтрока.ТипДокумента);
    
    Если ДиалогФайла.Выбрать() Тогда
        ПолноеИмяФайлаОбработки = ДиалогФайла.ПолноеИмяФайла;
    Иначе
        ПолноеИмяФайлаОбработки = "";
    КонецЕсли;
    
    Файл = Новый Файл(ДиалогФайла.ПолноеИмяФайла);
    
    КомментарийКФайлуИсточнику = Файл.ПолноеИмя+";" + Символы.ПС + "размер:" + Файл.Размер()+"; изменен:" + Файл.ПолучитьВремяИзменения() + "; сохранен в ИБ:" + ТекущаяДата();
    
    ТекущаяСтрока.Комментарий=КомментарийКФайлуИсточнику;
    
    //сообщить(ТекущаяСтрока.НомерСтроки);
    лДокумент = ПолучитьХранилище(Файл.ПолноеИмя);

    //
    Сообщ=СоздатьПриложение(ТекущаяСтрока.ТипДокумента,Файл.ПолноеИмя,ТекущаяСтрока.Наименование, лДокумент);
    если Сообщ=""  тогда
        Предупреждение(сообщ);
    конецесли;
    
    УстанвоитьХранилище(ТекущаяСтрока.НомерСтроки,лДокумент);
    
КонецПроцедуры

Все равно пише, что поле агрегатного объекта не обнаружено Документ
8 Dmitriy_76
 
27.03.15
14:35
(5) отладчик что показывает слева и справа равенства ?
9 DrShad
 
27.03.15
14:35
(6) да ладно!? вот только сейчас мучал форму записи РС - нужно было на ней разместить две ТЗ и их хранить в записи, но в итоге так и не вышло через ХЗ сделать
10 megabax
 
27.03.15
14:36
(8) Оталдчик показывает, что неут такого поля Документ  у ТекущаяСтрока, все есть, а этого нету
11 PR
 
27.03.15
14:36
(7) Блеать, будь мужиком, возьми БСП и посмотри
12 NcSteel
 
27.03.15
14:36
(7) Звиздец не с УФ, а с твоим овнокодом, посмотри уже в типовые как делается нормально.
13 DrShad
 
27.03.15
14:36
(8) естественно что не показывает левое - там ошибка ибо у строки нет такого реквизита
14 NcSteel
 
27.03.15
14:37
(9) А при кинь, процедуры можно на сервере выполнять. И на форме можно серверные процедуры писать.
15 megabax
 
27.03.15
14:38
(13) ДЫк если бы можно было добавить в на форму, я бы добавил. Но 1С, собака такая, на дает!!!
16 megabax
 
27.03.15
14:38
(12) Звездце с УФ, напридумывали в 1С вякого ненужного хлама типа разделения на клеинт и на сревер, а нам мучайся....
17 megabax
 
27.03.15
14:39
(11) Что такое БСП?
18 DrShad
 
27.03.15
14:39
(16) а нефига пихать на форму все что не попадя
19 DrShad
 
27.03.15
14:40
(14) а прикинь я в курсе, вот только попробуй сам
20 PR
 
27.03.15
14:40
(15) Ты сейчас напоминаешь человека, который не знает компьютер, но очень хочет поиграть на нем в сапера.
И компьютер у него собака такая.
21 PR
 
27.03.15
14:40
(16) Правильно напридумывали, не все же ларьки обслуживают.
22 PR
 
27.03.15
14:41
(17) Рукалицо

Библиотека стандартных подсистем.
23 megabax
 
27.03.15
14:41
(18) А как тогда мне записать в нее значение, если не пихать на форму????
24 megabax
 
27.03.15
14:41
(22) И где находиться эта библиотека?
25 megabax
 
27.03.15
14:42
(22) Еще бы 1С нормальную документацию давала по своим коняигурациям.
26 DrShad
 
27.03.15
14:42
(23) а ты уверен что оно там нужно? может его в другое место вынести?
27 DrShad
 
27.03.15
14:43
(25) ты бы глянул для начала - там документация на уровне
28 PR
 
27.03.15
14:43
(23) А как ты собираешься хранилище значения редактировать в поле ввода?
29 Fish
 
27.03.15
14:43
(25) А чем существующая не устраивает? Вроде никто не жалуется.
30 PR
 
27.03.15
14:44
(24) Ну не знаю, у меня тут лежит D:\Distr\1C\Конфигурации\БСП
31 fisher
 
27.03.15
14:44
(0) Нескромный вопрос - а что планируется хранить в хранилище значений в строке табличной части?
32 PR
 
27.03.15
14:44
(25) А что тебе не нравится в документации 1С по своим коням и гурациям?
33 DrShad
 
27.03.15
14:44
(31) судя по коду - скан документа
34 alex_shkut
 
27.03.15
14:45
"Какой-то" Документ :) даже формат этого документа неизвестен нам
35 megabax
 
27.03.15
14:45
(31) Документы WORD и Excel. В старйо весрии программы, которая была на 8.1 хранилось там. Сейчас перевожу на 8.3 на УФ
36 NcSteel
 
27.03.15
14:45
(19) Я пробовал и оно работает, даже автор попробовал и у него сработало )
37 DrShad
 
27.03.15
14:46
(36) и почему же тогда автор здесь?
38 megabax
 
27.03.15
14:47
(30) А откуда изначально взять этот БСП? ОН на итисниках или где то в составе конфигурации?
39 NcSteel
 
27.03.15
14:47
(35) Такие вещи надо не в базе хранить, а на файловом ресурсе.
40 NcSteel
 
27.03.15
14:48
(37) Автор негодяй, не умеет читать документацию
41 NcSteel
 
27.03.15
14:48
(38) И на ИТС и в составе типовых конфигурациях
42 PR
 
27.03.15
14:49
Ветка пока претендент на пятничную
43 alex_shkut
 
27.03.15
14:49
44 NcSteel
 
27.03.15
14:50
(43) Скажи логин и пароль
45 alex_shkut
 
27.03.15
14:50
Щазззз.... :)
46 alex_shkut
 
27.03.15
14:53
и бан на 1000 лет?
47 megabax
 
27.03.15
14:54
(41) А в составе типовых конфигураций где хранить?
48 PR
 
27.03.15
14:54
(47) В хранилище значения можно попробовать.
49 megabax
 
27.03.15
14:56
(47) Пардон, я хотел спросить: где в типовых конфигурациях БСП находиться?
50 megabax
 
27.03.15
14:56
(48) В хранилище значенйи я и так пытаюсь сохранить, но я !С-ка, собка такая, не дает.
51 alex_shkut
 
27.03.15
14:58
Судя по описанию - сохранить дает, только видимо надо не Записывать прямо в Документ =, а типа ПоместитьВХранилище(.Документ)
52 fisher
 
27.03.15
15:00
(35) Тогда в строках ТЧ их хранить принципиально неправильно. Даже в толстом клиенте, т.к. они будут тащиться при КАЖДОМ обращении к объекту. Про тонкий клиент я вообще молчу.
53 alex_shkut
 
27.03.15
15:01
(52) Так точно! А в Веб интерфейс ;)? Особенно на каком-нибудь CDMA
54 megabax
 
27.03.15
15:01
(51) ДЫк я так и делаю:
УстанвоитьХранилище(ТекущаяСтрока.НомерСтроки,лДокумент);

Но в процедуре
&НаСервере
процедура УстанвоитьХранилище(НомерСтроки, Хранилище)
    Объект.Документация[НомерСтроки-1].Документ=Хранилище;        
конецпроцедуры
вылазит та же ошибка
55 alex_shkut
 
27.03.15
15:04
Из синтаксис-помощника:
Пример:

МояКартинка = Новый Картинка("C:\Мои документы\Картинка1.bmp");
ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка);

НовНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НовНоменклатура.Наименование = "Диван ""Маргарита""";
НовНоменклатура.Изображение = ХранилищеКартинки;
НовНоменклатура.Записать();
56 alex_shkut
 
27.03.15
15:04
Правда тут не табличная часть, но думаю, неважно если позволяет задать тип
57 alex_shkut
 
27.03.15
15:05
У Вас с типизацией проблемы
58 fisher
 
27.03.15
15:09
(56) Управляемая форма не поддерживает реквизиты типа хранилище значений. Причем по настолько очевидным причинам, что объяснять - руки опускаются.
59 megabax
 
27.03.15
15:18
Попробовал сделать так:
&НаКлиенте
Процедура ДокументацияНаименованиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ТекущаяСтрока = Элементы.Документация.ТекущиеДанные;
    
    ДиалогФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогФайла.Фильтр = ПолучитьФильтрДиалога(ТекущаяСтрока.ТипДокумента);
    
    Если ДиалогФайла.Выбрать() Тогда
        ПолноеИмяФайлаОбработки = ДиалогФайла.ПолноеИмяФайла;
    Иначе
        ПолноеИмяФайлаОбработки = "";
    КонецЕсли;
    
    Файл = Новый Файл(ДиалогФайла.ПолноеИмяФайла);
    
    КомментарийКФайлуИсточнику = Файл.ПолноеИмя+";" + Символы.ПС + "размер:" + Файл.Размер()+"; изменен:" + Файл.ПолучитьВремяИзменения() + "; сохранен в ИБ:" + ТекущаяДата();
    
    ТекущаяСтрока.Комментарий=КомментарийКФайлуИсточнику;
    
    
    //сообщить(ТекущаяСтрока.НомерСтроки);
    лДокумент = ПолучитьХранилище(Файл.ПолноеИмя);
    
    //
    Сообщ=СоздатьПриложение(ТекущаяСтрока.ТипДокумента,Файл.ПолноеИмя,ТекущаяСтрока.Наименование, лДокумент);
    если Сообщ<>""  тогда
        Предупреждение(сообщ);
        возврат;
    конецесли;
    
    Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.Хранилище) тогда
        лОб=ПолучитьОбъектХранилища();
        лОб.Документ=лДокумент;
        лОб.Записать();
        ТекущаяСтрока.Хранилище=лОб.Ссылка;
    иначе
        лОб=ТекущаяСтрока.Хранилище.ПолучитьОбъект();
        лОб.Документ=лДокумент;
        лОб.Записать();
    конецесли;
    
    //УстанвоитьХранилище(ТекущаяСтрока.НомерСтроки,лДокумент);
    
КонецПроцедуры

функция ПолучитьОбъектХранилища()
    возврат Справочники.шапХранилищеДокументов.СоздатьЭлемент();
конецфункции

Теперь говорит:
{Справочник.битТесты.Форма.ФормаЭлементаУпр.Форма(257)}: Ошибка при вызове метода контекста (ПолучитьОбъектХранилища)
        лОб=ПолучитьОбъектХранилища();
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/enterprise/current-config}Ref    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType

И что теперь делать? Как затсавить эти проклятые УФ работать правильно???
60 DrShad
 
27.03.15
15:20
(59) [И что теперь делать? Как затсавить эти проклятые УФ работать правильно???]

писать на них правильно
61 fisher
 
27.03.15
15:26
(59) Хранишь свои файлы реквизите справочника файлов, например. В табличной части ссылка на справочник файлов.
Надо в какой-то момент времени открыть на клиенте файл - ложишь его со стороны сервера ПоместитьВоВременноеХранилище.
На клиенте оттуда забираешь и открываешь. Ну и наоборот по такой же схеме.
62 DrShad
 
27.03.15
15:28
(61) дык в (59) он объект справочника передает на клиент
63 megabax
 
27.03.15
15:29
(61) Сделал вот так:
    Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.Хранилище) тогда
        лСсылка=ПолучитьОбъектХранилища(лДокумент);
        ТекущаяСтрока.Хранилище=лСсылка;
    иначе
        лОб=ТекущаяСтрока.Хранилище.ПолучитьОбъект();
        лОб.Документ=лДокумент;
        лОб.Записать();
    конецесли;
    
    //УстанвоитьХранилище(ТекущаяСтрока.НомерСтроки,лДокумент);
    
КонецПроцедуры

функция ПолучитьОбъектХранилища(лДокумент)
    лОб=Справочники.шапХранилищеДокументов.СоздатьЭлемент();
    лОб.Документ=лДокумент;
    лОб.Записать();
    возврат лОб.Ссылка;    
конецфункции

Наонец то без ошибок. Очень хочетьс яобматерить изобреталалей УФ
64 fisher
 
27.03.15
15:35
&НаКлиенте
ПолучитьОбъект()? Да ладно!
(63) Ты не поверишь, но УФ - обалденная штука по задумке. И абсолютно логично реализованная. Другое дело, что если абсолютно не нужны плюшки тонкого клиента даже в перспективе - то да - усложнение разработки оправдывается не полностью.
65 megabax
 
27.03.15
15:54
(64) Да, действительно, неправильно. Эту ветку тоже придется переписывать.
66 DrShad
 
27.03.15
16:51
(65) обращайтесь если что, а то в УФ много неизведанного
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.