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

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

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


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование отчетов  / Платежное поручение спроверками на ошибки.

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Платежное поручение спроверками на ошибки.
 
Срочно нужна помощь.
Как решить это в ФастРепорте.
Стандартнае платежное поручение из типовой поставке.
Б4+ SP60
Необходимо проконтролировать 2 параметра.
а)Длина основания платежа не более 210 знаков.
см. тему
http://www.bestnet.ru/support/forum/index.php?PAGE_NAME=read&FID=10&TID=4515

так как платежные поручения не передают по клиент банку, то можно, наверное и запрограммировать сразу обрезание с правого края с учетом спецсимвола перехода на новую строку и выделение НДС. Пусть на бумаге все будет правильно, а в БЭСТ и так есть сойдет.
Например, "Оплата за товар по счету ... 446, 447, 448, 449 уже 215 символов (знак перевода каретки)в том числе НДС 18% - 18.00" итого 243 символа.
Чтоб преобразовалось в "Оплата за товар по счету ... 441 (знак перевода каретки)
в том числе НДС 18% - 18.00" - не более 210 символов.

б) И подставить в реквизиты текущие банковские реквизиты получателя
см. тему.
http://www.bestnet.ru/support/forum/index.php?PAGE_NAME=read&FID=11&TID=4516

Это наверное возможно, если создать sql - запрос к partner.dbf на основании ИНН Получателя,
Тут наверное 2 шага - 1 подставить новые, если они изменились, и
2 сообщить бухгалтеру о необходимости в пп на поле получатель
вызвать справочник и перенести данный с карточки партнера "004465"
Изменено: ВАЛЕРИЙ БОНДАРЧУК - 25.12.2010 11:40:44
 
Добрый день!
Цитата
ВАЛЕРИЙ БОНДАРЧУК пишет:
а)Длина основания платежа не более 210 знаков.
В БЭСТ-5 такая доработка сделана. В пользовательском отчете Вы можете вывести только часть строки. Функция COPY(<выражение>,1,210).

Цитата
ВАЛЕРИЙ БОНДАРЧУК пишет:
б) И подставить в реквизиты текущие банковские реквизиты получателя
Запрос такой сделать можно и провести сверку, но FastReport может только выдать сооющение о даннгой ситуации, а не исправить БД. Для исправления необходимо менять в документе стандартными средствами программы БЭСТ-4+.
 
Дмитрий большое спасибо за помощь.
Но я слаб в коленках с фастрепортом.
Давайте разобъем задачу на несколько кусков.
1. Проверка реквизитов, если они разняться, то выдать транспарант об существующем конфликте.
например ООО МЕЧТА ИНН 77777777 БАНК СУПЕР.
Фастрепорт в карточке партнера с этим ИНН выдает ТРАНСПАРАНТ или выводит подготовленное сообщение из закладок модернизированной формы
например,TextBox "РЕКВИЗИТЫ ПОМЕНЯЛИСЬ СНИМИТЕ ПЕЧАТЬ И ИСПРАВЬТЕ РАСЧЕТНЫЙ СЧЕТ ПАРТНЕРА 000345 ЧЕРЕЗ СПРАВОЧНИК F2 и распечайтайте заново."
Это так называемая "малая кровь", когда нет готового плагина на запись на изменение реквизитов.
То есть это нужно уже сейчас, как это описать в запросах sql я не знаю. Очень нужна помощь.
2. Проверка длины строки. Возможен также вызов предварительного транспаранта на некорректность формирования основания. И выдача подготовленной части. То есть Прежде всего сохраняется самая концовка которая начинается со знака перевода строки. считается их длина из 210 отнимается это значение. получается напр. 180 и присоединяется к значению НДС.
Тем самым оператор видит каким образом надо отрезать концовку и делает как в отпечатанной форме.

То есть было
"За мясопродукты по накладной 4432,.......4433,44899*в том числе НДС 18%-120075,45р" - итого 215 знаков
В печатной форме должно остаться
"За мясопродукты по накладной 4432,.......4433,*в том числе НДС 18%-120075,45р"
Очень нужна помощь, хотя бы по какой либо части решения.
используют типовую форму Вин печати PlatPor.frf
Если возможно прикрепите хоть частичное решение к вашему посту.
Хоть выдать транспарант об количестве превышающих символов Например, ПРЕВЫШЕНИЕ НА 4 знака.
Можно даже не формировать правильною строку, если это очень тяжело.
Главное, хоть както помочь бухгалтеру сегодня.

с уважением, Валерий Бондарчук.
Изменено: ВАЛЕРИЙ БОНДАРЧУК - 28.12.2010 17:02:39
 
Добрый день!
Цитата
ВАЛЕРИЙ БОНДАРЧУК пишет:
Но я слаб в коленках с фастрепортом.
Давайте разобъем задачу на несколько кусков.
Порядок решения задачи по пункту 1 следующий:

1. Делаем запрос к таблице с банковскими документами и выводим одну строчку, которая относится к выводимому докумету. Свойство Name для документа назовем Sql_rsdoc. В свойстве SQL пишем код запроса:
Код
SELECT * FROM BANK\RSDOC WHERE NDOC=:p_doc

Далее в запросе в свойстве Params указываем тип параметра p_doc равным String.
В коде программы пишем текст открытия запроса:
Код
Sql_rsdoc.Params['p_doc'] := [DialogForm.PL_P."Hомеp_документа"]
Sql_rsdoc.Open;


2. Делаем запрос к таблице с реквизитами партнера и выводим одну строчку, которая относится к партнеру по документу. Свойство Name для документа назовем Sql_part. В свойстве SQL пишем код запроса:
Код
SELECT * FROM PARTNER WHERE NDOC=:p_part

Далее в запросе в свойстве Params указываем тип параметра p_part равным String.
В коде программы пишем текст открытия запроса (продолжаем код из пункта 1):
Код
Sql_part.Params['p_part'] := [DialogForm.Sql_rsdoc."OPER_RCV"]
Sql_part.Open;


3. Дале в коде программы необходимо сделать сравнение полей в запросе Sql_rsdoc и Sql_part и выдать сообщение о несоответствии полей в отчете.
 
Дмитрий, спасибо за помощь, но сейас такая запарка да и пробки кругом.
Вообще мне не понятно в каких местах и как организовывать sql запросы.
Можно хотя бы в готовом frf
Форма нужна уже сегодня, крайний случай завтра.
На выходных и праздничных, я бы все это осмыслил и подробно пошагово описал в данном посте.
С уважением, Валерий Бондарчук.
Изменено: ВАЛЕРИЙ БОНДАРЧУК - 30.12.2010 06:39:13
 
В фастрепорте есть функция Input(<Заголовок> [,<Значение>]). на нажати кнопки "Выполнить" вешаешь проверку длины примерно так:
Код
S1:=[строка]
While Length(S1)>210 do
Begin
S1:= Input("Слишком длинное основание",S1)
End;

и ещё поверку реквизитов
ну если всё нормально или все реквизиты измененные нашёл раскладывай по соответствующим объектам Memo новые значения и печатай. и про S1 не забудь.
в конце своей функции пишешь
Код
modalresult:=mrOk
или
Код
modalresult:=mrCancel
если не хочешь печатать.
точнее 10 числа могу написать.
 
Цитата
ВАЛЕРИЙ БОНДАРЧУК пишет:
Вообще мне не понятно в каких местах и как организовывать sql запросы.

В дизайнере отчетов на карточке запроса есть объект "Запрос к БД БЭСТ". Добавляете этот объект на карточку запроса и в свойстве SQL пишите текст нужного запроса.
 
Цитата
Сергей Иваницкий пишет:
В фастрепорте есть функция Input(<Заголовок> [,<Значение>]). на нажати кнопки "Выполнить" вешаешь проверку длины примерно так:
Код

S1:=[строка]

While Length(S1)>210 do

Begin

S1:= Input("Слишком длинное основание",S1)

End;

попробовал на кнопке запроса Выполнить, через Редактор написал такой код
Код
S1:=[DialogForm.PL_P."Назнплатнаиментовараначало"]
While Length(S1)>210 do
Begin
S1:= Input("Слишком длинное основание",S1)
End;


В _osnov записан такой вот текст :
"Рег.№ в УПФР по Вахит.р-ну 013-502-003843 Страх.взна обязат пенс.страх. зачисл.в ПФ РФ на выпл накопчасти тр.пенсии за октябрь 10г в сумме 1570-56 и требование от 20.10.на сумму 0-28длооожложлжлллэлэшлзэшшэллллэлэлэлэздлэдлзэлэзллллзлзлзлзлоожщрршршршорш"
отправляю на печать, ничего не сообщает, все выдается на просмотр.
 
Цитата
Валерий пишет
S1:=[DialogForm.PL_P."Назнплатнаиментовараначало"]
While Length(S1)>210 do
Begin
S1:= Input("Слишком длинное основание",S1)
End;

а фастрепорт на точки с запятой ругался?
в конце строки в Паскале надо обязательно ставить точку с запятой,
и ещё, я сейчас не на работе и не могу вызвать редактор фастрепорта.
но надо ещё посмотреть в инспекторе у кнопки выполнить есть свойство "result" или как-то так оно установлено в "mrOk", надо это "mrOk" убрать а в конце функции присвоить.
 
в строках
Код
While Length(S1)>210 do
Begin
точку с запятой писать не надо.
 
Теоретически можно вообще не печатать если обработчик нажатия кнопки "Выполнить"
будет завершаться конструкцией
Код
modalresult:=mrCancel
 
Валерий, я тут кое что подправил, попробуйте, правда есть некоторые ограничения,
Не знаю как себя поведёт если у вас существует несколько организаций с одинаковым ИНН.
 
Сергей, большое спасибо за помощь.
С реквизитами вышло все отлично.
Посмотрел rsdoc.dbf этого клиента, 90% заполнено поле oper_rcv, это карточка клиента.
Может быть связываться с проверкой именно этой карточки.
Насчет задвоенности карточек с одним ИНН еще не разбирался .
Заменил сообщение об ошибке, с инструкцией по исправлению.
Убрал закомментированные тобой строки кода.
С количеством знаков в назначении платежа.
Ввиду моей слабости программирования, решил, вместо текста, вывести сколько знаков в строке. Например, 212
Это более информативно, чем строка из платежки, где не понятно сколько надо убрать символов.
Поправил текст транспаранта.
Убрал твой транспарант на сообщение о правильности написания текста.
В основном заполняют корректно. А появление дополнительного сообщения будет раздрожать.
В идеале конечно, это отследить расположение знака до перевода на другую строчку.
Т.е выделение НДС. и удалить левые символы от него, превышающее кол-во знаков например 2.
Логику построить могу, а как в фастрепорте не знаю.

КАК ПОДАВИТЬ ВЫХОД КАРТОЧКИ ЗАПРОСА С СООБЩЕНИЕМ О НАПИСАНИЕ ДАТЫ И СУММЫ?
Нас устраивает предлагаемый по умолчанию.
Изменено: ВАЛЕРИЙ БОНДАРЧУК - 11.01.2011 08:44:48
 
Подавлять запрос не надо иначе не будет отрабатываться твоя проверка, но если хочется то можно
во первых надо исправить на странице с формой все ссылки на управляющие элементы на фиксированные,
во вторых обработчик кнопки выполнить переместит на событие открытие формы.
ну и про инициализацию не нужного окна не забыть.

транспрант input() я сделал специально, чтобы в строке ввода можно было вручную исправит основание платежа. Если хочется автоматически, то тоже можно, все зависит от степени корректности. Если тупо обрубать может получиться фигня.
 
Почему пришлось через ИНН , а не через код клиента - потому что в штатном наборе PL_P не нашёл такого поля -был удивлён! Через код клиента - правильней. Через RSDOC нельзя потому, что такой записи можт ещё не быть.
Вот и пришлось через ИНН и строить такой корявый запрос вместо штатного.
 
К стати исправь вот так
Код
While Length(S1)>210 do
Begin
S1:= input('Слишком длинное основание удали ' +Chr(10)+Chr(13)+Trim(Str(Length(S1)-210))+Chr(10)+Chr(13)+ ' символов' ,S1);
End;
Будет сообщать сколько удалить и при этом пока не получится правильно дальше не пустит
 
Сергей, в данном случае бухгалтер занимается утяжелением своих обязанностей.
Вместо указания даты реестра, периода накладных и НДС, она переписывает номера накладных из этого реестра, а если их много, то останавливается по длине 210 знаков и пишет НДС. Так что, никакой смысловой нагрузки большое основание не имеет. Можно смело запрограммировать его программное обрезание.
Очень заинтересовало твое предложение снятия запроса. Если бы оно было реализовано - стало бы очень Хорошо. А так, в какой угол метаться не могу сообразить. :happiness:
Тем более там всего 2 параметра: дата и вывод копеек.
 
В обед посмотрю.
 
Отменить печать без диалогового окна не получилось. Посмотрите что есть.
Изменено: Сергей Иваницкий - 11.01.2011 16:15:19
 
СЕРГЕЙ. ВСЕ ПОЛУЧИЛОСЬ ОТЛИЧНО. :roma:
Попробую поставить на боевой режим.
Огромное вам спасибо. :romashka:
 
Есть ещё вариант можно сразу подставлять значения из запроса Partner в соответствующие поля, а бухам просто сообщать о таком факте или выбор предоставить.
 
Лучше будет как есть. Невозможность печати сразу дает стимул для исправления данных в платежном поручении.
 
Валерий, не могли бы вы сходить в ветку "программирование приложений"
и откомпилировать программку(как есть) которая в #26 посте в арме товары например и там же написать результат её работы у вас. по идее программа должна запустить Excel и что-то там написать и зафиксировать часть верхних строк.
http://www.bestnet.ru/support/forum/index.php?PAGE_NAME=read&FID=11&TID=4458&PAGEN_1=2
мне просто интересно это только у меня такой глюк, или у других тоже встречается.

PS:
Можно не ходить мне Константин всё написал.
Изменено: Сергей Иваницкий - 12.01.2011 23:34:31 (Вопрос прояснился.)
Страницы: 1
Читают тему (гостей: 1)