Есть ещё вариант можно сразу подставлять значения из запроса Partner в соответствующие поля, а бухам просто сообщать о таком факте или выбор предоставить.
While Length(S1)>210 do
Begin
S1:= input('Слишком длинное основание удали ' +Chr(10)+Chr(13)+Trim(Str(Length(S1)-210))+Chr(10)+Chr(13)+ ' символов' ,S1);
End;
Будет сообщать сколько удалить и при этом пока не получится правильно дальше не пустит
Почему пришлось через ИНН , а не через код клиента - потому что в штатном наборе PL_P не нашёл такого поля -был удивлён! Через код клиента - правильней. Через RSDOC нельзя потому, что такой записи можт ещё не быть.
Вот и пришлось через ИНН и строить такой корявый запрос вместо штатного.
Подавлять запрос не надо иначе не будет отрабатываться твоя проверка, но если хочется то можно
во первых надо исправить на странице с формой все ссылки на управляющие элементы на фиксированные,
во вторых обработчик кнопки выполнить переместит на событие открытие формы.
ну и про инициализацию не нужного окна не забыть.
транспрант input() я сделал специально, чтобы в строке ввода можно было вручную исправит основание платежа. Если хочется автоматически, то тоже можно, все зависит от степени корректности. Если тупо обрубать может получиться фигня.
Максим пишет
Давайте разберем все на следующем примере. В АРМе Учет заработной платы мне, допустим, нужно с помощью ФастРепорта создать новый шаблон для отчета
Не очень удачный пример, в арме зарплата, при формировании справок по шаблону например, сначала данные подготавливаются в каких-то временных таблицах, а уж потом вызывается fastreport, для примера лучше взять накладную или счет и поглядеть как там организовано, или скопировать что-то подобное своей задаче и подправить. Fastreport не очень годится для сложных манипуляций с данными, разьве что с помощью запросов...
Валерий, я тут кое что подправил, попробуйте, правда есть некоторые ограничения,
Не знаю как себя поведёт если у вас существует несколько организаций с одинаковым ИНН.
Валерий пишет
S1:=[DialogForm.PL_P."Назнплатнаиментовараначало"]
While Length(S1)>210 do
Begin
S1:= Input("Слишком длинное основание",S1)
End;
а фастрепорт на точки с запятой ругался?
в конце строки в Паскале надо обязательно ставить точку с запятой,
и ещё, я сейчас не на работе и не могу вызвать редактор фастрепорта.
но надо ещё посмотреть в инспекторе у кнопки выполнить есть свойство "result" или как-то так оно установлено в "mrOk", надо это "mrOk" убрать а в конце функции присвоить.
В фастрепорте есть функция Input(<Заголовок> [,<Значение>]). на нажати кнопки "Выполнить" вешаешь проверку длины примерно так:
Код
S1:=[строка]
While Length(S1)>210 do
Begin
S1:= Input("Слишком длинное основание",S1)
End;
и ещё поверку реквизитов
ну если всё нормально или все реквизиты измененные нашёл раскладывай по соответствующим объектам Memo новые значения и печатай. и про S1 не забудь.
в конце своей функции пишешь
Код
modalresult:=mrOk
или
Код
modalresult:=mrCancel
если не хочешь печатать.
точнее 10 числа могу написать.
Валерий, прочитал ваш пост в праздники, я дома и смоделировать вызов редактора фастрепорта не могу, Но я много каких документов у себя в конторе поправлял.
Что касается событий в пп, то вам как я понял нужно событие на вход в документ или при его копировании - в такого нет , проверка документа - это , но как я понимаю поздно. Я бы ка вариант сделал на "проверку" баннер, если не выполняются условия, чтобы бухи хотя бы перепечатали!
Константин пишет
Помним также что измененные плагины работают только после того как вы выйдете и зайдете в модуль заново, иначе стартует все время старая копия в памяти.
Это имеет и к старту с отладчиком отношение.
Если мы не хотим выходить-заходить.
То этот же плагин должен быть подвешен к событию по требованию и хотябы один раз запущен по требованию через SHIFT-F5
Не забываем также что сам файл должен быть найден в нужной папке для запуска.
всё это я помню только не запускается. даже компьютер перезагружал. на удаление запускается а вот на F10 нет.
На счёт на запись - да наверное не правильно понял, только плагин всё равно не запускается. по идее должен был запуститься отладчик, ну или хотя бы транспарант появиться, а с удалением тут тоже как-то особенно?
может я что-то не так делаю?
Меню "Выписки из банка"->"Расчетные счета"->"511 Расчетный счет НПСБ" -> попадаю в реестр "Выписки банка по расчетному счету" -> выбираю дату захожу в "Реестр банковских выписок по расчетному счету 511" Вот в этом то реестре нажимаю Ctrl+F5 добавляю свою короткую программку на событие "Запись документа" а она при нажатии F10 в документе из этого реестра не запускается. У нас два счета в разных банках 511 и 512.
На счет БЭСТа 5 изучаю , наши сотрудники не в восторге от идеи что либо менять. Финансисты хотят бюджетировать план-фактный анализ делать, вот собственно и задали на что-бы перейти БЭСТ5 или 1с.
ВАЛЕРИЙ БОНДАРЧУК пишет
У меня одни клиенты впереди при обработке выписки основания платежа ставят вручную кодирование информации какой менеджер заказал этот т овар, что бы затем спросить его за возврат всех бухгалитерских документов.
...
пупер Алексеея Новиковы плагин на разбор выписки
подобный подход имеет существенные недостатки, его потом сложно автоматически обрабатывать, например бухгалтер может забыть написать или сделать орфографическую ошибку (что не редкость когда я писал плагин для автоматического создания авансовых счетов-фактур нагляделся на основание платежей!). Если бы удалось это действие подвесить на запись, то можно не допускать ошибки, например используя справочники, и вообще удобно, только вот не работает почему-то.
Уважаемые коллеги подскажите пожалуйста как мне поступить.
У меня БЭСТ 4+ 12.01 SP65
Финансисты попросили добавить пару реквизитов к каждой записи кредитовой(когда мы за что нибудь платим) в реестре банковских выписок - ответственного (сотрудника) и группу расхода(типа для каких целей платёж) чтобы потом можно было анализировать (вроде дополнительной аналитики). Я пообещал, что сделать можно. Написал
Код
Function Utest()
Altd()
SayAndWait('Запись невозможна')
Return .F.
выбрал вызов запись документа, но вызов не происходит.Судя по тому что написано запись происходить не должна, но она происходит.
Попробовал заодно вызвать эту программку при удалении, по идее не должно удаляться, программа вызывается но документ тем не менее удаляется.
Что не так?
Даже не знаю что и сказать, для себя буду помнить о такой особенности, раз ни у кого больше не проявляется буду думать, что так и должно быть или это у меня глючня какая-то.
Из интереса сел за компьютер на котором стоит Office 2007 корпоративный, а Office XP отродясь не стояло. Откомпилировал эту свою тестовую программку пост #19 результат точно такой же, и
Цитата
oAs:Range("A8"):Select()
попробовал, всё одинаково.
Вот ужал глюк до 1 строки
Код
Function uOExcel()
Local oApp,oWorkBook,oRange,oAS
Local I,J, C
AltD()
C:=Select("Mdoc")
TRY
oApp := CreateObject( "Excel.Application" ) //попытка создать объект Excel
CATCH
Alert("Excel не доступен!")
Return
END
AltD()
oWorkBook:=oApp:WorkBooks:Add()
oAS:=oWorkBook:Worksheets():Add()
oApp:visible:=.T.
For I=1 To 50
oAS:Cells(I,1):value:=OemToAnsi('Строка' + Str(I,3,0))
For J=2 To 20
oAS:Cells(I,J):value:=I*(J-1)
Next
Next
oAS:Range("B2"):Select()
oApp:ActiveWindow:FreezePanes := .T.
Return .T.
Программка всего 25 строк если
Код
C:=Select("Mdoc")
закомментировать, то все работает , а если оставить то выпадает ошибка на строке
Код
oAS:Range("B2"):Select()
хотя строка по моему вполне легальная. и результат даёт, у меня например С=60.
Константин пишет
Данная функция имеет отношение к работе с алиасом и никакого отношения к скрипту VBS не имеет. Другими словами "Это нога - у кого надо нога !!!..."
Я прекрасно понимаю, что это к VBS отношения иметь не должно, однако проявляется именно так как я пишу. Ппоробую скомпилировать на компе где 2007 Office установлен.
Цитата
oRange:=oAS:Range("8:8")
у меня вполне себе отработал, мне ведь надо целую стоку выделить.
Цитата
Сергей я уже давно понял что мне надо самому посидеть повозиться чтобы Вам помочь, пока время не выбрал. Простите что вот такие советы "поробуй то, попробуй это выдаю..."
Это пока все, что могу
ну может не харбор, может ещё клиппер...
открываем файл news\develop\ng\weg.exe
и там написано:
Цитата
Синтаксис
SELECT([<алиас>]) --> номер рабочей области
...
SELECT() является функцией работы с базами данных, которая определяет
номер рабочей области по заданному алиасу. Возвращаемое число может
быть в диапазоне от 0 до 250. Если аргумент <алиас> не задан,
возвращается номер текущей (активной) рабочей области. Если значение
аргумента <алиас> задано, но такого алиаса не существует, SELECT()
возвращает ноль.
Так вот если я использую её раньше(по тексту программы), чем функцию Excel с таким же именем, то Excel на соответствующей строке вылетает, а если не использую или использую после(по тексту), то все описанные мной конструкции у меня работают с теми версиями Excel которые у меня есть это XP(2002), и 2007.
Попробовал и
А вы пробовали запустить то что написано в посте #19 как есть, напомню БЭСТ4+ арм товары.
Тут либо я не правильно что-то использую, либо глюк(особенность), и это надо просто в будущем учитывать и всё. Ну хоть у кого-нибудь такой эффект проявился? Или я один такой?
В смысле некогда, понимаю, спасибо за , не тороплю. И вообще всех с наступающим НОВЫМ ГОДОМ!