Имя: Пароль:
1C
1C 7.7
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

//*******************************************
Процедура Сформировать()
   Стр="";
   Для Сч=1 По 20000 Цикл
       Знак=?(Сч % 2 = 1,"+","*");
       Стр=Стр+Сч+Знак;
   КонецЦикла;
   Стр=Лев(Стр,СтрДлина(Стр)-1);
   Стр=СтрЗаменить(Стр,"+","+" "");
   Х="*
   |/
   |+
   |%
   |
   |"+СимволТабуляции;
   Для Сч=1 По СтрКоличествоСтрок(Х) Цикл
       Стр=СтрЗаменить(Стр,СтрПолучитьСтроку(Х,Сч),"" ""+СтрПолучитьСтроку(Х,Сч)+"" "");
   КонецЦикла;
   Сообщить(СтрДлина(Стр));
   Сообщить(Шаблон("["+Стр+"]"));
КонецПроцедуры
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)