Как сделать в одной процедуре массив и передать его значения в другой процедуре ?

1. MARISHA_Viktoria 35 26.03.21 05:10 Сейчас в теме
Доброе утро всем!
Подскажите мне пожалуйста, делаю расширение для формы документа.
При открытии документа хочу его тч выгрузить в массив или тз, незнаю что лучше, но как забрать потом данные из этого массива?
Кто так делал, подскажите пожалуйста, голову сломала.
Может в хранилище выгрузить, или в переменную, но как данные забрать в другой процедуре не пойму.
Прошу помощи.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. dj_tol 103 26.03.21 05:32 Сейчас в теме
(1)ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища
7. nomad_irk 72 26.03.21 06:04 Сейчас в теме
(1) Нет необходимости выгружать ТЧ в массивы или ТЗ для передачи их в процедуры модуля формы

Процедура МояПроцедура()

ТЗ = Объект.ИмяТЧ.Выгрузить();
.......

КонецПроцедуры


Процедура ЕщеОднаМояПроцедура()

ТЗ = Объект.ИмяТЧ.Выгрузить();

КонецПроцедуры
10. MARISHA_Viktoria 35 26.03.21 06:06 Сейчас в теме
(7)при открытии документа тч одна, при закрытии она другая.
11. nomad_irk 72 26.03.21 06:07 Сейчас в теме
(10)Подробнее можно? Что значит при открытии одна ТЧ, а при закрытии - другая?
12. MARISHA_Viktoria 35 26.03.21 06:10 Сейчас в теме
(11)тч может измениться, номенклатура перевыбраться этой обработкой, а в документе отлавливаю расширением изменение тч, запись документа, по точке останова не попадает в отладчик.
9. tolyan_ekb 104 26.03.21 06:06 Сейчас в теме
(1) ТЧ в массив, если колонок несколько, не выгрузишь, тут массив структур подойдет. В этой же процедуре можно вызвать следующую и передать в нее массив. Можно создать реквизит ТЗ на форме и к нему обращаться, после запонения.
13. MARISHA_Viktoria 35 26.03.21 06:12 Сейчас в теме
(9)массив структур интересно, можно поподробнее?
16. tolyan_ekb 104 26.03.21 06:18 Сейчас в теме +4 $m
(13)
МассивСтруктур = новый массив;
Для каждого СтрокаТЧ из ТЧ Цикл
СтруктураСтрокиТЧ = новый структура;
СтруктураСтрокиТЧ.Вставить ("Номенклатура",СтрокаТЧ.Номенклатура ) ;
СтруктураСтрокиТЧ.Вставить ("Количество",СтрокаТЧ.Количество) ;
КонецЦикла;
МассивСтруктур.Добавить(СтруктураСтрокиТЧ );

Как-то так, писал по памяти, могут быть ошибки.
17. MARISHA_Viktoria 35 26.03.21 06:22 Сейчас в теме
(16)а как их забрать в другой процедуре?
18. tolyan_ekb 104 26.03.21 06:25 Сейчас в теме
(17) также как и предлагают, через ВременноеХранилище
2. t278 56 26.03.21 05:18 Сейчас в теме
а другая процедура где? В этой же форме?
6. MARISHA_Viktoria 35 26.03.21 05:42 Сейчас в теме
4. Aleksandr_prof 192 26.03.21 05:33 Сейчас в теме
Как хотите потом забрать данные и для чего? Поподробнее
8. MARISHA_Viktoria 35 26.03.21 06:05 Сейчас в теме
(4)хочу выгрузить тч, в одной процедуре и куда незнаю, хранилище, в переменную или ещё куда-то, а в другой процедуре нужна проверка на заполняемость.
Есть обработка, сторонняя которая перезаполнят тч, и записывает док, проводит его, сразу, по этому необходимо выгрузить тч в момент открытия документа, пусть пользователь запустит обработку, а я потом при закрытии документа проверю его на изменения.
И незнаю чем лучше это сделать, что в расширении работает быстрее?
Может есть у кого решение?
14. nomad_irk 72 26.03.21 06:13 Сейчас в теме
(8)Сделать общую переменную, модуля формы, доступную на сервере, и выгрузить в нее ТЧ в "ПриСозданииНаСервере()"?


Перем КопияТЧ;

Процедура ПриСозданииНаСервере()

КопияТЧ = Объект.ИмяТЧ.Выгрузить();

КонецПроцедуры;

Процедура ПроверитьИзмененияТЧ()

Для Каждого Стр ИЗ КопияТЧ Цикл

...........


КонецЦикла;

КонецПроцедуры
Показать
15. spacecraft 26.03.21 06:14 Сейчас в теме +4 $m
(8) 2 варианта.
1. создать реквизит формы типа ТЗ с нужными колонками соответствующими ТЧ. Далее делаем выгрузку из ТЧ.
ТЗ.Загрузить(Объект.ИмяТЧ.Выгрузить());
2. использовать временное хранилище. Создать реквизит формы тип Строка, где хранить Адрес хранилища.
Ну и по аналогии, Адрес = ПоместитьВоВременноеХранилище(Объект.ИмяТЧ.Выгрузить(), УникальныйИдентификатор);
Потом при необходимости получать из временного хранилища ТЗ.
21. stein13 9 26.03.21 07:59 Сейчас в теме
(15)
Мне вот тоже 1 вариант нравится, вполне простой.
Еще как вариант, можно создать еще одну таблицу, аналогичную оригинальной. Запускать свою процедуру заполнения (копирования) оригинальной таблицы в новую таблицу в процедуре ПриСозданииНаСервере, записываем. После того, как ваша обработка что-то поменяла, в момент записи можно сравнить эти 2 таблицы
19. PerlAmutor 129 26.03.21 06:47 Сейчас в теме
(8)
по этому необходимо выгрузить тч в момент открытия документа


Т.е. подразумевается, что документ уже сохранен в БД? В событии ОбработкаПроверкиЗаполнения делайте запрос к БД, к ТЧ документа , передавайте в запрос ТЗ (новую выгруженную ТЧ из еще не записанного документа), помещайте её во временную таблицу. Сравнивайте в запросе обе ТЧ, по результатам сравнения делайте что нужно.
20. SlavaKron 26.03.21 07:55 Сейчас в теме
(8)
перезаполнят тч, и записывает док, проводит его
Ясно, боремся с проблемами, вызванными говнокодом. Лучше обработку переделайте. По теме, как уже писалось выше, самое оптимальное – строковый реквизит формы АдресХранилища + помещение во временное хранилище.
5. ZergKRSK 129 26.03.21 05:35 Сейчас в теме
Какой смысл во всем этом? Всегда можно получить ТЧ этого документа практически в любом другом месте.
22. FatPanzer 26.03.21 09:32 Сейчас в теме
(5) Видимо, чтобы СУБД не дергать лишний раз для получения сохраненной ТЧ по Ссылке...
23. biimmap 1864 26.03.21 12:07 Сейчас в теме
Вы можете на форме создать таблицу значений с теми же Колонками.
При открытии сразу помещаете туда всю ТЧ:
НоваяТЧ.Загрузить(ТЧДокумента.Выгрузить())


Эта табличная часть будет доступна всё время, пока не закрыта форма документа.
Расширение вроде бы позволяет добавлять реквизиты формы.
24. nosferatu20913 48 26.03.21 12:25 Сейчас в теме
попробуйте использовать:
ДополнительныеСвойства (AdditionalProperties)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: Структура.
Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
25. user1135816 4 26.03.21 13:41 Сейчас в теме +2 $m
Добавить реквизит Адрес хранилища. При открытии в него записать адрес куда сохранили ТЗ, при закрытии по этому адресу уточнить данные
Sashares; +1 Ответить
27. Sashares 34 26.03.21 16:19 Сейчас в теме
26. t_yuri 21 26.03.21 14:13 Сейчас в теме
Создайте структуру с нужными ключами и значениями. Заполните структуру в цикле. Передавайте структуру через параметры процедуры (функции). Структура без проблем передается что на &НаКлиенте что &НаСервере
28. MARISHA_Viktoria 35 26.03.21 18:14 Сейчас в теме
Всём спасибо! Сделала по другому. Расскидала см интересным вариантам. Спасибо всем
29. Vix 28 26.03.21 18:17 Сейчас в теме
решений много, как вариант можно еще выгружать во временный файл (DBF,JSON,XML), сохранять файл в макет, из макета потом загружать где угодно.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот