Имя: Пароль:
1C
1C 7.7
v7: Выгрузка 1c 7.7 из SQL в DBF в автоматическом режиме
,
0 Kasperok
 
07.07.14
11:27
Добрый день. Суть задачи сводится к тому чтобы раз в день/неделю на автомате выгружать базу которая крутится в SQL и загружать ее в DBF формате. Но в пакетном режиме 1с умеет только выгружать, а как тогда загрузить ?
1 NikVars
 
07.07.14
12:10
2 Kasperok
 
07.07.14
12:11
И в чем это мне поможет ?
3 floody
 
07.07.14
12:15
(2) что, действительно не понимаете?
4 xXeNoNx
 
07.07.14
12:16
(0) Любой шетдуллер и командная строка
5 Kasperok
 
07.07.14
12:22
А есть пример использования. просто как выгрузить я понимаю а вот как загрузить пока нет.
6 Феофан
 
07.07.14
12:29
УРБД уже предлагали?
7 Kasperok
 
07.07.14
12:37
(6) это не пойдет
8 NikVars
 
07.07.14
12:41
(5) Учу читать
"AutoIt использует симуляцию нажатия клавиш, движений мыши и манипуляции с окнами..."
9 Dolly_EV
 
07.07.14
14:24
(8) Да зачем AutoIt? WShell Senkeys хватит
10 PRO100 NigGaZ
 
07.07.14
14:48
Ща напишу не уходи ))
11 PRO100 NigGaZ
 
07.07.14
14:49
Dim loadMD  ' Имя загружаемого файла
Dim Wrapper
Dim loadPass ' Пароль
loadMD = ""

Const WM_SETTEXT = &H000C
Const WM_GETTEXT = &HD
Sub Configurator_AllPluginsInit()
    loadMD = InStr(CommandLine, "/load") ' Ищем ключ /load
    loadPass = InStr(CommandLine, "/pass") ' Ищем ключ /Pass
    If loadMD <> 0 Then ' Если есть, получаем имя файла
        Set Wrapper = CreateObject("DynamicWrapper")
        Wrapper.Register "USER32.DLL",   "GetFocus",                 "f=s", "r=l"
        Wrapper.Register "USER32.DLL",   "SendMessage",    "I=lllr", "f=s", "r=l"
        Message "Команда: " & CommandLine, mInformationmMetaData
        loadPass = Mid(CommandLine, loadPass + 5)
        Message "Пароль базы: " & loadPass, mInformationmMetaData
        loadMD = Mid(CommandLine, loadMD + 5, Len(CommandLine) - loadMD - 5 - Len(loadPass) - 5)
        Message "Загрузка из: " & loadMD, mInformationmMetaData
        '   Если выполняются эти строки, значит надо загружать данные
        '   Для начала надо выгрузить все остальные скрипты,
        '   чтобы не мешались их обработчики событий
        k = 0
        While Scripts.Count <> 1
            n = Scripts.Name(k)
            If LCase(n) <> SelfScript.Name Then
                Message "Unload " & n, mMetaData
                Scripts.Unload k
            Else
                k = 1
            End If
        Wend
        ' Возможно другие скрипты успели открыть какиенить окна.
        ' Надо их закрыть.
        While Not Windows.ActiveWnd Is Nothing
            Windows.ActiveWnd.Close
        Wend
        '   Теперь дадим команду на загрузку данных
        SendCommand 33205
        
    Else
        ' Иначе выгружаем скрипт, как ненужный
        Scripts.Unload SelfScript.Name
    End If
End Sub

Sub Configurator_OnMsgBox(Text, Style, DefAnswer, Answer)
    '   Во время всего действа, 1С периодически будет что-то спрашивать
    '   На предложение продолжить отвечаем просто согласием
    '   После всех остальных сообщений закрываем программу
    If loadMD <> "" Then
        Answer = DefAnswer
        If InStr(LCase(Text), "продолжить") = 0 Then
            loadMD = ""            
        End If
    End If
End Sub

Sub Configurator_OnDoModal(Hwnd, Caption, Answer)
    '   В поле ввода устанавливаем переданный путь
    If loadMD <> "" Then
        Text = LCase(Caption)
        If InStr(Text, "загрузка данных") <> 0 Then
            Wrapper.Register "USER32.DLL",   "FindWindowExA",  "I=llsl", "f=s", "r=l"
            EditBox = Wrapper.FindWindowExA(Hwnd,0,"ComboBox",NULL)
            EditBox = Wrapper.FindWindowExA(EditBox,0,"Edit",NULL)
            Wrapper.SendMessage EditBox, WM_SETTEXT, 1, LCase(loadMD)
            
            EditBox = Wrapper.FindWindowExA(Hwnd,0,"Edit",NULL)
            Wrapper.SendMessage EditBox, WM_SETTEXT, 100, LCase(loadPass)
            Message "Пароль: " & res, mInformationmMetaData
            Answer = mbaOK
        End If
    End If
End Sub

Sub Configurator_OnIdle()
    '    Все работы закончены, нужно выйти
    '    Выход делается после обработки всех сообщений в очереди, дабы не падало
    If loadMD = "" Then Windows.MainWnd.Close
End Sub
12 PRO100 NigGaZ
 
07.07.14
14:50
loaddatabase.vbs
в папку C:\Program Files (x86)\1Cv77\BIN\Config\Scripts
когда то находил этот скрипт, не помню правил или нет
13 VladZ
 
07.07.14
14:50
(0) Я могу узнать, для каких целей?
14 PRO100 NigGaZ
 
07.07.14
14:53
из 1с загрузку запускаю так
Сист.ЗапуститьОжидая(" """ + КаталогПрограммы() + "1cv7.exe"" config /D""" + СокрЛП(Путь)
                + """ /N" + СокрЛП("Загрузка") + " /P" + СокрЛП("Пароль") + " /load" + ФС.ТекКаталог() + "\Загрузка" + ФайлЗагрузка + " "
                + "/pass" + Пароль);
15 PRO100 NigGaZ
 
07.07.14
14:54
вот так загрузить базу командной строкой...
16 Kasperok
 
07.07.14
16:37
Цель такая что надо ежедневно отдавать базу в другой офис, и чтобы люди не делали это руками стоит цель автоматизировать
17 Kasperok
 
07.07.14
16:38
(14) Что-то не видел этих параметров в документации
18 Мигало
 
07.07.14
16:39
19 NikVars
 
07.07.14
17:05
(17) Учу читать.
Смотри руководство Конфигурирование и администрирование.
Глава 27. Администрирование. Пакетный режим.
20 vcv
 
07.07.14
20:56
Откуда у 1с может взяться ключ  "/pass" + Пароль
У (14), наверное, какой-то стартер это делает.
21 Kasperok
 
08.07.14
10:20
Да и судя по описания (18) ключа /load нету
22 NikVars
 
08.07.14
10:24
(21) Этот ключ из скрипта, что в (11).
23 Kasperok
 
08.07.14
10:29
тогда понятно :-)
Независимо от того, куда вы едете — это в гору и против ветра!