Skip to content

Instantly share code, notes, and snippets.

@stp-che
Last active October 8, 2018 07:08
Show Gist options
  • Save stp-che/b93fd61eaeef78911e61c63763849781 to your computer and use it in GitHub Desktop.
Save stp-che/b93fd61eaeef78911e61c63763849781 to your computer and use it in GitHub Desktop.
require 'json'
require 'net/http'
HOST = '192.168.242.150'
USER = 'Администратор'
PASSWORD = ''
DB = 'DemoHRM1'
def json_date(d)
d.strftime '%Y-%m-%dT00:00:00'
end
def request(meth, target, data=nil)
r_class = case meth
when :post then Net::HTTP::Post
when :patch then Net::HTTP::Patch
end
uri = URI(URI.escape "http://#{HOST}/#{DB}/odata/standard.odata/#{target}?$format=json")
req = r_class.new(uri)
req.basic_auth USER, PASSWORD
req.body = JSON.dump(data)
req.content_type = 'application/json'
Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
end
def post(*args)
request :post, *args
end
def patch(*args)
request :patch, *args
end
last_name = 'Шараф Эль Дин'
first_name = 'Мухаммед Амир'
second_name = 'Ибн Факхри Камаль'
# Шаг 1. Создаем физ. лицо в 1С
#
res = post 'Catalog_ФизическиеЛица', {
'ФИО' => "#{last_name} #{first_name} #{second_name}",
'Description' => "#{last_name} #{first_name} #{second_name}"
}
# Получаем такой результат:
# {
# "ФИО": "Шараф Эль Дин Мухаммед Амир Ибн Факхри Камаль",
# "Фамилия": "Шараф",
# "Имя": "Эль",
# "Отчество": "Дин",
# "Description": "Шараф Эль Дин Мухаммед Амир Ибн Факхри Камаль",
# }
#
# Причем, даже если мы укажем в запросе "Фамилия", "Имя" и "Отчество",
# то результат не изменится: 1С распарсит ФИО по своему усмотрению
# Достаем идентификатор созданного физ. лица
person_id = JSON.parse(res.body)['Ref_Key']
# Шаг 2. Создаем запись в истории изменений ФИО для созданного физ. лица
#
post 'InformationRegister_ФИОФизическихЛиц', {
'ФизическоеЛицо' => person_id,
'ФизическоеЛицо_Type' => 'StandardODATA.Catalog_ФизическиеЛица',
'Фамилия' => last_name,
'Имя' => first_name,
'Отчество' => second_name,
'Period' => json_date(Time.now)
}
# Шаг 3. Вызываем обновление физ. лица (данные можно никакие не передавать)
#
patch "Catalog_ФизическиеЛица('#{person_id}')", {}
# Вдимо, в этот момент в 1С срабатывают хуки на сохранении физ. лица,
# и в него подставляются нормалые Фамилия, Имя и Отчество из истории
#
# Получаем такой результат:
# {
# "ФИО": "Шараф Эль Дин Мухаммед Амир Ибн Факхри Камаль",
# "Фамилия": "Шараф Эль Дин",
# "Имя": "Мухаммед Амир",
# "Отчество": "Ибн Факхри Камаль",
# "Description": "Шараф Эль Дин Мухаммед Амир Ибн Факхри Камаль",
# }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment