TCP-socket-сервер и клиент для платформы "1С:Предприятие"
- Microsoft Windows семейства NT (только для сервера)
- 1С:Предприятие v7 (только для сервера)
- Ruby 1.9.3
gem install s41c
Запустить сервер для 1C:Предприятия 7.7 (сетевая версия) на localhost:1421 и использовать базу "C:\Base"
require 's41c'
server = S41C::Server.new
server.db('C:\Base\\')
server.start
Или чуть сложнее: запустить сервер для 1С:Предприятия (локальная версия) на 127.0.0.1:2000, разрешать подключения только с адреса 123.45.67.8, использовать базу "C:\Base", при подключении требовать логин "username" и пароль "password", писать лог в c:\server.log и записать время остановки сервера в файл
require 's41c'
server = S41C::Server.new('127.0.0.1', 2000, 'c:\server.log')
server.white_list('123.45.67.8')
server.ole_name = 'V77L.Application'
server.db('C:\Base\\')
server.login('username', 'password')
server.at_exit do
File.open('c:\server_stoped_at.txt', 'w') { |f| f.puts Time.now }
end
server.start
При подключении можно указать хост и порт сервера (если не указаны, будут использоваться localhost:1421), а также данные для авторизации. После подключения на сервер передаётся руби-код, который и выполняет все, что нам нужно. Внимание! В передаваемом коде нельзя использовать комментарии и условия вида "do_somthing if some_condition", вместо это следует писать "if some_condition do_somthing;end", аналогично для unless
require 's41c'
client = S41C::Client.new('127.0.0.1', 2000)
client.login('username', 'password')
vars = {:spr_name => 'Товары', :tov_name => 'Название товара'}
response = client.request(vars) do
spr = @ole.CreateObject("Справочник.#{@vars[:spr_name]}")
if spr.invoke('НайтиПоНаименованию', @tov_name) == 1.0
item = spr.invoke('ТекущийЭлемент')
item_id = get_1c_id(item)
expr = 'КакаяНибудьФункция(ЗначениеИзСтрокиВнутр(' + item_id + '))'
result = @ole.EvalExpr(expr)
end
to_utf8(result)
end
puts response
client.disconnect
Данные, переданные методу request, внутри кода доступны либо через хеш @vars, либо непосредственно через одноименные переменные. Также доступен объект @ole, который является инстансом 1С и у него есть 3 метода
-
CreateObject - создает объект агрегатного типа данных 1С:Предприятия и возвращает ссылку на него.
-
EvalExpr - вычислияет выражение системы 1С:Предприятие и возвращает результат вычисления
-
ExecuteBatch - выполняет последовательность операторов системы 1С:Предприятие и возвращает статус выполнения (true/false)
Вызов функций и процедур созданных объектов осуществляется с помощью метода 'invoke', которому в качестве первого аргумента передаётся название функции/процедуры, а последующих - параметры.
Также достпен ряд вспомогательных функций
- to_bin - переводит utf-строку в бинарный формат
- to_utf8 - переводит бинарную или строку из 1С в utf-8
- get_1c_id - обертка над 1С-функцией 'ЗначениеВСтрокуВнутр', возращает строковый идентификатор объекта.