Имя: Пароль:
1C
1С v8
Аналог стека в 1с
0 deadpuma
 
24.09.12
13:46
Подскажите есть ли в 1с такое понятие как стек? раньше кодил на delphi сейчас перешел на 1с поэтому особо и не в курсе что можно использовать как альтернативу.

Решаю задачу про распознавание формулы из строки вон там и нужен как раз стек.
1 Fragster
 
гуру
24.09.12
13:49
Стек - частный случай буфера. Делай, например, через Массив
2 aleks-id
 
24.09.12
13:49
невнятная задача. если строку сунуть куда то с разбиением - используй многострочную строку.
3 Hipernate
 
24.09.12
13:50
список значений
4 Hipernate
 
24.09.12
13:51
(1) буфер понятие обобщенное ни к чему не обязывающее..
5 Fragster
 
гуру
24.09.12
13:56
(4) так я ж так сразу и сказал. сделать стек при этом через через Вставить(0) и [0]: .Удалить(0) ничего не мешает
6 vmv
 
24.09.12
13:57
если пристально посмотреть на объект Структура то можно увидеть в нем все атрибуты стека
7 deadpuma
 
24.09.12
13:58
т.е. делать через массив это и будет стек?!
8 Hipernate
 
24.09.12
13:59
(7) нет
9 Hipernate
 
24.09.12
14:01
массив это он и есть массив..
а стек последний вошел первый вышел такого нет в 1с. и двусвязного списка и кольца тоже нет.
10 Rie
 
24.09.12
14:03
(7) Что такое стек - ты знаешь?
Если да - сможешь его реализовать хоть через Массив, хоть через СписокЗначений, хоть через Структуру с полями Данные и Вершина и т.д. и т.п.
Если нет - тут медицина бессильна.
11 deadpuma
 
24.09.12
14:03
(9) а что можно использовать в 1с вместо стека? список значений ?
12 deadpuma
 
24.09.12
14:05
(10) знать то знаю, только в 1с я еще не профи и не знаю что лучше подойдет
13 Xapac_2
 
24.09.12
14:05
(11)Ограничения  у тебя в голове.

делай как "хотиш", массив, список, рекурсия....
14 deadpuma
 
24.09.12
14:06
(13) ладно. начал делать используя массив, так и буду тогда делать
15 Rie
 
24.09.12
14:06
(12) Ну и чем тебе Массив не угодил? И чем тебе не угодил СписокЗначений?
Ты программист? Вот и реализуй стек с использованием имеющихся структур данных. Не можешь - вон из профессии.
16 Reset
 
24.09.12
14:07
Почти ООП:

Создаем обработку, называем Stack.
В модуле пишем

Перем Массив;

Функция Pop() Экспорт
   Если Массив.Количество()=0 тогда
       Возврат Неопределено;
   Иначе
       Значение=Массив[0];
       Массив.Удалить(0);
       Возврат Значение;
   КонецЕсли;
КонецФункции

Процедура Push(Значение) Экспорт
   Массив.Вставить(0,Значение);
КонецПроцедуры

Массив=Новый Массив;


После это используем стек таким образом:


MyStack=Новый(Тип("ОбработкаОбъект.Stack"));
MyStack.Push(1);
MyStack.Push(2);
Сообщить(MyStack.Pop());
Сообщить(MyStack.Pop());


К вышесказанному относится как к шутке.
17 Rie
 
24.09.12
14:09
(16) Это не шутка, а реализация. Вполне корректная. (Эффективность - отдельный вопрос).
18 deadpuma
 
24.09.12
14:16
(16) спасибо, теперь как в родном delphi :)
19 Rie
 
24.09.12
14:17
(18) Так же хреново кодишь в 1С, как и в Delphi?
20 deadpuma
 
24.09.12
14:19
(18) да, хотя в 1с немного полегче что ли дается
21 GANR
 
24.09.12
14:20
(0) Вот пример копирования настроек отбора СКД с помощью стека:

Процедура СкопироватьЭлементыОтбора(ИсходныеЭлементы, РезультирующиеЭлементы)  
   
   СтруктураПараметров = Новый Структура;
   СтруктураПараметров.Вставить("ИсходныеЭлементы",        ИсходныеЭлементы);
   СтруктураПараметров.Вставить("РезультирующиеЭлементы",    РезультирующиеЭлементы);
   СтруктураПараметров.Вставить("Курсор",                    0);
   
   СтекВызовов = Новый Массив;
   СтекВызовов.Добавить(СтруктураПараметров);
   
   Пока СтекВызовов.Количество() <> 0 Цикл
       ТП = СтекВызовов[СтекВызовов.Количество() - 1];
       Если ТП.Курсор <> ТП.ИсходныеЭлементы.Количество() Тогда
           ИсхЭлемент = ТП.ИсходныеЭлементы[ТП.Курсор];
           ТипЭлемента = ТипЗнч(ИсхЭлемент);
           НовыйЭлемент = ТП.РезультирующиеЭлементы.Добавить(ТипЭлемента);
           ЗаполнитьЗначенияСвойств(НовыйЭлемент, ИсхЭлемент);
           Если ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
               СтруктураПараметров = Новый Структура;
               СтруктураПараметров.Вставить("ИсходныеЭлементы",        ИсхЭлемент.Элементы);
               СтруктураПараметров.Вставить("РезультирующиеЭлементы",    НовыйЭлемент.Элементы);
               СтруктураПараметров.Вставить("Курсор",                    0);
               СтекВызовов.Добавить(СтруктураПараметров);
           КонецЕсли;
           ТП.Курсор = ТП.Курсор + 1;
       Иначе
           СтекВызовов.Удалить(СтекВызовов.Количество() - 1);
       КонецЕсли;
   КонецЦикла;
   
КонецПроцедуры
22 Reset
 
24.09.12
14:23
(18) Только именно так писать не надо. Добавлять/удалять лучше к концу массива, и, конечно, не создавать для этого отдельную обработку ;)
23 deadpuma
 
24.09.12
14:26
(22) так я и делал через массив (по правилам СТЕКА!) просто решил лишний раз спросить тут. вы меня сблили)