Имя: Пароль:
1C
 
1С и Visual Basic 6.0
0 Прохожий
 
19.10.04
11:49
Кто-нибудь может помочь в этом направлении?
Сумел подключиться к базе, могу работать со справочниками. Но возникла проблема с некоторыми методами. Например, не могу присвоить переменной значение конкретного элемента справочника (не его реквизита, а именно самого элемента как объекта). Возможно ли это в VB6?
1 NastyFrog
 
19.10.04
12:18
На код бы взглянуть
2 Прохожий
 
19.10.04
12:26
Dim v7 As Object
Dim Goods As Object

Set v7 = CreateObject("V77s.Application")
   result = v7.Initialize(v7.RMTrade, "/DD:\1C\Bases\PS_Clean\", "")
   Set Goods = v7.EvalExpr("CreateObject(""Справочник.Номенклатура"")")

   Goods.ВыбратьЭлементы
   i = 1
   Do While Goods.ПолучитьЭлемент = 1
       If Goods.ПринадлежитГруппе(Goods.НайтиПоНаименованию("Перец")) = 1 Then
           grdGoods.TextMatrix(i, 1) = Goods.Наименование
           i = i + 1
       End If
   Loop

End Sub
///

Выражение Goods.ПринадлежитГруппе(Goods.НайтиПоНаименованию("Перец")) он и не понимает, что не так?
3 NastyFrog
 
19.10.04
12:51
НайтиПоНаименованию(<?>,,);
Синтаксис:
НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Соответственно принадлежит группе 1 или 0. такие группы есть?
4 NastyFrog
 
19.10.04
12:57
Попробуй
If Goods.Родитель.Наименование="Перец" Then
5 Прохожий
 
19.10.04
13:00
Да есть такая группа. VB не понимает такие методы как:
Goods.НайтиПоНаименованию()
Goods.НайтиПоКоду()

В данном коде я пытаюсь выгрузить в таблицу только те элементы справочника, которые принадлежат определленой группе. Может это можно сделать как-то по другому? Да и вообще как мне позиционироваться на каком либо элементе справочника (либо документе), кроме как с помощью методов Выбрать и Получить?
6 Прохожий
 
19.10.04
13:04
Такой вариант работает. Большое спасибо за помощь. Но, все таки, как можно еще позиционироваться на нужном элементе (либо документе) и работать уже с ним?
7 NastyFrog
 
19.10.04
13:06
VB всё понимает
Попробуй
If Goods.найтиПоНаименованию("Перец", 0) = 1 Then
         MsgBox Goods.Наименование
     End If
НайтиПоНаименованию возвращает 1 или 0 - это не группы, а числа - им не может принадлежать элемент справочника
8 NastyFrog
 
19.10.04
13:12
Если ты спозиционируешся во время перебора выборки на элементе мимо порядка выборки, ты выборку похренишь.
If Goods.НайтиПоНаименованию("Перец")=1 Then
myGroupe=Goods.текущийЭлемент
End if
Goods.ВыбратьЭлементы
  i = 1
  Do While Goods.ПолучитьЭлемент = 1
      If Goods.ПринадлежитГруппе(myGroupe) = 1 Then
          grdGoods.TextMatrix(i, 1) = Goods.Наименование
          i = i + 1
      End If
  Loop
9 Прохожий
 
19.10.04
13:12
И в правду понимает... Вот балбес! Спасибо тебе большое еще раз! Побольше б таких людей было!
10 Прохожий
 
19.10.04
13:20
Твой пример кода не работает:
myGroupe=Goods.текущийЭлемент не понимает. Понимает -
Dim mygpoupe As Object
Set myGroupe=Goods.текущийЭлемент
Но тогда If Goods.ПринадлежитГруппе(myGroupe) = 1 Then не понимает
11 NastyFrog
 
19.10.04
13:38
Sub test()
Dim v7 As Object
Dim Goods As Object
Dim myGroupe As Object
Set v7 = CreateObject("V77s.Application")
  Result = v7.Initialize(v7.RMTrade, "/DD:\1C\Bases\PS_Clean\", "")
  Set Goods = v7.EvalExpr("CreateObject(""Справочник.Номенклатура"")")

If Goods.НайтиПоНаименованию("Перец", 0) = 1 Then
Set myGroupe = Goods.текущийЭлемент
MsgBox myGroupe.наименование
End If
  Goods.ВыбратьЭлементы
  i = 1
  Do While Goods.ПолучитьЭлемент = 1
      If Goods.ПринадлежитГруппе(myGroupe) = 1 Then
          'grdGoods.TextMatrix(i, 1) = Goods.наименование
          MsgBox Goods.наименование
          i = i + 1
      End If
  Loop

End Sub
12 Прохожий
 
19.10.04
13:54
Выдает ошибку в строке If Goods.ПринадлежитГруппе(myGroupe) = 1 Then
13 NastyFrog
 
19.10.04
14:02
Может
Dim mygpoupe As Object ' объявлешь mygpoupe
Set myGroupe=Goods.текущийЭлемент ' используешь myGroupe, не исключено что где-нить ещё опечатка?
Option Explicit используй, дабы в переменных не путаться

У меня всё работает, проверь ещё раз
14 Прохожий
 
20.10.04
00:01
Вернусь к обсуждению темы.

У меня заработал следующий вариант:
If Goods.ПринадлежитГруппе(myGroupe.ТекущийЭлемент()) = 1 Then

Но теперь у меня возникла следующаяпроблема - с бухгалтерским запросом. Создаю объект "БухгалтерскиеИтоги" и пытаюсь выполнить метод ИспользоватьСубконто, но тут VB ругается на ВидыСубконто.Номенклатура. Код примерно следующий:

Dim total As Object
Set total = v7.EvalExpr("CreateObject(""БухгалтерскиеИтоги"")")
total.ИспользоватьСубконто ВидыСубконто.Номенклатура, Good.ТекущийЭлемент(), 2

Взять в скобки выражение (ВидыСубконто.Номенклатура, Good.ТекущийЭлемент(), 2) не могу - VB не позволяет, а так он определяет ВидыСубконто как не объявленная переменная. Что делать? Может поможете с проблемой?
15 IAm
 
20.10.04
00:26
Проблема в ДНК
неужели трудно догадаться что если
не
CreateObject(""БухгалтерскиеИтоги"") а  v7.EvalExpr("CreateObject(""БухгалтерскиеИтоги"")")
то и не
ВидыСубконто.Номенклатура
а
v7.ВидыСубконто.Номенклатура
16 IAm
 
20.10.04
00:28
И что за недоумок всякую фигню в базу данных добавляет.
17 IAm
 
20.10.04
00:28
в базу знаний
18 Прохожий
 
20.10.04
00:44
(15)Как я понял ты про мой ДНК упомянул. Ну какой вышел...
Тем не менее благодарю за помощь. А может еще поможешь и с методом ВыполнитьЗапрос. Тут у меня тоже проблема (в ДНК).
Заранее благодарю.
19 IAm
 
20.10.04
10:39
18 Помогу, как только проблемы в ДНК перестанут мешать описать проблему с запросом.
Заранее благодарю.
20 NastyFrog
 
20.10.04
10:50
Кстати,
If Goods.НайтиПоНаименованию("Перец", 0,1) = 1 Then - третий параметр добавь, дабы точно "перец" искал, а то мож у тебя есть какой-нить "перец ясный" или "перец де куэльяр" - находит элемент, а не группу, и ругается, или по коду ищи - во избежание.