powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вызов функции в запросе
25 сообщений из 27, страница 1 из 2
Вызов функции в запросе
    #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
Вызов функции в запросе
    #32424558
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А поле дата имеет тип Date/Time или String?
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #32424561
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
date\time
значение по умолчанию: =Format(Date();"dd.mm.yy")
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #32424563
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А почему у поля типа Date/Time задано значение по умолчанию типа String???
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #32424565
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ставлю точку останова в функции на строке
If Not rRecSet.NoMatch Then

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

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

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

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

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

По второй проблеме. Вижу, что CurrencyType передается в процедуру как параметр. Откуда он там берется, тебе лучше знать.
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #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
Вызов функции в запросе
    #32424600
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Да, я невнимательно прочитал вопрос. Вижу функцию YeType. Дык, стало быть, она неправильно работает.

А по первой проблеме - убери Format и поправь настройки даты на компе.
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #32424602
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в значение по умолчанию поставил просто Date()
Сегодняшнюю дату руками переписал в таблице - проблема осталась
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #32424608
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык, стало быть, она неправильно работает.
При выполнении запроса сообщение о невведенных курсах выдается два раза, т.е дело все таки в YeRate, т.к. именно к ней программы обращается два раза
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #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
Вызов функции в запросе
    #32424618
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Но если YeType возвращает пустой стринг, то надо проверить почему, не так ли?
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #32424621
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Таблица PARAMETER_TUNING на каждом компе сидит своя или общая в сети?
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #32424624
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица PARAMETER_TUNING на каждом компе сидит своя или общая в сети?
Общая
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #32424627
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Интересно поставить брейкпойнт на строчке
YeType = ""
и узнать, почему оно туда пришло.
...
Рейтинг: 0 / 0
Вызов функции в запросе
    #32424630
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но если YeType возвращает пустой стринг, то надо проверить почему, не так ли?
пустой стринг возвращает не только YeType, но и в самой YeRate CurrencyType = "", несмотря на то, что [Forms]![КАССА_Приход]![lst_currency] = USD

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

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


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