Страница 1 из 3

перенос функции

Добавлено: 22 май 2013, 16:31
Espada
Всем привет. У меня такая проблемка: когда выбираем в каталоге "организации и банки" какую либо организацию и нажимаем печать(CTRL+P), выбираем из списка нужный отчет и он автоматом рассчитывает сальдо и добавляет его в отчёт. проблема состоит в том что мне необходимо сделать так чтобы такой же расчет происходил по определенной организации( с которой связан документ выбранный на форме "основание на продажу" в Сбыте).
Вот код в который необходимо "запихнуть" данную функцию

Код: Выделить всё

#component "L_BaseDoc"
const
	cmbut1=143213;
end;
 alter interface VSCHET;
 create view var kkk1:longint condition org  as basedoc.cdogovor=coGetTune('MYORG');
 window wvschet;
handleevent 

	cmPrintdoc :
			{
			  ...функция вычисления...
			}

	cmInit:
            {
			if(Inherited::HandleEvent(cmInit) = heOk)
              {
			}
		   ...настройки кнопки...
		  }
	cmbut1:
		{
			...расчеты выполняемы этой кнопкой...
		}
end;
end;
end.
при необходимости могу сбросить код отчёта в котором эта функция используется. кто сталкивался с похожей проблемой или кто может направить в нужное русло помогите плиз)

Re: перенос функции

Добавлено: 22 май 2013, 21:39
Алексей
т.е. вы печатаете ДО на продажу и... так может проще доработать саму форму бизнес-текста, вместо докомпиляции интерфейса? печатные формы тоже подлежат доработке, изменению, вплоть до разработки новых на основании существующих прототипов.
в конфигураторе установите параметр forms.fcenv=on, получив отчет переключите закладку на "настройка отчетов" и стоя на форме нажмите ф4.

Re: перенос функции

Добавлено: 22 май 2013, 23:20
RAJAH
Алексей
Тоже заметил такую тенденцию: почему-то новички сразу начинают с докомпиляций, хотя редактировать формы (или даже создавать свои) проще, и, наверное, дерзать программировать в "Галактике" нужно с этого.

Re: перенос функции

Добавлено: 23 май 2013, 11:12
Espada
Алексей писал(а):т.е. вы печатаете ДО на продажу и... так может проще доработать саму форму бизнес-текста, вместо докомпиляции интерфейса? печатные формы тоже подлежат доработке, изменению, вплоть до разработки новых на основании существующих прототипов.
в конфигураторе установите параметр forms.fcenv=on, получив отчет переключите закладку на "настройка отчетов" и стоя на форме нажмите ф4.
я наверное немного не правильно выразился. отчет(который печатаю) находится в каталоге организаций, его редактировать ненужно. в нём есть функция расчета сальдо по выбранным организациям, и эту функцию нужно привязать к форме ДО(т.е при выборе документа из списка нужно пересчитывать сальдо поконтрагенту). как-то так.

Re: перенос функции

Добавлено: 23 май 2013, 11:31
edward_K
Вы наверное неправильно поняли.... Почитайте vipprogr.chm что такое форма прототип и что такое присоединенная форма. А заодно что такое автономная(или ard). Последнюю можно вызвать из любой другой формы.
.AutoForm ShowErrorED(lTabN:longint;w:string)
.table blank
...

RunForm(ShowErrorED,gTabN,wstr1)
Вызвать присоединенную форму из другой нельзя!. В некоторых случаях можно вызвать фейс, который формирует поток для присоединенки - если он сам будет независимым. Лучше сделать объектный интерфейс(или просто интерфейс с параметрами) и вызывать уже его из ваших форм. Для ДО вам понадобится либо отдельная форма, либо докомпиляция с перехватом события cmPrintDoc. Вообще формы бизнес-текста(FCOM) считаются устаревшими.

Re: перенос функции

Добавлено: 23 май 2013, 13:03
Espada
edward_K писал(а):Вы наверное неправильно поняли.... Почитайте vipprogr.chm что такое форма прототип и что такое присоединенная форма. А заодно что такое автономная(или ard). Последнюю можно вызвать из любой другой формы.
.AutoForm ShowErrorED(lTabN:longint;w:string)
.table blank
...

RunForm(ShowErrorED,gTabN,wstr1)
Вызвать присоединенную форму из другой нельзя!. В некоторых случаях можно вызвать фейс, который формирует поток для присоединенки - если он сам будет независимым. Лучше сделать объектный интерфейс(или просто интерфейс с параметрами) и вызывать уже его из ваших форм. Для ДО вам понадобится либо отдельная форма, либо докомпиляция с перехватом события cmPrintDoc. Вообще формы бизнес-текста(FCOM) считаются устаревшими.
я просто хотел узнать, можно-ли "Вырвать" функцию из кода отчёта, и вставить его в виповский фай(*.vip) и откомпилировать( т.е. синтаксис кода будет таким же или переделывать) чтобы эта функция выполнялась перед загрузкой формы. новых отчетов создавать не нужно.

Re: перенос функции

Добавлено: 23 май 2013, 13:26
edward_K
Вырвать можно. Объем переделки зависит от кода - от незначительных - заменить ., begin, end. на пусто, {, } до более маштабных, в данном случае наверняка надо переносить логическую таблицу из формы. Лучше переделать на отдельный фейс, который запускать как runInterface(...., nrec_организации) - в этом случае переделок будет меньше, да и в целях обеспечения унификации действий будет полезно.

Re: перенос функции

Добавлено: 23 май 2013, 13:49
Espada
edward_K писал(а):Вырвать можно. Объем переделки зависит от кода - от незначительных - заменить ., begin, end. на пусто, {, } до более маштабных, в данном случае наверняка надо переносить логическую таблицу из формы. Лучше переделать на отдельный фейс, который запускать как runInterface(...., nrec_организации) - в этом случае переделок будет меньше, да и в целях обеспечения унификации действий будет полезно.
спасибо за идею. пробую

Re: перенос функции

Добавлено: 27 май 2013, 14:21
Espada
Ещё раз Здравствуйте. уже 4 день вожусь с переносом функции. всё компиляция проходит, переделал логические таблицы отредактировал сам код, реакции 0! попробовал привязать к кнопке тоже самое :cry:

Re: перенос функции

Добавлено: 27 май 2013, 15:09
RAJAH
Espada писал(а):Ещё раз Здравствуйте. уже 4 день вожусь с переносом функции. всё компиляция проходит, переделал логические таблицы отредактировал сам код, реакции 0! попробовал привязать к кнопке тоже самое :cry:
По-моему, слишком всё усложняете. Для расчёта сальдо есть же стандартные функции: 'GetKontrBalance' (баланс расчётов) или 'Calc_NewSaldo' (бухгалтерское сальдо).

Re: перенос функции

Добавлено: 27 май 2013, 15:25
edward_K
Письмо на деревню дедушке
....
Чтобы понять, что вы делаете неправильно сделайте простенький тестовый примерчик, типа вызвать сообщение, что то там изменить и код в студию.
Экстрасенсов тут нет, а просматривать километры кода, где кто то отжег нет ни у кого ни времени ни желания. Так что делайте фейс строк на 50, не больше и вместе с вызовом по кнопке сюда. Если чего не понятно где вы там бегаете используйте message или logstrtofile (а еще лучше сразу по переменной предусмотреть отключение такой отладки). Если фейс независимый, то можно юзать и отладку из сапорта. Из галки тоже можно, но вам нужно прочитать страниц 50 доки (vip.pdf кажется).

Re: перенос функции

Добавлено: 27 май 2013, 16:06
Espada
RAJAH писал(а):
Espada писал(а):Ещё раз Здравствуйте. уже 4 день вожусь с переносом функции. всё компиляция проходит, переделал логические таблицы отредактировал сам код, реакции 0! попробовал привязать к кнопке тоже самое :cry:
По-моему, слишком всё усложняете. Для расчёта сальдо есть же стандартные функции: 'GetBalans' (баланс расчётов) или 'Calc_NewSaldo' (бухгалтерское сальдо).
Да дело в том что есть уже все вычисления, всё хорошо работает: когда формируешь определённый отчёт по организации(выбрав в каталоге организаций) он всё пересчитывает нормально, задача заключается в том чтобы эти же вычисления происходили при выборе документа в модуле "Управление сбытом=>Счета, ДО на продажу", соответственно по контрагенту связанному с этим документом.

Re: перенос функции

Добавлено: 27 май 2013, 16:26
Espada
edward_K писал(а): Экстрасенсов тут нет, а просматривать километры кода, где кто то отжег нет ни у кого ни времени ни желания. Так что делайте фейс строк на 50, не больше и вместе с вызовом по кнопке сюда. Если чего не понятно где вы там бегаете используйте message или logstrtofile (а еще лучше сразу по переменной предусмотреть отключение такой отладки).
код я просмотрел вроде всё нормально однако меня терзают смутные сомненья по поводу этой части:

Код: Выделить всё

#component "L_BaseDoc"
const
	cmbut1=143213;
end;
alter interface VSCHET;
var
  weight_tek:Double
  ...
create view  condition org  as basedoc.cdogovor=coGetTune('MYORG');
Create view massa 
...
...
window wvschet;
handleevent 

	 cmInit:{...}
         cmbut1:{...}

Код: Выделить всё

create view  condition org  as basedoc.cdogovor=coGetTune('MYORG');
весь код компилируется, проверял с помощью message. Вроде нормально, однако изменений по организации (в каталоге организаций) никаких не происходит, будто эти вычисления вообще не привязаны к организации.

Re: перенос функции

Добавлено: 27 май 2013, 16:50
RAJAH
Espada писал(а):

Код: Выделить всё

create view  condition org  as basedoc.cdogovor=coGetTune('MYORG');
Вы ж про ДО на продажу говорили? А ограничение-то на контрагента указывает на собственную организацию (coGetTune('MYORG')), и, вообще, ссылка на каталог договоров (basedoc.cdogovor)!

Re: перенос функции

Добавлено: 27 май 2013, 18:47
Espada
Вы ж про ДО на продажу говорили? А ограничение-то на контрагента указывает на собственную организацию (coGetTune('MYORG')), и, вообще, ссылка на каталог договоров (basedoc.cdogovor)!
я просто делал по другому примеру) я немного не андестенд что сюда писать)