Имя: Пароль:
1C
 
Проверка на мутабельное значение.
0 AaNnDdRrEeYy
 
18.01.11
10:10
Добрый день.
Встроенная функция ЗначениеЗаполнено() выдает исключение если я пытаюсь проверить мутабельное значение, каким образом можно проверить мутабельное значение попадает в параметр функции или нет?
1 Maxus43
 
18.01.11
10:11
А передаёш разные значения? зачем?
2 AaNnDdRrEeYy
 
18.01.11
10:12
Потомучто код сложный функция обрабатывает разные объекты.
3 famnam
 
18.01.11
10:13
из си "Функция не работает с мутабельными значениями. При передаче мутабельного значения функция вызывает исключение."
4 Axel2009
 
18.01.11
10:13
а если попробовать использовать функцию как для сервера так и для клиента?
5 Ursus maritimus
 
18.01.11
10:14
Легко

Мутабельно = Ложь;
Попытка
ЗначениеЗаполнено(Значение);
Исключение
Мутабельно = Истина;
КонецПопытки;
6 Maxus43
 
18.01.11
10:14
Ну тип проверь... исключи мутабельные
7 AaNnDdRrEeYy
 
18.01.11
10:16
(3) я про это и написал.
(4) функция нужна только на сервере.
(5) спасибо так и сделаю
8 AaNnDdRrEeYy
 
18.01.11
10:18
(6) а кто  нибуть знает полный список мутабельных типов?
9 Ursus maritimus
 
18.01.11
10:19
(8) Не слушай (6) лужу газирует.
10 mikecool
 
18.01.11
10:19
(8) все объекты
11 Maxus43
 
18.01.11
10:20
(8) Мутабельное - при изменении свойства - изменение объекта. Логически вычислить можно) хз, где-то лежит наверно.
А вобще - ты же знаеш типы обрабатываемые функцией твоей... или прям любые могут быть? исключи типы Объект, набор записей и т.д. явно мутабельные. Но в (5) тоже красиво, главно остановку по ошибке в отладке не включать)
12 Maxus43
 
18.01.11
10:21
(9) да ладно уж, можно предусмотреть то
13 Fragster
 
гуру
18.01.11
10:21
у меня функция ЗначениеНеЗаполнено есть, которая вызывает в попытке ЗначениеНеЗаполнено, в случае исключения возвращает ложь
14 MaxS
 
18.01.11
10:21
(5) где-то давно встречал что если в модуле проведения документа пользоваться попыткой-исключением, документ может не провестись и выдаст сообщение, что в данной транзакции уже происходили ошибки.
15 AaNnDdRrEeYy
 
18.01.11
10:24
(13) ЗначениеНеЗаполнено - это самописная, а у меня встроенная в 8.2

этот код что то вроде обмена данными

Если НастройкаСоотношения.СпособЗаполненияРеквизитаПриемника = Перечисления.СпособЗаполненияРеквизитаПриемника.РеквизитИсточника Тогда
       //(РЕКВИЗИТ ИСТОЧНИКА)
       НайденноеЗначение = ПараметрическиеНастройки.ПроверитьВХранилищеПервичныхРеквизитов(НастройкаСоотношения.РеквизитИсточника);
       
       Если НайденноеЗначение <> Неопределено Тогда                
           ЗначениеРеквизитаОбъектаОснования = НайденноеЗначение;
       Иначе
           ЗначениеРеквизитаОбъектаОснования = ПолучитьЗначениеОбъектаОснования(ОбъектОснование,НастройкаСоотношения.РеквизитИсточника,Секция,МассивСоответствияСекцииXDTOиОбъекта1С);
       КонецЕсли;
   ИначеЕсли НастройкаСоотношения.СпособЗаполненияРеквизитаПриемника = Перечисления.СпособЗаполненияРеквизитаПриемника.ФиксированноеЗначение Тогда    
       // (ФИКСИРОВАННОЕ ЗНАЧЕНИЕ)
       ЗначениеРеквизитаОбъектаОснования = НастройкаСоотношения.ФиксированноеЗначение;
   ИначеЕсли НастройкаСоотношения.СпособЗаполненияРеквизитаПриемника = Перечисления.СпособЗаполненияРеквизитаПриемника.ПроизвольныйАлгоритм Тогда    
       // (ПРОИЗВОЛЬНЫЙ АЛГОРИТМ)
       ЗначениеЗаполнения  = Неопределено;
       Выполнить(НастройкаСоотношения.ПроизвольныйАлгоритм);                                            
       ЗначениеРеквизитаОбъектаОснования = ЗначениеЗаполнения;
   КонецЕсли;
   
   
   
   Если ОбъектПриемник[СокрЛП(НастройкаСоотношения.РеквизитПриемника)] <> ЗначениеРеквизитаОбъектаОснования Тогда        
       //ЗначениеРеквизитаОбъектаОснования должно быть заполнено.
   //    Если ЗначениеЗаполнено(ЗначениеРеквизитаОбъектаОснования) Тогда        
           ОбъектПриемник[СокрЛП(НастройкаСоотношения.РеквизитПриемника)] = ЗначениеРеквизитаОбъектаОснования;
           ПараметрическиеНастройки.ПоместитьВХранилищеПервичныхРеквизитов("ОбъектОбновлен",Истина);
   //    КонецЕсли;
   КонецЕсли;
16 Maxus43
 
18.01.11
10:26
(13) в 8.2 же свои заморочки с Типами, некоторые типы не везде доступны, ТЗ например
17 AaNnDdRrEeYy
 
18.01.11
10:27
(14) такое может быть если явно объявлять транцакию

НачатьТранзакцию();
Док.Записать(РежимЗаписиДокумента.Проведение);
ЗафиксироватьТранзакцию();

В таком случае точно будет такая ощибка
18 AaNnDdRrEeYy
 
18.01.11
10:28
(16) это на форме почти ничего не доступно а на сервере все доступно. ну кроме форм и что с ними связано.
19 Ursus maritimus
 
18.01.11
10:29
(14) Продолжаем дуть в лужу.
20 Defender aka LINN
 
18.01.11
10:31
(15) КД юзай :)
Вообще говоря, надо просто сделать так, чтобы в ЗначениеРеквизитаОбъектаОснования ничего такого попасть не могло.
21 AaNnDdRrEeYy
 
18.01.11
10:37
(20) что такое КД?
22 Axel2009
 
18.01.11
10:39
ну так значит и надо все объекты получать на сервере. и тогда мутабельных значений не будет..
23 Defender aka LINN
 
18.01.11
10:40
(21) Конвертация данных
24 Ursus maritimus
 
18.01.11
10:43
(22) Ну что за бред? Составной тип справочник.номенклатура и справочник.контрагент
Мутабелен? - Да
Доступен на сервере? - Да
25 AaNnDdRrEeYy
 
18.01.11
10:45
(22) это 8.2 на клиенте вообще объект получить нельзя.
26 Defender aka LINN
 
18.01.11
10:46
(24) Это скуяли он мутабелен?
27 acsent
 
18.01.11
10:47
(24) Значение не может быть "составного типа". А само описание типа не мутабельно
28 Axel2009
 
18.01.11
10:48
(24) если в функции на клиенте получить ОБЪЕКТ. и эту переменную передать в функцию которая выполняется на сервере - то будет ошибка мутабельности
29 AaNnDdRrEeYy
 
18.01.11
10:50
(27)

Синтаксис:

ЗначениеЗаполнено(<Значение>)
Описание:

Функция проверяет, отличается ли переданное значение от значения по умолчанию того же типа.
Не работает с мутабельными значениями. При передаче мутабельного значения функция вызывает исключение.

в сиснтаксисе про составной ничего нет, может быть составным.
30 AndOne
 
18.01.11
10:51
31 Axel2009
 
18.01.11
10:51
это как пользоваться метками. вроде можно, но лучше не надо. иначе другие будут разгребать и искать ошибки очень долго..
32 Maxus43
 
18.01.11
10:52
(29) Он про значение само, оно не составного типа будет в любом случае
33 Defender aka LINN
 
18.01.11
10:52
(29) ЗНАЧЕНИЕ не может быть составного типа.
34 tenikov
 
18.01.11
10:59
(25) в 8.2 на клиенте объект - основной реквизит формы.
35 acsent
 
18.01.11
11:04
(34) Это не Объект, а СтруктураДанныхФормы
36 tenikov
 
18.01.11
11:07
(35) ну вот я конфигуратор открыл сейчас: Объект - основной реквизит формы, тип "ДокументОбъект.Продажа".
37 Defender aka LINN
 
18.01.11
11:08
(36) Теперь открой отладчик и в нем посмотри
38 tenikov
 
18.01.11
11:11
(37) а, ну да.
39 AaNnDdRrEeYy
 
18.01.11
11:17
(33) МОЖЕТ. сейчас проверил работает.
40 Defender aka LINN
 
18.01.11
11:21
(39) Фотографию двуликого януса в студию.
41 Maxus43
 
18.01.11
11:21
(39) Это как? О_о) скриншот в студию
42 Defender aka LINN
 
18.01.11
11:28
(39) Требую скриншот! :)
43 AaNnDdRrEeYy
 
18.01.11
11:45
&НаКлиенте
Процедура Команда1(Команда)
   
   Сообщить("Результат на клиенте "+ЗначениеЗаполнено(Реквизит1));
   
   Сообщить("Результат На Сервере "+Сервер_());
   
КонецПроцедуры

Функция Сервер_()
   Возврат ЗначениеЗаполнено(Реквизит1);
КонецФункции    

Это код в форме обработки, реквизит1 составного типа Дата. число и строка.

как выложить обработку?
44 Maxus43
 
18.01.11
11:48
тип составной, значение то не составное же? скриншот отладчика с показаным значением реквизита требо
45 Defender aka LINN
 
18.01.11
11:49
(41) Кто у тебя про реквизит спрашивал? Значение реквизита составное покажи. Которое одновременно и датой, и строкой будет.
46 Maxus43
 
18.01.11
11:52
(45) Щас момент времени покажет)
47 AaNnDdRrEeYy
 
18.01.11
11:52
(45) в своем вообще уме? такого быть не может.
48 AaNnDdRrEeYy
 
18.01.11
11:56
Ну кто мне покажет когда Реквизит или просто переменная и стока и дата одновременно?
49 Maxus43
 
18.01.11
11:56
(48) это мы от тебя хотели узнать
50 AaNnDdRrEeYy
 
18.01.11
11:58
(49) нифигасе в (45) не я же писал.
51 Maxus43
 
18.01.11
11:59
(50) ты (39) писал)
52 Defender aka LINN
 
18.01.11
12:01
(47) В (39) написал. Еще и большими буквами :)
53 acsent
 
18.01.11
12:01
ЗначениеЗаполнено проверяет не реквизит, а ЗНАЧЕНИЕ реквизита. Короче двойка тебе, иди учи матчасть
54 AaNnDdRrEeYy
 
18.01.11
12:03
в (39) ответ на (33) в котором дословно

ЗНАЧЕНИЕ не может быть составного типа.

внимание на "составного ТИПА".
в (43) реквизит составного ТИПА.
55 AaNnDdRrEeYy
 
18.01.11
12:09
(53) пойду мат учить, как научусь популярно всем объясню.
56 Defender aka LINN
 
18.01.11
12:11
(54) Внимание на "ЗНАЧЕНИЕ". Я его, по-твоему, совершенно случайно большими буквами набрал? :)
57 Maxus43
 
18.01.11
12:13
МоментВремени же составное значение кстати) тип один только
58 Defender aka LINN
 
18.01.11
12:14
(57) С фига ли? МоментВремени - это вполне себе отдельный тип.
59 AaNnDdRrEeYy
 
18.01.11
12:15
(56) составного значения не бывает.
60 Defender aka LINN
 
18.01.11
12:16
(59) Именно это я в (33) и написал, ващета :)
61 AaNnDdRrEeYy
 
18.01.11
12:16
в 1С появился новый термин "Составное Значение"... мда
62 Maxus43
 
18.01.11
12:17
(58) Тип то отдельный, но значение выглядит составным, дата + ссылка, разных типов то конечно не может быть значение
63 AaNnDdRrEeYy
 
18.01.11
12:19
(62) ну если так рассуждать то надо над Соотвествием тип то один а значение всегда двойное.
Независимо от того, куда вы едете — это в гору и против ветра!