Имя: Пароль:
1C
1С v8
Что есть кроме массива? Например, очередь, стек...
0 vermazar
 
03.08.16
15:01
Есть ли очередь, стек?
1 PR
 
03.08.16
15:02
Да
2 В тылу врага
 
03.08.16
15:03
(0) а зачем?
3 Волшебник
 
модератор
03.08.16
15:03
Автомат Калашникова — преобразователь стека в очередь.
4 mkalimulin
 
03.08.16
15:06
(0) Кроме массива ничего из перечисленного тобой нет. Разработчикам было лень ерундой заниматься.
5 vermazar
 
03.08.16
15:07
(4) А как реализовать?
6 mkalimulin
 
03.08.16
15:09
(5) Через массив. Он в 1С - динамический.
7 Dotoshin
 
03.08.16
15:11
8 Кирпич
 
03.08.16
15:20
(5) Дарю

Процедура Пуш(М,В)
    М.Добавить(В);    
КонецПроцедуры

Функция Поп(М)
Г = М.ВГраница();
В = М[Г];
М.Удалить(Г);
Возврат В;
КонецФункции


М = Новый Массив();
Пуш(М,100);
Пуш(М,200);
Пуш(М,300);
Сообщить(Поп(М));
Сообщить(Поп(М));
Сообщить(Поп(М));
9 Dmitriy_76
 
03.08.16
15:23
(8)

если еще раз вызвать ПОП ???
10 Кирпич
 
03.08.16
15:25
(9) "если еще раз вызвать ПОП ???"
это тебе домашнее задание
11 Mauser
 
03.08.16
15:27
(8) Двоешник

Пуш - вставить в позицию 0
Поп - вернуть [0] и удалить в позиции 0
12 Garykom
 
гуру
03.08.16
15:30
(8) Так и вспоминаю историю когда два друга бухают но один при этом asm учит.
Затем которые не учит идет к холодильнику и push курица в холодильник - pop курица из холодильника, причем озвучивая...
13 Кирпич
 
03.08.16
15:30
(11) сам ты двоешник
Пуш - это засунуть в стек
Поп - это вытащить из стека
14 Mauser
 
03.08.16
15:31
(13) Чо, правда, что-ли?
15 Кирпич
 
03.08.16
15:32
(14) да
16 Mauser
 
03.08.16
15:34
(15) А не обманываешь, двоешник?

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

Функция Поп(Стек)
    Результат = Стек[0];
    Стек.Удалить(0);
    Возврат Результат;
КонецФункции
17 Serginio1
 
03.08.16
15:36
18 Кирпич
 
03.08.16
15:36
(16) результат тот же
19 Кирпич
 
03.08.16
15:37
(17) бугага. явилась я :))
20 Mauser
 
03.08.16
15:37
(18) "Ну оно же работает"...
21 b_ru
 
03.08.16
15:37
(16) а не наркоман ли ты часом?
22 Mauser
 
03.08.16
15:38
(21) А чо, есть чо?
23 orefkov
 
03.08.16
15:39
(16)
Сам ты двоечник.
Тогда каждый пуш/поп требует копирование всех элементов массива на новое место - O(n). А вариант кирпича - только при реаллокации массива. Массив 1С не на списке сделан, а на векторе, где память выделяется с запасаом.
24 Кирпич
 
03.08.16
15:40
(16) Стек это абстракция, которая делает Пуш и Поп. А как оно работает внутри, никому не интересно.
25 PR
 
03.08.16
15:40
(16) Месье любит еплю по-взрослому?
Чтобы-таки со вставкой именно в начало и смещением всех элементов?
Типа мозг не переваривает работу стека в обратном порядке с конца?
26 Mauser
 
03.08.16
15:40
(23) Тебе в (24) ответили =)
27 Serginio1
 
03.08.16
15:42
(19) Я всего навсего ссылочку на
Метод Push() добавляет элемент в вершину стека.

Pop()


Метод Pop() удаляет и возвращает элемент из вершины стека. Если стек пуст, генерируется исключение типа InvalidOperationException
28 Garykom
 
гуру
03.08.16
15:42
(25) а где гамак?
29 Mauser
 
03.08.16
15:44
(28) Гамак зимой, без лыж нельзя
30 PR
 
03.08.16
15:46
+(25) Хотя...
С учетом того, что вставить для массива это смещение делает само...
31 PR
 
03.08.16
15:47
(27) Это всего-лишь смотря что считать верхом.
32 Йохохо
 
03.08.16
15:49
(30) раз само несчетово, автор в домике ататат не применять
33 Это_mike
 
03.08.16
15:49
хоссподя. новый выводок...
34 PR
 
03.08.16
15:50
(32) Че?
35 PR
 
03.08.16
15:51
(33) Твой мозг родил какой-то новый выводок и ты решил нам поплакаться или че?
36 Это_mike
 
03.08.16
15:52
(35) Не, новые дятлы вылупились...
37 Это_mike
 
03.08.16
15:53
(35) И плакать не надо.
будем смеяться. до слез..
38 PR
 
03.08.16
15:53
(36) Ты дома дятлов разводишь?
39 Garykom
 
гуру
03.08.16
15:54
(37) да после 86 сейчас в топе 95
40 detec
 
03.08.16
15:56
(0 Несколько лет программировал на 1С 8 - ни разу не пришлось задумываться о дополнительных структурах данных, на которые принято рассчитывать в других языках. Мой совет - не парься по этому поводу.

З.Ы. Сейчас практикую Java, и эти структуры данных применяю только во всяких дебильных задачках на т.н. "знание основ".
41 Кирпич
 
03.08.16
15:57
(40) да чо ты так серьёзно сразу. просто потрепались. дятла поймали...
42 Это_mike
 
03.08.16
15:59
(40) ну вот задачка на знание основ.
Сложная анкета. Нужна идея как сделать.
43 Кирпич
 
03.08.16
15:59
+(41) они раньше на ООП и goto слетались. теперь и на стек хорошо идут
44 Serginio1
 
03.08.16
16:00
(31) Есть разница между добавить и вставить?
45 PR
 
03.08.16
17:00
(44) Эээ... вообще есть.
Добавить в конец добавляет, а вставить в заданную позицию вставляет.
46 Serginio1
 
03.08.16
17:15
(45) Как хорошо сдесь сказато
http://www.cyberforum.ru/cpp-beginners/thread436303.html

Стек это стопка книг. Читать-писать можно только в верней. Сняли книгу - она пропала, все что в ней было написано - недоступно.

https://ru.wikipedia.org/wiki/Стек
47 Serginio1
 
03.08.16
17:17
А вот, что предлагается в 16 это взять книгу снизу и потратить усилия пропорциональных количеству книг
48 Mauser
 
03.08.16
17:20
(47) Надо создать Врап = Новый ComОбьект и использовать ъТип ?
49 Tateossian
 
03.08.16
17:26
(40) А мне очень нравится битовый набор. Часто нужна такая коллекция. Что применять вместо?
50 Garykom
 
гуру
03.08.16
17:27
(46) А терь реализовать плиз очередь на стеке(ах)
51 Garykom
 
гуру
03.08.16
17:27
(49) Число, строку, ТЗ
52 Tateossian
 
03.08.16
17:28
(16) Ужасная реализация у вас обоих. Это СТАТИЧНЫЕ функции,

то есть оптимально создавать как обработку, а потом вызвать метод, типа Стек.Положить(1), где стек - Обработки.Стек.Создать();
53 Tateossian
 
03.08.16
17:28
(51) Это же адовый изврат тормозной (по сабжу юзаю соответствие обычно). Строки только в крайнем случае.
54 Кирпич
 
03.08.16
17:33
(47) это если в компиляторе каком нибудь, но не в 1С. В 1С метод (16) будет работать с такой же скоростью как и (8), и даже быстрее, если стек маленький. Ибо время тратится на Г = М.ВГраница();
Если в такой стек запихнуть 100000 значений, то (16) будет гораздо тормознее, чем (8). ибо будет массив постоянно копироваться.
55 Garykom
 
гуру
03.08.16
17:34
(53) Соответствие память жрет как не в себя, если большой сильно набор даже гигов не хватит ))
56 Tateossian
 
03.08.16
17:35
(55) Мне тут важнее быстродействие. А по памяти - да, так и есть.
57 H A D G E H O G s
 
03.08.16
17:36
(23) Откуда инфа про вектор массива?
58 Mauser
 
03.08.16
17:37
(52) Миссионер от ООП?
59 Garykom
 
гуру
03.08.16
17:37
(57) Реверс инженеринг
60 H A D G E H O G s
 
03.08.16
17:39
(59) Был бы вектором - не было бы деградации быстродействия чтения при увеличении размера и была бы деградация при добавлении элементов, а не наоборот, как сейчас.
61 Кирпич
 
03.08.16
17:41
(60) ну добавить() работает в разы быстрее чем вставить(). это факт.
62 Garykom
 
гуру
03.08.16
17:44
(60) подразумевается http://cppstudio.com/post/8453/

и да если наш динамический массив вырос то или долго перекидываем данные в новый массив побольше или просто делаем составной массив добавляя новые вектора

итого добавляться оно будет шустро при любых объемах, но вот работа(доступ) с элементами замедляется на преобразованиях между несколькими векторами, получением нужного
63 H A D G E H O G s
 
03.08.16
17:45
(61) вставить должна найти элемент за который надо вставить и связать список, так что не показатель
64 Кирпич
 
03.08.16
17:48
(63) ну есть еще аргумент "делать массив на связанных списках это дебилизм"
интересно, как можно проверить как оно внутри устроено.
65 Garykom
 
гуру
03.08.16
17:49
(64) хорроший аргумент веско-убойный
66 Serginio1
 
03.08.16
17:52
(48) Причем тут  Врап = Новый ComОбьект и использовать ъТип ?

Иногда проще весь алгоритм вынести либо в DLL или динамически скомпилировать.
И надеюсь, что 1С все таки сделает возможность передачи объектов в Native ВК и тогда синтаксис будет максимально приближен к C#.
67 Mauser
 
03.08.16
17:56
(66) Карфаген должен быть разрушен!
68 Garykom
 
гуру
03.08.16
17:57
(66) А потом другие java захотят или js скриптики выполнять в своей 1CVM
69 Serginio1
 
03.08.16
18:04
(68) Так кто мешает? Если хочется -- делай!
Бери мои исходники и прикручивай. Скоро статью напишу.
70 Garykom
 
гуру
03.08.16
18:08
(69) Пока отложил это есть более интересные проекты.
И пока не придумал способа монетизации, а работать за идею уже надоело.
71 Garykom
 
гуру
03.08.16
18:09
(70)+ Ладно бы еще ради новых знаний/опыта но тут опыта ноль, тупой кодинг нескоко дней с отладкой
72 Asmody
 
03.08.16
18:10
А теперь сделайте мне, пожалуйста, конкурентную очередь на несколько пользователей.
73 hitodom
 
03.08.16
18:13
(72) в 1с?
74 Garykom
 
гуру
03.08.16
18:13
(72) Очередь выполнения или хранения?
75 Garykom
 
гуру
03.08.16
18:15
(74)+ с гонками что делать если будут?
76 Asmody
 
03.08.16
18:15
(73) А что смущает?
(74) Не принципиально: и кладем, и достаем вкучером.
77 hitodom
 
03.08.16
18:16
(76) если только на регистре сведений
78 Asmody
 
03.08.16
18:16
(75) Посылать матом сообщение разработчикам.
79 Garykom
 
гуру
03.08.16
18:19
(78) Идея хорошая думал просто блокировками разрешать

(76) Если и кладем и достаем, пропускать вперед тех кто кладет если доставать нечего?
И уточнение когда достаем оно там остается или пропадает?
80 Garykom
 
гуру
03.08.16
18:20
(79)+ очередь то коробка с товаром или коробка с информацией?
81 Asmody
 
03.08.16
18:21
(79) Ну, это уже детали.
82 Garykom
 
гуру
03.08.16
18:22
(81) Это нифига не "уже детали" для решения задачи.
83 Tarzan_Pasha
 
03.08.16
18:59
дерево, граф, дек, список
84 vermazar
 
03.08.16
20:05
(4) А структура?
85 Звездец
 
03.08.16
20:08
(84) хочешь ты чего? структура, массив, стек, очередь и тд вещи немного разные. Что-то есть в 1с, чего-то нет. То чего нет пока вроде не особо и надо, обходимся как-то. Если бы было может где-то и применилось бы, хз так на вскидку придумать где
86 Serginio1
 
03.08.16
20:08
87 Звездец
 
03.08.16
20:10
(86) действительно, что же еще ты мог написать, естественно .нет )))
88 Serginio1
 
03.08.16
20:12
(87) Естественно показан пример реализации конкурентной очереди. Но тебе же это не нужно.
89 Звездец
 
03.08.16
20:15
(88) если в каждом случае в 1с пихать net, если в нем что-то реализовано иначе, то зачем тогда вообще 1с. Некоторые вещи хочется обсудит именно со стороны возможностей платформы и только
90 zak555
 
03.08.16
20:16
(84) не гарантируется всегда и та же последовательность
91 mkalimulin
 
03.08.16
20:17
(84) Структура есть.
92 Serginio1
 
03.08.16
20:21
(89) Читай внимательно 72. Что скажешь если .Net станет частью платформы?
93 Звездец
 
03.08.16
20:22
(92) вот и мне интересно, возможно ли сделать очередь на чисто 1с.  Вот когда станет частью, так и будем тогда все поголовно изучать net в совершенстве
94 Serginio1
 
03.08.16
20:25
(93) Не сделаешь. Нет примитивов синхронизации.
Для примера

https://habrahabr.ru/post/241706/
95 Garykom
 
гуру
03.08.16
20:49
(94) Семафоры куда дел? Это же классика мультитридинга
96 mehfk
 
03.08.16
21:18
(92) Чтобы это тормозное г0вн0 стало частью платформы? - Да нафиг не нужно.
97 Звездец
 
03.08.16
21:23
(96) будем потом говорить что восьмерка летала, а теперь ...
98 Serginio1
 
03.08.16
22:47
(96) Можно поподробнее про тормозное?
https://habrahabr.ru/post/304542/

Выполняет 400 000 вызовов в секунду. 1С делает 150 000. Да через ВК быстрее вызов падает более чем в 10 раз до 30 000. Но там можно сократить в 2 раза как минимум. И того проигрыш в 2 раза. Что касается скомпилированного кода то он значительно быстрее 1С.
Объясните вашу методику. Кроме того в большинстве нужна даже не скорость, а доступ к библиотекам, асинхронное выполнение. Например
.Net в 1С. Парсинг сайтов, multipart/form-data, gzip итд
1C Messenger для отправки сообщений, файлов и обмена данными между пользователям
Доступ к хранилищу сертификатов ЭП из сеанса под IIS

А вот из-за того, что на линуксе нет СОМ то люди используют вэб сервисы, которые тормозные до нельзя это ни кого не волнует.
99 Mauser
 
04.08.16
00:02
(98)
- Здравствуйте, уважаемые программисты .net! Сегодня я расскажу вам, как корректно отразить удержание алиментов из заработной платы сотрудника или дохода должника согласно статьи 109 СК РФ и части 3 статьи 98 ФЗ "Об исполнительном производстве" от 02.10.2007 № 229-ФЗ...
...как "пошел наъ"?
100 Звездец
 
04.08.16
00:04
стр следующая
101 Звездец
 
04.08.16
00:05
(98) (99) ну не понимаю я холиваров на тему: что лучше круглое или квадратное? каждый инструмент должен использоваться по предназначению
102 Garykom
 
гуру
04.08.16
00:11
(101) А если научить квадратное кататься? И круглое стоять ровно ))
103 PR
 
04.08.16
01:09
Мда, и что ветка не в пятницу появилась
104 Asmody
 
04.08.16
01:20
(98) В linux используют сокеты. На более высоком уровне для межпрограммного взаимодействия — dbus (которая тоже поверх сокетов). То, что 1С их не поддерживает — видимо, пока не надо было. 
105 orefkov
 
04.08.16
02:50
(57)
Инфа об устройстве массива в 1С получена путём дизассемблирования. Внутри там простой vector<Value> и код, простой как три рубля. Посмотреть код своими глазами можно очень просто, если у вас есть снегопат. В движок снегопата, к примеру в функцию main вставляем следующий код:

    IValueArray&& va;
    currentProcess().createByClsid(CLSID_ValueArray, IID_IValueArray, va);
    dumpVtable(&&va);

Ну и в каталоге dump появляется дизасм внутренней реализации интерфейса объекта Массив. Весь листинг сюда вываливать не буду, только функция count()
Function 3 uint count()
  address is 0x101D8BC0 - offset is 0x168BC0
     55                      push ebp
     8B EC                   mov ebp,esp
     8B 4D 08                mov ecx,[ebp+0x8]
     8B 41 18                mov eax,[ecx+0x18]
     2B 41 14                sub eax,[ecx+0x14]
     C1 F8 03                sar eax,0x3
     5D                      pop ebp
     C2 04 00                retn 0x4
В-общем, по смещению 0x14 лежит вектор, который в 1С реализуется как три указателя - первый указывает на начало данных, второй на конец данных, третий на конец выделенного блока памяти. Как видим для определения количества элементов из указателя на конец данных вычитается указатель на начало данных и делится на 8 (это размер Value, значения 1С). Никаких шаманств и оптимизаций, наподобие разбиения массива на подсписки - нет. В чём каждый желающий может удостоверится, изучив полный дамп всех виртуальных функций объекта Массив.
106 H A D G E H O G s
 
04.08.16
03:09
(105) Удивился. Проверил.
Да, вы правы.

    Массив1=Новый Массив;
    Для Счетчик=1 по 10 Цикл
        Массив1.Добавить(10);
    КонецЦикла;
    Массив2=Новый Массив;
    Для Счетчик=1 по 1000000 Цикл
        Массив2.Добавить(10);
    КонецЦикла;

    Начало=ТекущаяУниверсальнаяДатаВМиллисекундах();
    Значение=Массив1[9];
    Конец=ТекущаяУниверсальнаяДатаВМиллисекундах();
    Сообщить("Время получения из массива 1: "+Строка(Конец-Начало));
    
    Начало=ТекущаяУниверсальнаяДатаВМиллисекундах();
    Значение=Массив2[9990];
    Конец=ТекущаяУниверсальнаяДатаВМиллисекундах();
    Сообщить("Время получения из массива 2: "+Строка(Конец-Начало));


Все таки это классический массив - кусок памяти.

Повелся на
Решение разреженных СЛУ
пост 44.
107 orefkov
 
04.08.16
03:20
(106)
Я вам даже больше скажу по-секрету - СписокЗначений унутре на самом деле не список, а тоже вектор (только тсссс...). Вот ТаблицаЗначений - там уже да, вроде бы применяется страничная организация хранения строк, но зуб давать не буду, досконально не разбирался.
108 orefkov
 
04.08.16
09:23
(106)
Я в той ветке отписал, в чём могут быть причины.
109 Кирпич
 
04.08.16
09:36
(108) а вот нафига 1С так заморочилась с вещественными числами? Интересно, а в каком нибудь SAP тоже так же презрели double?
110 Кирпич
 
04.08.16
09:38
+(109) при чем, знавал одного гения, который на 1С считал что-то такое, что даже в числа 1С не влазило. Я ему делал ВК для вычислений с гигантскими числами.
111 H A D G E H O G s
 
04.08.16
09:39
(109) это указатель на данные наверно
112 Кирпич
 
04.08.16
09:40
(111) не. я про то, что у них в 1с своя реализация вещественного типа.
113 orefkov
 
04.08.16
10:13
(112)
Она у них такая еще с 7ки. Только название класса поменяли с CNumeric на Numeric - внутри всё один в один. Видимо, решили что для точных бухгалтерских вычислений double не хватит. Это были лихие 90ые, всё считалось в миллионах, мы умножали, как могли.
114 Serginio1
 
04.08.16
10:25
(104) Вот .Net Core используется как на Линуксе,Windows,IOS,Android.
  Да функционал по сравнению с .Net 4.6.2 урезан, зато кроссплатформен. Сейчас допишу и выложу статью и исходники.
Поддержка Динамиков, Методов раширения, Вывод типов в дженерик типах в том числе поиск по методам расширения и ограничениям. Можно добавить синонимы для методов и свойств типа и вызывать например методы String на русском.
115 Кирпич
 
04.08.16
10:34
Скорее бы уже 1с загнулась и перейти на этот .NET, чтобы Serginio1 уже не мучил бы людей своими динамиками и линками с дженериками.
116 Serginio1
 
04.08.16
10:49
(115) А ты не мучайся. Просто получи удовольствие от динамиков и линков с дженериками. Мне в 1С их сильно не хватает.
117 Звездец
 
04.08.16
10:52
(116) а большему количеству здесь присутствующих важнее сформированный 6-ндфл и правильно рассчитанная себестоимость встречного выпуска. и от этого удовольствие
118 b_ru
 
04.08.16
10:52
(116) Для получения удовольствия требуется головной мозг. Он же не у всех есть.
119 Кирпич
 
04.08.16
11:21
(118) а как ты получаешь удовольствие от головного мозга? ты его ешь?
120 Кирпич
 
04.08.16
11:26
+(119) или тебе доставляет удовольствие сам факт того, что у млекопитающих есть мозг?
121 Asmody
 
04.08.16
11:32
(116) Какие дженерики? В 1С динамическая типизация.
122 b_ru
 
04.08.16
11:42
(119) Не, я его использую для творческого самовыражения.
123 Кирпич
 
04.08.16
11:45
(122) художник значит
124 b_ru
 
04.08.16
11:46
(123) неа, инженер :)
125 Кирпич
 
04.08.16
11:50
(121) ну как бы язык 1с в недалеком будущем полностью заменит C#, а неблагодарные скоты, не принимающие пришествие дотнета в 1С, сдохнут и истлеют аки мусор.
126 Кирпич
 
04.08.16
11:51
(124) слесарь-интеллигент со средним образованием. понятно.
127 b_ru
 
04.08.16
11:53
(126) Ошибся снова. Судя по количеству фейлов, собираешься избираться на пост мера Лузервилля?
128 Кирпич
 
04.08.16
11:55
(127) мэра чтоли?
129 b_ru
 
04.08.16
11:56
(128) Точно, прости за опечатку, если это так важно для тебя.
130 Кирпич
 
04.08.16
12:03
(129) это не опечатка. буквы в разных концах клавиатуры. и это очень важно.
131 Mauser
 
04.08.16
12:05
132 Serginio1
 
04.08.16
12:20
(121) Угу это прежде всего касается Linq.А там статическая типизация с анонимными типами.
В 1С очень плохо с intellisense. Посмотри на TypeScript.
Хотя он и транслируется в JS, многие пользуются им прежде всего из за intellisense и контролем за типом.
133 vermazar
 
04.08.16
13:06
Подкиньте, плз, реализацию очереди.
134 Это_mike
 
04.08.16
13:10
(133) - (3)?
135 vermazar
 
04.08.16
13:11
(134) На стек очень похоже.
136 vermazar
 
04.08.16
13:17
А как ошибки контролировать? Если стек или очередь пустые?
137 Это_mike
 
04.08.16
13:23
(136) указатель на начало равен указателю на конец.
или количество элементов в  очереди/стеке равно нулю.
в общем, зависит от реализации.
138 Кирпич
 
04.08.16
14:01
(136) хватит уже дурачком прикидываться. это все в школе, на информатике, проходят.
139 vermazar
 
05.08.16
19:36
(138) Не в каждой. Ворд, ексель.