Имя: Пароль:
1C
1С v8
1C8.3: реквизит - тип "Хранилище значений" не нахожу!
,
0 dft2014
 
20.05.16
11:36
Работаю с форматированным документом на форме обработке. Для сохранения изменений в нем, прочитала, что надо использовать реквизит с типом "Хранилище значений". Но я такого типа - не нахожу!!!
1 Asmody
 
20.05.16
11:42
У вас точно 1С?
2 singlych
 
20.05.16
11:42
Используй произвольный тип!!!
3 dft2014
 
20.05.16
11:42
Вот картинка, ищу по поиску, нет такого типа "Хранилище значений":
http://s020.radikal.ru/i722/1605/f9/760ad08ecfc2.jpg
4 sanja26
 
20.05.16
11:43
5 Lexey_
 
20.05.16
11:43
(0) обработки не хранят данные в базе
6 Asmody
 
20.05.16
11:44
(5) Ты еще скажи, что в обработке нельзя создать реквизит с типом "ХранилищеЗначния".
7 Defender aka LINN
 
20.05.16
11:45
(3) Типа "строка" ты там тоже не найдешь, прикинь?
8 Lexey_
 
20.05.16
11:48
(6) да да
9 dft2014
 
20.05.16
11:50
(4) а у меня вот так: http://s017.radikal.ru/i422/1605/d6/7c585077d168.jpg

нет Хранилища значений!!!
10 Любопытная
 
20.05.16
11:56
(9) А что непонятно в (5)? :)
11 sanja26
 
20.05.16
11:58
(9) а зачем вообще надо? в базе сохранить?
https://yadi.sk/i/kdG5IiUGrrZYZ
12 dft2014
 
20.05.16
12:03
(11) Делаю согласно этому материалу: http://catalog.mista.ru/public/74958/
Споткнулась на том, что не нахожу типа ХранилищеЗначений!!!
13 Любопытная
 
20.05.16
12:05
(12) В примере по ссылке справочник, а у вас обработка. Разница есть?
14 _Дайвер_
 
20.05.16
12:07
(13) + + +
15 Тролль главный
 
20.05.16
12:09
(12) выбирай "Произвольный"
16 dft2014
 
20.05.16
12:11
(12) Вот аналогичная статья, там написано, что это используется, для документа, справочника, обработки:

http://howknow1c.ru/programmirovanie-1c/stroka-1s.html
17 dft2014
 
20.05.16
12:13
(15) Если выбираю Произвольный, то как потом с этим реквизитом использовать команды:

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ТекстДоговора = ТекущийОбъект.Текст.Получить();
КонецПроцедуры


&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект.Текст = Новый ХранилищеЗначения(ТекстДоговора);
КонецПроцедуры
18 Тролль главный
 
20.05.16
12:15
ПередЗаписьюНаСервере в обработке? уверен?
19 SergTheGreat
 
20.05.16
12:26
(0) Я правильно понял задачу: в базе есть нечто, записанное в виде "ХранилищеЗначения", нужно создать обработку, которая может редактировать это нечто и сохранять изменения в базе?
20 dft2014
 
20.05.16
12:59
(19) Есть обработка, на форме которой надо вводить текст. После переоткрытия обработки, если были изменения в тексте, то они должны сохраняться. Для этих целей, использую реквизит с типом "ФорматированныйДокумент". Чтобы изменения в этом реквизите сохранялись, надо использовать реквизит с типом "ХранилищеЗначений", который я обнаружить не могу. Поэтому написала на форум, с просьбой помочь...
21 dft2014
 
20.05.16
13:17
Ап!
22 SergTheGreat
 
20.05.16
13:24
(20) Как уже написал Lexey_, обработки ничего в базе не хранят.
Определись где именно в базе будет храниться этот текст. Создай на форме реквизит типа ФорматированныйДокумент. При создании/открытии формы считывай в этот реквизит содержимое ХранилищяЗначения из базы. При закрытии формы (или командой) записывай реквизит формы в ХранилищеЗначения базы.

Как считать и записать ты сама указала в (17).
23 Pro-tone
 
20.05.16
13:47
(0) посмотри доступность типа ХЗ, он доступен только из модуля документа
24 Pro-tone
 
20.05.16
13:50
(23) + в твоем случае - только в модуле обработки
25 singlych
 
20.05.16
13:52
(23) Ну конечно, наговорите щас.
26 Pro-tone
 
20.05.16
13:52
(0) даю на(О_о)водку как получить в модуле формы значение типа ХЗ


&НаКлиенте
Процедура СохранитьПравилаПриемника(Команда)
    
    ИмяФайла = ВыбратьСохранитьФайл();    
    ДанныеПравил = ПолучитьДвоичныеДанныеФайлаПравил("а_ФайлПравилПриемника");        
    ДанныеПравил.Записать(ИмяФайла);    
    
КонецПроцедуры


&НаСервере
Функция ПолучитьДвоичныеДанныеФайлаПравил(ИмяРеквизитаХранилищаФайла) Экспорт

    ТекОбъект=РеквизитФормыВЗначение("Объект");
    ДанныеПравил = ТекОбъект[ИмяРеквизитаХранилищаФайла].Получить();
    ЗначениеВРеквизитФормы(ТекОбъект,"Объект");    
    
    Возврат ДанныеПравил;
    
КонецФункции
27 Pro-tone
 
20.05.16
13:55
(25)
28 singlych
 
20.05.16
13:59
(27) Ну сделай форму и напиши где-нить в ПриСозданииНаСервере
МоеХЗ = Новый ХранилищеЗначений;

То, что он недоступен в данных формы, означает лишь, что если, скажем, у тебя есть реквизит формы, скажем, типа ДанныеФормыСтруктура, в котором, скажем, лежит объект обработки, у которой, скажем, есть реквизит типа ХЗ, то ты не сможешь сделать так:
МоеХЗ = Объект.ХЗ
29 Pro-tone
 
20.05.16
14:06
(28) ну так я о том же, ТС в (0) не находит типа ХЗ в данных формы
30 singlych
 
20.05.16
14:11
(28) упс, а про конструктор-то я прогнал, он в тонком клиенте не работает. но из реквизита объекта можно достать.
(29) ну ок, я так, буквоедствую
31 dft2014
 
20.05.16
14:16
Из всего, что здесь написали, я поняла, что на форме обработки (даже встроенной в конфигурацию, а у меня она именно встроенная), нельзя создать реквизит с типом "ХранилищеЗначения".


Тогда возникают вопросы:
1. Как мне сохранять изменения, введенные пользователем на форме обработки в реквизите "ФорматированныйДокумент"?

2. Может быть, создать новую константу, с типом "ХранилищеЗначения", куда будут записываться изменения и считываться?
32 singlych
 
20.05.16
14:23
(31) Реквизит _формы_ в принципе нельзя сделать типа ХЗ. Только произвольный, куда можно пихнуть ХЗ.
Реквизит _обработки_ тоже нельзя сделать типа ХЗ. А смысл, если обработка не хранит данные в базе?
Если изменения в форматированном доке нужно для каждого пользователя отдельно сохранять, удобно использовать ХранилищеОбщихНастроек.
33 dft2014
 
20.05.16
14:28
(32) Изменения должны сохраняться для всех пользователей.
34 Pro-tone
 
20.05.16
14:46
(33) ты прочитала (26)?

1. преобразуешь свой форматированный документ в двоичные данные сперва. У тебя обработка,

2. хранить данные она не может, тебе нужно использовать тогда спецхранилище - можно справочник, можно регистр сведений с реквизитом или измерением типа ХЗ.

3. Записываешь эти двоичные данные в 2.
35 singlych
 
20.05.16
14:58
если документ один и тот же всегда, то константа подойдет
36 dft2014
 
20.05.16
15:02
(34) Спасибо, прочитала (26), но не поняла, как это применить к моей задаче.


В модуле формы обработки, ПриОткрытии() написала:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПриОткрытииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПриОткрытииНаСервере()
    ФорматированныйДокумент = Константы.ХранениеТекстаТабеля.Получить();
КонецПроцедуры


В реквизите "ФорматированныйДокумент", ПриИзменении() написала:

&НаКлиенте
Процедура ФорматированныйДокументПриИзменении(Элемент)
    ХранилищеНаСервере(ФорматированныйДокумент);    
КонецПроцедуры

&НаСервере
Процедура ХранилищеНаСервере(ФорматированныйДокумент)
   ХранилищеТекста = Новый ХранилищеЗначения(ФорматированныйДокумент);
   Константы.ХранениеТекстаТабеля = ХранилищеТекста;
КонецПроцедуры;


Но ничего не получилось: не сохраняются изменения и вообще выдает ошибку:
{Обработка.РассылкаТабелей.Форма.Форма.Форма(720)}: Поле объекта недоступно для записи (ХранениеТекстаТабеля)
   Константы.ХранениеТекстаТабеля = ХранилищеТекста;
37 dft2014
 
20.05.16
15:17
+(36) Исправила процедуру, ошибку перестал выдавать, но сохранение отредактированного текста не происходит:

Процедура ХранилищеНаСервере(ФорматированныйДокумент)
   ХранилищеТекста = Новый ХранилищеЗначения(ФорматированныйДокумент);
// Константы.ХранениеТекстаТабеля = ХранилищеТекста;
   Константы.ХранениеТекстаТабеля.Установить(ХранилищеТекста);
КонецПроцедуры;
38 singlych
 
20.05.16
15:24
ХранилищеДокумента = Константы.ХранениеТекстаТабеля.Получить();
ФорматированныйДокумент = ХранилищеДокумента.Получить();

и это можно делать в стандартном событии ПриСозданииНаСервере
39 Pro-tone
 
20.05.16
15:34
(37) а если у тебя будут разные форматированные доки или будет меняться в зависимости от условий они, тогда твоя константа не подойдет
40 singlych
 
20.05.16
15:38
(39) хехе, это нужно было ответить на (35) :))
41 dft2014
 
20.05.16
15:40
(35) Документ будет один и тот же, только будет меняться текст рассылки, который я и пытаюсь сохранять в ХЗ, но пока безуспешно!!!
42 dft2014
 
20.05.16
15:41
(38) Поправила, все равно не сохраняет отредактированный текст при повторном открытии!!!
43 Pro-tone
 
20.05.16
15:43
(41) а какую логику рассылки ты хочешь реализовать?
(40) я что-то подумал, что документ может меняться от условий)
44 singlych
 
20.05.16
15:46
(42) Что-то не то поправила.
45 dft2014
 
20.05.16
15:49
(43) Есть обработка по рассылке табелей, на форме которой задаются условия (месяц и прочее), а также текст, который получатели табелей увидят в письме при получении табеля. Так вот этот текст письма ежемесячно меняется, поэтому надо чтобы пользователи сами редактировали текст.
46 dft2014
 
20.05.16
15:50
Этот текст письма, я и запихнула на форму в реквизит "ФорматированныйДокумент" - тип ФорматированныйДокумент.
47 Pro-tone
 
20.05.16
16:03
(45) так сделай это на макете табличного документа
48 dft2014
 
20.05.16
16:05
(47) Нет, это обработка формирует табеля в формате pdf в определенном каталоге, а затем рассылает их руководителям подразделений.
49 Pro-tone
 
20.05.16
16:21
(48) так есть же возможность сохранения в PDF у табдока ж
50 dft2014
 
20.05.16
16:41
(49) Неважно, что формируем и в каком формате. Речь идет о тексте, который получают вместе с письмом (например: "Уважаемый руководитель, добрый день!"). Именно этот текст письма, я и запихнула на форму обработки в реквизит "ФорматированныйДокумент" - тип ФорматированныйДокумент, чтобы была возможность написать вместо "Уважаемый руководитель, добрый ДЕНЬ!" - "Уважаемый руководитель, добрый ВЕЧЕР!". И если потом повторно открыть обработку, то будет сохранено последнее редактирование, т.е. будет на форме обработки "Уважаемый руководитель, добрый ВЕЧЕР!"
51 dft2014
 
20.05.16
17:13
Выложила обработку на: https://yadi.sk/d/k_HR9lTDrs8k5

Помогите кто-нибудь!!!
52 singlych
 
20.05.16
17:22
(51) Ну скачал. Ну работает. ЧЯНТД?
Константа точно типа ХЗ?
53 dft2014
 
20.05.16
17:32
(52) В пользовательском режиме наберите любой текст на форме обработки, затем закройте и снова откройте обработку. Текст сохранился?
54 singlych
 
20.05.16
17:36
(53) угу
55 dft2014
 
20.05.16
17:42
(54) А почему тогда у меня не сохраняется?
56 singlych
 
20.05.16
18:09
Хороший вопрос. Кэш почистите на всякий.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший