Имя: Пароль:
1C
1С v8
1с как добавить элемент в существующий массив
0 inkvizitr
 
16.07.15
15:30
1с как добавить элемент в существующий массив
1 echo77
 
16.07.15
15:30
Массив.Добавить(ТвойЭлемент) ?
2 inkvizitr
 
16.07.15
15:32
(1) неет, как данные в общий массив добавлять из разных процедур
3 rs_trade
 
16.07.15
15:32
(1) Ему картинку надо. Читать похоже не умеет.
4 Nuobu
 
16.07.15
15:33
(2) Передавать этот массив как папаметр в процедуре.
5 Дмитрий
 
16.07.15
15:33
(2) передавать массив в эти разные процедуры, например
6 fisher
 
16.07.15
15:34
(2) Что такое "общий массив"? Где он определен, какая у него область видимости?
7 inkvizitr
 
16.07.15
15:40
(4) нет! есть массив и мне нужно туда добавлять данные с разных источников данных, и нужно чтобы все эти данные добавлялись, у меня получается что массив каждый раз перетирается(создается новый)
8 sash-ml
 
16.07.15
15:43
(7) С одного пользователя или нескольких?
9 Nuobu
 
16.07.15
15:45
(7) Может, потому что в этих процедурах ты пишешь
Массив = новый Массив?
10 inkvizitr
 
16.07.15
15:47
(9) даа.. иначе в других процедурах и функциях он его не видет и просит объявить
11 Славен
 
16.07.15
15:47
(7) имхо, забанить бы такого, читаем 0 и читаем (7), телепатов ищешь, или просто не в ладах с общением?
12 Славен
 
16.07.15
15:47
(10) для начала УФ? Модуль объекта, формы ...?
13 Nuobu
 
16.07.15
15:49
(10) Так ты его параметром передай.
Массив = новый Массив;
Процедура1(Объект, Ссылка, Массив);
Процедура2(Объект, Ссылка, Массив);
14 Lama12
 
16.07.15
15:50
(11) Чего банить? Он же честно написал что он инквизитор. Вот святая инквизиция и карает мозги грешников.
(10)Почитай про область видимости. Посмотри что такое передача параметра по ссылке и по значению.
15 Jokero
 
16.07.15
15:50
(7) Да ты не умничай, ты пальцем покажи!(с)
Код в студию - где объявляешь, где создаешь, где заполняешь?
16 Lama12
 
16.07.15
15:52
(13) Ты чего? Тссс...
Массив надо сначала обернуть в список значений, а лучше в структуру или соответствие. Потом сериализовать через ЗначениеВСтроку. После этого строку записать в файл. А вот в других местах из файла считывать. Тогда массив будет доступен везде.
Кстати. Если будешь передавать с сервера на клиент в УФ, то посмотри еще ВременноеХранилище.
17 Mirnin
 
16.07.15
15:57
А если создать периодический регистр сведений и писать значения массива туда, то потом можно будет даже воссоздавать массив на любую дату. Кстати, в таком случае можно будет даже отчет по изменениям массива сделать, что, согласитесь, немаловажно.
18 Nuobu
 
16.07.15
15:58
(17) Какой важный массив!
19 EverGreenMouse
 
16.07.15
15:59
(17) тогда лучше в Справочник, а еще лучше в ТЧ документа какого-нибудь :)
20 inkvizitr
 
16.07.15
16:06
А можно ли как то сделать проверку существует ли существующий массив и тогда заново его не создавать а добавлять в существующий массив элименты
21 zippygrill
 
16.07.15
16:06
(17) лучше бы ничего не писал
22 inkvizitr
 
16.07.15
16:07
(16) (13) А можно ли как то сделать проверку существует ли существующий массив и тогда заново его не создавать а добавлять в существующий массив элименты
23 Ненавижу 1С
 
гуру
16.07.15
16:08
(20)
"существует ли существующий массив" - а звучит!

Если ТипЗнч(ТвойМассив)<>Тип("Массив") Тогда
  ТвойМассив = Новый Массив;
24 Nuobu
 
16.07.15
16:08
(22) Если Массив = Неопределено Тогда
Массив = Новый Массив();
КонецЕсли
25 Nuobu
 
16.07.15
16:10
(22) Лучше код покажи, как ты вызиваешь процедуры по заполнению существующего или не существующего массива.
26 fisher
 
16.07.15
16:10
- Как добавить несуществующий элемент в несуществующий массив? (с) 1С-ники постигают дзен
27 fisher
 
16.07.15
16:13
"Семь реинкарнаций одного массива" (с) Притча о молодом 1С-нике
28 inkvizitr
 
16.07.15
16:16
(23) (23)   &НаКлиенте
Функция Тест2(Элемент) Экспорт
      Если Массив = Неопределено Тогда
Массив = Новый Массив();
Массив.Добавить(Элемент);
Иначе
Массив.Добавить(Элемент);

КонецЕсли ;
КонецФункции

Ошибка
Если <<?>>Массив = Неопределено Тогда  (Проверка: Тонкий клиент)
29 inkvizitr
 
16.07.15
16:17
(28) Переменная не определена (Массив)
      Если <<?>>Массив = Неопределено Тогда  (Проверка: Тонкий клиент
30 inkvizitr
 
16.07.15
16:19
ап
31 fisher
 
16.07.15
16:19
(28) Если ты хочешь, чтобы твой массив был доступен в функциях клиентского модуля, он должен быть объявлен как переменная модуля.
32 Nuobu
 
16.07.15
16:20
(28) Функция Тест2(Элемент, Массив) Экспорт
      Если Массив = Неопределено Тогда
Массив = Новый Массив();
Массив.Добавить(Элемент);
Иначе
Массив.Добавить(Элемент);

КонецЕсли ;
КонецФункции
33 inkvizitr
 
16.07.15
16:24
(32) &НаКлиенте
Процедура Добавить(Команда)
    
    Элемент = Объект.Массив;
     ОбщийМодуль1.тест2(Элемент, Массив);
КонецПроцедуры


  &НаКлиенте
Функция Тест2(Элемент, Массив) Экспорт
      Если Массив = Неопределено Тогда
Массив = Новый Массив();
Массив.Добавить(Элемент);
Иначе
Массив.Добавить(Элемент);
КонецЕсли ;
КонецФункции

Ошибка Переменная не определена (Массив)
     ОбщийМодуль1.тест2(Элемент, <<?>>Массив); (Проверка: Тонкий клиент)
34 EverGreenMouse
 
16.07.15
16:25
у объекта создали реквизит "Массив"?
35 inkvizitr
 
16.07.15
16:26
(34) Да
36 18_plus
 
16.07.15
16:26
у твоей 1с грохнулась telepatAPI.dll
37 Nuobu
 
16.07.15
16:27
(33) Так его создать нужно!

&НаКлиенте
Процедура Добавить(Команда)
    
    Элемент = Объект.ГавГав;
Массив= Новый Массив();
     ОбщийМодуль1.тест2(Элемент, Массив);
     ОбщийМодуль1.тест2(Элемент, Массив);
     ОбщийМодуль1.тест2(Элемент, Массив);
КонецПроцедуры


  &НаКлиенте
Функция Тест2(Элемент, Массив) Экспорт
      Если Массив = Неопределено Тогда
Массив = Новый Массив();
Массив.Добавить(Элемент);
Иначе
Массив.Добавить(Элемент);
КонецЕсли ;
КонецФункции
38 Nuobu
 
16.07.15
16:27
(33)  Элемент = Объект.Массив;
     ОбщийМодуль1.тест2(Элемент, Массив);

Это не может не радовать!
39 Nuobu
 
16.07.15
16:28
(33) И где ты в Объекте взял массив?
40 inkvizitr
 
16.07.15
16:32
(39) а как его взять?
41 inkvizitr
 
16.07.15
16:32
(37)у тебя в "Процедура Добавить" массив существующий перезатирается
42 Nuobu
 
16.07.15
16:36
(40) Справа вверху на форме создай новый реквизит.
Назови его РеквизитМассив.
С типом - произвольный.
При открытии формы напиши:
РеквизитМассив = Новый Массив;
А потом в процедурах, которые на клиенте, пиши:
ЭтаФорма.РеквизитМассив.Добавить(Элемент);
43 Nuobu
 
16.07.15
16:36
(42) РеквизитМассив = Новый Массив;
ЭтаФорма.РеквизитМассив = Новый Массив;
44 фобка
 
16.07.15
16:39
Толсто
45 inkvizitr
 
16.07.15
16:46
(43) Процедура ПриОткрытии(МассивЗначений)
РеквизитМассив = Новый Массив;
КонецПроцедуры

&НаКлиенте
Процедура Добавить(Команда)
    
    Элемент = Объект.Массив;
    Массив = ЭтаФорма.РеквизитМассив.Добавить(Элемент);
    ОбщийМодуль1.тест2(Элемент, Массив);
    
КонецПроцедуры

  &НаКлиенте
Функция Тест2(Элемент, Массив) Экспорт
      Если Массив = Неопределено Тогда
Массив = Новый Массив();
Массив.Добавить(Элемент);
Иначе
Массив.Добавить(Элемент);
КонецЕсли ;
КонецФункции    

Ошибка
{Обработка.РаботаСМассивом.Форма.Форма.Форма(4)}: Ошибка при установке значения атрибута контекста (РеквизитМассив)
РеквизитМассив = Новый Массив;
по причине:
Тип "Массив" не может использоваться в данных формы
46 Nuobu
 
16.07.15
16:49
(45) Ладно, я сдаюсь.
47 inkvizitr
 
16.07.15
16:50
(42) создал реквизит формы с типом произвольный, при открытии формы написал "РеквизитМассив = Новый Массив;" ,  ошибка "Тип "Массив" не может использоваться в данных формы"
48 Славен
 
16.07.15
16:52
(46) ))) тут как раз тот случай, когда надо коленку прострелить
49 inkvizitr
 
16.07.15
16:58
Решил
Это в модуле приложения
перем  МассивЗначений экспорт;

дальше в модуле формы
&НаКлиенте
Процедура Добавитьмассив(Команда)
    
    МассивЗначений.Добавить("1");
    КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    МассивЗначений=Новый Массив(10);
КонецПроцедуры
50 inkvizitr
 
16.07.15
16:59
(49) и тогда он начал дописывать в существующий массив а не перезатирать его
51 Nuobu
 
16.07.15
17:01
(50) Молодец!
52 Ненавижу 1С
 
гуру
16.07.15
17:01
(50) особенно это будет весело, когда откроют несколько одинаковых форм
53 inkvizitr
 
16.07.15
17:04
(52) но тогда я думаю можно тогда проверку воткнуть на определенность массива
54 Ненавижу 1С
 
гуру
16.07.15
17:05
(53) все сыпаться будет в один массив
55 Nuobu
 
16.07.15
17:06
(54) Так ему и нужен общий.
Самый общий из общих массивов.
56 Ненавижу 1С
 
гуру
16.07.15
17:08
(55) зачем?
57 1sanekmaloi1
 
16.07.15
17:09
(56)Чтоб не затирался
58 Ненавижу 1С
 
гуру
16.07.15
17:11
(57) не-не, вообще зачем?
59 fisher
 
16.07.15
17:22
Во-первых, это красиво.
Может, человек хочет изобрести систему обмена сообщениями между формами имени себя любимого. Или еще что-то головокружительное.
60 ВРедная
 
16.07.15
17:32
Интересно, будет следующий вопрос про то, почему этот массив не сохраняется при перезапуске?
61 Smallrat
 
16.07.15
18:30
Сага о X, Y и Z...

...или о том, как же важно правильно формулировать, чего мы хотим.

Однажды Новичок захотел сделать X. Но поскольку Новичок был новичком, X с ходу у него сделать
не получилось...

Ну, бывает, ничего в этом плохого нет: все мы были когда-то новичками. Чтобы решить проблему,
Новичок решил воспользоваться форумом по программированию. Вы думаете он создал там тему вида:
"Я хочу получить X. Пытаюсь сделать 111, получаю 222. Как сделать X?"? Нет! Новичок решил
(ошибочно, т.к. Новичок пока не обладает достаточным знанием), что если он сумеет сделать Y,
то с помощью Y он получит и X. Поэтому он написал: "Делаю 111, получаю 222. Как получить Y?"
(ещё бывает, что Новичок задаёт только "Как сделать Y?").

Чаще всего, Y бывает невозможным, некорректным, сложным или вообще страшно извращённым и
нелогичным действием. У всех Понимающих людей вопрос "как сделать Y?" вызывает недоумение:
зачем это нужно? Это же бессмысленно. Всеми силами (иногда с привлечением утюга!) пытаются
выпытать у Новичка Понимающие, что же ему на самом деле нужно. Но не сдаётся Новичок: он же
хочет узнать, как сделать Y. Каких только Слонов не рождали глубокие умы, пытаясь постичь
неисповедимые пути Новичка! Иногда даже бывает так, что Понимающие знают ответ на вопрос
"как сделать Y?", но специально его не говорят, потому что эти действия лишены смысла.
Они ещё надеются наставить Новичка на путь истинный.

Но вот, используя шаманский бубен, миелофон, шестое чувство, телепатор и прочие БС
(Божественные Силы) кто-то из Понимающих вопрошает:
- А, может быть, вы хотите сделать X?
- Да, я хочу получить X. Как мне сделать Y?
- Аааа! Ну тогда вам не нужно Y! Вам нужно Z! Если вы сделете Z так и сяк, то потом с помощью Z
вот так и вот этак вы получите X.
- Ой, правда. Спасибо!
Что ж, вот пример хорошей и доброй концовки, когда все остаются довольными.

Но бывает и так, что кто-то из начинающих Понимающих (вчерашний Новичок), думая, что этим он
помогает Новичку (или же сам Понимающий, но уже от безысходности, в надежде, что Новичок разумно
распорядится даруемой в его руки Божественной Силой), даёт ответ на вопрос "как же сделать Y".
Ура! - кричит Новичок и убегает доделывать Страшного Монстра, при встрече с которым потом даже
самым смелым Понимающим целый месяц снятся кошмары. Тёмные Силы празднуют победу в этот день.
Душа Новичка обречена гореть в геене огненной за грехи свои.

А ещё бывает так, что Новичок думает, что ему отвечает другой новичок. И кажется ему, что ответ
с Z неверен. И тогда он говорит: "мне не нужен Z! Мне нужно сделать Y!". И если переубедить
Новичка в том, что ему нужен Z, не удаётся, Новичок уходит на другой форум, где задаёт вопрос:
"Мне нужен X! Как мне сделать Y? Использовать Z не предлагать!!!!!!"
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн