Как программно получить данные (сумму, контрагента и основание) из формы Расходного кассового ордера?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При разработке механизмов интеграции 1С с внешними системами (например, при отправке данных на локальный сайт или в CRM) часто возникает задача извлечения текущих данных из формы документа. На примере документа Расходный кассовый ордер (РКО) мы разберем, как правильно обратиться к его реквизитам, как обработать сложные типы данных и подготовить информацию для передачи.

Обращение к реквизитам управляемой формы

В современных конфигурациях 1С, использующих управляемые формы, данные документа не лежат в форме напрямую в виде переменных. Они содержатся в основном реквизите формы, который по умолчанию называется Объект. Рассмотрим ситуацию: вы создали команду (кнопку) на форме и хотите в ее обработчике получить данные. Проанализируем правильный синтаксис обращения:

Для доступа к основным полям РКО в модуле формы следует использовать префикс Объект. Это гарантирует, что вы обращаетесь именно к данным документа, а не к случайным элементам интерфейса. Разберем основные реквизиты:

Если вы пишете код непосредственно в модуле формы, система может позволить прямое обращение (как СуммаДокумента), но использование Объект.ИмяРеквизита является стандартом «чистого кода» и предотвращает ошибки при совпадении имен переменных.

Как получить именно фамилию контрагента

Зачастую простого получения ссылки на контрагента недостаточно. Если ваша задача — передать на сайт фамилию, нужно учитывать структуру данных 1С. Рассмотрим ситуацию подробнее:

1. Контрагент — физическое лицо. В этом случае фамилия может храниться в поле Наименование или в специальных реквизитах физического лица. Если в вашей конфигурации используется Библиотека Стандартных Подсистем (БСП), фамилию можно извлечь программно. Проанализируем пример кода:


// Если контрагент является физическим лицом
Если ТипЗнч(Объект.Контрагент) = Тип("СправочникСсылка.Контрагенты") Тогда
    // Получаем наименование для обработки
    ПолноеИмя = Объект.Контрагент.Наименование; 
    // В простейшем случае фамилия — это первое слово до пробела
    МассивСлов = СтрРазделить(ПолноеИмя, " ");
    Фамилия = ?(МассивСлов.Количество() > 0, МассивСлов[0], "");
КонецЕсли;

2. Контрагент — юридическое лицо. У организаций нет фамилий. В этом случае обычно требуется передать либо название компании, либо ФИО доверенного лица, которое указано в поле «Выдать» (реквизит Выдать в РКО). Выясним, как это реализовать:


ДанныеДляСайта = "";
Если ЗначениеЗаполнено(Объект.Выдать) Тогда
    // Используем данные из поля "Выдать" (строковый реквизит)
    ДанныеДляСайта = Объект.Выдать;
Иначе
    // Если поле пустое, берем наименование контрагента
    ДанныеДляСайта = Строка(Объект.Контрагент);
КонецЕсли;

Обработка документа-основания

Реквизит ДокументОснование в РКО имеет составной тип. Это означает, что там может быть ссылка на «Поступление товаров», «Заявку на расход» или вовсе пустая ссылка. Для отправки на сайт ссылку необходимо преобразовать в строковое представление, понятное человеку.

Посмотрим на пример преобразования ссылки в текст:


ОписаниеОснования = "";
Если ЗначениеЗаполнено(Объект.ДокументОснование) Тогда
    // Получаем стандартное представление: "Поступление (акты, накладные) №... от..."
    ОписаниеОснования = Строка(Объект.ДокументОснование);
КонецЕсли;

Подготовка данных и отправка (Клиент-Серверное взаимодействие)

Поскольку вы планируете отправлять данные на сайт, важно помнить о разделении контекста. Сбор данных из формы происходит на Клиенте, но формирование HTTP-запроса лучше выполнять на Сервере. Проанализируем пошагово процесс интеграции:

  1. На клиенте собираем данные из реквизитов Объект.
  2. Передаем их в серверную процедуру.
  3. На сервере упаковываем данные в формат JSON (стандарт для веб-сайтов).
  4. Отправляем через HTTPСоединение.

Рассмотрим пример комплексной процедуры:


&НаКлиенте
Процедура ОтправитьНаСайт(Команда)
    
    // Сбор данных с формы
    СтруктураДанных = Новый Структура;
    СтруктураДанных.Вставить("Sum", Объект.СуммаДокумента);
    СтруктураДанных.Вставить("Counterparty", Строка(Объект.Контрагент));
    СтруктураДанных.Вставить("Base", Строка(Объект.ДокументОснование));
    
    // Вызов серверной части для отправки
    ОтправитьДанныеНаСервере(СтруктураДанных);
    
КонецПроцедуры

&НаСервере
Процедура ОтправитьДанныеНаСервере(Данные)
    
    // Сериализация в JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Данные);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    // Здесь размещается код работы с HTTPСоединение
    // Например: Соединение = Новый HTTPСоединение("mysite.local");
    // ... дальнейшая отправка POST-запроса
    
КонецПроцедуры

Важные рекомендации

Проанализируем несколько моментов, которые часто упускают «чайники» при разработке подобных кнопок:

Используя данный подход, вы сможете корректно извлекать любые данные из формы РКО и передавать их во внешние системы, соблюдая стандарты разработки 1С.

← На главную