Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Кассир вводит приходный ордер, нажимает кнопочку "Сохранить и выйти".
Проиграмма проверяет введен ли курс используемой валюты на сегодняшний день и, если он введен,
то пересчитывает сумму прихода в условные единицы, а если нет, то выдает соответствующее сообщение.
Проблема в том, что при нажатии кнопки "Сохранить и выйти" выдается сообщение "Не введены курсы используемых валют",
несмотря на то, что они введены. После этого сообщения программа ПРАВИЛЬНО рассчитывает у.е.
Примечательно также и то, что эта проблема существует ТОЛЬКО на одной машине.
На всех остальных эта же копия программы работает нормально. В чем дело???
Я уже даже офис от отчаяния переустановил - не помогло!
Вот запрос, выполняемый при сохранении:
INSERT INTO cash ( [Реф №], ФИО, Организация, [Код кассы], Потребитель, Наименование, Валюта, Приход, Эквивалент1 )

SELECT [Forms]![КАССА_Приход]![fld_Ref] AS [Реф №], [Forms]![КАССА_Приход]![fld_FIO] AS ФИО,
[Forms]![КАССА_Приход]![lst_Organization] AS Организация, [Forms]![userid]![userid] AS [код кассы],
[Forms]![КАССА_Приход]![lst_Consumer] AS Потребитель, [Forms]![КАССА_Приход]![fld_Name] AS Наименование,
[Forms]![КАССА_Приход]![lst_Currency] AS Валюта, [Forms]![КАССА_Приход]![fld_Sum] AS Приход,
[Forms]![КАССА_Приход]![fld_Sum]*YeRate([Forms]![КАССА_Приход]![lst_currency])/(YeRate(YeType("1"))*YePer("1"))
AS Эквивалент1;


Соответственно это строка, в которой происходит проверка курса валюты и расчет у.е.
[Forms]![КАССА_Приход]![fld_Sum]*YeRate([Forms]![КАССА_Приход]![lst_currency])/(YeRate(YeType("1"))*YePer("1"))

AS Эквивалент1


Соответствующая функция:
Public Function YeRate(CurrencyType As String)

On Error GoTo Err
Set rRecSet = CurrentDb.OpenRecordset _
("select дата, [Курс ЦБ] from currency_rate Where ((([Код валюты]) = '" & CurrencyType & "'))")

rRecSet.FindFirst "[дата] = date()"
If Not rRecSet.NoMatch Then
YeRate = rRecSet![Курс ЦБ]
rRecSet.Close
Else
MsgBox "Не введены курсы используемых валют"
End If
Exit_:
Exit Function

Err:
MsgBox Err.Description
Resume Exit_
End Function
27 фев 04, 15:50    [555007]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
А поле дата имеет тип Date/Time или String?
27 фев 04, 15:53    [555017]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
date\time
значение по умолчанию: =Format(Date();"dd.mm.yy")
27 фев 04, 15:54    [555021]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
А почему у поля типа Date/Time задано значение по умолчанию типа String???
27 фев 04, 15:56    [555024]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Ставлю точку останова в функции на строке
If Not rRecSet.NoMatch Then

проверяю значение CurrencyType = ""
Странно
27 фев 04, 15:57    [555027]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Ну вот и вторая проблема...
27 фев 04, 15:58    [555033]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
А почему у поля типа Date/Time задано значение по умолчанию типа String???
Не знаю

проверяю значение CurrencyType = ""
Странно

а на остальных машинах CurrencyType = "USD"
27 фев 04, 15:59    [555037]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Ну вот и вторая проблема...
А вот что с ней делать и откуда она взялась только на одной машине???
27 фев 04, 16:02    [555045]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Итак.

По первой проблеме. Функция Format выдает стринг. Если он ухитряется попасть в поле типа Date/Time, то он преобразуется в соответствии с настройками данного компа. Например:

дата 2 июля 2004 -> стринг "02.07.04" -> дата 7 февраля 2004

По второй проблеме. Вижу, что CurrencyType передается в процедуру как параметр. Откуда он там берется, тебе лучше знать.
27 фев 04, 16:03    [555046]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Откуда он там берется
[Forms]![КАССА_Приход]![fld_Sum]*YeRate([Forms]![КАССА_Приход]![lst_currency])/(YeRate(YeType("1"))*YePer("1"))

AS Эквивалент1


Поле [Forms]![КАССА_Приход]![lst_currency]) ЗАПОЛНЕНО и равно USD
27 фев 04, 16:05    [555056]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Да, я невнимательно прочитал вопрос. Вижу функцию YeType. Дык, стало быть, она неправильно работает.

А по первой проблеме - убери Format и поправь настройки даты на компе.
27 фев 04, 16:09    [555072]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
в значение по умолчанию поставил просто Date()
Сегодняшнюю дату руками переписал в таблице - проблема осталась
27 фев 04, 16:09    [555074]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Дык, стало быть, она неправильно работает.
При выполнении запроса сообщение о невведенных курсах выдается два раза, т.е дело все таки в YeRate, т.к. именно к ней программы обращается два раза
27 фев 04, 16:12    [555081]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Вот YeType (на всякий случай)
Public Function YeType(sNumber As String) As String

On Error GoTo Err
Set rRecSet = CurrentDb.OpenRecordset("PARAMETER_TUNING", dbOpenSnapshot, dbReadOnly)
rRecSet.FindFirst "[VARIABLE_CODE] = '" & sNumber & "'"
If Not rRecSet.NoMatch Then
YeType = rRecSet![VARIABLE_VALUE]
Else
YeType = ""
End If
rRecSet.Close
Exit Function
Exit_:
Exit Function

Err:
MsgBox Err.Description
Resume Exit_
End Function
27 фев 04, 16:13    [555087]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Но если YeType возвращает пустой стринг, то надо проверить почему, не так ли?
27 фев 04, 16:14    [555092]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Таблица PARAMETER_TUNING на каждом компе сидит своя или общая в сети?
27 фев 04, 16:15    [555097]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Таблица PARAMETER_TUNING на каждом компе сидит своя или общая в сети?
Общая
27 фев 04, 16:16    [555100]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Интересно поставить брейкпойнт на строчке
YeType = ""
и узнать, почему оно туда пришло.
27 фев 04, 16:17    [555103]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Но если YeType возвращает пустой стринг, то надо проверить почему, не так ли?
пустой стринг возвращает не только YeType, но и в самой YeRate CurrencyType = "", несмотря на то, что [Forms]![КАССА_Приход]![lst_currency] = USD

---
На стройки даты на компьютере обычные
27 фев 04, 16:19    [555107]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
в самой YeRate CurrencyType = "",
потому что туда подставляется значение, возвращенное функцией YeType.
27 фев 04, 16:20    [555111]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
я про первое обращение к функции:
YeRate([Forms]![КАССА_Приход]![lst_currency])
27 фев 04, 16:22    [555117]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Тогда интересно посмотреть в дебаггере
[Forms]![КАССА_Приход]![lst_currency]
в тот момент, когда
CurrencyType = ""
27 фев 04, 16:23    [555122]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Тогда интересно посмотреть в дебаггере

[Forms]![КАССА_Приход]![lst_currency] = USD
Более того:
YeRate([Forms]![КАССА_Приход]![lst_currency]) = 28.8
27 фев 04, 16:29    [555141]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
Исходя из того, что это только на одной машине такое происходит, то может быть дело не в программе???
27 фев 04, 16:33    [555155]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции в запросе  [new]
Vsevolod V
Member

Откуда: Россия. Санкт-Петербург
Сообщений: 3194
функция так работает только при вызове из запроса
27 фев 04, 16:37    [555168]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить