Как передать таблицу значений через клиента на управляемых формах

10.09.18

Разработка - Универсальные функции

При выполнении одной из задач возникла передать между клиентскими частями обработки данные таблицы значений. Может, и есть какие либо другие решения, но мне не попадались, да и искать не захотелось. Накидал по-быстрому свой вариант. Для небольших таблиц работает без каких либо существенных нагрузок на систему. Может, кому и пригодится данное решение.

Задача. Получить данные из таблицы объекта, поместить эти данные в параметры оповещения
для открываемой формы. Загрузить эти данные в таблицу открывшейся формы.

Получение данных. Данные решено было поместить в массив структур. Структура описывает данные строки таблицы значений.

// ВыгрузитьТаблицуЗначенийВМассив:
// Выгружает данные из таблицы значений в массив структур.
// Структура содержит данные строки. Ключами являются имена колонок

&НаСервере
Функция ВыгрузитьТаблицуЗначенийВМассив(ИмяТаблицыОбъекта)
	
	ТаблицаОбъекта = Объект[ИмяТаблицыОбъекта].Выгрузить();
	
	МассивСтрок = Новый Массив;
	
	Для Каждого СтрокаДанных Из ТаблицаДанных Цикл
		
		СтруктураСтроки = Новый Структура;
		
		Для Каждого Колонка Из ТаблицаДанных.Колонки Цикл
			
			ИмяКолонки = Колонка.Имя; 
			СтруктураСтроки.Вставить(ИмяКолонки, СтрокаДанных[ИмяКолонки]);
			
		КонецЦикла;
		
		МассивСтрок.Добавить(СтруктураСтроки);
		
	КонецЦикла;
	
	Возврат МассивСтрок;
	
КонецФункции	

 

Получение данных из массива запись их в таблицу значений

///////////////////////////////////////////////////////////////////////////////
// ЗагрузитьТаблицуЗначенийИзМассива:
// Загружает данные из массива структур в таблицу значений.
// Таблица значений може быть как реквизитом объекта, так и
// реквизитом формы.

&НаСервере
Процедура ЗагрузитьТаблицуЗначенийИзМассива(МассивСДанными, ИмяТаблицыОбъекта)
	
	ТаблицаОбъекта = Объект[ИмяТаблицыОбъекта].Выгрузить();
	ТаблицаОбъекта.Очистить();
	
	Для Каждого ЭлементМассива Из МассивСДанными Цикл
		
		СтрокаТаблицы = ТаблицаОбъекта.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ЭлементМассива);
		
	КонецЦикла;
	
	Объект[ИмяТаблицыОбъекта].Загрузить(ТаблицаОбъекта);
	
КонецПроцедуры

 

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2892    2    John_d    11    

56

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    5049    atdonya    22    

51

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    4103    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9381    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2233    25    progmaster    8    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16355    142    sapervodichka    112    

130

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7355    quazare    8    

110
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. harmer 1 10.09.18 11:46 Сейчас в теме
Можно было избавиться от внутреннего цикла при преобразовании данных в массив. Для этого предварительно получаем список колонок в виде строки "Колонка1,Колонка2,...", а после создания структуры использовать "ЗаполнитьЗначенияСвойств".
monkbest; kiruha; ilya.rudziak; A_Max; CyberCerber; valerasv; +6
2. valerasv 135 10.09.18 11:47 Сейчас в теме
Спасибо... Воспользуюсь. Так даже красивей выйдет.
+
3. independ 1520 10.09.18 11:55 Сейчас в теме
Если все крутится на одном сервере и ТЗ идентичные можно попробовать старый дедовский способ: ЗначениеВФайл, ЗначениеИзФайла. Строк кода минимум.
+
4. valerasv 135 10.09.18 11:56 Сейчас в теме
Можно, почему бы и нет. Но возникают накладные расходы на запись файла, а потом на его удаление....
+
5. Stepa86 1521 10.09.18 11:58 Сейчас в теме
Вообще то такие вещи принято делать через ВременноеХранилище. ПоместитьВоВременноеХранилище( и ПолучитьИзВременногоХранилища( . А через клиент только адрес проходит
Revachol; Mechanik21; JohnConnor; ixijixi; gigapevt; jaroslav.h; Isakov_Artem; Гриффин; Anchoret; TreeDogNight; Ditron; docerman; strange2007; Stref75; fancy; acanta; A_Max; HAMMER_59; denisros; dandykry; dsdred; RocKeR_13; alex-l19041; CyberCerber; valerasv; +25
6. valerasv 135 10.09.18 11:59 Сейчас в теме
(5) Спасибо. Теперь буду грамотным....
+
7. Stepa86 1521 10.09.18 12:00 Сейчас в теме
(6) Смотри как в типовых реализовано. Там есть особенности.
+
12. RocKeR_13 1321 10.09.18 12:07 Сейчас в теме
13. dsdred 3319 10.09.18 12:13 Сейчас в теме
(5)Я уж хотел черкнуть про это, а то очень удивился прочитав статью))
+
20. kiruha 388 11.09.18 10:13 Сейчас в теме
У
(5)
ПолучитьИзВременногоХранилища


Часто требуется перекидывать не только на сервер, но и на клиент.
На клиенте ТЗ недоступна


ТаблицаЗначений
Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).


А способ автора - сто лет в обед
+
21. valerasv 135 11.09.18 10:19 Сейчас в теме
(20)Суть была не передать ТЗ на клиента, а прокинуть через клиента...
А про временное хранилище - просветили.
+
22. valerasv 135 11.09.18 14:16 Сейчас в теме
(20)...Может, и есть какие либо другие решения, но мне не попадались, да и искать не захотелось. Накидал по-быстрому свой вариант....

Читай аннотацию, а не ерничай...
+
23. kiruha 388 11.09.18 15:32 Сейчас в теме
(22)
http://infostart.ru/public/80361/
http://infostart.ru/public/240022/

ну еще много ссылок в комментах

Да и мееседж был к (5), не к Вам
Isakov_Artem; anchovy; valerasv; +3
24. Stepa86 1521 11.09.18 16:59 Сейчас в теме
(20) Ну так вопрос "Как получить ТЗ на клиенте" в принципе не корректен, т.к. ТЗ на клиенте не существует. Сперва нужно определится зачем таблица на клиенте, затем определится где ее хранить, а уже затем - как ее получить. Почти всегда это заполнение таблицей значений на сервере реквизита формы или объекта. Иногда нужно и преобразование в массив структур или структуру массивов, например для конвертации в JSON. Но первично - определить, а во что положить то на клиенте.

Для задачи передачи ТЗ через клиент - лучший вариант через временное хранилище, но он не единственный и бывают ситуации, когда можно обойтись другим подходом. Именно про это я и говорю в (5)
+
25. valerasv 135 11.09.18 17:04 Сейчас в теме
(24)У меня задача стояла именно прокинуть ТЗ через клиента. Об этом и писал в самом начале.
И ни слова о том, что ее нужно получить на клиенте. Все остальное не мои додумки... :-)

...Как передать таблицу значений через клиента...
milov.aleksey; +1
27. Dementor 1019 12.09.18 09:50 Сейчас в теме
(24)
т.к. ТЗ на клиенте не существует.

Вообще-то существует, но почему-то исключительно в качестве реквизита формы, что очень неудобно. И практически точно такой же объект СписокЗначений не имеет такого глупого ограничения. Может к 8.4 разработчики сдадутся и вернут привычный функционал, как это было с переходом на элемент в списке и прочими пропавшими, а потом возвращенными фишками.
ixijixi; +1
8. CyberCerber 853 10.09.18 12:03 Сейчас в теме
Так в БСП же, в модуле ОбщегоНазначения есть функция ТаблицаЗначенийВМассив
gigapevt; Isakov_Artem; sbcode; A_Max; +4
9. valerasv 135 10.09.18 12:04 Сейчас в теме
(8)Честно скажу, не "слизывал".
+
10. CyberCerber 853 10.09.18 12:06 Сейчас в теме
(9) Ну да, там оптимальней сделано, без лишнего цикла, как писали в (1) ;-)
+
16. valerasv 135 10.09.18 12:27 Сейчас в теме
(8)Не всегда находишь нужное решение в уже готовых. Быстрее бывает написать что то свое...
Может это и не эффективный путь...
+
17. valerasv 135 10.09.18 13:29 Сейчас в теме
(8)Там только эта функция, ответной же части пока не нашел....
+
11. RocKeR_13 1321 10.09.18 12:07 Сейчас в теме
А как же ПоместитьВоВременноеХранилище?
+
14. 🅵🅾️🆇 523 10.09.18 12:23 Сейчас в теме
Вариантов куча.
Можно сериализовать в json, в xml, во внутренне значение строкой, поместить во временное хранилище, преобразовать в массив структур.
+
15. valerasv 135 10.09.18 12:25 Сейчас в теме
(14)
преобразовать в массив структур

Именно это и делается... :-)
+
18. bulpi 215 10.09.18 16:00 Сейчас в теме
19. valerasv 135 10.09.18 22:42 Сейчас в теме
(18)А ни кто на оригинальность и не претендует. Читай аннотацию внимательнее...
+
26. caponid 12.09.18 09:29 Сейчас в теме
Если простые типы, то и JSON можно использовать

Сохранить значение
ЗаписьXML=Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML,Значение);
ПредставлениеЗначения =ЗаписьXML.Закрыть();

Восстановить значение
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ПредставлениеЗначения);
Значение= СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
Lubocka; +1
28. Healer 1 13.09.18 16:50 Сейчас в теме
Я для подобной задачи использовал архаичную функцию "ЗначениеВСтрокуВнутр" и "ЗначениеИзСтрокиВнутр". Они были созданы 1С-цами для перехода с клюшек на 8-ку и не рекомендуются к применению, но работают шустро и чётко :-)
+
29. Healer 1 13.09.18 16:53 Сейчас в теме
То есть при передаче пишем просто:
Параметр = ЗначениеВСтрокуВнутр(НашаТЗ);
А на форме в обработчике оповещения пишем:
ЗначениеИзСтрокиВнутр(Параметр)
+
30. Healer 1 13.09.18 16:55 Сейчас в теме
Я таким манером передавал в клюшки ответ веб-сервисов из 8-ки, а это ТЗ с сотнями тысяч строк. Работает мегашустро.
+
31. milov.aleksey 398 20.09.22 15:10 Сейчас в теме
(25) Валерий, добрый день.
Столкнулся с подобной задачей. Заполнить ТЧ документа из ТЧ обработки.
Решил передачей параметра-коллекции ДанныеФормыКоллекция.
С формы на форму с клиента на сервер

&НаКлиенте //форма обработки, кнопка обработки Заполнить
ЗначенияЗаполнения = Новый Структура;
ЗначенияЗаполнения.Вставить("КоллекцияСотрудники", Объект.ТЧСотрудники); //ТЧ обработки
ПараметрыОткрытия.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения);
ОткрытьФорму("Документ.ДокументПриемник.ФормаОбъекта", ПараметрыОткрытия, ЭтотОбъект);

&НаСервере //форма документа
ПриСозданииНаСервере
//очищаем приемник
Объект.ТабличнаяЧасть.Очистить();

//заполняем приемник перебором полученной коллекции
Если КоллекцияСотрудники<>Неопределено Тогда
Для каждого СтрокаКоллекции Из КоллекцияСотрудники Цикл
СтрДок = Объект.ТЧСотрудники.Добавить();
ЗаполнитьЗначенияСвойств(СтрДок,СтрокаКоллекции);
КонецЦикла;
////////////////////////////////////////////////
+
Оставьте свое сообщение