Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема) / 19 сообщений из 19, страница 1 из 1
22.07.2010, 11:15
    #36753960
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
есть вот такой код. Мне нужно в цикле получить дату приема на работу каждого сотрудника. Все идет хорошо до выражений EvalExpr(); ExecuteBatch() Они не работают))))) но откровенно я не знаю как ими пользоваться!
Работа выполняется в access 2003 sp3

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Sub sinhr_sotr()

 Dim v7 As Object
 Dim Пользователь As String
 Dim SprSotr As Object
 Dim Result

 Пользователь = "Сергей"

  Set v7 = CreateObject("V77.Application")
  Result = v7.Initialize(v7.RMTrade, "/d" & lstboxПутьКБазе & " /M /N" & Пользователь, "NO_SPLASH_SHOW")

  If Result = False Then
      MsgBox "База 1C не подключена!", vbOKOnly + vbExclamation, "Предупреждение"
        Exit Sub
  End If

  Set SprSotr = v7.CreateObject("Справочник.Сотрудники")

     SprSotr.ВыбратьЭлементы

    Do While SprSotr.ПолучитьЭлемент =  1 
        If SprSotr.ЭтоГруппа =  0  And SprSotr.ПометкаУдаления =  0  Then

           Debug.Print SprSotr.Наименование
' как получить дату приема на работу сотрудника?  
            v7.EvalExpr("глДатаПриема(SprSotr)")
            v7.ExecuteBatch ("глДатаПриема(SprSotr)")
            v7.EvalExpr("глДатаПриема(SprSotr.ТекущийЭлемент)")
            v7.ExecuteBatch ("глДатаПриема(SprSotr.ТекущийЭлемент)")
            v7.EvalExpr("глДатаПриема(SprSotr.Наименование)")
            v7.ExecuteBatch ("глДатаПриема(SprSotr.Наименование)")

'все вышеперечисленное выдает false
        End If
    Loop
    Set v7 = Nothing
    Set SprSotr = Nothing
End Sub
...
Рейтинг: 0 / 0
22.07.2010, 11:48
    #36754067
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
http://www.sql.ru/forum/actualthread.aspx?tid=678090

Читали?
...
Рейтинг: 0 / 0
22.07.2010, 11:49
    #36754071
tvm
tvm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
KuskovS,
попробуй примерно так
Код: plaintext
1.
v7.EvalExpr("глДатаПриема("+SprSotr+")")
а то у тебя получается что передается как строка. т.е. 1С получает не значение SprSotr а строку "SprSotr" и естественно не может выполнить
...
Рейтинг: 0 / 0
22.07.2010, 12:14
    #36754146
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
Код: plaintext
1.
v7.EvalExpr("глДатаПриема("+SprSotr+")")
Это выражение выдает ошибку '13' type mismatch.

Если сделать без кавычек и плюсов вот так:
Код: plaintext
v7.EvalExpr("глДатаПриема(SprSotr)")
Пишет следующее
Ошибка '2'
1 глДатаПриема(SprSotr<<?>>)
Переменная не определена (SprSotr)

Я пробывал SprSotr.Наименование

Получается следующая ошибка
Ошибка '2'
1 глДатаПриема(SprSotr<<?>>.Наименование)
Переменная не определена (SprSotr)

Я пробывал SprSotr.ТекущийЭлемент

все тоже самое только меняется с Наименование на ТекущийЭлемент
...
Рейтинг: 0 / 0
22.07.2010, 12:17
    #36754157
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
Господин ПЖhttp://www.sql.ru/forum/actualthread.aspx?tid=678090

Читали?

Прочилал, после Вашей ссылке - принцип понял, однако мою текущую проблему решить не смог
...
Рейтинг: 0 / 0
22.07.2010, 12:19
    #36754160
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
Попробывал вот так
Код: plaintext
Debug.Print v7.EvalExpr("глДатаПриема(""SprSotr"")")
Выдает ошибку
run-time error '2' Значение не представляет агрегатный объект (Выбран) 1686
...
Рейтинг: 0 / 0
22.07.2010, 12:26
    #36754183
Last1Cmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
KuskovSПопробывал вот так
Код: plaintext
Debug.Print v7.EvalExpr("глДатаПриема(""SprSotr"")")
Выдает ошибку
run-time error '2' Значение не представляет агрегатный объект (Выбран) 1686

ищите ошибку в вызываемом приложении

скорее всего применяете метод к объекту/переменной неопределенного типа
...
Рейтинг: 0 / 0
22.07.2010, 12:31
    #36754200
tvm
tvm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
вот еще пример

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Set sotrudnik = v77.EvalExpr("СоздатьОбъект(""Справочник.Сотрудники"")")
sotrudnik.ВыбратьЭлементы
sotrudnik.ИспользоватьДату (Date)
sotrudnik.ПорядокКодов
Do While sotrudnik.ПолучитьЭлемент >  0 
        If sotrudnik.ЭтоГруппа =  0  And sotrudnik.ПометкаУдаления =  0  Then
            Debug.Print sotrudnik.Код & ", " & sotrudnik.Наименование
        End If
        i = i +  1 :  If i >  50  Then Exit Do  ' для пробы
    Loop
...
Рейтинг: 0 / 0
22.07.2010, 13:00
    #36754282
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
>"глДатаПриема(""SprSotr"")

это уже не правильно даже с точки зрения самой 1С. SprSotr.ТекущийЭлемент() либо SprSotr.ТекущийЭлемент (с поправкой на vba)
...
Рейтинг: 0 / 0
22.07.2010, 13:08
    #36754305
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
Господин ПЖ>"глДатаПриема(""SprSotr"")

это уже не правильно даже с точки зрения самой 1С. SprSotr.ТекущийЭлемент() либо SprSotr.ТекущийЭлемент (с поправкой на vba)

Предложенные варианты также не работают. Их я в первую очеред пробывал - ошибка таже(поле не представляет агрегатного объекта (выбран))
...
Рейтинг: 0 / 0
22.07.2010, 14:01
    #36754443
tvm
tvm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
а глДатаПриема точно есть в глобальнике?
...
Рейтинг: 0 / 0
22.07.2010, 14:09
    #36754465
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
В качестве аргумента функция глДатаПриема принимает значение из справочника, а я передаю строку. Можно как-то это поправить?
...
Рейтинг: 0 / 0
22.07.2010, 14:10
    #36754468
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
tvmа глДатаПриема точно есть в глобальнике?
Точно!
...
Рейтинг: 0 / 0
22.07.2010, 14:18
    #36754499
tvm
tvm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
KuskovS,

так я про это и писал!
...
Рейтинг: 0 / 0
22.07.2010, 14:27
    #36754530
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
tvmKuskovS,

так я про это и писал!
Теперь понял))) И чего-то я невижу выхода, кроме как писать функцию которая бы получала в качестве аргумента строку, далее искала бы в справочники сотрудники эту строку ну и т.д., только вот это мне нежелательно - хотелось бы стандартными средствами.
...
Рейтинг: 0 / 0
22.07.2010, 14:40
    #36754568
tvm
tvm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
да там вроде все банально просто передается. только вот я не помню счас и посмотреть нет возможности
попробуй поищи доку по созданию внешних компонент
...
Рейтинг: 0 / 0
22.07.2010, 15:15
    #36754696
pail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
KuskovStvmKuskovS,

так я про это и писал!
Теперь понял))) И чего-то я невижу выхода, кроме как писать функцию которая бы получала в качестве аргумента строку, далее искала бы в справочники сотрудники эту строку ну и т.д., только вот это мне нежелательно - хотелось бы стандартными средствами.

Непосредственно в vba-коде можно и объект типа Справочник.Сотрудники создать, и нужный элемент в нем найти, и передать его в вызываемую функцию ГМ.
Кстати, оборачивать вызов в EvalExpr тоже ни к чему можно написать просто

Код: plaintext
1.
2.
Set sotrudnik = v77.EvalExpr("СоздатьОбъект(""Справочник.Сотрудники"")")
sotrudnik.НайтиПоНаименованию("Чего-то там")
v77.глДатаПриема(sotrudnik.ТекущийЭлемент())

Вызовы процедур и функций встроенного языка - да, приходится оборачивать в EvalExpr/ExecuteBatch,
а методы объектов и экспортируемые функции/процедуры ГМ работают через OLE нормально. Как правило - хотя бывает, что и здесь на ровном месте необъяснимые глюки начинают возникать в работавшем ранее коде.
...
Рейтинг: 0 / 0
22.07.2010, 17:51
    #36755232
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
pail Вам персональное спасибо. Код отработал отлично! Я просто не нарадуюсь.
...
Рейтинг: 0 / 0
23.07.2010, 09:32
    #36755884
KuskovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
Я вчера поблагодарил только Pail, но в обсуждении участвовал не он один. Всем спасибо))))))
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема) / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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