1С:Предприятие
Бизнес-процесс в CityScreen Deals может читать записи из базы 1С:Предприятие и создавать или изменять их по стандартному интерфейсу OData, который публикует база. В типичном обмене процесс читает юридические лица («Контрагенты») и их договоры в справочники Deals, создаёт в 1С счета («Счёт на оплату покупателю») из предложений сделки и читает обратно входящие платежи.
Коннектор передаёт запросы и не содержит бухгалтерских правил. Что читает процесс, как он сопоставляет записи и какие суммы и НДС отправляет, описано в скриптовых задачах процесса.
Эта функция лицензируется. Если лицензия вашей организации её не включает, обратитесь в CityScreen.
Перед началом
Администратор 1С публикует стандартный интерфейс OData базы и выбирает, какие объекты опубликовать. Процесс читает и записывает только опубликованные объекты.
Вам нужны адрес публикации и пользователь 1С, который может читать и изменять эти объекты.
Учётные записи подключения
У организации есть одна или несколько учётных записей подключения — по одной для каждой базы 1С, с которой она работает. Скриптовая задача указывает учётную запись, которую использует, а логин и пароль остаются в учётной записи.
-
Откройте Настройки → 1С.
-
Нажмите Добавить учётную запись и заполните поля.
-
Сохраните, затем нажмите Проверить соединение в строке учётной записи.
| Поле | Значение |
|---|---|
Название |
Как скриптовая задача ссылается на учётную запись. Название уникально в пределах организации независимо от регистра букв. |
Базовый URL |
Адрес публикации 1С, например |
Логин, Пароль |
Пользователь 1С, от имени которого выполняются запросы. Пароль после сохранения больше не показывается. Когда вы редактируете учётную запись и оставляете пароль пустым, сохранённый пароль остаётся. |
Таймаут, с |
Сколько секунд запрос ждёт ответа 1С, от 1 до 600. По умолчанию 60. |
В одной базе 1С часто несколько ваших юридических лиц.
Поэтому организация 1С — это поле каждой записи, которую отправляет процесс (Организация_Key).
Учётная запись организацию не указывает.
Проверить соединение проверяет соединение и показывает результат:
-
соединение работает;
-
1С не отвечает: проверьте хост, порт и сеть;
-
1С отклонила логин или пароль;
-
по этому адресу нет публикации OData;
-
1С ответила другой ошибкой.
Каждый сбой также показывает текст ответа 1С или сетевой ошибки, если 1С не ответила.
Вкладка 1С показывается сотрудникам, чья роль включает право Учётные записи 1С и чья организация использует эту функцию. Право действует только в области «все» и включает действия «Создание», «Просмотр», «Редактирование» и «Удаление». С «Просмотром» видны учётные записи, «Создание» позволяет добавить учётную запись и проверить соединение, «Редактирование» — изменить её, «Удаление» — удалить. См. Роли и права.
Скриптовая задача, которая указывает удалённую учётную запись, завершается сбоем, поэтому переименовывайте или удаляйте учётную запись только вместе с процессами, которые её используют.
Вызов 1С из скриптовой задачи
Скриптовая задача обращается к 1С через объект oneC.
Каждый вызов указывает учётную запись подключения и набор сущностей OData, например Catalog_Контрагенты или Document_СчетНаОплатуПокупателю.
Вызов выполняется для организации, которой принадлежит процесс.
| Вызов | Результат |
|---|---|
|
Записи, которые выбирает запрос, в пределах его |
|
Все записи списка, отсортированные по |
|
Одна запись по ссылке ( |
|
Создаёт запись и возвращает её так, как её сохранила 1С. |
|
Изменяет указанные поля записи и возвращает запись. |
query списка — это объект с любыми из ключей filter, select, orderby, top и skip.
Они соответствуют параметрам OData $filter, $select, $orderby, $top и $skip.
Ключ с другим именем приводит к сбою вызова, и запрос не отправляется.
listAll игнорирует top и skip.
Записи возвращаются как объекты, поля которых читаются по их именам в 1С, например record.Ref_Key или record.ИНН, а списки читаются через size() и get(i).
Табличная часть записи, например товары счёта, — это массив объектов внутри записи.
Проведение документа и пометка записи на удаление — это изменения полей в 1С: oneC.update с {Posted: true} или {DeletionMark: true}.
Пример: счёт для контрагента, найденного по ИНН
Скрипт находит контрагента по ИНН, создаёт счёт на одну услугу и сохраняет номер и ссылку 1С в переменных процесса для следующих шагов.
Учётная запись называется Main base, а переменные процесса inn, organizationRef, contractRef, serviceRef и amount заданы предыдущими шагами.
Скрипт записывает переменную процесса через execution.setVariable(name, value).
if (!/^[0-9]+$/.test(inn)) {
throw new Error("The taxpayer number must hold digits only: " + inn);
}
var found = oneC.list("Main base", "Catalog_Контрагенты", {
filter: "ИНН eq '" + inn + "'",
select: "Ref_Key,Description"
});
if (found.size() !== 1) {
throw new Error("Expected one contractor with the taxpayer number " + inn + ", found " + found.size());
}
var contractor = found.get(0);
var vatRate = 22;
var vat = Math.round(amount * vatRate) / 100;
var invoice = oneC.create("Main base", "Document_СчетНаОплатуПокупателю", {
Date: "2026-12-01T00:00:00",
Организация_Key: organizationRef,
Контрагент_Key: contractor.Ref_Key,
ДоговорКонтрагента_Key: contractRef,
СуммаВключаетНДС: false,
СуммаДокумента: amount + vat,
Товары: [{
LineNumber: "1",
Номенклатура: serviceRef,
Номенклатура_Type: "StandardODATA.Catalog_Номенклатура",
Количество: 1,
Цена: amount,
Сумма: amount,
СтавкаНДС: "НДС22",
СуммаНДС: vat
}]
});
execution.setVariable("invoiceNumber", invoice.Number);
execution.setVariable("invoiceRef", invoice.Ref_Key);
Поля, которые нужны счёту, и значения вроде ставки НДС НДС22 зависят от конфигурации базы и от даты.
Прочитайте один существующий счёт через oneC.get или oneC.list, чтобы увидеть поля и значения, которые использует ваша база.
Журнал запросов
Каждый запрос к 1С и его ответ записываются в журнал организации. Запрос, отправленный повторно, отражается несколькими записями.
Запись содержит учётную запись, метод, URL, статус ответа, длительность, инстанс бизнес-процесса, который сделал вызов, тела запроса и ответа и текст ошибки, если ответа не было.
Журнал доступен через REST API сотрудникам с правом Журнал запросов 1С; право действует только в области «все» и включает только действие «Просмотр». Записи содержат данные, которыми процессы обменивались с 1С, поэтому давайте это право только сотрудникам, которым можно видеть эти данные.
| Запрос | Результат |
|---|---|
|
Записи организации, сначала новые, постранично ( |
|
Одна запись с телами запроса и ответа. |
Чтобы узнать, что отправил инстанс, завершившийся сбоем и что ответила 1С, отфильтруйте журнал по идентификатору инстанса.
Если вызов не удался
Вызов не удаётся, когда 1С отвечает статусом ошибки или не отвечает в пределах таймаута учётной записи. Тогда скриптовая задача создаёт инцидент в инстансе процесса с текстом ошибки, который вернула 1С.
Скриптовая задача, которая обращалась к 1С, при сбое сама не запускается повторно, поэтому в 1С ничего не попадёт второй раз, пока вы не восстановите инстанс.
oneC.create отправляется один раз и не повторяется.
В рамках одного вызова чтение или изменение может быть отправлено в 1С больше одного раза, и каждая попытка — отдельная запись в журнале запросов.
Когда oneC.create не удался, проверьте в 1С, не создана ли запись всё же, потому что повторно запущенная скриптовая задача отправляет создание ещё раз.
Журнал запросов, отфильтрованный по идентификатору инстанса, показывает отправленный запрос.
Вызов также не удаётся, и запрос не отправляется, когда у организации нет учётной записи с таким названием, когда ссылка не является GUID или когда в запросе есть ключ, который вызов не поддерживает.
Когда причина устранена, восстановите инстанс так, как описывает раздел «Восстановление после сбоя» страницы Инстансы и инциденты.
Как отвечает 1С
Скрипт получает то, что вернула 1С, без изменений. Эти особенности интерфейса 1С влияют на то, как пишется скрипт:
-
Ссылка в шапке документа — это поле с суффиксом
_Key, напримерКонтрагент_Key. Ссылка в табличной части — это поле с именем реквизита и второе поле с суффиксом_Type, напримерНоменклатураиНоменклатура_Type. -
Табличные части приходят внутри записи, если в запросе нет
select. На$expandтабличной части 1С отвечает ошибкой (501). -
Страницы, прочитанные с
skipи безorderby, приходят в нестабильном порядке и повторяют или пропускают записи. Всегда указывайтеorderbyпри постраничном чтении черезlist;listAllвозвращает каждую запись один раз безorderby. -
Поле, которое может содержать ссылки нескольких типов, фильтруется через
cast, напримерcast(ДокументОснование,'Document_СчетНаОплатуПокупателю') eq guid'<reference>'. -
Запись, созданная через OData, записывается без вычислений, которые выполняет форма 1С. Передавайте суммы и НДС в запросе.
Связанные страницы
-
Скриптовые задачи — как писать скрипты, которые обращаются к 1С
-
Инстансы и инциденты — инциденты и восстановление инстанса
-
Справочники — справочные данные, которые процесс заполняет из 1С
-
Счета — счёт в CityScreen Deals