Имя: Пароль:
1C
1С v8
УП. Передача массива данных в процедуру
0 bizon2008
 
11.02.13
12:14
Доброго дня. Вот, к примеру, сваял процедуру поверки остатка ТМЦ. Мне в нее, с доков, надо передать склад(ну это понятно),  и список номенклатур с количеством(тут непонятно). Ну кучка вариантов у меня есть. Но зная злобный характер разработчиков платформы, они явно не правильные.
Как правильно передать набор данных в процедуру? Заранее безмерно благодарен.
1 mikecool
 
11.02.13
12:14
передавай параметром!
2 bizon2008
 
11.02.13
12:18
(1)Уважаемый mikecool, коли Вам не в тягость, можете более развернуто пояснить более детально свою мысль. Для контуженых.
3 mikecool
 
11.02.13
12:27
МояФункция(<а вот здесь параметр, который передается в функцию>)
это вообщето сарказм был )
4 bizon2008
 
11.02.13
12:39
(3)Эх, уважаемый mikecool, а я так надеялся на Вашу помощь.
5 Balonbl4
 
11.02.13
12:41
Структурой передавайте, во всех стандартных так. Но склад и список номенклатуры можно и разными параметрами передать.
6 bizon2008
 
11.02.13
12:46
(5)Уважаемый Balonbl4, коли Вам не в тягость, можете более развернуто пояснить, про структуру. Склад я и так отдельно передаю, мне надо предать список номенклатуры и ее количество.
Что-то такое передать надо.
Товар_1 10
Товар_2 20
Товар_3 30
Товар_4 40
7 SherifSP
 
11.02.13
12:51
(0) Почему не ТЗ, а именно списком?
8 SherifSP
 
11.02.13
12:55
Процедура СоздамТЗ()


Тз = Новый ТаблицаЗначений;
Тз.Колонки.Добавить("Номенклатура");
ТЗ.Колонки.Добавить("Количество");

// заполняете тз данными

//Передаете в процедуру
МояПроцедура(ТЗ);

КонецПроцедуры

Процедура МояПроцедура(МояТабличка)

КонецПроцедуры
9 bizon2008
 
11.02.13
13:02
Спасибо SherifSP, не примете на свой счет, но про ТЗ мне сказали что это уже моветон. ТЗ это только динозавры так делают, которые от семерки никак отвыкнут не могу.
10 Balonbl4
 
11.02.13
13:04
(6) В вашем случае я бы передавал 2 параметра - 1й склад(ссылку), второй - массив с номенклатурой. А если вам допустим нужно передать в процедуру реквизиты шапки документа, тогда для этого можно использовать структуру.
11 SherifSP
 
11.02.13
13:07
(9) Массив, структура, что вы хотели передавать?
12 Kreont
 
11.02.13
13:10
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Парам1",ЗначПарам1);
и т.д.
13 hhhh
 
11.02.13
13:11
(9) это вы наверно, про разработчиков типовых 1с. Надо им сказать, что они - настоящие динозавры.
14 Kreont
 
11.02.13
13:12
+(12) читать просто:
ЗначПарам1 = СтруктураПараметров.Парам1;
15 Maxus43
 
11.02.13
13:15
не вижу криминала в передаче ТЗ.
16 bizon2008
 
11.02.13
13:34
Я вот тут в описании нашел.
Универсальные коллекции значений предназначены для временного хранения данных. После завершения сеанса данные пропадают. Универсальные коллекции значений используются для промежуточной обработки, анализа и модификации данных.
К таким коллекциям относятся: Массивы, Структуры, Соответствия, Списки значений, Таблицы значений, Деревья значений.
Выбора богатый.
17 bizon2008
 
11.02.13
13:38
(10)Balonbl4, спасибо за ответ. Я не силен в объяснениях, я вроде так и передаю 2 параметра - 1й склад(ссылку), второй - массив с номенклатурой. Вот со вторым я повис. Вариантов много смотри (16).
18 bizon2008
 
11.02.13
13:42
(11)Уважаемый SherifSP, эх знал бы ответ на свой вопрос.
19 Balonbl4
 
11.02.13
13:43
(17) Ну вам подходят только массив список значений и ТЗ. Мне кажется, совершенно не принципиально, что выбрать.
20 bizon2008
 
11.02.13
13:44
(12)Kreont, структура вроде это список ключ - значение, качестве индекса указывается строка, а мне нужна ссылка на номенклатуру.
21 Kreont
 
11.02.13
13:49
(20) ключ да строка, а значением структуры может быть и ссылка, и что надо
22 bizon2008
 
11.02.13
14:29
(21)Kreont, видать я тупо не понимаю что такое структура, сейчас пытаюсь въехать на простых примерах и отладчике.
23 bizon2008
 
11.02.13
14:50
В общем структура не подходит, ее в запрос не вставить. Мне надо список номенклатуры в запрос вставить. Для поверки наличия необходимого остатка.
24 Kreont
 
11.02.13
14:54
структура вроде найболее универсальная для такого.
Например первый параметр может быть массивом (сразу готовым для запроса), второй параметр = ссылка документ, третий = ссылка склада и т.п.
25 bizon2008
 
11.02.13
15:12
Kreont спасибо, и забыл что в структуру-то и массив можно запихать. Сейчас попробую.
26 vvp91
 
11.02.13
15:43
>> (0) сваял процедуру поверки остатка ТМЦ ... надо передать склад(ну это понятно), и список номенклатур с количеством(тут непонятно)

В данном случае метод проверки остатка должен принимать два параметра с названиями Склад и Остатки.
Причем внутри метода надо ожидать, что параметр Склад будет иметь ссылочный тип, а параметр Остатки будет иметь тип коллекции, содержащий записи с двумя полями {Номенклатура, Количество} (как минимум с двумя полями, может быть больше).

Под типом коллекции понимается: ТаблицаЗначений, Массив из структур, ДанныеФормыКоллекция, ТабличнаяЧасть.
Это возможно, поскольку такие коллекции имеют как одинаковый принцип обхода (Для Каждого Из Цикл), так и одинаковый принцип обращения к полям элементов (через точку или через квадратные скобки по имени поля).

Однако надо иметь ввиду, что использование таких коллекций однотипно в запросах (как параметры) невозможно, поскольку запросы ожидают или таблицу значений или массив примитивного типа (числа, строки, даты, булево, ссылки), а указанные коллекции предоставляют совершенно различные методы для формирования таблицы значений или массива.


>> (12) СтруктураПараметров = Новый Структура;

Лучше структуру, как параметр метода не использовать, поскольку глядя на заголовок метода не понятно, что ему передавать. А анализировать код метода, чтобы понять, как его использовать - это плохая практика.
27 bizon2008
 
11.02.13
19:30
(26)Спасибо vvp91, большое. Сформулировано то, что у меня никак выразить, простыми словами, не получалось.
28 ILM
 
гуру
11.02.13
20:02
(0) А ссыль на документ передавайте, в нем и склад есть и ТЧ с товарами, и Отказ булевый. На сервере проверяете  что хотите и присваиваете "Отказу" Истину, если товара не хватает)))
29 bizon2008
 
20.02.13
17:17
(28)Не универсально.
Поднимаю вопрос.
В общем надо двухмерный массив.
Первый столбец ссылка на номенклатуру, второй столбец числовой.
Перепробовал кучу вариант, получается только одномерные массивы нормально у меня.
Заранее признателен за помощь.
30 bizon2008
 
20.02.13
17:45
А таблица значений не работает с тонким клиентом.
31 hhhh
 
20.02.13
18:14
(29) передавай два одномерных.
32 bizon2008
 
20.02.13
18:25
(31)Ага. Я уже докурил что только одномерные и есть. А вот как из двух однодоменных, сделать двухмерных?
33 Reset
 
20.02.13
18:46
(32)
Одномерный1=Новый Массив;
Одномерный1.Добавить(1);
Одномерный2=Новый Массив;
Одномерный2.Добавить(2);

МассивМассивовНуТипаДвумерный=Новый Массив;
МассивМассивовНуТипаДвумерный.Добавить(Одномерный1);
МассивМассивовНуТипаДвумерный.Добавить(Одномерный2);

// Example
Сообщить(МассивМассивовНуТипаДвумерный[1][0]);

Тему не читал.