|
v7: Баг 7.7 не сохраняется реквизит? | ☑ | ||
---|---|---|---|---|
0
AlexSTAL
04.08.15
✎
07:54
|
Справочник, редактирование в списке, есть реквизит "ДатаРедактирования", которого нет на форме.
Если в процедуре ПриЗаписи формы списка присваивать значение ТекущаяДата, то всё ок, если вынести в глобальную процедуру Процедура ПриЗаписи(СписокПериодРекв) Если глПрисвоитьОбщиеРеквизитыСправочника("ЗаписьЭлемента", Контекст) = 0 Тогда СтатусВозврата(0); Возврат; КонецЕсли; КонецПроцедуры Функция глПрисвоитьОбщиеРеквизитыСправочника(Вид, Конт) Экспорт Если Метаданные.Справочник(Конт.Вид()).Реквизит("ДатаРедактирования").Выбран() <> 0 Тогда Конт.ДатаРедактирования = ТекущаяДата(); Конт.УстановитьАтрибут("ДатаРедактирования", ТекущаяДата()); // по всякому КонецЕсли; Возврат 1; КонецФункции то в отладчике значение меняется, а в результате не сохраняется! Если добавить реквизит на форму списка - то значение начинает сохранятся! Что это???? |
|||
1
AlexSTAL
04.08.15
✎
08:05
|
Вот выгрузка конфы
https://yadi.sk/d/JvFWzsmFiFigg там есть отчёт, который выводит этот реквизит для проверки |
|||
2
AlexSTAL
04.08.15
✎
08:05
|
проверьте пожалуйста у себя, коллеги
|
|||
3
1Сергей
04.08.15
✎
08:16
|
Для формы списка "Контекст" - это не контекст элемента справочника, ИМХО
|
|||
4
AlexSTAL
04.08.15
✎
08:28
|
(3) Хм... но реквизит то устанавливается!
в отладчике он в самой форме списка установлен Процедура ПриЗаписи(СписокПериодРекв) Если глПрисвоитьОбщиеРеквизитыСправочника("ЗаписьЭлемента", Контекст) = 0 Тогда СтатусВозврата(0); Возврат; КонецЕсли; Сообщить(ДатаРедактирования); КонецПроцедуры возвращает правильное значение |
|||
5
AlexSTAL
04.08.15
✎
08:40
|
То же самое, если поставить "Редактировать в диалоге" - работает без проблем
|
|||
6
PuhUfa
04.08.15
✎
08:40
|
(0) Помести его на форму раз 1С так хочет и поставь галочки невидимый, недоступный и т.п.
|
|||
7
AlexSTAL
04.08.15
✎
08:41
|
(6) Да, так и сделал, но это же не верно, и про это нужно помнить! При чём, как я написал, для Редактировать в диалоге всё корректно работает
|
|||
8
PuhUfa
04.08.15
✎
08:47
|
(7) Есть подозрение, что 1С пишет именно строку, точнее данные которые в ней есть. Нет реквизита в строке... на нет и суда нет...
|
|||
9
palpetrovich
04.08.15
✎
09:07
|
(0 ) может дело в том, что это именно Контекст Формы. Нет реквизита на форме - нет его и в контексте
|
|||
10
HawkEye
04.08.15
✎
09:09
|
(0)
поместил на форму вызов функции: Функция лкНаформе() Сообщить("" + Форма.ТекущаяКолонка() + " " + ТекущийЭлемент().ДатаРедактирования); Возврат ""; КонецФункции сообщает в окне: Код 04.08.15 Код . . Код . . Наименование . . Наименование 04.08.15 Наименование 04.08.15 т.е. реквизит записывается... |
|||
11
HawkEye
04.08.15
✎
09:11
|
(0) ну и конечно
Конт.ДатаРедактирования = ТекущаяДата(); Конт.УстановитьАтрибут("ДатаРедактирования", ТекущаяДата()); надо что-то одно оставить... |
|||
12
AlexSTAL
04.08.15
✎
09:33
|
(10) скиньте конфу мне, у меня не выходит
|
|||
13
AlexSTAL
04.08.15
✎
09:33
|
(11) это я пробовал и так и так
|
|||
14
AlexSTAL
04.08.15
✎
09:40
|
(9) а как же всё тоже самое с Диалоговыми формами? Там нет этого реквизита, но всё работает
|
|||
15
HawkEye
04.08.15
✎
12:01
|
(12) так твоя конфа, я поменял только:
1. закоментировал в глобальнике УстановитьАтрибут() 2. кинул на форму функцию, текст функции в (10).. все. |
|||
16
HawkEye
04.08.15
✎
12:04
|
открыл форму
Код 04.08.15 нажал INS Код 04.08.15 Код . . Нажал Enter в коде Код . . Нажал Enter в наименовании Наименование . . Наименование 04.08.15 Наименование 04.08.15 |
|||
17
AlexSTAL
04.08.15
✎
12:38
|
(16) Это ты добавляешь строку, а попробуй существующую отредактировать
|
|||
18
AlexSTAL
04.08.15
✎
12:39
|
там, где ДатаРедактирования пустая
|
|||
19
Alexor
04.08.15
✎
12:49
|
На форме списка надо
Контекст заменить на ТекущийЭлемент() Т.к. Контекст относиться к Форме, а не выбранному элементу. |
|||
20
Alexor
04.08.15
✎
12:49
|
+19 т.е.
Процедура ПриЗаписи(СписокПериодРекв) Если глПрисвоитьОбщиеРеквизитыСправочника("ЗаписьЭлемента", ТекущийЭлемент()) = 0 Тогда СтатусВозврата(0); Возврат; КонецЕсли; КонецПроцедуры |
|||
21
AlexSTAL
04.08.15
✎
12:57
|
(19) На всякий случай я и так пробовал
Не взлетает! А вообще ТекущийЭлемент() - это доступ к значению до сохранения элемента справочника. Т.е. ДатаРедактирования и ТекущийЭлемент().ДатаРедактирования - реквизит текущий и до записи. |
|||
22
AlexSTAL
04.08.15
✎
12:58
|
(19) +В отладчике в Конт есть реквизит ДатаРедактирования, хотя на форме его нет!
|
|||
23
AlexSTAL
04.08.15
✎
12:59
|
(All) Вы попробуйте пожалуйста сами у себя, конфа 5 байт
В режиме редактирования старой строки, не добавления новой P.S. Ещё один баг выловил на этой же почве |
|||
24
Злопчинский
04.08.15
✎
13:08
|
нет там багов.
есть непонимание. соответственно преждевременно свое непонимание трактовать как баги платформы |
|||
25
GreyK
04.08.15
✎
13:09
|
(0) Познай секретную процедуру ГлВзятьКонтекст(Конт), применяемую во всех типовых.
|
|||
26
Mikeware
04.08.15
✎
13:09
|
(24) "Ошибка не в программе, ошибка в ДНК"©
|
|||
27
Alexor
04.08.15
✎
13:21
|
(25) Не поможет.
|
|||
28
Alexor
04.08.15
✎
13:22
|
(23) Единственный вариант.
Разместить в списке справочника реквизит ДатаРедактирования и сделать ее скрытой. Тогда работает. |
|||
29
Pit0n_08
04.08.15
✎
13:33
|
А что, в глобальных процедурах создавать Объект уже не нужно? Старею, видимо...
|
|||
30
trad
04.08.15
✎
13:44
|
(24) (26)
че накинулись то, баг есть - подтверждаю |
|||
31
AlexSTAL
04.08.15
✎
13:48
|
(24) по подробнее, вот скрин:
https://yadi.sk/i/Pm3ljsZFiG7wJ |
|||
32
AlexSTAL
04.08.15
✎
13:49
|
(28) да, именно так сейчас пришлось делать, так работает
|
|||
33
AlexSTAL
04.08.15
✎
13:49
|
(29) какой объект? Контекст передаётся, не работает только в форме списка, только при отсутствующем реквизите
|
|||
34
AlexSTAL
04.08.15
✎
13:50
|
(30) спасибо, что поддерживаете
|
|||
35
Злопчинский
04.08.15
✎
13:54
|
(32) и без этого можно было обойтись.
|
|||
36
Злопчинский
04.08.15
✎
13:58
|
(32) а попробовать:
1. убрать реквизит из формы списка 2. СпрЧ = СоздатьОбъект("Справочник.Ч"); 3. СпрЧ.НайтиЭлемент(ТекущийЭлемент()); 4. СпрЧ.ДатаРедактирования = КакаяТоДата; 5. СпрЧ.Записать(); |
|||
37
Pit0n_08
04.08.15
✎
13:59
|
(33) Естественно. Передаёте контекст элемента формы списка у которого нет реквизита "ДатаИзменения".
Если хочется изменить в глобальной процедуре, я бы делал через СоздатьОбъект() и НайтиЭлемент() |
|||
38
AlexSTAL
04.08.15
✎
14:00
|
(36) Как можно перезаписать заблокированный (в режиме редактирования) элемент???
|
|||
39
AlexSTAL
04.08.15
✎
14:01
|
||||
40
AlexSTAL
04.08.15
✎
14:03
|
Ещё раз, товарищи. При работе с формой элемента, где НЕТ этого реквизита, всё работает. Так же передаётся контекст ФОРМЫ. Ну что вы, читать не умеете что ли?
|
|||
41
AlexSTAL
04.08.15
✎
14:04
|
С 2000 года работаю по совместительству (невольному) бета-тестером...
|
|||
42
Злопчинский
04.08.15
✎
14:04
|
(40) Еще раз, товарищ. в (0) идет речь о форм есписка. Откуда внезапно вылез форма элемента?
|
|||
43
AlexSTAL
04.08.15
✎
14:04
|
(37) +а при создании элемента нового всё прекрасно работает
это наверное фича такая. Реквизита нет, но он есть. Браво |
|||
44
Злопчинский
04.08.15
✎
14:05
|
(40) В форме элемента контекст формы (упрощенно) совпадает с элементом. в Форме списка - контекст формы - к какому элементу относится? ни к какому.
|
|||
45
AlexSTAL
04.08.15
✎
14:06
|
(42) В результате экспериментов.
В форме списка при создании нового элемента работает, а при редактировании существующего не работает. Не ужели это не убийственный неопровержимый аргумент? |
|||
46
Pit0n_08
04.08.15
✎
14:06
|
Просто в целом по ТС - непонятно для чего тогда целый ЖР с отбором по объекту существует?
|
|||
47
AlexSTAL
04.08.15
✎
14:06
|
(44) см 45
|
|||
48
AlexSTAL
04.08.15
✎
14:07
|
(46) зачем мне отбирать этот объект, если он выбран, заблокирован и находится в режиме редактирования??
|
|||
49
hhhh
04.08.15
✎
14:09
|
(48) но Конт не относиттся к этому объекту. Хоть вы его 10 раз заблокируйте.
Поэтому Конт.ДатаРедактирования тоже не относится к этому объекту. |
|||
50
Ёпрст
04.08.15
✎
14:09
|
||||
51
Ёпрст
04.08.15
✎
14:09
|
И по х, какой там элемент, новый/старый..
|
|||
52
AlexSTAL
04.08.15
✎
14:13
|
(50) И? реквизит на форме, передаётся 1 параметр...
не мой случай, обходные пути всегда находятся.... Мне нужно менять 50 реквизитов, предлагается в процедуре 50 параметров вставлять? |
|||
53
AlexSTAL
04.08.15
✎
14:13
|
(49) при создании нового относится, при редактировании не относится. Смешно
|
|||
54
Злопчинский
04.08.15
✎
14:14
|
(51) Неинтересно... ибо есть колонкас реквизитом
|
|||
55
Злопчинский
04.08.15
✎
14:16
|
(53) ну вот есть у тебя форма списка. ДЛЯ ВИЗУАЛЬНОГО осмотра. Элемент справочника "весит" допустим 10 мб. на списке у тебя 20 строк. и что - системе тянуть в кеш 200 МБ при каждом листании? нафейхоа?
|
|||
56
AlexSTAL
04.08.15
✎
14:17
|
Off: нашёл схожий баг, описать полностью его не могу, потому что не воспроизвёл на демо базе из-за недостатка времени и нахождении простой затычки
Суть в чём, обновляю существующий документ из файла. Все реквизиты устанавливаю через Док.УстановитьАтрибут() Так он не обновляется! Если прописать хоть один реквизит Док.ИмяРеквизита = Док.ИмяРеквизита; то всё начинает работать как часы! |
|||
57
AlexSTAL
04.08.15
✎
14:18
|
(55) Мы говорим про строку, которая редактируется
С помощью отладчика легко выяснить, что все не существующие на форме реквизиты подтягиваются ПриНачалеРедактированияСтроки |
|||
58
Злопчинский
04.08.15
✎
14:18
|
(52) рецепт тебе дали: позиционируйся на текущем объекте. Тогда будут доступны все реквизиты
|
|||
59
Злопчинский
04.08.15
✎
14:20
|
(57) имхается что они доступны только для чтения...
??? |
|||
60
Злопчинский
04.08.15
✎
14:20
|
(56) Ты сильный шаман, однако! ;-)
|
|||
61
AlexSTAL
04.08.15
✎
14:21
|
(58) Какой рецепт??? Вы бы хоть попробовали....
Объект блокируется, это не возможно... Единственный вариант - это реквизит на форме, скрытый |
|||
62
AlexSTAL
04.08.15
✎
14:21
|
(60) Я просто делаю зачастую не стандартные вещи и всегда ищу баги
|
|||
63
Pit0n_08
04.08.15
✎
14:22
|
+(46), (48) речь о журнале регистрации. Если речь в целом о выявлении багов в платформе, то поговорить и сформировать список для общеогуманитарных целей полезно. Использовать такую поделку в рабочей базе я бы не стал ни в коем случае - "ни к чему плодить лишние сущности".
|
|||
64
AlexSTAL
04.08.15
✎
14:22
|
(59) Нифига, значение правильное возвращается
|
|||
65
AlexSTAL
04.08.15
✎
14:24
|
(63) Что не так делаю? Всё по уставу
Намного легче сказать, что ошибка в ДНК, чем признать существование бага |
|||
66
AlexSTAL
04.08.15
✎
14:27
|
ладно, камрады, спасибо за участие
будут затычки стоять |
|||
67
Pit0n_08
04.08.15
✎
14:28
|
(65) в журнале регистрации пишется дата, время и имя пользователя, изменившего элемент справочника - зачем изобретать велосипед?
|
|||
68
AlexSTAL
04.08.15
✎
14:30
|
(67) абстрагируйтесь от названия реквизита....
|
|||
69
Злопчинский
04.08.15
✎
14:34
|
(64) было бы странно если при чтении возвращалось бы неправильное значение...
|
|||
70
Злопчинский
04.08.15
✎
14:35
|
(61) в конце процедуры ПриЗаписи сгенери внешнее событие и после окончания транзакции записи - делай с элементом что хочешь
|
|||
71
Злопчинский
04.08.15
✎
14:36
|
я, например, в списке редактирую только самые простые справочники. все остальное только через форму элемента.
|
|||
72
AlexSTAL
04.08.15
✎
14:55
|
(69) я устал уже писать одно и тоже, вы не правы, проверять не хотите
(70), (71) Всё что вы пишите - это обходные пути, к делу не относятся |
|||
73
Ёпрст
04.08.15
✎
15:01
|
||||
74
Ёпрст
04.08.15
✎
15:02
|
Хоть все реквизиты меняй
|
|||
75
Злопчинский
04.08.15
✎
15:02
|
(72) вы задолбали извините за выражение ;-)
какое при чтении возвращается "правильное" значение? хочеь прочитать значение из базы а не из кэша читай через конт.ТекущийЭлемент().КакойТоРеквизит |
|||
76
Ёпрст
04.08.15
✎
15:03
|
(75) Чебур, это же не наш метод
:) |
|||
77
HawkEye
04.08.15
✎
15:06
|
(17) ты прав однако... я бы переделал на форму элемента
|
|||
78
Злопчинский
04.08.15
✎
15:07
|
кстати на рисунке автора https://yadi.sk/i/Pm3ljsZFiG7wJ
неудивительно что ДатаРедактирования = пусто. так как оператор присвоения еще не выполнился... ;-) |
|||
79
AlexSTAL
04.08.15
✎
15:16
|
(78) млин... ну выложу я ещё 10 скринов, до, после, во время
на вас это не подействует |
|||
80
AlexSTAL
04.08.15
✎
15:17
|
(77) да, или так, или скрытый реквизит
|
|||
81
Ёпрст
04.08.15
✎
15:39
|
(80) Чего, (73) не осилил ?
|
|||
82
trad
04.08.15
✎
15:53
|
(81) ну изврат же, а
|
|||
83
HawkEye
04.08.15
✎
15:55
|
(81) для новых работает, для существующих - то-же самое.. меняет только то, что показано на форме...
|
|||
84
HawkEye
04.08.15
✎
15:56
|
+83 т.е. по сути все то-же самое, что и в (1).. хотя подход и интересный
|
|||
85
Ёпрст
04.08.15
✎
16:00
|
(82) И ? Что это меняет ?
:)) (83) Че курим ? |
|||
86
Ёпрст
04.08.15
✎
16:01
|
+85 что напишешь в глобальнике, то и присвоит, хоть для новый, хоть для старых.
|
|||
87
trad
04.08.15
✎
16:06
|
(85) ничего не меняет - костыль для обхода бага, как и добавление скрытого реквизита в МЧ. При этом последнее - менее ужасный изврат.
|
|||
88
Злопчинский
04.08.15
✎
16:09
|
(82) почему, вполне себе универсально
|
|||
89
Злопчинский
04.08.15
✎
16:10
|
(86) тут интересно почему твой код присваивает (сам не проверял, надеюсь на гуру), а вот как описано в (0) - нет...
|
|||
90
Злопчинский
04.08.15
✎
16:12
|
описанное в (0) - не работает потому что общаеться с элементом через непонятный контекст, а с шаблоном - напрямую к реквизитам - то есть к реквизитам редактируемой строки
??? |
|||
91
Ёпрст
04.08.15
✎
16:12
|
(87) Сто-стоп-стоп.
Нет никакого СКРЫТОГО реквизита в МЧ. |
|||
92
Ёпрст
04.08.15
✎
16:14
|
Если че, в глобальнике доступны ВСЕ реквизиты, более того, ВСЕ переменные модуля формы.
|
|||
93
Злопчинский
04.08.15
✎
16:14
|
(91) ну так он про это и говорит. что шаблон, что добавление скрытого реквизита = костыль
|
|||
94
Ёпрст
04.08.15
✎
16:14
|
И... это баян древнейший
|
|||
95
Ёпрст
04.08.15
✎
16:15
|
(93) Какой скрытый реквизит ?
ЕГО НЕТ!" |
|||
96
Ёпрст
04.08.15
✎
16:16
|
А всё, проитал, что там trad ответил.
Не, Шаблон, вполне себе универсальное средство. |
|||
97
Ёпрст
04.08.15
✎
16:16
|
и. это лучше , чем лепить реквизиты на форму, как в первом случае.
|
|||
98
Злопчинский
04.08.15
✎
16:16
|
(95) я в курске.
1. твой шаблон 2. чье-то предложение добавить скрытый реквизит - типа это костыли. |
|||
99
Злопчинский
04.08.15
✎
16:16
|
(97) почему?
|
|||
100
Злопчинский
04.08.15
✎
16:17
|
можно сказать, что это не баг, а фича.
как и http://www.forum.mista.ru/topic.php?upd&id=749211 |
|||
101
Ёпрст
04.08.15
✎
16:22
|
(99) форма быстрее работает
|
|||
102
Ёпрст
04.08.15
✎
16:23
|
ведь в форме списка нет лишних реквизитов.
А если их все нужно обновлять ? Ну не лепить же все в форму списка ? А в шаблоне - пожалуйста, перечисляй через метаданные и присваивай шо хошь и когда хошь |
|||
103
HawkEye
04.08.15
✎
20:10
|
(85) в отличии от тебя, ничего..
что в (0) что у тебя - выполняется абсолютно идентично, за исключением твоего ЧСВ с наименованием... к чему тут слюной брызгать? |
|||
104
ДенисЧ
04.08.15
✎
20:16
|
Сидели в ветке два олдфага и трясли поседевшими )))
|
|||
105
Злопчинский
04.08.15
✎
22:45
|
(104) не
Олдскулеров здесь больше чем два |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |