powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
19 сообщений из 19, страница 1 из 1
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
    #36753960
KuskovS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть вот такой код. Мне нужно в цикле получить дату приема на работу каждого сотрудника. Все идет хорошо до выражений 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
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
    #36754067
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/forum/actualthread.aspx?tid=678090

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

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

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

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

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

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

Читали?

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

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

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

Код: 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
Как из vba выполнить функцию главного модуля 1С (в частности глДатаПриема)
    #36754282
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>"глДатаПриема(""SprSotr"")

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

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

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

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

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

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

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

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

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


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