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

10.09.18

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

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

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

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

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

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

 

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

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

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

 

См. также

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

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    20488    dimanich70    81    

145

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

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

1 стартмани

18.03.2024    4114    3    John_d    11    

57

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

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

12.02.2024    18577    atdonya    24    

57

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

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

30.11.2023    5533    ke.92@mail.ru    16    

65

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

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

28.08.2023    14887    YA_418728146    7    

168

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

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

2 стартмани

22.08.2023    3621    57    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 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    18529    171    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. harmer 1 10.09.18 11:46 Сейчас в теме
Можно было избавиться от внутреннего цикла при преобразовании данных в массив. Для этого предварительно получаем список колонок в виде строки "Колонка1,Колонка2,...", а после создания структуры использовать "ЗаполнитьЗначенияСвойств".
monkbest; kiruha; ilya.rudziak; A_Max; CyberCerber; valerasv; +6 Ответить
2. valerasv 136 10.09.18 11:47 Сейчас в теме
Спасибо... Воспользуюсь. Так даже красивей выйдет.
3. independ 1551 10.09.18 11:55 Сейчас в теме
Если все крутится на одном сервере и ТЗ идентичные можно попробовать старый дедовский способ: ЗначениеВФайл, ЗначениеИзФайла. Строк кода минимум.
4. valerasv 136 10.09.18 11:56 Сейчас в теме
Можно, почему бы и нет. Но возникают накладные расходы на запись файла, а потом на его удаление....
5. Stepa86 1531 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 136 10.09.18 11:59 Сейчас в теме
(5) Спасибо. Теперь буду грамотным....
7. Stepa86 1531 10.09.18 12:00 Сейчас в теме
(6) Смотри как в типовых реализовано. Там есть особенности.
12. RocKeR_13 1366 10.09.18 12:07 Сейчас в теме
13. dsdred 3633 10.09.18 12:13 Сейчас в теме
(5)Я уж хотел черкнуть про это, а то очень удивился прочитав статью))
20. kiruha 388 11.09.18 10:13 Сейчас в теме
У
(5)
ПолучитьИзВременногоХранилища


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


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

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


А способ автора - сто лет в обед
21. valerasv 136 11.09.18 10:19 Сейчас в теме
(20)Суть была не передать ТЗ на клиента, а прокинуть через клиента...
А про временное хранилище - просветили.
22. valerasv 136 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 1531 11.09.18 16:59 Сейчас в теме
(20) Ну так вопрос "Как получить ТЗ на клиенте" в принципе не корректен, т.к. ТЗ на клиенте не существует. Сперва нужно определится зачем таблица на клиенте, затем определится где ее хранить, а уже затем - как ее получить. Почти всегда это заполнение таблицей значений на сервере реквизита формы или объекта. Иногда нужно и преобразование в массив структур или структуру массивов, например для конвертации в JSON. Но первично - определить, а во что положить то на клиенте.

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

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

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

Именно это и делается... :-)
18. bulpi 217 10.09.18 16:00 Сейчас в теме
19. valerasv 136 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);
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 405 20.09.22 15:10 Сейчас в теме
(25) Валерий, добрый день.
Столкнулся с подобной задачей. Заполнить ТЧ документа из ТЧ обработки.
Решил передачей параметра-коллекции ДанныеФормыКоллекция.
С формы на форму с клиента на сервер

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

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

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