BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Информационные сообщения при генерировании проводок

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Информационные сообщения при генерировании проводок
 
Добрый день!
Возможно ли в БЭСТ-5-3.4 реализовать следующую задачу?
Многосегментную аналитику в типовых операциях формируют FileEval().
Хотелось бы перед генерацией проводок проверить - все ли необходимые поля заполнены и правильно ли. Если нет, то на экран выдается сообщение чего не хватает и что нет так. Проводки в этом случае не генерируются. Если все Ок!, то проводки генерируются.
Вариант вставлять сообщения в FileEval(), формирующие аналитики не подходит. Проводки в этом случае формируются. Но основная беда в том, что сообщение появляется столько раз сколько строк фактурной части документа. Как от этого уйти не знаю.
Изменено: Виктор Балановский - 17.02.2009 06:38:05
 
О каком модуле идет речь?
Проводки формируются в разных блоках и интерфейсах.
С уважением,
Ильин Евгений
 
В первую очередь о складских.
 
Да, есть такое дело.
Если поставить обработку плагина в поле суммы и возвращать 0, то проводки не сформируются, но обработка производится по позициям документа.
Может сделать решение с буфером, в который сложить найденные проблемы и вывести отчетом на последней строке?
Или сделать проще, выдавать сообщение на первой или последней позиции документа.
С уважением,
Ильин Евгений
 
Не лучший вариант, но попробуем.
Не лучший потому, что если типовая операция из нескольких проводок, то плагин на суммы надо ставить в каждом, чтобы проводки не формировались. Поскольку плагины к тому же формируют аналитики, то на одну типовую операцию их становится "много".
Хотелось бы чего-нибудь по-проще и по-надежней. Типа события "Перед формирование проводок". Если .Т., то формируем. Если.F., то не формируем.
 
А через глобальную переменную не получится?
 
Не знаю. Когда-то пробывал в 4-е у меня не получилось. Каждый раз в одной типовой операции плагин запускал как первый раз.
 
А от чего зависит формирование проводки? От параметров шапки? От введеных позиций?
С уважением,
Ильин Евгений
 
И от параметров шапки и от введенных позиций.
Но хотелось бы иметь Событие и не как частный случай, а как правило. И не только для складских документов, но и для имущества и других возможных подобных документов.
Изменено: Виктор Балановский - 17.02.2009 09:56:22
 
У вас одна типовая на все случаи?
С уважением,
Ильин Евгений
 
Нет конечно.
Как показало практика, даже при штатном программировании проводок в других ПП, поддерживать это не получается. Чаще бывает проще добавить новую простую конкретную типовую операцию, чем снова погружать в старый алгоритм.
Изменено: Виктор Балановский - 17.02.2009 12:56:44
 
Цитата
Виктор Балановский пишет:
И от параметров шапки и от введенных позиций.
Но хотелось бы иметь Событие и не как частный случай, а как правило. И не только для складских документов, но и для имущества и других возможных подобных документов.

Плаги в алгоритме расчета суммы, как предлагалось выше мне видится единственным решением на сегодня.
 
Может в событии "перед записью" отслеживать корректность ввода и не выпускать оператора до тех пор, пока он всё правильно не введёт?
С уважением, Новиков Алексей.
 
Не пробывал, но думал.
Здесь два момента:
1) Что начинается вперед: генерация проводок или сохранение полей документа? Конечно, это можно проверить.
2) Но как после проверки заполнения полей, снова перенаправить программу на работу с полями документа, а потом снова выйти на плагин и т.д. (как организовать такой цикл)?
Изменено: Виктор Балановский - 18.02.2009 21:10:24
 
Цитата
Виктор Балановский пишет:
Не пробывал, но думал.
Здесь два момента:
1) Что начинается вперед: генерация проводок или сохранение полей документа? Конечно, это можно проверить.
2) Но как после проверки заполнения полей, снова перенаправить программу на работу с полями документа, а потом снова выйти на плагин и т.д. (как организовать такой цикл)?

Проверку поставить на "перед записью", а "продолжение" сделать на после записи...
Если проверка вернет .F., то Б-5 сам заставить оператора продолжать редактировать документ до тех пор, пока он не отменит корректировку\ввод или проверка вернёт .Т. .
Если еще требуется передача параметров, то можно сделать чз глоб переменные. Я такое делал из события работа в реестре в другие... Если переменная была объявлена она не уничтожается до тех пор, пока пользователь не вышел из реестра.

Код
//Плагин по событию перед записью
CheckIfCorrect()
Function CheckIfCorrect()
Local something,lResult:=.F.
.........
If (somthing=="OK")
lResult:=.T.
else
 SayAndWait ("Mistake!")
endif
return lResult
 
Изменено: Саак Шахламджян - 19.02.2009 09:00:49
 
Спасибо. Попробую.
 
Добрый день!
Проверяем заполнение полей в складских документах, используя вызов "перед записью". Наряду с полями документа, надо проверить правильность заполнения атрибутов карточек номенклатур и партий, вводимых в фактурной части документа. Но на момент вызова плагина строки документа еще не в базе данных, а во временных переменных и массивах.
Вопрос.
Как "вытащить" параметры строк документа, а именно {Grup, Nnum, MDim, Partia} из памяти?
Просматривая все подряд переменные Private, нашел строки документа в нескольких местах. К примеру в строке (не знаю, как это правильно называется): aWindow - 2 - 7 - CARGO[1,i]. Там все параметры каждой строки документа хранятся в своей строковой переменной.
Вопрос.
Как их оттуда "вытащить"? Или есть другие возможности?
 
Цитата
Виктор Балановский пишет:
Добрый день!

Проверяем заполнение полей в складских документах, используя вызов "перед записью". Наряду с полями документа, надо проверить правильность заполнения атрибутов карточек номенклатур и партий, вводимых в фактурной части документа. Но на момент вызова плагина строки документа еще не в базе данных, а во временных переменных и массивах.

.

Как "вытащить" параметры строк документа, а именно {Grup, Nnum, MDim, Partia} из памяти?

Просматривая все подряд переменные Private, нашел строки документа в нескольких местах. К примеру в строке (не знаю, как это правильно называется): aWindow - 2 - 7 - CARGO[1,i]. Там все параметры каждой строки документа хранятся в своей строковой переменной.

.

Как их оттуда "вытащить"? Или есть другие возможности?

Добрый день!
Код
#define _LEN_SCHET_FIELD 16
#define _LEN_Full_Analit 60
#DEFINE _LEN_MDIM  30  //длина аналитики ном.номера

#DEFINE L_NAME  35
#DEFINE L_KOL   14
#DEFINE L_CENA  17
#DEFINE L_SUM   14
#DEFINE L_GRUP   5
#DEFINE L_PARTIA 5
#DEFINE L_NNUM   13
#DEFINE L_ED     5
#DEFINE L_SCHET  _LEN_SCHET_FIELD
#DEFINE L_IZNOS  3
//позиции в строке aMat
#DEFINE P_GRUP       105
#DEFINE P_NNUM       110
#DEFINE P_PARTIA     417+_LEN_SCHET_FIELD
#DEFINE P_KOLBR      422+_LEN_SCHET_FIELD
#DEFINE P_KOLNED     441+_LEN_SCHET_FIELD
#DEFINE P_KOLOUT     123
#DEFINE P_ED1        137
#DEFINE P_CENAOUT    142
#DEFINE P_ED2        159
#DEFINE P_SUMOUT     164
#DEFINE P_SUMOUTR    178
#DEFINE P_SUM        192
#DEFINE P_IZNOS      206
#DEFINE P_PERIOD     209
#DEFINE P_ED         212
#DEFINE P_SCHET      217
#DEFINE P_NDS        217+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_SFN        225+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_PA         233+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_TP         241+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_TN         249+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_EU         257+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_TZR1M      265+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_TZR2M      279+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_TZR3M      293+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_DOP1       307+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_DOP2       315+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_DOP3       323+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_PP1        331+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_PP2        345+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_R          359+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_KOL1       374+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_CODEDOC1   388+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_NUMDOC1    391+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_SCLAD1     397+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_KOL2       403+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_OPERFACT   460+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0
#DEFINE P_SUM_NDS    460+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER
#DEFINE P_SUM_ACZ    479+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER
#DEFINE P_KOL_OLD    498+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER
#DEFINE P_CENA0      512+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER
#DEFINE P_NAS0       531+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER
#DEFINE P_DATE1      550+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER
#DEFINE P_SUM_CSH    558+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER
#DEFINE P_CSH        577+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER
#DEFINE P_NUMSTR     585+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER  // длина 5
#DEFINE P_SUMN       590+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER  // длина 14
#DEFINE P_TZR1MN     604+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER  // длина 14
#DEFINE P_TZR2MN     618+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER  // длина 14
#DEFINE P_TZR3MN     632+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER  // длина 14
#DEFINE P_NNOPERM    646+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER  // длина 22   // victor NNoper  в док-тах
#DEFINE P_OPERSVDOCM 646+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*2 // длина 22   // NNoper  в док-тах
#DEFINE P_PRD_GRUP   646+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*3  //  5
#DEFINE P_PRD_NNUM   651+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*3    // 13
#DEFINE P_PRD_BOM    664+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*3    // _LEN_MDIM
#DEFINE P_DEF_GRUP   664+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*3 +_LEN_MDIM   //  5
#DEFINE P_DEF_NNUM   669+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*3 +_LEN_MDIM   // 13
#DEFINE P_NONDS      682+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*3 +_LEN_MDIM   // 1
#DEFINE P_MDIM       683+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*3 +_LEN_MDIM   // _LEN_MDIM
#DEFINE P_DEF_MDIM   683+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*3 +_LEN_MDIM*2 // _LEN_MDIM
#DEFINE P_NZ_ID      683+_LEN_SCHET_FIELD*1+_LEN_Full_Analit*0 + _LEN_NNOPER*3 +_LEN_MDIM*3 // _LEN_NNOPER


aMat := aWindow[2][7]:cargo[1]
cGrup := SUBSTR(aMat[i],P_GRUP,L_GRUP)
cNNum := SUBSTR(aMat[i],P_NNUM,L_NNUM)
cMDim := SUBSTR(aMat[i],P_MDIM,_LEN_MDIM)
cPartia := SUBSTR(aMat[i],P_PARTIA,L_PARTIA)




 
Спасибо! Попробуем.
 
Добрый день!
При считывании MDIM система "ругается" на отсутствие _LEN_NNOPER.
Определил равным 22. Вроде прошло. Во избежание возможных сбоев на будующее при считывании других переменных, прошу уточнить 22 - это правильно?
 
MDIM для какой таблицы ?
Вы можете длину поля посмотреть в отладчике
Есть такой вариант как LEN(MDIM)
Изменено: nordk - 25.02.2009 12:29:09
 
Это не длина таблицы. Это длина временной переменной для определения позиции других переменных слитых в одну символьную строку, являющейся элементом массива.
 
Я понимаю что переменная. Но для какой таблицы ?
Для mlabel или для mdocm - там подходы разные и длина разная :lol:
В mlabel хранится указатель на значение аналитики и у него длина 22.
В накладной самой в mdim хранится непосредственное значение и там длина 30.
Длины полей через foxbro Вы можете посмотреть.
А вот про какой конкретно MDIM у Вас в задаче идет речь и
какую длину надо давать - это мне надо время чтобы разбираться.
Отсюда и предложение Вам посмотреть внимательнее какое конкретно назначение будет иметь именно Ваш MDIM. Можно,например,просто в
отладчике посмотреть какое значение Вы в него пишете отсюда и
длина будет понятна.

Вопрос не тривиальный и уточнение я Вам запросил не просто так
Страницы: 1
Читают тему (гостей: 1)