Лайфхак: Три метода для таблицы значений

26.10.20

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

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

 

1) Создать ТЗ с колонками в одну строку, заменяя

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Имя");
ТЗ.Колонки.Добавить("Код");
ТЗ.Колонки.Добавить("Наименование");

на

ТЗ = НовыйТаблицаЗначений("Имя,Код,Наименование");

добавьте в свой код описание метода:

Функция НовыйТаблицаЗначений(Знач СтруктураКолонок)
    
    ТЗ = Новый ТаблицаЗначений;
    СтруктураКолонок = СтрЗаменить(СтруктураКолонок, " ", "") + ",";
    ПозРазд = Найти(СтруктураКолонок, ",");
    
    Пока ПозРазд > 0 Цикл
        ТЗ.Колонки.Добавить(Лев(СтруктураКолонок, ПозРазд - 1));
        СтруктураКолонок = Сред(СтруктураКолонок, ПозРазд + 1);
        ПозРазд = Найти(СтруктураКолонок, ",");
    КонецЦикла;
    
    Возврат ТЗ;
    
КонецФункции

 

2) Добавить строку ТЗ, заменяя

НовСтр = ТЗ.Добавить();
НовСтр.Имя = Имя;
НовСтр.Код = Код;


...
на

НовСтр = ДобавитьСтрокуТЗ(ТЗ, Новый Структура("Имя, Код", Имя, Значение, Код));
 

добавьте описание свой в код:

Функция ДобавитьСтрокуТЗ(ТЗ, ЗначенияПолей)
    
    НовСтр = ТЗ.Добавить();
    ЗаполнитьЗначенияСвойств(НовСтр, ЗначенияПолей);
    Возврат НовСтр;

КонецФункции

 

3) Краткий кусок кода для добавления к ТЗ строк другой Таблицы значений

Не метод. Старый способ, но может кто-то не знает:

Для Каждого СтрокаТЗ Из ТЗИсточник Цикл

ЗаполнитьЗначенияСвойств(ТЗПриемник.Добавить(), СтрокаТЗ);

КонецЦикла;

 

Вступайте в нашу телеграмм-группу Инфостарт

Таблицазначений

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3820    Abysswalker    9    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    7192    DeerCven    15    

60

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    51159    dimanich70    83    

172

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    7515    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

12.02.2024    64805    atdonya    31    

70

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    9396    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. FatPanzer 26.10.20 13:20 Сейчас в теме
Функция НовыйТаблицаЗначений(Знач СтруктураКолонок)
    
    ТЗ = Новый ТаблицаЗначений;
    СтруктураКолонок = СтрЗаменить(СтруктураКолонок, " ", "") + ",";
    ПозРазд = Найти(СтруктураКолонок, ",");
    
    Пока ПозРазд > 0 Цикл
        ТЗ.Колонки.Добавить(Лев(СтруктураКолонок, ПозРазд - 1));
        СтруктураКолонок = Сред(СтруктураКолонок, ПозРазд + 1);
        ПозРазд = Найти(СтруктураКолонок, ",");
    КонецЦикла;
    
    Возврат ТЗ;
    
КонецФункции
Показать
Это просто ужасно. Начиная с того, что нет типизации колонок, и заканчивая тем, что для разделения строки на составляющие есть метод СтрРазделить()

Для Каждого СтрокаТЗ Из ТЗИсточник Цикл
    ЗаполнитьЗначенияСвойств(ТЗПриемник.Добавить(), СтрокаТЗ);
КонецЦикла;
Мы ждали, и наконец-то дождались этого лайфхака!!!
Darkoderr; Santa1; Риник; Serg243; klaus38; Larkan; chernov.gigansk.ru; Gorus; ef42; SirStefan; digital; alexdm; EVKash; vadim.semyonov.rzn; BigB; Fox-trot; quazare; +17 Ответить
4. Automatik 989 26.10.20 13:31 Сейчас в теме
(1) Типизация колонок лично мне очень редко нужна
NeLenin; user712340_lost-s0u1; mikl79; +3 Ответить
8. Automatik 989 26.10.20 13:47 Сейчас в теме
(1) СтрРазделить() с 8.3.6 появилась, поэтому
echo77; user1464234; +2 Ответить
12. mikl79 121 26.10.20 14:51 Сейчас в теме
(1), буду знать что есть СтрРазделить()
)))
2. quazare 3989 26.10.20 13:20 Сейчас в теме
предполагаю, Константин, что такой объект как "ТаблицаЗначений" уже устарел - если вы работаете с современным json - используйте соотвествия или структуры....
3. FatPanzer 26.10.20 13:22 Сейчас в теме
(2) Засуньте JSON в запрос в качестве параметра, и тогда появятся основания для дискуссии.
paybaseme; Darkoderr; unknown181538; r2d255; +4 Ответить
10. quazare 3989 26.10.20 14:35 Сейчас в теме
(3) чего????? ну насмешил, а для чего я написал про соответствия))))))))) или мы до сих пор используем "ГДЕ параметр В" (выгруженной колонке)????
16. SlavaKron 26.10.20 16:16 Сейчас в теме
(10) Научите как использовать соответствие в запросе?
Darkoderr; user720385; +2 Ответить
5. user1464234 26.10.20 13:36 Сейчас в теме
Меня в свое время беспокоило, что структура выгрузки данных из 1с7 на что-то похожа, а я этого не учила в школе. А что если 1с работает с json на уровне подсознания СУБД/кэш/риб, но не позволяет использовать его в режиме разработки именно как язык программирования высокого уровня?
6. mikl79 121 26.10.20 13:38 Сейчас в теме
В 3 нужно еще нужно перед циклом ТЗПриемник = ТЗИсточник.СкопироватьКолонки()
Darkoderr; +1 Ответить
7. FatPanzer 26.10.20 13:43 Сейчас в теме
(6) И все это завернуть в функцию СкопироватьТаблицуЗначений(Источник)...
user1464234; +1 Ответить
9. Pryanishnikov_Vladimir 26.10.20 14:20 Сейчас в теме
Для Каждого СтрокаТЗ Из ТЗИсточник Цикл

ЗаполнитьЗначенияСвойств(ТЗПриемник.Добавить(), СтрокаТЗ);

КонецЦикла;


БСП:

ДополнитьТаблицу
Дополняет таблицу значений-приемник данными из таблицы значений-источник.
Синтаксис

Процедура ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник) Экспорт
Параметры

ТаблицаИсточник - ТаблицаЗначений - таблица, из которой будут браться строки для заполнения;
ТаблицаПриемник - ТаблицаЗначений - таблица, в которую будут добавлены строки из таблицы-источника.
Пример вызова

ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник)

Доступность

Сервер, Тонкий клиент, Толстый клиент, Внешнее соединение
Darkoderr; solary; user720385; Matveev_VS; echo77; digital; vv2; Automatik; +8 Ответить
11. mikl79 121 26.10.20 14:45 Сейчас в теме
(9), тоже не плохо

только БСП скоро совсем отучит думать
Darkoderr; user1464234; +2 Ответить
13. quazare 3989 26.10.20 15:00 Сейчас в теме
(11) отучит выдумывать) БСП - это целая наука)
14. mikl79 121 26.10.20 15:19 Сейчас в теме
(13), выдумывать это и есть думать, изобретать, творить, создавать, т.е. мозгами шевелить

а когда пишешь - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник)

ты ведь не понимаешь на самом деле как происходит слияние таблиц
15. quazare 3989 26.10.20 15:24 Сейчас в теме
(14) спустя годы программирования - я только за БСП и только за него... я буду брать готовые функции, сокращая время своей работы - а вы поступайте как хотите
Maksimus1985; user720385; FaraonInt; EVKash; +4 Ответить
17. starik-2005 3211 26.10.20 16:21 Сейчас в теме
(15)
я буду брать готовые функции, сокращая время своей работы
А потом они окажутся в другом модуле и придется все немножко переписать. У меня такое развлечение раз в год примерно...
NeLenin; unknown181538; for-elenak; klaus38; nomad_irk; EVKash; succub1_5; +7 Ответить
18. Азбука Морзе 108 26.10.20 16:36 Сейчас в теме
(17) Мыши плакали, кололись, но продолжали грызть кактус ©
19. quazare 3989 26.10.20 17:02 Сейчас в теме
напишу грубо - все кто не осилил БСП - придумывают отговорки. Да, конфигурация развивается хорошими темпами, но и старые там вещи довольно долго сохраняются... с пометкой "устарело", например, это касается функционала "Длительных операций"

но и плюсы - например, чтобы получить контактную информацию - я затрачу 5 секунд, используя БСП, а кто будет придумывать - минимум на набивание кода у него уйдет в 100 раз больше времени, если писать с нуля))))))
20. yermak 51 27.10.20 08:17 Сейчас в теме
ЗаполнитьЗначениеСвойств(ТЗ.Добавить(), Источник);

Это вместо 2
user1464234; +1 Ответить
21. Pryanishnikov_Vladimir 27.10.20 13:12 Сейчас в теме
(20)Я хотел это тоже написать, но так у тебя не будет этой самой строки в переменной, а у автора она возвращается из его функции. С другой стороны непонятно зачем ее возвращать...
28. comptr 57 28.10.20 11:26 Сейчас в теме
(21) В "Источник" могут быть не все поля, которые нужно заполнить.
29. Automatik 989 02.11.20 05:19 Сейчас в теме
(21) Чтобы использовать далее в коде
22. gaglo 28.10.20 09:48 Сейчас в теме
По пункту 2 чего-то не понял.
НовСтр = ТЗ.Добавить();
НовСтр.Имя = Имя;
НовСтр.Код = Код;
57 символов
...
НовСтр = ДобавитьСтрокуТЗ(ТЗ, Новый Структура("Имя, Код", Имя, Значение, Код));
79 символов

Что мы выиграли?
23. user1464234 28.10.20 09:51 Сейчас в теме
(22) количество строк вероятно (мы же не знаем по каким критериям оценивается код)
24. gaglo 28.10.20 09:53 Сейчас в теме
(23)
НовСтр = ТЗ.Добавить(); НовСтр.Имя = Имя; НовСтр.Код = Код;
а теперь?
25. user1464234 28.10.20 09:57 Сейчас в теме
(24) нет. вы про читабельность кода в строках для программиста.
26. gaglo 28.10.20 10:11 Сейчас в теме
(25) Ваш ответ я тоже не понял ;-[
27. user1464234 28.10.20 10:15 Сейчас в теме
(26) я хотела сказать, что в работе с 7кой мне не приходилось сталкиваться с ограничением размера стека вызовов. А в 8ке это проблема.
30. wolfsoft 2421 02.11.20 08:16 Сейчас в теме
Вот чего действительно не хватает в таблице значений, так это метода "Свернуть()" с выбором агрегатных функций для колонок - минимум, максимум, среднее, сумма и т.п.
31. user1464234 02.11.20 08:18 Сейчас в теме
(30) в запрос посылать ТЗ неудобно?
32. wolfsoft 2421 02.11.20 08:20 Сейчас в теме
(31) Свою функцию свёртки ТЗ через запрос делал. Но проще было бы, если бы штатная свёртка это умела.
user1464234; +1 Ответить
33. Megaiff 06.11.20 00:42 Сейчас в теме
Хоть не считаю себя профи но могу сказать что БСП на сколько бы его не хаяли с его изменениями в нем есть решения которые многие и за неделю не сделают. (я один из них когда просматривал код всегда удивлялся).
Вот скажите мне разве это не эстетично
ОбщегоНазначения.ЕстьРеквизитОбъекта("Соглашение", МетаданныеИсточника)

Сколь вам потребуется времени на простейшую функцию с БСП. Хотя мне оно тоже не нравится во многих моментах.
Это как учить Java и говорить что фрамворки нафиг не нужны типа Spring.

А вот по статье могу сказать если у вас нет норм шаблонов для кодинга то вы улитка. Если вам часто приходится работать с ТЗ или СЗ то проще создайте шаблон с вопросами и поверьте не точек не запятых не скобок нажимать не придется )))
34. user1464234 06.11.20 00:56 Сейчас в теме
(33) Проблема в том, что БСП это не фреймворк, а основа/база. Если у вас в конфигурации есть БСП, то в ней не будет ничего кроме БСП и ее функций общего назначения.
Для отправки сообщения требуется регистрация/авторизация