Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / FoxPro + Excel: сохранение промежуточных данных / 15 сообщений из 15, страница 1 из 1
04.08.2009, 12:37
    #36125199
NCE
NCE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
в файле sheet1.prg у меня html страница обрамлённая в text/endtext.
в этом файле у меня есть следующая строка:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
text
....
<td colspan= 4  class=xl105  x:fmla="=(N[[34+i]]*L[[34+i]] + N[[34+i]] * L[[34+i]] * AN[[34+i]]) + 
(N[[34+i]] * L[[34+i]]) + ((N[[34+i]] * L[[34+i]] * AN[[34+i]]) * 0.18)+(N[[34+i]]*L[[34+i]] + 
N[[34+i]] * L[[34+i]] * AN[[34+i]]) + (N[[34+i]] * L[[34+i]]) + ((N[[34+i]] * L[[34+i]] * AN[[34+i]]) * 0.18) * 0.05"> 0 </td>
...
endtext

формула очень большая из-за этого не генерируется отчёт, фокс просто падает. Если формулу уменьшить буквально на пару действий, тогда всё работает отлично. Поэтому мне нужно как-то сохранить промежуточный результат, разбить на несколько действий. Но как мне сохранить этот результат я не знаю. Допустим я сделаю вычисление
(N[[34+i]]*L[[34+i]] + N[[34+i]] * L[[34+i]] * AN[[34+i]]) = 140;
Этих 140 мы сохраняем в переменную допустим value. И потом в формуле уже используем value + <и дальше формула> но как мне это оформить я не знаю, подскажите пожалуйста.

С фоксом работаю очень мало, поэтому, казалось бы такой простой вопрос и не знаю как решить.
Работаю под DOS.
Спасибо.
...
Рейтинг: 0 / 0
04.08.2009, 13:01
    #36125292
Peisov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
NCE,

попробуй строковую константу разбить на две.

т.е. вместо "Очень длинная строка" сделать "Очень длин"+"ная строка"
...
Рейтинг: 0 / 0
04.08.2009, 13:03
    #36125295
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
...
Рейтинг: 0 / 0
04.08.2009, 15:09
    #36125780
NCE
NCE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
Разбить строку на несколько строк не сработало. Почитал статью, и не нашёл то что искал, а то что было не смог применить в своём примере, может я что-то не допонял.

у меня в начале было так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
...
  endtext
  for i= 1  to knr
 text 
 <!--   + (N[[34+i]] * L[[34+i]]) + ((N[[34+i]] * L[[34+i]] * AN[[34+i]]) * 0.18) * 0.05 -->
 <tr height= 34  style='mso-height-source:userset;height:25.5pt'>
  <td height= 34  colspan= 3  style='height:25.5pt;mso-ignore:colspan'></td>
  <td colspan= 7  class=xl99 width= 133  style='border-right:.5pt solid black; width:98pt' x:str="[[ Nnr(i) + ' '+rus_low_let(Nmrnai(i))
+' '+allt(Nmr(i)) ]] "></td>
  <td class=xl39 style='border-left:none'>шт.</td>
  <td colspan= 2  class=xl103 style='border-right:.5pt solid black;border-left:none'>[[kr(i)]]</td>
  <td colspan= 4  class=xl105 style='border-right:.5pt solid black;border-left:none'x:num="[[left(Cnr(i),14)]]"> </td>
  <td colspan= 4  class=xl105 x:fmla="=(N[[34+i]]*L[[34+i]]+N[[34+i]]*L[[34+i]]*AN[[34+i]]/100)+
(N[[34+i]]*L[[34+i]]+(N[[34+i]]*L[[34+i]]*
AN[[34+i]]/100))*0.18+((N[[34+i]]*L[[34+i]]+N[[34+i]]*L[[34+i]]*AN[[34+i]]/100)+
(N[[34+i]]*L[[34+i]]+(N[[34+i]]*L[[34+i]]*AN[[34+i]]/100))*0.18)*0.05"> 2 </td>
  <td colspan= 2  class=xl106 style='border-right:.5pt solid black;border-left:none' x:str> 0 , 00 </td>
  <td colspan= 4  class=xl105 style='border-right:.5pt solid black;border-left:none' x:str> 0 </td>
  <td colspan= 4  class=xl105 style='border-right:.5pt solid black;border-left:none' x:fmla="=R[[34+i]]"> 0 </td>
  <td colspan= 2  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 3  class=xl109 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 3  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 2  class=xl106 style='border-right:.5pt solid black;border-left:none' x:num> 2 </td>
  <td colspan= 3  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 3  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 3  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 4  class=xl112 width= 76  style='border-right:.5pt solid black;border-left:none;width:56pt'> </td>
  <td></td>
  <td class=xl24></td>
 </tr>
  endtext
endfor
text
...

Я хотел сделать что-то вроде такого

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
...
  endtext
 
  for i= 1  to knr
 text 
 <tr height= 34  style='mso-height-source:userset;height:25.5pt'>
  <td height= 34  colspan= 3  style='height:25.5pt;mso-ignore:colspan'></td>
  <td colspan= 7  class=xl99 width= 133  style='border-right:.5pt solid black; width:98pt' x:str="[[ Nnr(i) + ' '+
rus_low_let(Nmrnai(i))+' '+allt(Nmr(i)) ]] "></td>
  <td class=xl39 style='border-left:none'>шт.</td>
  <td colspan= 2  class=xl103 style='border-right:.5pt solid black;border-left:none'>[[kr(i)]]</td>
  <td colspan= 4  class=xl105 style='border-right:.5pt solid black;border-left:none'x:num="[[left(Cnr(i),14)]]"> </td>
endtext


 LOCAL action1
 action1 = (N[[ 34 +i]]*L[[ 34 +i]]+N[[ 34 +i]]*L[[ 34 +i]]*AN[[ 34 +i]]/ 100 )


text
  <td colspan= 4  class=xl105 x:fmla="=[[action1]]+(N[[34+i]]*L[[34+i]]+(N[[34+i]]*
L[[34+i]]*AN[[34+i]]/100))*0.18+
((N[[34+i]]*L[[34+i]]+N[[34+i]]*L[[34+i]]*AN[[34+i]]/100)+(N[[34+i]]*L[[34+i]]+
(N[[34+i]]*L[[34+i]]*AN[[34+i]]/100))*0.18)*0.05"> 2 </td>
  <td colspan= 2  class=xl106 style='border-right:.5pt solid black;border-left:none' x:str> 0 , 00 </td>
  <td colspan= 4  class=xl105 style='border-right:.5pt solid black;border-left:none' x:str> 0 </td>
  <td colspan= 4  class=xl105 style='border-right:.5pt solid black;border-left:none' x:fmla="=R[[34+i]]"> 0 </td>
  <td colspan= 2  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 3  class=xl109 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 3  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 2  class=xl106 style='border-right:.5pt solid black;border-left:none' x:num> 2 </td>
  <td colspan= 3  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 3  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 3  class=xl105 style='border-right:.5pt solid black;border-left:none'> </td>
  <td colspan= 4  class=xl112 width= 76  style='border-right:.5pt solid black;border-left:none;width:56pt'> </td>
  <td></td>
  <td class=xl24></td>
 </tr>
 
  endtext
endfor
text
...

вот только проблема в том что за пределаем text/endtext переменные
(N[[34+i]]*L[[34+i]]+N[[34+i]]*L[[34+i]]*AN[[34+i]]/100)
не будут доступные, соответственно и не получится так вычислить.

Не ужели нет больше способов разбить вычисление?
...
Рейтинг: 0 / 0
04.08.2009, 16:04
    #36125959
Peisov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
NCE,


А это что за синтаксис такой???

action1 = (N[[34+i]]*L[[34+i]]+N[[34+i]]*L[[34+i]]*AN[[34+i]]/100)
...
Рейтинг: 0 / 0
04.08.2009, 16:11
    #36125984
NCE
NCE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
Я думал, что можно так вынести отдельно, в одну переменную часть формулы, а затем использовать уже вычисленный результат дальше в расчётах, тем самым сократить длину формулы. Но так записать нельзя. Поэтому я и интересуюсь как ещё можно записать, кроме разбивания строки на несколько строк, т.к. такой вариант не помогает.
...
Рейтинг: 0 / 0
04.08.2009, 16:33
    #36126051
Peisov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
NCE,

Ну тыже ниже это делаешь!!! Типа такого

text to action1
N[[34+i]]*L[[34+i]]+N[[34+i]]*L[[34+i]]*AN[[34+i]]/100
endtext


А вообще я не понимаю всей этой идеи. Т.Е. в результате надо получить (условно)

n40*L40+N40*L40*AN40/100

Так?
...
Рейтинг: 0 / 0
04.08.2009, 16:51
    #36126098
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
NCE,
Вынесите общие множители за скобки - формула и сократится (в разы). Если ничего не напутал, то будет так
Код: plaintext
1.
2.
3.
4.
5.
text
....
<td colspan= 4  class=xl105  x:fmla="=(Ni*Li)* (4+ANi*(2+0.18+0.18*0.05))"> 0 </td>
...
endtext
Сокращения, я думаю, понятны.
...
Рейтинг: 0 / 0
05.08.2009, 10:17
    #36126917
NCE
NCE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
PeisovТак?

Верно, если подробней то это выглядет так
Допустим, у нас есть 3 изделия, стоимость каждой по 1000 рублей. Значит мы сначало должны найти стоимость всех изделий это 1000 * 3 = 3000 - это есть

Peisov
n40*L40


Теперь мы должны к этой цене добавить оптовую надбавку 2%. Странно, но если в экселе записать прямо 3000 + 2%. то получим 300002,00% если формат ячейки сделать числовой то получим 3000. А нужно 3000 + 2% = 3060. (два процента находим от 3000 и прибавляем к 3000) Поэтому приходиться записывать это подробно, что бы эксель усёк. т.е.
3000 + 3000 * 2 / 100. Отсюда мы имеем

Peisov
n40*L40+N40*L40*AN40/100


AN40 - это 2%, а не 0,02.

А почему такая большая формула потому что нужно к цене добавить отпускную надбавку, затем ндс, затем надбавку магазина, и надбавку на транспортные услуги, и это всё проценты от предыдущего вычисления, поэтому такая длинная формула.

Может и можно как-то сократить, но я не уверен что у меня получиться это сделать правильно.


попробывал так записать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  <td colspan= 4  class=xl105 style='border-right:.5pt solid black;border-left:none'x:num="[[left(Cnr(i),14)]]"> </td>
  endtext
  LOCAL action1  
  text to action1
	(N[[ 34 +i]]*L[[ 34 +i]]+N[[ 34 +i]]*L[[ 34 +i]]*AN[[ 34 +i]])
  endtext
  text

  <td colspan= 4  class=xl105 x:fmla="=[[action1]]+(N[[34+i]]*L[[34+i]]+(N[[34+i]]*L[[34+i]]*
AN[[34+i]]))*0.18+((N[[34+i]]*L[[34+i]]+N[[34+i]]*L[[34+i]]*AN[[34+i]])+(N[[34+i]]*
L[[34+i]]+(N[[34+i]]*L[[34+i]]*AN[[34+i]]))*0.18)*0.05"> 2 </td>
  <td colspan= 2  class=xl106 style='border-right:.5pt solid black;border-left:none' x:str> 0 , 00 </td>


ругается на LOCAL, пробывал писать private тоже не понимает, говорит не известный идентификатор action1.
...
Рейтинг: 0 / 0
05.08.2009, 10:58
    #36127043
Peisov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
NCE,

Ну - погнали наши городских!

Ставлю вопрос ребром - зачем в эксель пихать формулу? Не проще ли в программе посчитать то, что нужно, и воткнуть готовое значение?
...
Рейтинг: 0 / 0
05.08.2009, 11:29
    #36127162
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
PeisovNCE,

Ну - погнали наши городских!

Ставлю вопрос ребром - зачем в эксель пихать формулу? Не проще ли в программе посчитать то, что нужно, и воткнуть готовое значение?
Эксель - редактируемый формат. У нас множество экселевских форм аналитического отдела содержат формулы. Именно для того, чтобы аналитик мог мобильно поиграться граничными условиями.

Поругаю топикстартера: Вобще-то, сочетательный закон умножения проходят в седьмом классе школы.

По существу вопроса:
SET TEXTMERGE - позволяет вставлять внешние для текста переменные посредством конструкции <<action1>>

Почитайте help, чтоли?
...
Рейтинг: 0 / 0
05.08.2009, 11:42
    #36127207
Peisov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
Kruchinin Pahan
Эксель - редактируемый формат. У нас множество экселевских форм аналитического отдела содержат формулы. Именно для того, чтобы аналитик мог мобильно поиграться граничными условиями.


А, понял.

Хотя в такой ситуации наверняка должны быть некие шаблоны документов. И проше втыкать туда данные через оле-автоматизацию.
...
Рейтинг: 0 / 0
05.08.2009, 11:56
    #36127256
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
PeisovKruchinin Pahan
Эксель - редактируемый формат. У нас множество экселевских форм аналитического отдела содержат формулы. Именно для того, чтобы аналитик мог мобильно поиграться граничными условиями.


А, понял.

Хотя в такой ситуации наверняка должны быть некие шаблоны документов. И проше втыкать туда данные через оле-автоматизацию.
Проще. Не спорю. Только в FoxPro for DOS нет OLE. Поэтому топикстартер выгружает форму в XML формате.
...
Рейтинг: 0 / 0
05.08.2009, 21:39
    #36128821
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
NCE

Код: plaintext
1.
2.
3.
4.
 LOCAL action1  
  text to action1
	(N[[ 34 +i]]*L[[ 34 +i]]+N[[ 34 +i]]*L[[ 34 +i]]*AN[[ 34 +i]])
  endtext

ругается на LOCAL, пробывал писать private тоже не понимает, говорит не известный идентификатор action1

Следует читать HELP той версии, которой Вы пользуетесь.

В FoxPro for DOS области видимости LOCAL еще не было. Неизвестная команда.

У оператора TEXT..ENDTEXT не было опции TO. Неизвестная опция. Вообще, в FoxPro for DOS эта команда была сильно урезана по возможностям. Просто потоковый вывод.

Команда PRIVATE не создает переменных, а "прячет" их (экранирует). Кроме того, давать эту команду внутри цикла FOR - просто бессмысленно. Определение области видимости должно происходить ДО начала цикла.

Вообще-то, операторные скобки TEXT...ENDTEXT - это всего-лишь один из способов формирования символьной строки. Но можно ту же самую строку формировать и через переменные пямяти. "В лоб"



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
PRIVATE action1, num, numStr
FOR i= 1  to kor

	num =  34 +i
	numStr = LTrim(STR(m.num))

	action1 = "(N" + m.numStr + "*L" + m.numStr + "+N" + m.numStr + "*L" + m.numStr + "*AN" + m.numStr + ")"

TEXT
<td colspan= 4  class=xl105 x:fmla="=[[action1]]+(N[[num]]*L[[num]]+(N[[num]]*
L[[num]]*AN[[num]]/100))*0.18+
((N[[num]]*L[[num]]+N[[num]]*L[[num]]*AN[[num]]/100)+(N[[num]]*L[[num]]+
(N[[num]]*L[[num]]*AN[[num]]/100))*0.18)*0.05"> 2 </td>
ENDTEXT

ENDFOR
...
Рейтинг: 0 / 0
06.08.2009, 10:35
    #36129264
NCE
NCE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro + Excel: сохранение промежуточных данных
ВладимирМ"В лоб"

Спасибо за дельную подсказку, которая почти совпала с моим вариантом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  ...
  endtext
  SET DECI TO  2 
  for i= 1  to knr
  pr = VAL(prtn(i)) /  100 
  j =  34  + i
 text 
 <tr height= 34  style='mso-height-source:userset;height:25.5pt;'>
   ...
  <td colspan= 4  class=xl105 x:fmla="=ROUND(((AK[[j]]+AK[[j]]*[[pr]])+(AK[[j]]+(AK[[j]]*[[pr]]))*
0.18+((AK[[j]]+AK[[j]]*[[pr]])+(AK[[j]]+(AK[[j]]*[[pr]]))*0.18)*0.05)/10, 0)*10"> </td>
....

Всем спасибо.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / FoxPro + Excel: сохранение промежуточных данных / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]