![]() |
|
Как из функции возвратить несколько значений? Ø (Волшебник 31.07.2017 11:29) |
☑ | ||
---|---|---|---|---|
0
33554432
31.07.17
✎
10:41
|
Как из функции возвратить несколько значений?
|
|||
1
Amra
31.07.17
✎
10:41
|
Возвращай массив
|
|||
2
Mankubus
31.07.17
✎
10:42
|
(0) помести их в какую-нибудь сущность. например структуру
|
|||
3
Жан Пердежон
31.07.17
✎
10:42
|
возвращай коллекцию
|
|||
4
aleks_default
31.07.17
✎
10:44
|
возвращайся в первую профессию
|
|||
5
Basilio
31.07.17
✎
10:46
|
инициализируй переменные до вызова функции и передавай их в процедуру. В процедуре присваивай этим параметрам нужные значения.
|
|||
6
Волшебник
модератор
31.07.17
✎
10:48
|
Зачем?
|
|||
7
igorPetrov
31.07.17
✎
10:52
|
(0) Переделать алгоритм?
|
|||
8
Basilio
31.07.17
✎
10:53
|
создай новый справочник по имени функции, добавь реквизиты с названиями значений. Внутри функции создавай новый элемент, присваивай реквизитам значения и возвращай элемент справочника. В базу можно не записывать.
|
|||
9
33554432
31.07.17
✎
10:53
|
Ладно, сделал 2 функции вместо одной. Криво, но работает )
|
|||
10
Жан Пердежон
31.07.17
✎
10:55
|
(9) я в тебе не сомневался
|
|||
11
lodger
31.07.17
✎
10:59
|
(9) https://sc.mogicons.com/share/genius-158.jpg
это еще и серверные контекстные вызовы с клиента небось... |
|||
12
Chameleon1980
31.07.17
✎
10:59
|
да уж
|
|||
13
Гипервизор
31.07.17
✎
11:00
|
И прекрасно масштабируется если чо. Всего лишь добавить n+1 функций.
|
|||
14
Ц_У
31.07.17
✎
11:01
|
(0) используй процедуру, передавай ей параметры для изменения
|
|||
15
33554432
31.07.17
✎
11:01
|
(11)
да а что? |
|||
16
oslokot
31.07.17
✎
11:02
|
(14) поздно - (9)
|
|||
17
Basilio
31.07.17
✎
11:02
|
(9) Программирование методом копирования-вставки (copy-paste) — распространённый анти-паттерн (ловушка) при написании кода, под которым обычно понимают многократное копирование (с последующей правкой) существующего кода вместо создания общих решений.
Проверь, у тебя не этот случай? |
|||
18
lodger
31.07.17
✎
11:05
|
(15) однажды, я видел как форма клиента шпарила серверные вызовы со скоростью под тысячу в минуту. и это у меня тестовая машина сильная, да канал широкий, хз сколько времени занимала на обычных компах обработка таб.файла на 15-20 тысяч строк.
|
|||
19
lodger
31.07.17
✎
11:07
|
+(18) и это в конфе 1с:совместимо от франча которому "доверяют более 150 000 клиентов".
|
|||
20
33554432
31.07.17
✎
11:18
|
(17)
да у меня примерно такая же скорость выходит, но строк не больше 100 в этих местах. 10 сек тоже заказчику не понравится, но главное чтоб работало все таки. |
|||
21
33554432
31.07.17
✎
11:21
|
Кстати, вот мой код. Оптимизируйте, кто сколько может...
для каждого стр из этаформа.СтоимостьРейсовДляЗаказчиков цикл стр.РедактируемаяСтоимость=ДанныеСтроки1(этаформа.ТекРаспределение,стр.заказчик,стр.маршрут); стр.Формула =ДанныеСтроки2(этаформа.ТекРаспределение,стр.заказчик,стр.маршрут); конеццикла; КонецПроцедуры функция ДанныеСтроки1(ТекРаспределение,заказчик,маршрут) з=новый запрос; з.текст="ВЫБРАТЬ | МаршрутныйЛистЗаказчики.Ссылка, | МаршрутныйЛистЗаказчики.Заказчик, | МаршрутныйЛистЗаказчики.НовыйРасчет, | МаршрутныйЛистЗаказчики.Формула, | МаршрутныйЛистЗаказчики.Ссылка.Маршрут |ИЗ | Документ.МаршрутныйЛист.Заказчики КАК МаршрутныйЛистЗаказчики |ГДЕ | МаршрутныйЛистЗаказчики.Ссылка.РаспределениеЗаявокПоМаршрутам = &РаспределениеЗаявокПоМаршрутам | И МаршрутныйЛистЗаказчики.Заказчик = &Заказчик | И МаршрутныйЛистЗаказчики.НовыйРасчет > 0 | И МаршрутныйЛистЗаказчики.Ссылка.Маршрут = &Маршрут"; з.установитьпараметр("РаспределениеЗаявокПоМаршрутам",этаформа.ТекРаспределение); з.установитьпараметр("Заказчик",заказчик); з.установитьпараметр("маршрут",маршрут); итогз=з.Выполнить().Выгрузить(); если итогз.Количество()>0 тогда возврат итогз[0].НовыйРасчет; иначе возврат 0; конецесли; конецфункции функция ДанныеСтроки2(ТекРаспределение,заказчик,маршрут) з=новый запрос; з.текст="ВЫБРАТЬ | МаршрутныйЛистЗаказчики.Ссылка, | МаршрутныйЛистЗаказчики.Заказчик, | МаршрутныйЛистЗаказчики.НовыйРасчет, | МаршрутныйЛистЗаказчики.Формула, | МаршрутныйЛистЗаказчики.Ссылка.Маршрут |ИЗ | Документ.МаршрутныйЛист.Заказчики КАК МаршрутныйЛистЗаказчики |ГДЕ | МаршрутныйЛистЗаказчики.Ссылка.РаспределениеЗаявокПоМаршрутам = &РаспределениеЗаявокПоМаршрутам | И МаршрутныйЛистЗаказчики.Заказчик = &Заказчик | И МаршрутныйЛистЗаказчики.НовыйРасчет > 0 | И МаршрутныйЛистЗаказчики.Ссылка.Маршрут = &Маршрут"; з.установитьпараметр("РаспределениеЗаявокПоМаршрутам",этаформа.ТекРаспределение); з.установитьпараметр("Заказчик",заказчик); з.установитьпараметр("маршрут",маршрут); итогз=з.Выполнить().Выгрузить(); если итогз.Количество()>0 тогда возврат итогз[0].формула; иначе возврат ""; конецесли; конецфункции |
|||
22
lodger
31.07.17
✎
11:22
|
2 запроса в одном цикле. сильно.
|
|||
23
Ёпрст
гуру
31.07.17
✎
11:23
|
(21) Че тут оптимизировать то ?
Всё в топку. Запрос должен быть, один, а не для каждой строки свой. |
|||
24
Волшебник
модератор
31.07.17
✎
11:23
|
(21) Здесь лучше одной функцией для всей табличной части
|
|||
25
zvial
31.07.17
✎
11:24
|
(21) ТС постоянный автор омнокод.ру?
|
|||
26
33554432
31.07.17
✎
11:25
|
(24)
может шаблон есть для похожего случая? |
|||
28
33554432
31.07.17
✎
11:27
|
(27)
у меня самописка |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |