|
какой длины может достигать "код" в выполнить(Код) ? | ☑ | ||
---|---|---|---|---|
0
andron81_81
01.02.19
✎
16:03
|
Добрый день всем.
Подскажите выполнить(код); код как известно имеет тип "текст". и вот вопрос какой длины может быть переменная код ? задача такова, что я динамически код хочу подсовывать код. Но он может быть довольно большой длины. |
|||
1
andron81_81
01.02.19
✎
16:04
|
извиняюсь тип переменной - строка .
|
|||
2
Fish
01.02.19
✎
16:05
|
Емнип, неограниченно.
|
|||
3
Fish
01.02.19
✎
16:05
|
+(2) Но могу и ошибаться.
|
|||
4
Вафель
01.02.19
✎
16:06
|
нет такого понятия "неграничено". Только в теории
|
|||
5
bolobol
01.02.19
✎
16:06
|
Пока накопителя или свопы не закончатся. Вряд ли это документированная величина - надо в 1С спрашивать.
|
|||
6
andron81_81
01.02.19
✎
16:07
|
(3) я тоже думаю неограничено. но как в реалиях.
можно , конечно, попробовать создать строку на пару сотен Мб ... |
|||
7
Кац
01.02.19
✎
16:08
|
Все ограничено, как и наша Вселенная
|
|||
8
Вафель
01.02.19
✎
16:09
|
лучше спросить: при каком размере кода начнется существенная деградация
|
|||
9
Fish
01.02.19
✎
16:10
|
(4) У тебя нет, у 1С есть: https://hkar.ru/X9Dm
|
|||
10
Hans
01.02.19
✎
16:15
|
Вот так с Выполнить нельзя писать? ТОлько что попытался. Что то написало мне.
Переменная = Выполнить(ТекстВЫполнения"); |
|||
11
Вафель
01.02.19
✎
16:18
|
юзай Вычислить
|
|||
12
andron81_81
01.02.19
✎
16:20
|
(10) что это ?
|
|||
13
andron81_81
01.02.19
✎
16:21
|
(10) и к чему ?
|
|||
14
ptiz
01.02.19
✎
16:23
|
(10) В чем бы тогда был смысл?
|
|||
15
andron81_81
01.02.19
✎
16:25
|
блин, нафлудили. короче никто не сталкивался. задач таких не было
|
|||
16
NikVars
01.02.19
✎
17:01
|
(15) Насколько большой? Мегабайты? Килобайты? 100 строк?
|
|||
17
igork1966
01.02.19
✎
17:04
|
||||
18
Hans
01.02.19
✎
17:34
|
(14) Думал динамически нужную функцию подсовывать что бы возвращала значение.
|
|||
19
Fish
01.02.19
✎
17:38
|
(18) Для этого есть (11)
|
|||
20
int32i
01.02.19
✎
18:15
|
теоретически 2^31-1 (2147483647) или 2Gb значащих символов (плюс финальный 0) для 32-битной платформы
|
|||
21
NikVars
01.02.19
✎
18:25
|
А чисто практически - весь код реготчета Баланс - 10500 строк, это примерно 500Кбайт.
|
|||
22
andron81_81
01.02.19
✎
19:48
|
(20) должно хватить )
|
|||
23
andron81_81
01.02.19
✎
19:50
|
просто вопрос во ставке кода расчета в документе некоторых реквизитов, конечно, это делается просто в конфигураторе просто функциями и процедурами. но с этим сложности - нужно корректировать оперативно алгоритмы расчета и придётся всех выгонять.
|
|||
24
Провинциальный 1сник
01.02.19
✎
19:59
|
Интересно, а внутри кода, выполняемого командой Выполнить, может присутствовать команда Выполнить?
|
|||
25
Casey1984
01.02.19
✎
20:05
|
(24) Может, КД 2.1 на этом построена :-)
|
|||
26
vde69
01.02.19
✎
20:07
|
в старых версиях 1с не поддерживала строки длинее 64к,
по этому скорее всего менее 64к вполне полезет, засем может понадобится больше - я не представляю |
|||
27
Casey1984
01.02.19
✎
20:08
|
(0) Какой большой длинны? Суй, всё влезет ;-)
|
|||
28
andron81_81
01.02.19
✎
20:13
|
(27) помню в MS SQL Server (transact SQL ) там строки не более 8 Кбайт или около того. а вот ссумированные строки каждая до 8Кб проходило :
exec (@str1+@str2+@str3) |
|||
29
vde69
01.02.19
✎
20:21
|
(28) в SQL есть ограничение - весь код вместе с параметрами должен помещаться в оперативку, путем практических проверок я пришел к выводу, что более 0.5мб ему лучше не совать, что сильно больше указаных тобой 8кб, от куда такая цифра?
|
|||
30
Casey1984
01.02.19
✎
20:22
|
(28) Для статистики посчитал код одного из обработчиков в конвертации клиента: 16300 слов, 132466 знаков. Вам хватит?
|
|||
31
andron81_81
01.02.19
✎
20:34
|
(30) там ситуация такова , что там хранимки СУБД состоящие из простого перебирания тупого IF else и их нужно перевести на язык 1с короче запрограммировать расчеты реквизитов документа.
сейчас я попробовал одну хранимку (думаю она самая большая) она весит около 300Кб . немного как больше чем у Вас ))) раза в 3 :) |
|||
32
Casey1984
01.02.19
✎
21:00
|
(31) У кого-то мозги набекрень от такой писанины :-/
|
|||
33
andron81_81
01.02.19
✎
21:11
|
(32) это производство. Ничего не поделаешь."миллион" вариантов. Системе это не потдается
|
|||
34
andron81_81
01.02.19
✎
21:12
|
(32) то есть алгоритму
|
|||
35
andron81_81
01.02.19
✎
21:13
|
(34) только простой перебор вариантов
|
|||
36
vde69
01.02.19
✎
21:20
|
(35) а сделать отдельную таблицу соответствий и в запросе простой джойн - ума не хватает ?
|
|||
37
France
01.02.19
✎
21:24
|
бан в секции как глянуть?
|
|||
38
Serg_1960
01.02.19
✎
21:24
|
Будет смешно наблюдать за попыткой подсчитать длину, когда вспомнят, что в Выполнить(Код) можно обращаться к функциям и процедурам конфигурации :)
|
|||
39
andron81_81
01.02.19
✎
21:26
|
(36) :)) досвидос
|
|||
40
France
01.02.19
✎
21:29
|
(0) в чОм вопрос то?? нет там ограничений.. ну, лет 13 назад не было
|
|||
41
andron81_81
01.02.19
✎
21:29
|
(38) а ты внимательно читал что я писал. Я же говорил, что мне оперативно вмешиваться в код надо. Твой метод имеет ньюанс :выгнать придеттся всех дабы обновить конфигу
|
|||
42
andron81_81
01.02.19
✎
21:29
|
(40) в этом и был вопрос
|
|||
43
France
01.02.19
✎
21:30
|
(42) нет там ограничений.. по сведениям 13 летней давности))
|
|||
44
andron81_81
01.02.19
✎
21:31
|
(38) кстати сейчас так и слелано.
|
|||
45
vde69
01.02.19
✎
21:33
|
(41) блин, нафига оперативно вмешиватся в код... детский сад...
сделай по нормально, сделай таблицу и пусть ПОЛЬЗОВАТЕЛИ сами оперативно вносят туда условия |
|||
46
andron81_81
01.02.19
✎
21:39
|
(45) да не выйдет я же говорю. 100 тыщ строк не хочешь пооучить в такой табле. Входных параметров в таблице до 40 не хочешь. Вот и считай сколько различных картежей в такой будет . Легче если - иначе оформить. Плюс где-то формулы. Плюс бабушки работают. Им таблички делать предлагаешь?
|
|||
47
andron81_81
01.02.19
✎
21:40
|
(45) не оформить там таблой. Не флудите
|
|||
48
vde69
01.02.19
✎
21:40
|
(46) таблички по любому лучше и БЫСТРЕЕ будет, даже если ее админить будешь ты а не пользаки
|
|||
49
andron81_81
01.02.19
✎
21:46
|
(48) проходили. Не все так просто. Пример высылать не буду. И спорить не хочу
|
|||
50
andron81_81
01.02.19
✎
21:53
|
(48) к тому же параметры входные постоянно добавляются что-то пересчитывается на ходу в алгоритме и из этих пересчетов так же как бы таблица варантов вырастает из результата опять пересчет и опять таблица. Вы такие таблицы хотите научить пользователей составлять?))
|
|||
51
andron81_81
01.02.19
✎
21:55
|
Это оформится 15 строчками алгоритма который я поправлю с легкостью. Таблу тут даже затруднииельно составить
|
|||
52
int32i
01.02.19
✎
22:13
|
(22) Я указал теоретический максимум исходя из внутреннего представления строки 1С.
Практический потолок будет ниже и будет зависеть от распределителя памяти ОС. И будет еще ниже ввиду используемого в платформе парсера рекурсивного спуска - где-нибудь он как пить дать вылетит на переполнении стека. Но зависеть это будет не от размера строки, а от сложности выражений. Нащупать этот предел можно попытаться, но бессмысленно - он будет железо\ОС\платформо -зависимым. И еще раньше надоест ждать результата ввиду непомерного времени разбора строки. Практически можно опираться на то, что при Выполнить(строкаКода) отрабатывает тот же алгоритм, что и при загрузке\разборе модулей при старте конфигурации. Я не встречал сообщений о том, что на какой-то здоровенной конфигурации платформа уходит в аут. Значит в разумных пределах ограничений на длину и сложность строкаКода нет. Но нужно учитывать на разбор оочень длинной и оочень сложной строкаКода потребуется мноого времени. |
|||
53
andron81_81
01.02.19
✎
22:31
|
(52) короче не стоит связываться, да?))
|
|||
54
France
01.02.19
✎
22:32
|
(53) на "Выполнить" сделали конфу, за которую заплатили овер чем пару лямов в баксах.. так что, решай, стоит ли..
|
|||
55
andron81_81
01.02.19
✎
22:37
|
(54) то есть? Заплатили разработчики за свои косяки или заказчики разработчикам? Как расценивать ваш коментарий как камень в огород "выполнить" или как наоборот крутой подход?
|
|||
56
andron81_81
01.02.19
✎
22:38
|
Или я вообще ничего не понял
|
|||
57
France
01.02.19
✎
22:39
|
(55) подход, который сработал в свое время.. и заказчик и исполнитель в итоге остались довольны
|
|||
58
France
01.02.19
✎
22:39
|
но, по догмам 1С так поступать нельзя
|
|||
59
andron81_81
01.02.19
✎
22:47
|
(58) по идее ведь можно всегда оставить путь отхода. Сделать 2 варианта:
1. Выполнить "ФункцияИзКонфигуратора("... 2. Выполнить строкаКоманд. В данном случае 1. Это путь отхода. Который менее по идее удовлетворяет догмам, наверно не будет нагружать ресурсы. |
|||
60
France
01.02.19
✎
22:52
|
(59) в этом деле я бы заморачивался на безопасность, а не на ресурсы..
когда надо было выбирать между "Выполнить" и наконфигурачить - в итоге наконфигурчил.. хотя, был участником того самого проект с "Выполнить". пят лет.. |
|||
61
andron81_81
01.02.19
✎
22:53
|
(52) можете прояснить последнее свое предложение. Мне показалось, что оно противоречит первому предложению этого же абзаца(
Практически можно опираться...) |
|||
62
andron81_81
01.02.19
✎
22:56
|
(60) под безопасностью что имеете ввиду? Что-то вроде инъекций?))
|
|||
63
andron81_81
01.02.19
✎
23:02
|
(62) риск иньекции?
|
|||
64
France
01.02.19
✎
23:08
|
(63) ну, если "инекции" - это возможность для дебила (и не только) порушить все, то, таки да...
|
|||
65
France
01.02.19
✎
23:09
|
кстати, в моем примере через выполнить операции над данными не выполнялись)) через выполнить создавали контекст выполнения))
|
|||
66
int32i
02.02.19
✎
00:36
|
(61) Из УТ_10_3_45_4 самый большой модуль CommonModule.ЭлектронныеДокументыВнутренний.Module.txt имеет размер 4081917 байт или ~3.8Мб. Платформа его без проблем загружает (разбирает парсером и переводит в байт-код для исполнения). Значит и Выполнить(строкаКода) где строка кода будет порядка 4Мб платформа переварит без проблем. И в первом и втором случае отрабатывает один и тот же парсер (компилятор) платформы.
Думаю что платформа без проблем загрузит модуль размером и в 40Мб. Думаю что разработчики поиздевались и потестировали ее на такие размеры. Но при загрузке (разборе и компиляции) 40Мб кода платформа уже ощутимо призадумается. Но справится. Значит и Выполнить(40Мб) справится. Только при загрузке модуля платформа буде призадумываться один раз, а при Выполнить(..) каждый раз и это может быть уже неприемлемым. Также думаю, что на 400Мб кода разработчики ее уже не тестировали и слетит она как пить дать. Ну или при 800Мб слетит. Но эта граница будет железо-ос-версия-зависимой т.к. будет зависеть от взаимодействия платформа-ос-железо. Но зачем нам искать границу около 400Мб, если уже, к примеру, на 40Мб нам неприемлемо по быстродействию? Вспомните неповоротливость и прожорливость EDT. Она занимается тем же самым - код разбирает. Вы же не хотите чтобы Ваше решение через Выполнить() было таким же. Поэтому Вам нужен не некий теоретический предел по размеру, а практически приемлемый предел по критерию размер-быстродействие. А его можно только нащупать. Удачи. ПС. Размер и сложность выражений разные вещи. 40Мб кода вида "а=1" это не тоже что "а=1+2+3+...+12334209808" на 40Мб. Сложное выражение рекурсивному парсеру переваривать намного сложнее и он скорее сломается по исчерпанию стека. Памяти в системе может быть и 4Гб, а стек все равно 1Мб на процесс для 32-битной системы. Опять же Ваши Выполнить(..) щупать надо, а не теоретизировать. |
|||
67
France
02.02.19
✎
00:41
|
(66) у платформы нет компилятора..
|
|||
68
int32i
02.02.19
✎
00:51
|
(67) У фирмы 1С нет компилятора языка 1С в машинный код. У фирмы 1С есть компилятор языка 1С в байт-код виртуальной машины 1С.
ПС. У меня есть компилятор языка 1С в машинный код для x86 на базе LLVM (https://forum.infostart.ru/forum9/topic178313/). Правда я его до ума так и не довел - не нужен никому :( |
|||
69
mikeA
02.02.19
✎
05:18
|
(31) Если алгоритмы сложные, я бы сделал через внешние обработки. Отлаживать на порядок удобнее.
Был опыт и так и так. Сложные алгоритмы отлаживать в Выполнить то ещё удовльствие. Хотя можно конечно извернуться. |
|||
70
andron81_81
02.02.19
✎
08:23
|
(66) ну там бывают расчеты(формулы) , а так же если тогда конструкции(их бывает прилично) . Кстати есть пара рекурсивных процедур, правда глубина их не велика(у меня с рекурсией мозги меньше кипят, поэтому этот метод и использую)
|
|||
71
andron81_81
02.02.19
✎
08:24
|
(69) очень интересно, но это как? Не могли бы попотробнее.
|
|||
72
andron81_81
02.02.19
✎
08:25
|
Через внешние обработки
|
|||
73
Конструктор1С
02.02.19
✎
08:48
|
(0) НЕ надо писать такой громоздкий код. Это автоматом грозит сложностью его сопровождения
|
|||
74
mikeA
02.02.19
✎
09:00
|
(71)
В модуле обработке создаёшь экспортную функцию ЗаполнитьМойРеквизит(Параметры). В коде функции помещаешь алгоритм вычисления значения реквизита. При заполнении реквизита создаёшь объект обработки и вызываешь у него эту функцию. Если алгоритмы заполнения реквизитов в документах отличаются, можно делать по одной обработке на документ и в ней несколько функций для заполнения реквизитов, ЗаполнитьРеквизит<ИмяРеквизита>. Вот здесь уже и использовать Вычислить: Объект.ИмяРеквизита= Вычислить(СтрШаблон("ОбработкаЗаполнения.ЗаполнитьРеквизит%1(ПараметрыЗаполнения)", "ИмяРеквизита")); Если конфигурация с БСП, обработку можно поместить в справочник Дополнительные отчёты и обработки, там есть функция для создания объекта обработки по ссылке на элемент справочника. Есть ещё момент по отладке. Там где будешь хранить соответствия документов, реквизитов, и обработок заполнения, сделай тип для реквизита обработки составной, строка и ссылка на Дополнительные отчёты и обработки. На этапе тестирования пишешь в реквизит строку - путь к обработке на диске в общей папке, доступной с сервера. В этом случае при заполнении реквизита создаешь объект обработки с помощью ВнешниеОбработки.Создать(ПутьКОбработке). Тогда можно просто открыть файл обработки в конфигураторе и поставить breakpoint. Только открывать нужно с сетевого диска, даже если он находится на твоём компьютере. А отлаживать внешние обработки из справочника БСП задача нетривиальная. Если нет БСП, можно сделать свой справочник для хранения внешних обработок. Я кстати так и поступил, хотя БСП была) Там особой магии нет, единственно в управляемом приложении надо учитывать особенности интерфейса чтения/записи файла. |
|||
75
andron81_81
02.02.19
✎
12:14
|
(74) блин, мой скиллы не настолько круты , чтобы не возникли вопросы по твоим комментариям: то есть ты предлагаешь ссылаться на функции и процедуры обработки , которые я могу, отредактировав в тестовой базе , подгрузить в режиме предприятия . Верно ? если я верно понял, то это то что нужно , очень интересно и круто !!!
|
|||
76
dmpl
02.02.19
✎
12:29
|
(23) Не нужно корректировать оперативно. Нужно организовать нормально процесс разработки. От таких оперативностей потом хаос получается.
|
|||
77
andron81_81
02.02.19
✎
12:36
|
(76) Ты наверно ген. директор промышленного предприятия, что так утверждаешь ? нет? тогда ты умник попробуй ген. диру предприятия объяснять это в захолустном городке (с убитыми напрочь рабочими местами), которому необходимо налету скорректировать нормирование исходя из сложившихся хотелок заказчика которые накапливаются постоянно. И это всё нужно делать без отрыва расчета заказа, то есть без обновления конфиги.
|
|||
78
ДенисЧ
02.02.19
✎
12:38
|
(77) Я объяснял. Меня понимали.
Я говорил "А давайте выгоним всех" (в момент пика отгрузки) из базы. Они посидят полчасика, клиенты подождут пару часов, ничего страшного... И ничего, сразу же все хотелки сиюсекунду отваливались. |
|||
79
andron81_81
02.02.19
✎
12:41
|
(78) Ребята , пожалуйста, не засоряйте тут орг. советами. тут люди дело говорили сейчас из-за вашего флуда , они не прочитают моих вопросов и не ответят.
|
|||
80
ДенисЧ
02.02.19
✎
12:48
|
(79) Ты не понимаешь, куда задаёшь вопросы. Особенно в субботу. Тут всегда флуд. И только скилл "Истинный мистянин - 70" позволяет отсеять нужное от остального.
|
|||
81
dmpl
02.02.19
✎
13:00
|
(77) Автоматизируя бардак получишь автоматизированный бардак. В итоге постоянно головняк будет и фантазии пользователей. Если ген.дир не дурак - он поймет. Если дурак - нечего с ним работать, все равно это предприятие будет, в лучшем случае, прозябать с переменным успехом, а то и совсем загнется.
|
|||
82
mikeA
02.02.19
✎
13:32
|
(75) Да.
|
|||
83
andron81_81
02.02.19
✎
13:56
|
(82) большое спасибо . это отличный вариант.
|
|||
84
vde69
02.02.19
✎
15:01
|
(74) если уж допиливать, то я-бы вообще сделал еще круче:
делаем несколько общих модулей в которых описываем простые интерфейсы "заглушки", в конфигурации юзаем их как будто там есть бизнес логика. а теперь следим за руками: в тестовой делаем расширение, можно даже несколько, которые изменяют интерфейсы заглушки. и в ПОЛЬЗОВАТЕЛЬСКОМ режиме загружаем эти расширения юзерам (даже можно каждому юзеру свое расширение). поменять код для конкретного юзера? - пожалуйста, выгружаем у него старое расширение и подгружаем моджифицированое... |
|||
85
sieben
02.02.19
✎
15:17
|
(84) > каждому юзеру свое расширение
Это как? |
|||
86
vde69
02.02.19
✎
15:42
|
(85) легко... расширения они разные бывают, некоторые из них можно подключать выборочно а не всем...
|
|||
87
Сияющий в темноте
03.02.19
✎
18:37
|
У расширений одна проблема-конфы в режиме совместимости ими давятся.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |