|
v7: Строковый калькулятор для 1С 7.7 | ☑ | ||
---|---|---|---|---|
0
Adecvator
23.10.12
✎
14:47
|
Ну так вот функция - "Шаблон", превысила допустимую длины выражения
Число(Шаблон("["+_Выражение+ "]")) Что делать? |
|||
1
Ёпрст
23.10.12
✎
14:49
|
забить
|
|||
2
Adecvator
23.10.12
✎
14:51
|
(1) Остро :)
|
|||
3
Ёпрст
23.10.12
✎
14:51
|
на вот, рыбу от калькулятора:
http://zalil.ru/33882204 |
|||
4
Ёпрст
23.10.12
✎
14:52
|
а так, разбивать строку на подстроки или использовать ВК
|
|||
5
Adecvator
23.10.12
✎
15:00
|
(4) а какие функции ВК?
|
|||
6
Ёпрст
23.10.12
✎
15:06
|
(5) вся математика вестимо.
|
|||
7
Ёпрст
23.10.12
✎
15:07
|
или ты строки для шаблона где-то хранишь для последующего расчета?
Они откуда берутся то ? |
|||
8
Adecvator
23.10.12
✎
15:29
|
(7) Есть мега обработка на н-цать тыс. строк и есть строка в которой вычисляться: _Выражение = ТО.ПолучитьЗначение(ТО.НомерСтроки,ИдКол);
П4=П4+Число(Шаблон("["+_Выражение+ "]")); |
|||
9
badboychik
23.10.12
✎
15:32
|
не можешь сам написать функцию разбора строки и стековую реализацию приоритетов операций с учетом скобок? Какой ты программист тогда! )))
|
|||
10
Adecvator
23.10.12
✎
15:40
|
к примеру есть выражение: +0-(БухИт.СКД(СчетПоКоду("66",ПланыСчетов.НСБУ),1)- БухИт.СКК(СчетПоКоду("66",ПланыСчетов.НСБУ),1)). Как его распарсить?
|
|||
11
Chai Nic
23.10.12
✎
15:45
|
(10) Преобразовываешь выражение в постфиксную форму (обратную польскую), далее вычисляешь через стек
|
|||
12
Mikeware
23.10.12
✎
16:02
|
(11) "В моем доме попрошу не выражаться!"©тов.Джабраил
|
|||
13
Ёпрст
23.10.12
✎
17:08
|
чорт.. не в ту тему отписал, автор, смотри ВыполняемыйМодуль из 1cpp - свои выражения обернешь в функцию, её и выполнишь.
|
|||
14
Ёпрст
23.10.12
✎
17:09
|
это проще всего
|
|||
15
Adecvator
23.10.12
✎
18:29
|
Модуль = СоздатьОбъект("ВыполняемыйМодуль");
Модуль.УстановитьМодуль(" |Число(Шаблон(["+ТО.ПолучитьЗначение(ТО.НомерСтроки,ИдКол)+"]"); Модуль.КомпилироватьИВыполнитьМодуль(); П4 = П4 + Модуль; Вот нарыл на форуме. Ёпрст3, постил :) может кто подскажет, как обратиться к результату? |
|||
16
Ёпрст
23.10.12
✎
18:30
|
(15) :)
|
|||
17
Ёпрст
23.10.12
✎
18:31
|
Ёпрст3 - это я, если че..
|
|||
18
Ёпрст
23.10.12
✎
18:34
|
Модуль = СоздатьОбъект("ВыполняемыйМодуль");
Модуль.УстановитьМодуль("Функция Вася() Сообщить(""хеллоу!""); КонецФункции"); Модуль.КомпилироватьИВыполнитьМодуль(); Модуль.Вася(); |
|||
19
Ёпрст
23.10.12
✎
18:34
|
вот заместо функции Вася воткнешь возврат своего выражения..
|
|||
20
Adecvator
24.10.12
✎
11:04
|
Вот:
Модуль.УстановитьМодуль("Функция РасчетСумм() Число(Шаблон(["+Выражение+"])); КонецФункции"); Модуль.КомпилироватьМодуль(); Модуль.ВыполнитьМодуль(); Прикол в чем переменная выражение содержит: (БухИт.СКД(СчетПоКоду("66",ПланыСчетов.НСБУ),1)- БухИт.СКК(СчетПоКоду("66",ПланыСчетов.НСБУ),1)) И вот как он ругается: (1)Функция РасчетСумм() Число(Шаблон(<<?>>[+(БухИт.СКД(СчетПоКоду("31",ПланыСчетов.НСБУ),1)- БухИт.СКК(СчетПоКоду("31",ПланыСчетов.НСБУ),1))])); КонецФункции Ожидается выражение (1)Функция РасчетСумм() Число(Шаблон([+(БухИт.СКД(СчетПоКоду("31",<<?>>ПланыСчетов.НСБУ),1)- БухИт.СКК(СчетПоКоду("31",ПланыСчетов.НСБУ),1))])); КонецФункции Слишком много фактических параметров (1)Функция РасчетСумм() Число(Шаблон([+(БухИт.СКД(СчетПоКоду("31",ПланыСчетов.НСБУ)<<?>>,1)- БухИт.СКК(СчетПоКоду("31",ПланыСчетов.НСБУ),1))])); КонецФункции Ожидается символ ')' |
|||
21
1Сергей
24.10.12
✎
11:06
|
(20) во-первых, где Возврат?
Во-вторых, кавычки где? |
|||
22
Ёпрст
24.10.12
✎
11:07
|
(20) биомать а ?
Да выкинь ты нахрен свой Шаблон оттуда! |
|||
23
Ёпрст
24.10.12
✎
11:07
|
че ты к нему привязался то ?
|
|||
24
Ёпрст
24.10.12
✎
11:07
|
Модуль.УстановитьМодуль("Функция РасчетСумм() возврат "+Выражение+"])); КонецФункции"); Модуль.КомпилироватьМодуль(); Модуль.ВыполнитьМодуль();
|
|||
25
Ёпрст
24.10.12
✎
11:08
|
Модуль.УстановитьМодуль("Функция РасчетСумм() возврат "+Выражение+"; КонецФункции"); Модуль.КомпилироватьМодуль(); Модуль.ВыполнитьМодуль();
|
|||
26
1Сергей
24.10.12
✎
11:09
|
Сообщить("Результат: "+Модуль.РасчетСумм());
Не? |
|||
27
Mikeware
24.10.12
✎
11:10
|
(22) Ник, однако, поменять надо. на Неадекватор
|
|||
28
Adecvator
24.10.12
✎
11:17
|
Как определить переменные обработки, такие как БухИтоги, через назначить контекст не фурычет?
|
|||
29
Adecvator
24.10.12
✎
11:18
|
Модуль.УстановитьМодуль("Функция РасчетСумм() Возврат Число("+ТО.ПолучитьЗначение(ТО.НомерСтроки,ТДетал.ИдКолВал)+"); КонецФункции"); Модуль.НазначитьКонтекст(Контекст); Модуль.КомпилироватьМодуль();
Модуль.ВыполнитьМодуль(); |
|||
30
Mikeware
24.10.12
✎
11:28
|
(28) Документацию читать будем?
---------------- Класс ВыполняемыйМодуль / ExecuteModule Предназначен для работы с динамическими модулями, передаваемыми в параметре метода в качестве строки. После установки текста модуля скомпилируйте и выполните его. Модуль инициализируется и выполнит операторы, расположенные в конце тела модуля, вне методов. После этого можно обращаться к переменным модуля, как к свойствам этого объекта, и к методам модуля, как к методам объекта. Важно: класс поддерживает исключения 1С. Свойства <ИмяПеременной> Доступ: чтение и запись. Тип: Любой. Описание: Позволяет обращаться к переменным модуля, объявленным в тексте модуля, как к свойствам объекта. |
|||
31
Ёпрст
24.10.12
✎
11:49
|
(28)
Перем Федя Экспорт; //******************************************* Процедура Сформировать() Федя = "Жмот"; Модуль = СоздатьОбъект("ВыполняемыйМодуль"); Модуль.НазначитьКонтекст(Контекст); Модуль.УстановитьМодуль("Функция Вася() Возврат Федя; КонецФункции"); Модуль.КомпилироватьИВыполнитьМодуль(); Сообщить("Федя - "+Модуль.Вася()); КонецПроцедуры |
|||
32
Adecvator
24.10.12
✎
12:07
|
(31) О чудо, переменный обработки, которые нужны в "Выполняемом модуле", необходимо определять в шапке обработки. Спасибо Ёпрст4,3,2,1 :)
|
|||
33
Ёпрст
24.10.12
✎
12:07
|
(32) да, как экспортные.
|
|||
34
Adecvator
24.10.12
✎
12:15
|
(33) странно убрал Экспорт, тоже работает ?!?
|
|||
35
Ёпрст
24.10.12
✎
12:17
|
(34) может быть, я не помню ужо
|
|||
36
Adecvator
24.10.12
✎
13:58
|
При компилировании пишет: "Получаемая строка превысит допустимые размеры" :( Облом что называется, ну хоть узнал что такое - "Выполняемый модуль" и то приятно :)
|
|||
37
Mikeware
24.10.12
✎
13:59
|
(36) код в студию!
Я, правда, мало с ВМ дело имел, но на такое не нарывался... |
|||
38
Mikeware
24.10.12
✎
14:01
|
(34)(35) А "экспорт не нужен" - у тебя же контекст ВМ - контекст обработки...
|
|||
39
Adecvator
24.10.12
✎
14:01
|
Код:
Модуль.НазначитьКонтекст(Контекст); Модуль.УстановитьМодуль(" |Функция РасчетСумм() |Возврат "+ТО.ПолучитьЗначение(ТО.НомерСтроки,ИдКолВал)+"; |КонецФункции"); Модуль.КомпилироватьМодуль(); Модуль.ВыполнитьМодуль(); |
|||
40
Adecvator
24.10.12
✎
14:03
|
(38) При чем тут это, просто передаю в Выполняемый модуль строку не допустимо большого размера, вот и вес.
|
|||
41
Ёпрст
24.10.12
✎
14:03
|
ТО.ПолучитьЗначение(ТО.НомерСтроки,ИдКолВал) = ?
|
|||
42
Mikeware
24.10.12
✎
14:06
|
(39) см (27).
Ты формулы для вычисления в ТЗ хранишь, чтоль? |
|||
43
Ёпрст
24.10.12
✎
14:06
|
че то ты гонишь..
запихнул в вм >2000 символов, ошибки нема |
|||
44
Ёпрст
24.10.12
✎
14:07
|
видать в твоём коде есть сообщить(ТвояСтрока) ?
|
|||
45
Adecvator
24.10.12
✎
14:16
|
(44) Попробуй копинуть строку в конфигуратор:
+БухИт.КО(СчетПоКоду("97.5",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+0-БухИт.ДО(СчетПоКоду("97.5",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+0-БухИт.ОБ(СчетПоКоду("79",ПланыСчетов.НСБУ),СчетПоКоду("97.5",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+БухИт.ОБ(СчетПоКоду("97.5",ПланыСчетов.НСБУ),СчетПоКоду("79",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+БухИт.КО(СчетПоКоду("94.8",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+0-БухИт.ДО(СчетПоКоду("94.8",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+0-БухИт.ОБ(СчетПоКоду("79",ПланыСчетов.НСБУ),СчетПоКоду("94.8",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+БухИт.ОБ(СчетПоКоду("94.8",ПланыСчетов.НСБУ),СчетПоКоду("79",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))++БухИт.КО(СчетПоКоду("94.4",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+0-БухИт.ДО(СчетПоКоду("94.4",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+0-БухИт.ОБ(СчетПоКоду("79",ПланыСчетов.НСБУ),СчетПоКоду("94.4",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840))+БухИт.ОБ(СчетПоКоду("94.4",ПланыСчетов.НСБУ),СчетПоКоду("79",ПланыСчетов.НСБУ),2,Спр.НайтиПоКоду(840)) |
|||
46
НЕА123
24.10.12
✎
14:29
|
(45)
поробуй разбить на строки типа так стрЗаменить(стр, "+", "+"+Разделительстрок) |
|||
47
Ёпрст
24.10.12
✎
14:53
|
(45) вставил, что дальше ?
|
|||
48
Ёпрст
24.10.12
✎
14:53
|
да и.. как в (45) всегда есть
|
|||
49
Ёпрст
24.10.12
✎
14:54
|
как в 46 - разделитель строк.
|
|||
50
Adecvator
24.10.12
✎
14:54
|
(47) Вставил, прикольно у меня ругается, приходиться в паде перез новую строку разделять
|
|||
51
Ёпрст
24.10.12
✎
14:58
|
(50) у тебя всё равно на входе текст - раздели его возвратом каретки, делов то..
|
|||
52
Ёпрст
24.10.12
✎
14:58
|
а ВМ пофик на размер строки.
|
|||
53
Ёпрст
24.10.12
✎
14:58
|
шаблону тоже, просто через ВМ попроще и покрасившее
|
|||
54
Гинзбург
24.10.12
✎
18:36
|
|
|||
55
Fragster
гуру
24.10.12
✎
18:41
|
строку в файл, файл @Импорт
|
|||
56
Ёпрст
24.10.12
✎
18:46
|
(54) А чего под другим ником ?
|
|||
57
Гинзбург
24.10.12
✎
18:55
|
(56) год по хулигаке
|
|||
58
Ёпрст
24.10.12
✎
18:55
|
(57) х..се.. жестоко
|
|||
59
Гинзбург
24.10.12
✎
18:55
|
к стати (54) + )4)
|
|||
60
Гинзбург
24.10.12
✎
18:56
|
к стати (54) + (4)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |