Получить данные из 1С в ruby, очень просто, в отличие от других языков программирования, причем все это прямо из коробки. Заметьте, вызов русскоязычных методов 1C не является проблемой в ruby. Простой REST сервер и минимальная логика и ваши клиенты довольны тем, что смогут посмотреть информацию о своих покупках или справочные данные.

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
require 'win32ole'

class OLE_1C

  attr_reader :connect

  def initialize(server, name, user, pass)
    @connect = WIN32OLE.new 'V83.Application'
    if server.size > 0
      @connect.Connect "Srvr=\"#{server}\";Ref=\"#{name}\";Usr=\"#{user}\";Pwd=\"#{pass}\""
    else
      @connect.Connect "File=\"#{name}\"; usr=\"#{user}\"; pwd=\"#{pass}\""
    end
  end

  # Преобразует объект в строку UTF-8
  def String(obj)
    @connect.String(obj).encode('UTF-8')
  end

  # Получить UUID ссылки
  def Ref_UUID(obj)
    String(obj.Ref.UUID)
  end

  # Возвращает имя метаданных ссылки
  def MetadataName(obj)
    String(obj.Metadata.Name)
  end

  # Возвращает полное имя метаданных ссылки
  def MetadataFullName(obj)
    String(obj.Metadata.FullName)
  end

  # Выполняет метод 1с предприятия
  # element = server.Invoke('Справочники', 'Контрагенты', ['НайтиПоКоду','00000002'])
  def Invoke(*obj)
    obj.inject(@connect) do |result, element|
      result.invoke *Array(element)
    end
  end

  # Получить ссылку по UUID
  # element = server.UUID_Ref('Справочники', 'Контрагенты', '6f579662-7453-11e3-b5e2-00269e72fb28')
  def UUID_Ref(type, name, uuid)
    Invoke(type, name).GetRef(@connect.NewObject('UUID',uuid))
  end

end

# server = OLE_1C.new 'IP', 'Имя_БД', 'Пользователь', 'Пароль'
server = OLE_1C.new '', 'Путь к БД', 'Пользователь', 'Пароль'
element = server.Invoke('Справочники', 'Номенклатура', ['НайтиПоКоду','00000005'])
puts server.Ref_UUID(element) # UUID элемента
puts server.MetadataName(element) # Наименование метаданных
puts server.MetadataFullName(element) # Наименование методанных справочника
puts element.Code # Код номенклатуры
puts element.Description.encode('UTF-8') # Наименование номенклатуры