Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Отпрыск ChatGPT
 Аватар для Azawa
33 / 29 / 4
Регистрация: 18.06.2019
Сообщений: 152
1C 7.x

Где найти полную документацию по объектам языка 1С (для OLE)?

09.07.2025, 08:41. Показов 1087. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните пожалуйста как с этим работать я ничего не понимаю.
В "1С Отладчик", вижу исходный код модулей, но там одни формы. Не вижу базовых объектов, таких как "Документ" - я не представляю какие у них есть методы, свойства и т.д. и с ними работать. Документацию по объектам в 1С в справке не нашёл.

Точный вопрос такой: где найти в открытом доступе документацию по объектам платформы и языка 1С v7.7 за пределами того, что можно найти в "Отладчике"?

Что я пытаюсь сделать
В WinAPI тонкости можете не вдаваться, с этим сам разберусь. Полный код для общего понимания что я делаю.
А именно я пытаюсь исправить данные операций (выставить правильные счета, контрагентов, субконто и т.д.) чтобы всё правильно встало на место после импорта из банковской выписки

Не по теме:

Данные "на что исправлять" у меня есть. Генерируются другой частью этого же C++ приложения чтением XLS выписки regex'ом, поэтому и эта часть тоже на C++ и COM/OLE.


И мне нужно подружить 1C с этим, я пока только разбираюсь как это сделать.

C++
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
#include <windows.h>
#include <iostream>
#include <io.h>
#include <stdexcept>
#include <fcntl.h>
#include <comdef.h>
#include <vector>
 
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")
#pragma comment(lib, "comsuppw.lib") // Для _bstr_t
 
 
class OneS77 {
public:
    OneS77(const std::wstring& progId = L"V77S.Application")
    {
        // Инициализация COM и консоли
        ::SetConsoleOutputCP(CP_UTF8);
        ::SetConsoleCP(CP_UTF8);
        _setmode(_fileno(stdout), _O_WTEXT);
        HRESULT hr = ::CoInitialize(nullptr);
        if (FAILED(hr)) throw_com(L"CoInitialize", hr);
 
        CLSID cls;
        hr = ::CLSIDFromProgID(progId.c_str(), &cls);
        if (FAILED(hr)) throw_com(L"CLSIDFromProgID(" + progId + L")", hr);
 
        hr = ::CoCreateInstance(cls, nullptr, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pApp);
        if (FAILED(hr) || !pApp) throw_com(L"CoCreateInstance(" + progId + L")", hr);
    }
 
    ~OneS77()
    {
        if (pApp) pApp->Release();
        ::CoUninitialize();
    }
 
    // Инициализация платформы через RMTrade
    void Initialize(const std::wstring& baseParams, bool noSplash = true)
    {
        auto code = getIntProperty(L"RMTrade");
        auto disp = getDispId(L"Initialize");
        std::vector<VARIANT> args;
        // Обратный порядок
        if (noSplash) args.push_back(makeBstr(L"NO_SPLASH_SHOW"));
        args.push_back(makeBstr(baseParams));
        args.push_back(makeI4(code));
        VARIANT result;
 
        invoke(disp, args, result);
        if (!(result.vt == VT_BOOL && result.boolVal == VARIANT_TRUE))
        {
            throw std::runtime_error("Initialize returned false");
        }
    }
 
    // Вызов встроенного выражения через EvalExpr
    std::wstring EvalExpr(const std::wstring& expr)
    {
        auto disp = getDispId(L"EvalExpr");
        std::vector<VARIANT> args{ makeBstr(expr) };
        VARIANT res;
        invokePropertyGet(disp, args, res);
        if (res.vt != VT_BSTR) throw std::runtime_error("EvalExpr non-string result");
        std::wstring out = res.bstrVal;
        return out;
    }
 
    // Создание объекта 1С через CreateObject
    VARIANT CreateObject(const std::wstring& objName)
    {
        auto disp = getDispId(L"CreateObject");
        VARIANT arg = makeBstr(objName);
        VARIANT res;
        invoke(disp, {arg}, res);
        VariantClear(&arg);
        if (res.vt != VT_DISPATCH) throw std::runtime_error("CreateObject returned non-dispatch");
        return res;
    }
 
    // Установка свойства или реквизита через SetValue
    void SetValue(IDispatch* obj, const std::wstring& prop, const VARIANT& value)
    {
        // Метод SetValue(obj, prop, value)
        DISPID disp = getDispId(L"SetValue");
        // args: value, property name, object
        std::vector<VARIANT> args{ value, makeBstr(prop), makeDispatchVariant(obj) };
        VARIANT res;
        invoke(disp, args, res);
        VariantClear(&res);
    }
 
    // Вызов метода на переданном объекте через IDispatch::Invoke
    void InvokeMethod(IDispatch* obj, const std::wstring& method, const std::vector<VARIANT>& params)
    {
        DISPID disp;
        OLECHAR* name = const_cast<OLECHAR*>(method.c_str());
        HRESULT hr = obj->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &disp);
        if (FAILED(hr)) throw_com(L"GetIDsOfNames(" + method + L")", hr);
 
        // Подготовка параметров
        std::vector<VARIANT> args = params;
        DISPPARAMS dp;
        dp.cArgs = (UINT)args.size();
        dp.rgvarg = args.empty() ? nullptr : args.data();
        dp.cNamedArgs = 0;
        dp.rgdispidNamedArgs = nullptr;
 
        VARIANT res;
        VariantInit(&res);
        hr = obj->Invoke(disp, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dp, &res, nullptr, nullptr);
        if (FAILED(hr)) throw_com(L"InvokeMethod(" + method + L")", hr);
        VariantClear(&res);
    }
 
private:
    IDispatch* pApp = nullptr;
 
    void throw_com(const std::wstring& func, HRESULT hr)
    {
        _com_error err(hr);
        std::wstring msg = func + L" failed: " + err.ErrorMessage();
        throw std::runtime_error(std::string(msg.begin(), msg.end()));
    }
 
    DISPID getDispId(const std::wstring& name)
    {
        DISPID disp;
        OLECHAR* nm = const_cast<OLECHAR*>(name.c_str());
        HRESULT hr = pApp->GetIDsOfNames(IID_NULL, &nm, 1, LOCALE_USER_DEFAULT, &disp);
        if (FAILED(hr)) throw_com(L"GetIDsOfNames(" + name + L")", hr);
        return disp;
    }
 
 
    int getIntProperty(const std::wstring & name)
    {
        auto disp = getDispId(name);
        VARIANT var;
        VariantInit(&var);
        DISPPARAMS dp{ nullptr, nullptr, 0, 0 };
        HRESULT hr = pApp->Invoke(disp, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dp, &var, nullptr, nullptr);
        if (FAILED(hr) || var.vt != VT_I4) throw_com(L"PropertyGet(" + name + L")", hr);
        int val = var.lVal;
        VariantClear(&var);
        return val;
    }
 
    VARIANT makeBstr(const std::wstring& s)
    {
        VARIANT v;
        VariantInit(&v);
        v.vt = VT_BSTR;
        v.bstrVal = SysAllocString(s.c_str());
        return v;
    }
 
    VARIANT makeI4(int x)
    {
        VARIANT v;
        VariantInit(&v);
        v.vt = VT_I4;
        v.lVal = x;
        return v;
    }
 
    // Служебный вариант для передачи IDispatch* в методы SetValue и др.
    VARIANT makeDispatchVariant(IDispatch* obj)
    {
        VARIANT v;
        VariantInit(&v);
        v.vt = VT_DISPATCH;
        v.pdispVal = obj;
        return v;
    }
 
    void invoke(DISPID disp, const std::vector<VARIANT>& args, VARIANT& result)
    {
        DISPPARAMS dp;
        dp.cArgs = (UINT)args.size();
        dp.rgvarg = const_cast<VARIANT*>(args.data());
        dp.cNamedArgs = 0;
        dp.rgdispidNamedArgs = nullptr;
        VariantInit(&result);
        HRESULT hr = pApp->Invoke(disp, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dp, &result, nullptr, nullptr);
        if (FAILED(hr)) throw_com(L"Invoke method", hr);
    }
 
    void invokePropertyGet(DISPID disp, const std::vector<VARIANT>& args, VARIANT& result)
    {
        DISPPARAMS dp;
        dp.cArgs = (UINT)args.size();
        dp.rgvarg = const_cast<VARIANT*>(args.data());
        dp.cNamedArgs = 0;
        dp.rgdispidNamedArgs = nullptr;
        VariantInit(&result);
        HRESULT hr = pApp->Invoke(disp, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dp, &result, nullptr, nullptr);
        if (FAILED(hr)) throw_com(L"Invoke property get", hr);
    }
};
 
int wmain()
{
    try {
        OneS77 v7;
        v7.Initialize(L"/D \"E:\\111111C\\БАЗА 2014 2\\1SBDB\"");
        auto res = v7.EvalExpr(L"\"Hello\"");
        std::wcout << L"EvalExpr: " << res << std::endl;
 
        VARIANT docVar = v7.CreateObject(L"Документ.ОперацияПоРасчСчету");
        IDispatch* pDoc = docVar.pdispVal;
 
        v7.InvokeMethod(pDoc, L"ПолучитьДокумент", {});
    
    }
    catch (const std::exception& ex)
    {
        std::wcout << L"Error: " << std::wstring(ex.what(), ex.what() + strlen(ex.what())) << std::endl;
    }
 
    return 0;
}
Проблема в том, что я хоть и получил какой-то объект "Документ.ОперацияПоРасчСчету" (GetObject возвращён VARIANT с IDispatch*), но вообще не знаю как и что с ним делать дальше. Я не могу нигде найти описания что это за объект и как с ним работать.

Я пытался гуглить какие-то функции которые могут быть у объекта, но ничего не получается:
Code
1
Error: GetIDsOfNames(>;CG8BL>:C<5=B) failed: Unknown interface.
Или HRESULT выдаёт ошибку 0x80020009

По-просту таких методов будто не существует.

Сам 1С установлен правильно, я могу подключаться к OLE и даже EvalExpr(L"1+1") возвращает 2.00000
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2025, 08:41
Ответы с готовыми решениями:

Где скачать полную документацию по 1С?
Подскажите, где скачать полный коробок документации по 1С, желательно одним файлом? Какие то...

Создание объекта "БухгалтерскиеИтоги" по OLE
Здравствуйте, уважаемые форумчане. Недавно столкнулся с задачей, из 1С 82 через OLE соединение к...

Не ловится CallBack от внешнего OLE-объекта
Добрый день. 1С-Предприятие77 Имеем DLL-OLE файл. Успешно его RegSvr32. Он успешно...

8
Эксперт 1С
2199 / 245 / 73
Регистрация: 12.11.2015
Сообщений: 1,521
09.07.2025, 08:43
Цитата Сообщение от Azawa Посмотреть сообщение
документацию по объектам платформ
какой обширный запрос)) в сети много по 1С7.7
0
Отпрыск ChatGPT
 Аватар для Azawa
33 / 29 / 4
Регистрация: 18.06.2019
Сообщений: 152
09.07.2025, 08:56  [ТС]
Цитата Сообщение от slypower Посмотреть сообщение
какой обширный запрос)) в сети много по 1С7.7
Это конечно здорово. Но всё что у меня находится по ключевому слову, например "ОперацияПоРасчСчету" в кавычках - такие же форумы с обрывками кода или статьи в блогах.

В моём представлении документация это справочник как MSDN - есть оглавление, есть содержание с перечислением всего что есть в платформе/языке и как этим пользоваться.
0
Эксперт 1С
2199 / 245 / 73
Регистрация: 12.11.2015
Сообщений: 1,521
09.07.2025, 09:17
Стандартное описание по конфигурации в самой 1С есть, лучше не найти.
Ну а по работе с 1С++, к примеру, тут уже по форумам (есть даже форм спец, так и называется)
А какое описание вам нужно? По структуре методанных в sql?
0
Отпрыск ChatGPT
 Аватар для Azawa
33 / 29 / 4
Регистрация: 18.06.2019
Сообщений: 152
09.07.2025, 10:24  [ТС]
Цитата Сообщение от slypower Посмотреть сообщение
Стандартное описание по конфигурации в самой 1С есть, лучше не найти.
Это первое, что попробовал. Встроенная справка (Помощь → Помощь F1, Содержание Shift+F1) содержит руководство по пользовательскому интерфейсу - что такое окно модуля и т.д., документацию справочник по языку 1С и объектам модулей там не нашёл.

Цитата Сообщение от slypower Посмотреть сообщение
А какое описание вам нужно? По структуре методанных в sql?
Ну например, в отладчике я могу видеть 1С код модулей.
Там используются разные интересные вызовы, например
1C
1
Корреспонденция.Счет.ВидСубконто(НомерСубконто).Идентификатор();
Я хочу знать, что такое объект "Корреспонденция", что такое объект "Счёт", что такое метод "ВидСубконто()" и какой объект от возвращает, что к нему можно сделать вызов "Идентификатор()". Почему именно "Идентификатор()" и какие методы я могу ещё вызвать у этого объекта. Как если бы я писал 1С скрипты или эти модули сам, мне хотелось бы знать структуру того, с чем работаю. Хочу всё знать.
0
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
09.07.2025, 11:37
Лучший ответ Сообщение было отмечено Azawa как решение

Решение

Цитата Сообщение от Azawa Посмотреть сообщение
Встроенная справка (Помощь → Помощь F1, Содержание Shift+F1) содержит руководство по пользовательскому интерфейсу - что такое окно модуля и т.д., документацию справочник по языку 1С и объектам модулей там не нашёл.
Часть справки по языку и встроенным объектам доступна в специальной справочной системе, которая называется "синтакс-помощник". В модуле поставьте курсор на имя интересующего объекта и нажмите Ctrl-F1.

Но в 1С все очень тяжело с типизацией. Сами объекты, их типы, свойства и методы зачастую выглядят как костыль. Особенно по сравнению с классическими ООП языками.
0
Эксперт 1С
2199 / 245 / 73
Регистрация: 12.11.2015
Сообщений: 1,521
09.07.2025, 11:40
Нужен вход через конфигуратор, там Сервис-Синтакс-Помощник. В открытом окне "Встроенный язык".
Цитата Сообщение от Azawa Посмотреть сообщение
Я хочу знать, что такое объект "Корреспонденция", что такое объект "Счёт", что такое метод "ВидСубконто()" и какой объект от возвращает, что к нему можно сделать вызов "Идентификатор()". Почему именно "Идентификатор()" и какие методы я могу ещё вызвать у этого объекта. Как если бы я писал 1С скрипты или эти модули сам, мне хотелось бы знать структуру того, с чем работаю. Хочу всё знать.
Чтобы ответить на такие вопросы, нужно разбираться в программировании 1С.
Корреспонденция - переменная, задана в конфгураторе. Тогда возникнут вопросы - что такое и откуда это)..
Ну а чтобы ответить на вопросы как пользователь, тогда нужно просто гуглить ответы, что такое счет в бух, и т.д.
1
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
09.07.2025, 11:56
Цитата Сообщение от Azawa Посмотреть сообщение
Я хочу знать, что такое объект "Корреспонденция"
Корреспонденция - скорее всего переменная. Нужно смотреть выше в коде, какое значение ей было присвоено, тогда можно будет понять тип переменной и почитать о нем в синтакс-помощнике.
0
Отпрыск ChatGPT
 Аватар для Azawa
33 / 29 / 4
Регистрация: 18.06.2019
Сообщений: 152
10.07.2025, 05:22  [ТС]
Цитата Сообщение от Sindbad_M Посмотреть сообщение
Часть справки по языку и встроенным объектам доступна в специальной справочной системе, которая называется "синтакс-помощник". В модуле поставьте курсор на имя интересующего объекта и нажмите Ctrl-F1.
Спасибо! Нашёл - только в Конфигураторе есть "синтакс-помощник", и там действительно есть справка!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.07.2025, 05:22
Помогаю со студенческими работами здесь

Как из 1С по средствам Ole в документ Word вложить объект "Лист к
Как из 1С по средствам OLE в документ word вложить объект &quot;Лист книгиExcel&quot;? Если делать из...

Работа с Ole-объектом
В 1С:7.7 открывается вторая конфигурация командой Initialize Какой командой можно закрыть открытую...

Нужно создать конфигурацию по готовой документации.
Помогите пожалуйста создать конфигурацию в 1с 8.2 по готовой документации. Тема: &quot;Создание...

Печать отчетов и другой документации
Привет всем. Есть такая проблема. 1С предприятие 7.7. В свойствах печати нету принтера, который...

Автоматизация управления процессами согласования задач, разработки документации предприятия
Цели задания! Автоматизация управления процессами согласования задач, разработки документации...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru