Аналог хранения констант 1С

VBA2007
Дата: 29.02.2008 18:25:17
При входе в систему выбирается в комбобоксе значение таблицы и потом используется во время работы системы (значение по умолчанию для других полей).

При входе из системы значение долзхно запоминаться.

В 1С это делается с помощью констант.

Как в Access?
RVI
Дата: 29.02.2008 18:30:22
Хранить в таблице или в ИНИ файле.
VBA2007
Дата: 29.02.2008 18:40:14
RVI
Хранить в таблице или в ИНИ файле.


Ну это я и сам догадлся. А кто реально делал?

Таблица: какая структура?
Код чтения/записи констант?
Modern
Дата: 29.02.2008 19:45:30
Dlookup 'ом вытаскиваешь для подстановки в поле по умолчанию. Или периодичность как 1с тоже хочешь?
mds_world
Дата: 29.02.2008 20:09:55
В принципе, подходящий вариант для вас, если нужны именованные константы, это писать в в модуль. По окончании работы запускаете функцию, записываете константы. В начале работы запускаете функцию, считываете значения.

Вот пример из хелпа.
Function InsertProc(strModuleName) As Boolean
	Dim mdl As Module, strText As String

	On Error GoTo Error_InsertProc
	' Открывает модуль.
	DoCmd.OpenModule strModuleName
	' Возвращает ссылку на объект Module.
	Set mdl = Modules(strModuleName)
	' Присваивает значение строковой переменной.
	strText = "Sub DisplayMessage()" & vbCrLf _
		& vbTab & "MsgBox ""Чушь!""" & vbCrLf _
		& "End Sub"
	' Вставляет текст в модуль.
	mdl.InsertText strText

InsertProc = True

Exit_InsertProc:
	Exit Function

Error_InsertProc:
	MsgBox Err & ": " & Err.Description
	InsertProc = False
	Resume Exit_InsertProc
End Function
mds_world
Дата: 29.02.2008 20:11:20
Еще интересный вариант - писать в реестр. Но именованных констант там не получится.
ratboy
Дата: 29.02.2008 23:45:39
'Пример использования:
   ' WriteINI "Настройка Приложения", "Путь к БАЗЕ", CurrentProject.Path
   ' MsgBox ReadINI("Настройка Приложения", "Путь к БАЗЕ", "НЕ ЗНАЮ! :(")
 
Option Explicit
'=======================================================================
'js 20.11.03
'Модуль Записи|Чтения INI файла
'=======================================================================
'Декларация API ......
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Private Function PathToINI() As String
'Возвращает путь к файлу INI
'=======================================================================
Const INI_FileName As String = "KConfig.ini"
    'PathToINI = App.Path & "\" & INI_FileName            Для VB
    PathToINI = CurrentProject.Path & "\" & INI_FileName  'Для VBA (2000+)
End Function


Public Sub WriteINI(sPart As String, sName As String, val As String)
'Запись данных в INI файл - аргументы:
'   sPart  = Название раздела
'   sName  = Название параметра
'   val    = Значение параметра
'=======================================================================
Dim filePath As String
Dim intRet As Integer
On Error GoTo WriteINIErr
'Получаем путь ....
    filePath = PathToINI
'Пишем значения
    intRet = WritePrivateProfileString(sPart, sName, val, filePath)
'Проверка результата записи
    If intRet <> 1 Then 'Неудачное завершение
        MsgBox "Процедура WriteINI не смогла записать параметр INI Файла:" & vbCrLf & _
        filePath & vbCrLf & _
        "-----------------------------------------------------------------" & vbCrLf & _
        "[" & sPart & "]" & vbCrLf & sName & "=" & val
    End If
    Exit Sub
WriteINIErr:
    MsgBox "Процедура WriteINI привела к ошибке:" & vbCrLf & _
    "#" & Err.Number & " " & Err.Description, vbCritical
End Sub


Public Function ReadINI(sPart As String, sName As String, Optional DefVal As String = "") As String
'Чтение данных из файла INI - с возможностью записи значения по умолчанию где аргументы:
'   sPart  = Название раздела
'   sName  = Название параметра
'   DefVal = Значение по умолчанию (на случай его отсутствия)
'=======================================================================
'Значение возвращаемое функцией GetPrivateProfileString если искомое значение параметра не найдено
Const strNoValue As String = ""
'
Dim filePath As String   'Путь к INI файлу
Dim intRet As Integer    'Длина возвращаемой строки (функцией GetPrivateProfileString)
Dim strRet As String     'Возвращаемая строка
On Error GoTo ReadINIErr
'Получаем путь ....
    filePath = PathToINI

'Получаем значение из файла - если его нет будет возвращен 3й аргумент = strNoValue
    strRet = String(255, Chr(0))
    intRet = GetPrivateProfileString(sPart, sName, strNoValue, strRet, 255, filePath)
    strRet = Left$(strRet, intRet)

'Определяем было найдено значение или нет (если возвращено знач. константы strNoValue то = НЕТ)
    If strRet = strNoValue Then            'Значение не было найдено
        If DefVal <> "" Then               'Если знач по умолчанию задано
            WriteINI sPart, sName, DefVal  'Записываем заданное аргументом DefVal значение по умолчанию
            strRet = DefVal                'и возвращаем его же
        End If
    End If
'Возвращаем найденное
    ReadINI = strRet
    Exit Function
ReadINIErr:
    MsgBox "Функция ReadINI привела к ошибке:" & vbCrLf & _
    "#" & Err.Number & " " & Err.Description, vbCritical
End Function


Public Sub wrini()
WriteINI "Другая настройка", "ЕщеПуть к БАЗЕ", CurrentProject.Path
MsgBox ReadINI("Настройка Приложения", "Путь к БАЗЕ")
End Sub


Вот таак хотя бы, но можно и круче
&lt;&gt;
Дата: 01.03.2008 00:25:57
VBA2007
RVI
Хранить в таблице или в ИНИ файле.


Ну это я и сам догадлся. А кто реально делал?

Таблица: какая структура?
Код чтения/записи констант?

Реально? 1цэ, константы держит в таблицах. Хотите структуры-изучите 1цэ файл *.dd там структура описана.
seforsource
Дата: 19.10.2009 15:18:24
Привет!
Константы в 1С - это борода. Структуры.
Использую таблицу. Ищу по индексу. Тип константы - строка.

tbl_setting
Key setting

Key он же PrimaryKey
'Чтение настроек
Public Function FindSettings(id As Long) As String
    Dim rst As New ADODB.Recordset
        With rst
            .Open "tbl_settings", CurrentProject.Connection, adOpenDynamic, adLockOptimistic, adCmdTableDirect
            .Index = "PrimaryKey"
            .Seek id, adSeekAfterEQ
        
            If .EOF Then
                FindSettings = ""
            Else
                FindSettings = .Fields(1)
            End If
        End With
        rst.Close
    Set rst = Nothing
End Function

Все летает. Функция используется во многих процедурах, запросах и т.д. Seek дает о себе знать. Ощущение, будто значение из памяти тяну, а не из таблицы.
seforsource
Дата: 19.10.2009 15:21:19
Только сейчас заметил ;)
.Open "tbl_settings", CurrentProject.Connection, adOpenStatic, adLockReadOnly, adCmdTableDirect