Имя: Пароль:
1C
1C 7.7
v7: Как-то можно получить все переданные аргументы в функцию?
↓Ø (Волшебник 07.11.2024 07:49)
0 sysadminlk
 
06.11.24
18:17
Можно ли как-то собрать все переданные аргументы в функцию?

Есть ли аналог func_get_args из php в 1с?

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

Функция Дебаг(я1=,я2=,я3=,я4=,я5=,я6=,я7=,я8=,я9=,я0=) Экспорт
    Сп = СоздатьОбъект("СписокЗначений");    
    Сп.ДобавитьЗначение(я1);
    Сп.ДобавитьЗначение(я2);
    Сп.ДобавитьЗначение(я3);
    Сп.ДобавитьЗначение(я4);
    Сп.ДобавитьЗначение(я5);
    Сп.ДобавитьЗначение(я6);
    Сп.ДобавитьЗначение(я7);
    Сп.ДобавитьЗначение(я8);
    Сп.ДобавитьЗначение(я9);
    Сп.ДобавитьЗначение(я0);
    Стр = "";
    Для н=1 По Сп.РазмерСписка() Цикл
        зн = Сп.ПолучитьЗначение(н);
        Если ТипЗначения(зн) <> 0 Тогда
            Стр=Стр+"("+ТипЗначенияСтр(зн)+")"+СокрЛП(зн)+"    ";
        КонецЕсли;    
    КонецЦикла;                                    
    Сообщить(Стр,"");    
КонецФункции


Дебаг(Логин,   СпрСотр.Login);
1 big
 
06.11.24
18:44
В параметрах передавать уже заполненный ранее список.

Мало того, в списке значений можно передавать любые значения, причем именованные.
2 sysadminlk
 
06.11.24
18:58
ну тогда перед
Дебаг(Логин,   СпрСотр.Login);

нужно будет
сп=создатьОбъект(СписокЗначений);
Сп.ДобавитьЗначение(Логин);
Сп.ДобавитьЗначение(СпрСотр.Login);

Дебаг(Сп);

Слишком много писать приходится

идея была меньше текста писать )))
3 Builder
 
06.11.24
19:01
(2) Бери деньги за количество кода. Будешь больше писать....
4 Aleksey
 
06.11.24
19:08
(2) как бы в типовых так и реализовано
5 big
 
06.11.24
19:37
(2) Правильнее будет так:

сп=создатьОбъект(СписокЗначений);
Сп.ДобавитьЗначение(Логин,"login");
Сп.ДобавитьЗначение(СокрЛП(СпрСотр.Login),"login_sotr");

Дебаг(Сп)

Функция Дебаг(Парам)
   Логин = Парам.Получить("login");
   СотрЛогин = Парам.Получить("login_sotr");

   и т.д. и т.п.

КонецФункции
6 sysadminlk
 
06.11.24
19:40
ясно, походу никак ))
7 Волшебник
 
модератор
06.11.24
19:55
(6) Хватит гнать хуйню на форум!
Это тебе последнее предупреждение!
8 Злопчинский
 
06.11.24
20:18
(6) Передавай список. или ТЗ. количество позиций в СЗ или ТЗ - неограничено. Уже ж написали. Что не подходит?
.
Опять же если что можно извернуться через Шаблон дополнительно к СЗ или тЗ
9 Волшебник
 
06.11.24
20:22
(8) Надо передавать структуру, там поля доступны по именам.
10 Злопчинский
 
06.11.24
20:56
(9)(6) список значений - значения доступны по именам, за неимением структуры в клюшках подойдет.
можно использовать АссоциативныйВектор также в 77, там еще "ближе" к нормальному именованию, типа
ЧтоТо = КакойтоАссоциативныйВектор.КакоетоИмя
11 sysadminlk
 
06.11.24
21:07
(10) Мне это нужно для вывода в одной строкой в окно сообщений нескольких переменных разных типов, так как Сообщить() не умеет делать вот так
Сообщить(ЧтоТо, ГдеТо, КогдаТо);
12 Злопчинский
 
06.11.24
21:46
все выводимое в окно сообщений - приводится к строкам
Что мешает выводить
Сообщить(""+Что+Где+Когда)
?
13 Злопчинский
 
06.11.24
21:46
опять же если у тебя заранее неизвестна конструкция строки - ты можешь сконструировать строку вывода и получить ее значение через Шаблон()
14 sysadminlk
 
06.11.24
22:45
Процедура Тест(Ин)
    Пер = СтрЗаменить(Ин,",",РазделительСтрок);
    Для _=1 По СтрКоличествоСтрок(Пер) Цикл
        Сообщить(Шаблон("["+СтрПолучитьСтроку(Пер,_)+"]"));
    КонецЦикла;
КонецПроцедуры    // Тест()

Процедура Сформировать()    
    Товар = "Сковородка Tefal";
    Кол = 2;
    Цена = 1250.25;
    Тест("Товар,Кол,Цена,Цена*Кол");
КонецПроцедуры    // Сформировать


А значения переменных в Тест() как-то можно передать? Или контекст процедуры Сформировать
15 MWWRuza
 
06.11.24
22:51
Ну, вторым параметром СЗ со списком переменных передайте.
Или, как вариант, если они в одном модуле - объявите их в начале модуля. Но, ИМХО - правильнее через параметр.
16 Злоп
 
07.11.24
00:36
(14) как-то мутно, так и не понял ЧТО тебе надо.
Вангую что имеет смысл глянуть сюда
https://forum.dorex.pro/index.php?topic=3.0
Ошибка? Это не ошибка, это системная функция.