Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Пт Июн 17, 2005 10:31 am Заголовок сообщения: PTransaction.RowNo |
|
|
Документ на несколько видов начислений.
Сотрудники в списке могут дублироваться - другой вид работ, по другому разряду/окладу итд.
Как из программы метода начисления обратиться к проводке, представляющей "свою" строку какого-либо метода документа? |
|
Вернуться к началу |
|
 |
Alib Ezbar
Зарегистрирован: 17.06.2005 Сообщения: 17 Откуда: Донецк
|
Добавлено: Пт Июн 17, 2005 12:32 pm Заголовок сообщения: |
|
|
Объясните ситуацию подробнее. что бы можно было точно представить что вы хотите. Желательно пример.
Спасибо. |
|
Вернуться к началу |
|
 |
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Пт Июн 17, 2005 3:24 pm Заголовок сообщения: |
|
|
Табель-наряд на бригаду с колонками различных надбавок и доплат - классность, ночные, праздничные.
На одного сотрудника по нескольку строк, потому что разный вид работ (аналитика разное) оплачивается по разному разряду/сетке и подлежит надбавкам от разной базы.
Как из метода рассчёта классности определить, какому виду работ соответствует ячейка таблицы документа, из которой вызвано событие?
Можно заставить форму пронумеровать строки метода классности через .Long1, можно заставить форму дублировать аналитику в столбец метода классности, а можно и послать, сказавши что то что они хотят в понятиях системы является отчётом и глупо считать надбавку для каждого наряда.
А как правильно? |
|
Вернуться к началу |
|
 |
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Пт Июн 17, 2005 3:26 pm Заголовок сообщения: |
|
|
А в чём глубокий смысл столь частых вызовов события Method_OnApply с .ApplySource="MethodID"
Как их можно использовать, кроме If .AgID = 0 Then Exit Sub |
|
Вернуться к началу |
|
 |
Alib Ezbar
Зарегистрирован: 17.06.2005 Сообщения: 17 Откуда: Донецк
|
Добавлено: Пт Июн 17, 2005 3:43 pm Заголовок сообщения: |
|
|
Вообще по определению каждый столбец первичного документа - это один уникальный метод, если в пределах одного метода надо считать разными способами - передавайте флажок алгоритма внутри одного метода.
Я вас правильно понял?
А on_apply вызывается в момент создания новой проводки с заданным кодом. Соответсвенно on_calc в момент расчёта op.calc |
|
Вернуться к началу |
|
 |
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Пт Июн 17, 2005 4:41 pm Заголовок сообщения: |
|
|
>>передавайте флажок алгоритма внутри одного метода.
Передача данных из одной проводки в другую возможна только из кода формы, по-другому нельзя локализовать ПЕРЕДАЮЩУЮ проводку. Модификацию проводки из журнала для такого документа можно запретить?
Хороший флажок алгоритма - значение поля JP_ROW таблицы P_JOURNAL, его можно не передавать, он всегда присутствует. И соотв.свойство есть, но нельзя его прочитать, а используется оно в методах .TransRM(row,), .TransListR(row) |
|
Вернуться к началу |
|
 |
Alib Ezbar
Зарегистрирован: 17.06.2005 Сообщения: 17 Откуда: Донецк
|
Добавлено: Пт Июн 17, 2005 4:50 pm Заголовок сообщения: |
|
|
Кажется мы потеряли суть вопроса и говорим о разных вещах. |
|
Вернуться к началу |
|
 |
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Пт Июн 17, 2005 5:45 pm Заголовок сообщения: |
|
|
Разные вещи теперь в разных ветках.
Я только начал изучать Акцент-Зарплату и мне многое здесь непривычно.
Подскажите, как лучше в моём примере передать флажок алгоритма для расчёта внутри одного метода? И мне очень бы хотелось сделать это без использования кода формы. |
|
Вернуться к началу |
|
 |
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Чт Июн 30, 2005 1:47 pm Заголовок сообщения: |
|
|
Пока прогресс такой. Надеюсь кому-то тоже будет интересно.
Поскольку при вызове PDocument.Calc происходит сохранение проводок документа в базе данных, вполне допустимо в событии Method_OnCalc запрашивать номер строки своей проводки из базы данных.
Более того. При работе с разреженными докуметнами на несколько начислений допустимо и зачастую приходится физически удалять ненужную проводку из базы данных запросом. |
|
Вернуться к началу |
|
 |
Alib Ezbar
Зарегистрирован: 17.06.2005 Сообщения: 17 Откуда: Донецк
|
Добавлено: Ср Июл 06, 2005 12:15 pm Заголовок сообщения: |
|
|
значит так...
в базе ничего удалять не надо.
Зарплата множит проводки - это нормально.
как передать флаг для расчёта для одного корреспондента:
op.TransRM(1, MTD_NAME_ID).sum1 = 2
в внутри метода MTD_NAME проверяем .sum1 и от его значения выбираем как именно посчитаем .sum |
|
Вернуться к началу |
|
 |
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Ср Июл 06, 2005 1:16 pm Заголовок сообщения: |
|
|
>Зарплата множит проводки - это нормально.
Попробовали не множить - тоже нормально получилось, может даже ещё лучше.
Вот я и написал:
1. То, что это возможно и не приводит к неразрешимым проблемам. Сам факт возможности на 80% гарантирует успех у тех, кто тоже решит попробовать.
2. Вскользь, как это сделано.
>как передать флаг для расчёта для одного корреспондента:
>op.TransRM(1, MTD_NAME_ID).sum1 = 2
Замечательно. Где ты взял "1" в номере проводки? |
|
Вернуться к началу |
|
 |
Alib Ezbar
Зарегистрирован: 17.06.2005 Сообщения: 17 Откуда: Донецк
|
Добавлено: Ср Июл 06, 2005 1:25 pm Заголовок сообщения: |
|
|
dim i
for i = 1 to op.realRows
если у агента свойство такое то равно тому то, то
op.TransRM(i, MTD_NAME_ID).sum1 = 2
иначе
... = 3
next
и вообще проблему считаю надуманной, так как ничего сложного я не вижу |
|
Вернуться к началу |
|
 |
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Ср Июл 06, 2005 2:19 pm Заголовок сообщения: |
|
|
> и вообще проблему считаю надуманной, так как ничего сложного я не вижу
На данный момент эта проблема действительно надуманная, т.к. уже решена и написано, каким образом.
Но отмазка не принимается.
Условие задачи в несколько приземлённом виде, но с иксами, раз уж дошло до кода.
Документ на две колонки начислений. Сдельная зарплата (MTD_SDE_ID) и надбавка за ЭТУ работу (MTD_ADD_ID), - какой-то процент от начисленной по ЭТОЙ строке, но в другой колонке (MTD_SDE_ID) суммы.
И сам вопрос из первого поста: Как из события on_Calc метода MTD_ADD_ID взять сумму, начисленную в колонке MTD_SDE_ID по ЭТОЙ строке документа. |
|
Вернуться к началу |
|
 |
Alib Ezbar
Зарегистрирован: 17.06.2005 Сообщения: 17 Откуда: Донецк
|
Добавлено: Ср Июл 06, 2005 2:33 pm Заголовок сообщения: |
|
|
sub calcDocument
..
for i = 1 to op.realRows
op.TransRM(i, MTD_ADD_ID).tariff = op.TransRM(i, MTD_SDE_ID).tariff
next
..
end sub
отмазываться дальше и написать код для метода MTD_ADD_ID или всё понятно?
если не понятно, то в .sum1 для ADD_ID вводим как сурз для колонки с %, а в методе считаем .sum = .tariff / 100 * .sum1 |
|
Вернуться к началу |
|
 |
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Ср Июл 06, 2005 3:04 pm Заголовок сообщения: |
|
|
Вобще-то вопрос стоял "как из программы метода..." но за отмазку сойдёт, 40 строк умножить на 40 раз... процессоры сейчас быстрые, можно и из программы метода такое провернуть. |
|
Вернуться к началу |
|
 |
|