Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вызов функции в запросе / 25 сообщений из 27, страница 1 из 2
27.02.2004, 15:50
    #32424552
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Кассир вводит приходный ордер, нажимает кнопочку "Сохранить и выйти".
Проиграмма проверяет введен ли курс используемой валюты на сегодняшний день и, если он введен,
то пересчитывает сумму прихода в условные единицы, а если нет, то выдает соответствующее сообщение.
Проблема в том, что при нажатии кнопки "Сохранить и выйти" выдается сообщение "Не введены курсы используемых валют",
несмотря на то, что они введены. После этого сообщения программа ПРАВИЛЬНО рассчитывает у.е.
Примечательно также и то, что эта проблема существует ТОЛЬКО на одной машине.
На всех остальных эта же копия программы работает нормально. В чем дело???
Я уже даже офис от отчаяния переустановил - не помогло!
Вот запрос, выполняемый при сохранении:
Код: plaintext
1.
2.
3.
4.
5.
6.
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;


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


Соответствующая функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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
...
Рейтинг: 0 / 0
27.02.2004, 15:53
    #32424558
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
А поле дата имеет тип Date/Time или String?
...
Рейтинг: 0 / 0
27.02.2004, 15:54
    #32424561
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
date\time
значение по умолчанию: =Format(Date();"dd.mm.yy")
...
Рейтинг: 0 / 0
27.02.2004, 15:56
    #32424563
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
А почему у поля типа Date/Time задано значение по умолчанию типа String???
...
Рейтинг: 0 / 0
27.02.2004, 15:57
    #32424565
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Ставлю точку останова в функции на строке
If Not rRecSet.NoMatch Then

проверяю значение CurrencyType = ""
Странно
...
Рейтинг: 0 / 0
27.02.2004, 15:58
    #32424570
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Ну вот и вторая проблема...
...
Рейтинг: 0 / 0
27.02.2004, 15:59
    #32424574
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
А почему у поля типа Date/Time задано значение по умолчанию типа String???
Не знаю

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

а на остальных машинах CurrencyType = "USD"
...
Рейтинг: 0 / 0
27.02.2004, 16:02
    #32424580
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Ну вот и вторая проблема...
А вот что с ней делать и откуда она взялась только на одной машине???
...
Рейтинг: 0 / 0
27.02.2004, 16:03
    #32424581
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Итак.

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

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

По второй проблеме. Вижу, что CurrencyType передается в процедуру как параметр. Откуда он там берется, тебе лучше знать.
...
Рейтинг: 0 / 0
27.02.2004, 16:05
    #32424587
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Откуда он там берется
Код: plaintext
1.
[Forms]![КАССА_Приход]![fld_Sum]*YeRate([Forms]![КАССА_Приход]![lst_currency])/(YeRate(YeType( "1 "))*YePer( "1 "))
AS Эквивалент1


Поле [Forms]![КАССА_Приход]![lst_currency]) ЗАПОЛНЕНО и равно USD
...
Рейтинг: 0 / 0
27.02.2004, 16:09
    #32424600
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Да, я невнимательно прочитал вопрос. Вижу функцию YeType. Дык, стало быть, она неправильно работает.

А по первой проблеме - убери Format и поправь настройки даты на компе.
...
Рейтинг: 0 / 0
27.02.2004, 16:09
    #32424602
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
в значение по умолчанию поставил просто Date()
Сегодняшнюю дату руками переписал в таблице - проблема осталась
...
Рейтинг: 0 / 0
27.02.2004, 16:12
    #32424608
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Дык, стало быть, она неправильно работает.
При выполнении запроса сообщение о невведенных курсах выдается два раза, т.е дело все таки в YeRate, т.к. именно к ней программы обращается два раза
...
Рейтинг: 0 / 0
27.02.2004, 16:13
    #32424614
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Вот YeType (на всякий случай)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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
...
Рейтинг: 0 / 0
27.02.2004, 16:14
    #32424618
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Но если YeType возвращает пустой стринг, то надо проверить почему, не так ли?
...
Рейтинг: 0 / 0
27.02.2004, 16:15
    #32424621
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Таблица PARAMETER_TUNING на каждом компе сидит своя или общая в сети?
...
Рейтинг: 0 / 0
27.02.2004, 16:16
    #32424624
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Таблица PARAMETER_TUNING на каждом компе сидит своя или общая в сети?
Общая
...
Рейтинг: 0 / 0
27.02.2004, 16:17
    #32424627
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Интересно поставить брейкпойнт на строчке
YeType = ""
и узнать, почему оно туда пришло.
...
Рейтинг: 0 / 0
27.02.2004, 16:19
    #32424630
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Но если YeType возвращает пустой стринг, то надо проверить почему, не так ли?
пустой стринг возвращает не только YeType, но и в самой YeRate CurrencyType = "", несмотря на то, что [Forms]![КАССА_Приход]![lst_currency] = USD

---
На стройки даты на компьютере обычные
...
Рейтинг: 0 / 0
27.02.2004, 16:20
    #32424633
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
в самой YeRate CurrencyType = "",
потому что туда подставляется значение, возвращенное функцией YeType.
...
Рейтинг: 0 / 0
27.02.2004, 16:22
    #32424636
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
я про первое обращение к функции:
YeRate([Forms]![КАССА_Приход]![lst_currency])
...
Рейтинг: 0 / 0
27.02.2004, 16:23
    #32424639
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Тогда интересно посмотреть в дебаггере
[Forms]![КАССА_Приход]![lst_currency]
в тот момент, когда
CurrencyType = ""
...
Рейтинг: 0 / 0
27.02.2004, 16:29
    #32424650
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Тогда интересно посмотреть в дебаггере

[Forms]![КАССА_Приход]![lst_currency] = USD
Более того:
YeRate([Forms]![КАССА_Приход]![lst_currency]) = 28.8
...
Рейтинг: 0 / 0
27.02.2004, 16:33
    #32424660
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
Исходя из того, что это только на одной машине такое происходит, то может быть дело не в программе???
...
Рейтинг: 0 / 0
27.02.2004, 16:37
    #32424668
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции в запросе
функция так работает только при вызове из запроса
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вызов функции в запросе / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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