powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Все, иду вешаться.
25 сообщений из 26, страница 1 из 2
Все, иду вешаться.
    #33472226
Tea-pot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу, чтобы поплакаться в жилетку.

Ёлки-палки. Первый раз за 10 лет программирования не могу баг найти. Уже 4 дня бьюсь.

Он мне уже во сне снится. Наглый, усатый.

Что-то милый и пушистый юзверь использует такое хитрое в программе, в datawindow, что одно из полей пересчитывается в неправильную цифру.

Все триггеры уже пересмотрела в ораклевой базе.

Код в РВ. О! Это отдельная песня. Начинали его писать в Бельгии в 1995г, много надписей в DW на немецком, потом продолжали во Норвегии. Теперь вот это в Австралии 4-е года как работает. Бывает идешь по следу, смотришь - первая функция визывает вторую из другого обьекта, та вторая - третью, и т.д. И в конце концов доходишь до заглушки return 1.

Расставила шас всяких логов - ловушек, мож какая-нить зараза поймается. Но что-то надежды мало.

Эх, иконок с человеческими эмоциями жалко здесь нет, передать мои чувства.

Посоветуйте плиз какие-нить талисманы, или дУхов каких, богов. Может тут нечисть какая водится... Или напиться что-ли? Что вам помогало в таких случаях?
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33472235
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему то вспомнилось про задачу поймать льва в пустыне
возможно тебе подойдет "Метод Больцано-Вейерштрасса"

З.Ы. Как то про код написанный в Австралии (на вопрос как такое можно написать) коллега сказал - ну дык ить что ж ты хочешь походи всю жизнь вниз головой и не такое напишешь

З.З.Ы. Талисман говоришь? тут наверное нужен шаманский бубен с логотипом Sybase.
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33472263
Tea-pot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейПочему то вспомнилось про задачу поймать льва в пустыне
возможно тебе подойдет "Метод Больцано-Вейерштрасса"

А-а-а.
Да-да.
Метод половинного сечения.

Не помогааааееееет....

ЗоринАндрейЗ.Ы. Как то про код написанный в Австралии (на вопрос как такое можно написать) коллега сказал - ну дык ить что ж ты хочешь походи всю жизнь вниз головой и не такое напишешь



Явно индус постарался.
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33472636
pjanri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня коллега такой, так что из опыта могу сказать:

"Метод половинного сечения"

помогает, нужно только терпения набраться.
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33472965
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А поставить Debuger, перед тем как меняется это поле в DataWindow например перед dw.Retrieve() и просмотреть все переменные, из которых берутся косяковые значения в DW? Я думаю с 10 раза полюбому найдёте откуда косяки идут! Если этот косяк всплывает раз из 10 случаев, то всё таки домучать Юзвера в какой именно ситуации всплывает кривое поле! Это конечно примитивно, но другого выхода нет! Да чуть не забыл, часто такие безумные косяки всплывают из базы, например поле было varchar(3), изменился формат толкаются на вход процедуры varchar(4) ну и после этого это поле безбожно обрезается! Вот то что приходит на ум на вскидку! Удачи!
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33473026
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это может быть все что угодно, в т.ч. баг самого PB.
В частности недавно мы обнаружили такой пренеприятнейший баг:
Код: plaintext
1.
2.
3.
4.
5.
dec{ 0 } n
...
n = n + dw_1.GetItemDecimal(row, col)  // все ОК
а вот если вместо этого написать:
n += dw_1.GetItemDecimal(row, col)  // то в n оказывается мусор
Наблюдается только иногда.

В Вашем случае, я бы сначала локализовал бы место возникновения проблемы:
допустим проблема предположительно в том DW, значит надо для начала убедиться в этом. Для этого retreive() убираем, а вместо него заносим в DW тестовые данные, для которых известен правильный результат и убеждаемся что проблема возникает не ранее чем данные заносятся в DW(то есть с тестовыми данными проблема повторяется). Если подтвердили - ищем следующую потенциальную точку.
И т.д. (Вот здесь как раз и пригодился бы метод половинного деления)

Когда будет сформулирована проблема, включая место и условия, при которых она возникает, можно будет думать как ее решать.

Есть еще способ - отдайте программу другому человеку на отладку.
У этого способа есть положительный побочный эффект - не найдет этот баг, зато очень вероятно найдет многие другие. Только нужно заинтересовать его как то, либо материально либо духовно. Либо если этот человек - Ваш муж, то могут быть разные варианты :)
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33473225
Tea-pot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за поддержку и советы.
А то совсем пожалиться некому тут на чужбине. :-)))
Как-то повеселее стало.


Отдать на отладку некому.., это мне на отладку отдали.

Вся проблема в том, что я не могу поймать, когда она возникает.
Я пыталась безуспешно повторить эту ситуацию.
Юзверя пытала - улыбается и руками разводит.
Производишь "пересчет" и цифры меняются на правильные.

Про тот баг с += GetItemDecimal показалось интересной идеей, но не помогло.

Подсчитывается это поле элементарно (accept перед этим выполяется):

dw_1.object.количество[row] = dw_1.object.общийВес[row]/dw_1.object.вес1штуки{row]


Подчитывается оно в событии itemchanged для соответствующих полей.

Всю систему расписывать долго и не хочу никого загружать.
Скажу лишь, что это окно ввода заказа на бумажние роллы.
Здесь вес, количество зависят друг от друга и от того, какой вес одного ролла, который в свою очередь зависит от диаметра, ширины и плотности.
Компания по производству бумаги.

Хоть золотое сечение, хоть половинное, ничего не помогает.
Когда я в разных вариациях ввожу/меняю все цифры правильные.

Ладно, не буду вас утомлять. :-)))
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33473320
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку - нет явного приведения типов. Я бы посоветовал вместо dw.object.Поле использовать методы GetItem/SetItem. Далее - есть Accept или нет Accept-а, в любом случае пересчет должен быть вынесен в отдельное событие, а в ItemChanged оно должно вызываться через Post. Так надежнее и правильнее.
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33473352
Tea-pot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, только так оно и есть.
Это я сократила, для наглядности. Сорри.)))

Без сокрашения выглядит обработка одного из полей в itemchanged так.
Код - не мой, конечно.

(неправильно считается Quantity, вернее у меня всегда правильно, а юзер примерно в 5% случаев ухитряется сделать так, чтобы сохранилось неправильное значение).


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	CASE 'order_item_weight','order_item_unit_price_committed'
		AcceptText()
		ls_Product_Code = GetitemString(Row,'Order_Item_Product_Code')
		lc_Weight = GetItemNumber(Row,'order_item_weight')
		lc_Quantity = uo_ord_da.f_CalcProductQuantity(uo_ord_da.ids_OrderItem,ls_Product_Code,lc_Weight)
		SetItem(Row,'order_item_quantity',lc_Quantity)
		SetItem(Row,'order_item_cust_quantity',lc_Quantity)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public function long f_calcproductquantity (Datastore ads_OrderItem, string as_product_code, decimal ac_weight);Decimal lc_Net_Weight
Long ll_Quantity
Transaction lt_Module
Boolean lb_Result

lc_Net_Weight = ads_OrderItem.GetItemNumber(ads_OrderItem.GetRow(),'Net_Weight')
IF IsNull(lc_Net_Weight) THEN lc_Net_Weight =  0 

IF ac_Weight =  0  THEN Return  0 
IF lc_Net_Weight =  0  THEN Return  0 

ll_Quantity = Round(ac_Weight / lc_Net_Weight, 0 )

Return ll_Quantity
end function


Я вот начнаю подозревать синхронизацию datawindow и datastore, их используются десятки.
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33473380
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще навскидку:
1. Все таки вынесите код из ItemChanged в отдельное событие с параметром row и вызывайте его через Post. Конечно мое личное IMHO, но не хорошо вызывать внутри ItemChanged AcceptText и SetItem.
2. Настораживает функция, зачем она - передавать ей DataStore, чтобы она примитивно посчитала и вернула результат. Может быть легче все эти действия как раз проделать в событии, которое я порекомендовал в п.1
3. Нужна функция или нет, но еще я бы в отдельной функции с целью предотвращения ошибок не стал вызывать GetRow() у переданного DS, а лучше бы и передавал параметр row - событийная модель любого ООП языка штука коварная - никогда нельзя предугадать, какие события на что успели повлиять, поэтому нужно максимально не полагаться на предполагаемое. Отсюда и такие плавающие и трудноотлаживаемые глюки возникают.
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33473394
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Кстати, Вы там случайно не с программой для стоматологии возитесь ? Или Австралия - это родина PB проектов, которые в разное время писались и сопровождались в разных странах мира, но с обязательным условием всей бизнес-логики на клиенте и разных подходов в разных частях задачи
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33473561
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PowerBuilder Help AcceptText method (DataWindows)
...
Events
AcceptText may trigger an ItemChanged or an ItemError event.
AcceptText in the ItemChanged event Calling AcceptText in the ItemChanged event has no effect.

Вообще-то, я присоединяюсь к мнению ASCRUS - в itemchanged надо асинхронно вызывать функцию обработки и ничего больше не делать.
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33473751
SergeyGor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно попробовать следующим образом:

Создать копию изменяемого поля базы в DW с другим именем.
Сразу должно показать где меняется, в базе или программе.
А дальше терпение,
если в программе, то везде
добавлять изменения по новому полю как по старому,
как станет одинаково меняться там и искать.

если в базе то в триггере на update этого поля
raise_application_error
и покажет когда меняется в базе.
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33473947
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не торопитесь
А в поле точно не может быть ну скажем значения null до того как вы проверяете , а во вторых замечено, что GetRow в том виде как вы проверяете может выдать некоторое значение и близко не подходящее к реальному
так что если у Вас где -то что-то синхронизируется сначала проверьте та ли это строка, выше уже предлагали передать ее точно, или find использовать, кроме того замечание насчет поста не лишнее
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33475342
Tea-pot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок. Спасибо большое.

Все внимательно перечитала и приняла к сведению.

Теперь буду убеждать начальство менять код в этом месте.

Еще раз повторюсь, что код писался годами и не мной.

Я еще только 4 месяца здесь работаю, и о РВ до этого только слышала.
Новичек еще совсем + самоучка (что очень нехорошо).

А компания по производству бумаги.

Всем удачи в новом году. :-)))
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33479876
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tea-potА то совсем пожалиться некому тут на чужбине. :-)))Вот и у нас в середине Канады, прямо между океанами, одна степь кругом и ни одного русского пауэрбилдерщика... Дикие места! Так что давай плакаться друг другу! :-)
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33480247
Tea-pot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrsegoВот и у нас в середине Канады, прямо между океанами, одна степь кругом и ни одного русского пауэрбилдерщика... Дикие места! Так что давай плакаться друг другу! :-)

Calgary? ;-)
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33480700
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>To Usergo

А вы Филиппа в гости приглашайте, ему там недалеко, он подъедет. Вот и поплачитесь ему в жилетку!!!
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33480830
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага. Всего то 4 тыщи км.
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33480842
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зато через окиян плыть не надо! Токма через дикую степь на поезде!!!
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33480847
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogiman пишет:

> Зато через окиян плыть не надо! Токма через дикую степь на поезде!!!

Скорее уж над дикой степью на самолёте :).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33482565
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tea-potCalgary? ;-)Куда там - Калгари просто очаг цивилизации по сравнинию моим Виннипегом! А ещё центр, блин - в 30 км от географического центра Северной Америки. А Калгари западнее на 1300 км. А ты где?
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33482699
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
boogiman пишет:

> Зато через окиян плыть не надо! Токма через дикую степь на поезде!!!

Скорее уж над дикой степью на самолёте :).
Posted via ActualForum NNTP Server 1.3
На собаках быстрее будет
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33486129
Tea-pot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego Tea-potCalgary? ;-)Куда там - Калгари просто очаг цивилизации по сравнинию моим Виннипегом! А ещё центр, блин - в 30 км от географического центра Северной Америки. А Калгари западнее на 1300 км. А ты где?

Melbourne
...
Рейтинг: 0 / 0
Все, иду вешаться.
    #33488101
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в гости не зайти...
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Все, иду вешаться.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]