Имя: Пароль:
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) так я и делал через массив (по правилам СТЕКА!) просто решил лишний раз спросить тут. вы меня сблили)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn