|
Как создать глобальную переменную типа Массив? | ☑ | ||
---|---|---|---|---|
0
anikev
27.11.22
✎
07:45
|
Здравствуйте! Столкнулся с проблемой создания глобального массива в обработке. У меня есть вкладки с динамическим созданием реквизитов. Если я второй раз перехожу на эту же вкладку, у меня ругается 1с на то, что реквизит уже создан и не нужно еще раз создавать реквизит. Поэтому у меня возникла сумасшедшая идея создать глобальную переменную с типом Массив, куда я при программном создании реквизита, буду еще сохранять в массив. А при переходе на другую вкладку, очищать этот массив. Так вот...
1. Создал я переменную: &НаСервере Перем МассивРеквизитовДляУдаления; 2. Пытаюсь её проинициализировать: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) МассивРеквизитовдляУдаления = Новый Массив ; КонецПроцедуры Но до инициализации у нее стоит тип НЕОПРЕДЕЛЕНО, возможно это и правильно, но меня смутило 3. После перехода на другую страницу, я проверяю нет ли записей в массиве &НаСервере Процедура УдалитьРеквизитыПрограммно() Если НЕ МассивРеквизитовДляУдаления.Количество() = 0 Тогда ИзменитьРеквизиты( , МассивРеквизитовдляУдаления); КонецЕсли; КонецПроцедуры Здесь тоже МассивРеквизитовДляУдаления с типом Неопределено - это уже точно плохо, потому что не могу вызвать Количество() Скажите, пожалуйста, как правильно проинициализировать переменную? Спасибо! |
|||
1
Beduin
27.11.22
✎
08:12
|
У тебя все вкладки на одной форме?
|
|||
2
anikev
27.11.22
✎
08:14
|
(1) да
|
|||
3
Beduin
27.11.22
✎
08:26
|
Поставь точку останова в момент создания переменной и проверь при переходе на другую вкладку не инициализируется ли заново.
|
|||
4
anikev
27.11.22
✎
08:30
|
В момент создания переменной точка останова не отрабатывает.
Читал, что можно инициализировать переменную в конце модуля - я так и сделал, но тогда при переходе на другую вкладку она переинициализировалась и возвращала мне пустой массив, когда там уже были данные. |
|||
5
SleepyHead
гуру
27.11.22
✎
08:34
|
(4) Переменная инициализируется при каждом серверном вызове.
Создай реквизит формы и храни в нем. |
|||
6
anikev
27.11.22
✎
08:35
|
(5) Тоже об этом думал, но там нет типа "Массив"
|
|||
7
SleepyHead
гуру
27.11.22
✎
08:39
|
(6) Есть тип "Произвольный", можешь проинициализировать массивом при создании. Но хранить в нем можно только те значения, которые сериализуются.
Помнится, я как-то список значений использовал, потому что мне надо было хранить значения и представления значений. Вполне себе работает. |
|||
8
Chai Nic
27.11.22
✎
08:43
|
(7) "Но хранить в нем можно только те значения, которые сериализуются."
Ага, а в том что сериализуется, можно хранить ссылку хоть на черта лысого) Правда, иногда этот черт может дематериализоваться - это надо учитывать) |
|||
9
anikev
27.11.22
✎
08:54
|
(8) Я понимаю, что динамический тип - это плохо. Типизация - это хорошо. Я пришел с ЯП Dart, но иногда 1С не понимаю)
|
|||
10
anikev
27.11.22
✎
08:55
|
(7) при инициализации переменной с типом "Произвольный" мне платформа говорит:
МассивРеквизитовдляУдаления = Новый Массив; по причине: Тип "Массив" не может использоваться в данных формы |
|||
11
Мимохожий Однако
27.11.22
✎
09:03
|
(0) Добавить проверку на существование элемента формы перед созданием пробовал?
|
|||
12
anikev
27.11.22
✎
09:09
|
(11) (В контексте переменной) Если я создаю ее на сервере, мне зачем что-то проверять на форме?
|
|||
13
Гений 1С
гуру
27.11.22
✎
09:15
|
(0) используй попытка-исключение. ггг
|
|||
14
Гений 1С
гуру
27.11.22
✎
09:15
|
на клиенте в переменной ты можешь хранить массив.
можешь также хранить списки в таблице формы. |
|||
15
Гений 1С
гуру
27.11.22
✎
09:16
|
ггг. |
|||
16
anikev
27.11.22
✎
09:20
|
(13) При бездумном использовании это приводит не к ггг, а "Что же все-таки сломалось". Я так не хочу
|
|||
17
anikev
27.11.22
✎
09:21
|
(15) Мне на клиенте это не нужно, на сервере вся логика работает
|
|||
18
Garykom
гуру
27.11.22
✎
09:23
|
хыхы
|
|||
19
Garykom
гуру
27.11.22
✎
09:24
|
1. глобальная переменная для этого не нужна
2. они и не сохраняются на сервере между вызовами |
|||
20
SleepyHead
гуру
27.11.22
✎
09:28
|
(10) Хм.. ну что ж, список значений подойдет? Его точно можно.
|
|||
21
anikev
27.11.22
✎
09:29
|
(19) Почитай 5 пост, там тоже самое написано...
|
|||
22
SleepyHead
гуру
27.11.22
✎
09:29
|
А уж из списка значений можно выгрузить в массив.
|
|||
23
anikev
27.11.22
✎
09:30
|
(20) К сожалению, нет. Мне нужно просто массив реквизитов, чтобы их потом удалить.
|
|||
24
SleepyHead
гуру
27.11.22
✎
09:35
|
(23) СписокЗначений.ВыгрузитьЗначения() = массив
|
|||
25
Garykom
гуру
27.11.22
✎
09:36
|
(21) Дык это тебе почитать надо а не мне
Ты же не понимая как платформа 1С работает с УФ пытаешься хрень сделать |
|||
26
Garykom
гуру
27.11.22
✎
09:37
|
(23) Дык удаляй кто тебе мешает
Даже в отдельный массив или список не обязательно свои созданные помещать, можно именем обойтись по шаблону |
|||
27
anikev
27.11.22
✎
09:41
|
(25) Дык написали же уже, зачем повторяться...
|
|||
28
anikev
27.11.22
✎
09:42
|
(26) Дык зачем изобретать велосипед, может есть рациональные способы!
|
|||
29
Garykom
гуру
27.11.22
✎
09:53
|
(27) ты думаешь я собираюсь читать всю ветку?
|
|||
30
Garykom
гуру
27.11.22
✎
09:54
|
(28) велосипед это ты изобретаешь с массивом
когда просто своим реквизитам и элементам даешь имена типа "МойРеквизит_ИмяРеквизиат1" и т.д. а затем просто по общему списку выбираешь ""МойРеквизит_*" и удаляешь |
|||
31
AneJIbcuH
27.11.22
✎
10:03
|
(0) ФиксированныйМассив не пробовали?
|
|||
32
anikev
27.11.22
✎
10:12
|
(31) его нет в реквизитах формы
|
|||
33
anikev
27.11.22
✎
10:12
|
(30) Это идея, спасибо
|
|||
34
hockeyist
27.11.22
✎
10:24
|
(23) Тяжело тебе будет в 1С. Здесь постоянно так.
"Почему нельзя массив?" Да по кочану! Плюешься и идешь в обход. Список значений, таблица значений. Будешь каждый раз искать "рациональное" - сгоришь. Иногда оно действительно существует. Но очень иногда |
|||
35
Guk
27.11.22
✎
10:28
|
>> Если я второй раз перехожу на эту же вкладку, у меня ругается 1с на то, что реквизит уже создан и не нужно еще раз создавать реквизит. Поэтому у меня возникла сумасшедшая идея создать глобальную переменную с типом Массив, куда я при программном создании реквизита, буду еще сохранять в массив
ты там точно программистом числишься? мне бы такая фуйня даже в голову не пришла... |
|||
36
anikev
27.11.22
✎
10:55
|
(35) Не числюсь, а работаю. Ты не поверишь, но в ООП (Объектно-ориентированном программировании) как раз есть реализация глобального стейта, куда можно что-то положить и позже забрать.
|
|||
37
anikev
27.11.22
✎
10:58
|
(34) Понял, спасибо)
|
|||
38
Guk
27.11.22
✎
11:03
|
(36) в твоём случае массив не нужен...
|
|||
39
Garykom
гуру
27.11.22
✎
11:10
|
(36) Может получше ООП изучишь?
С его тремя китами в т.ч. Инкапсуляция |
|||
40
anikev
27.11.22
✎
11:21
|
(39) Хорошо, я повторю. Это все переходит в оффтоп.
|
|||
41
Гений 1С
гуру
27.11.22
✎
11:35
|
(16) а зря. Могу, умею, практикую в попытка-исключение.
но кстати да, я проверял наличие реквизитов по наличию элементов формы, которые я создавал под эти реквизиты, если совсем параноик можешь проверить через ЗаполнитьЗначенияСвойств структуры. |
|||
42
Гений 1С
гуру
27.11.22
✎
11:35
|
(34) да, 1С - это получение максимумального результата в максимально ограниченной среде.
|
|||
43
RomanYS
27.11.22
✎
11:43
|
(40) Да тема вроде раскрыта:
1. серверный контекст НЕ существует между серверными вызовами, поэтому "глобальная" переменная должна быть реквизитом формы. 2. скорее всего твою задачу можно решить без этого или постановка задачи вообще кривая. Но тут нужно знать собственно что тебе надо |
|||
44
anikev
27.11.22
✎
11:59
|
Хорошо, попробую объяснить
Есть реализация: у меня на форме есть группы вкладок с реквизитами, они динамически создаются. Проблема: Я хочу контролировать в массиве, что я удаляю. |
|||
45
anikev
27.11.22
✎
12:10
|
Господа, пусть эта тема уйдет в архив. Прошу прошения у тех, кого я побеспокоил в этот выходной день. Благодарю всех тех, кто откликнулся! Желаю всем счастья! Спасибо за помощь, завтра буду разбираться.
|
|||
46
RomanYS
27.11.22
✎
12:23
|
(44) На форме у тебя элементы (а не реквизиты). Реквизиты тебе удалять не нужно вообще (или объясни зачем это может быть нужно), просто меняй видимость элементов или их групп.
|
|||
47
Сергиус
27.11.22
✎
12:53
|
(0)Если всё в рамках одной формы, создай реквизит формы МассивРеквизитовДляУдаления с типом Произвольный, и пихай туда.
|
|||
48
Гений 1С
гуру
27.11.22
✎
21:47
|
Как тут не поверить в ноосферу, если сегодня мне пришлось делать задачу товарища и вот аналогичная ситуация:
|
|||
49
RomanYS
27.11.22
✎
22:20
|
(48) Строка.дор_Валюта = Строка.Документ.ВалютаДокумента;
Это чтобы не было слишком быстро? |
|||
50
RomanYS
27.11.22
✎
22:21
|
(48) зачем вообще реквизит? Они будут валюту редактировать?
|
|||
51
Beduin
27.11.22
✎
22:23
|
(48) А где-то есть просто объект типа "Класс" со своими переменными и методами без извращений вот этих.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |