Создание и обработка документов в 1с предприятие

Обновлено: 07.07.2024

Т.к. часто возникают вопросы по программному созданию/копированию/обработке объектов 1С:Предприятие в режиме "Управляемые формы", то решил скомпоновать в данной публикации примеры решения таких задач, с комментариями по каждому действию. Поначалу кажется все достаточно запутанно, но если по шагам все разложить и немного вникнуть, то всё должно встать на свои места.

При переходе с "обычных форм" на "управляемые формы" нужно понимать, что теперь имеем клиент-серверной вариант работы программы.

А это означает что то что мы могли ранее программно напрямую изменять объекты в "обычных формах" и видеть на экране результат наших действий, то в "управляемых формах" объект на сервере и объект на клиенте (видимый пользователю) разделены. Так же частично разделены функции и процедуры которые можно выполнять на сервере и на клиенте. Так например на сервере выполняются в основном сложные вычисления и функции связанные с изменениями в базе данных, а на клиенте выполняются не сложные расчеты и функции юзабилити.

ПРИМЕРЫ:

Ниже я приведу пример как создавать/копировать/изменять документы. Данный пример досконально разобран и позволит понять клиент-серверную архитектуру работы и распространить эти знания на другие объекты 1С (справочники, отчеты. ).

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


Для этого я создал соответствующие команды и разместил их на форме.

1. "Создать калькуляцию".

В данном варианте все просто: мы создаем на клиенте процедуру и все действия выполняем прямо на клиенте, т.к. ничего требующего вызова сервера не делаем. Создаем/получаем форму объекта, передаем в переменную ДанныеФормы Объект формы, выполняем элементарные действия с ДанныеФормы и открываем уже заполненную форму.

2. "Скопировать калькуляцию".

С данной операцией уже немного сложнее, часть процедур выполняется на клиенте, а часть на сервере.

Порядок действий таков: Мы на клиенте создаем форму нужного нам объекта и сразу открываем её (ОткрытьФорму. ). Далее как и ранее мы передаем в переменную ДанныеФормы Объект открытой формы.

Т.к. задача состоит в том чтобы скопировать уже существующий в базе документ (старую калькуляцию, которую выбрал пользователь в динамическом списке), то действия с данными ДБ можно производить только на сервере. Таким образом, мы получаем необходимые параметры из формы номенклатуры (в моем случае старую калькуляцию) и передаем через Структуру эти параметры в серверную процедуру без контекста вместе с переменной ДанныеФормы: СкопироватьОбъектДокументаНаСервере(ДанныеФормы, СтруктураДанных).

Уже на сервере мы с помощью функции ДанныеФормыВЗначение() преобразуем ДанныеФормы в привычный нам из "обычных форм" объект документа и работаем с ним с использованием серверных процедур. Копируем данные из другого документа, запускаем экспортные процедуры из модуля объекта, дозаполняем прочие реквизиты.

Функция ДанныеФормыВЗначение() требует указания соответствия (типа получаемого объекта): Тип("ДокументОбъект.Калькуляция").

Далее процедурой ЗначениеВДанныеФормы(Док, ДанныеФормы) выполняем обратную операцию: преобразуем объект Документ в переменную ДанныеФормы - понятную для "клиента".

При этом измененные на сервере ДанныеФормы сами не попадут в нашу созданную и открыую в самом начале форму, поэтому мы выполняем процедуру КопироватьДанныеФормы(ДанныеФормы, Форма.Объект) - тем самым запихаем изменения в видимую для пользователя форму документа Калькуляция (обновим в ней данные) .

Выше приведённые примеры решения задач, не являются единственными и в каждом индивидуальном случае могут быть оптимизированы или решены иным способом.

Думаю, начинающим познавать клиент-серверную архитектуру 1С пригодится данная статья )

Обработка 1С – это прикладной объект конфигурации, который служит для выполнения различных действий над информацией в базе 1С, таких как преобразование данных, добавление, удаление и т.д. Обработки в 1с можно разделить на два вида:


Если появляется необходимость расширить функционал конфигурации с помощью обработки, то следует использовать именно внешние обработки. Это позволит оставить структуру конфигурации неизменной, и облегчит возможность её дальнейшей поддержки.

Пример создания простейшей внешней обработки в 1С 8.3


В открывшемся окне задаём имя для нашей обработки «МояПерваяОбработка». Определим реквизит «ТекстДляВывода» (тип <Строка>, длина <100>).


Далее добавляем форму обработки, не забудем включить наш реквизит «ТекстДляВвода» в состав формы.


Получите понятные самоучители по 1С бесплатно:

Добавляем команду формы, назначив ей имя «Вывести текст», а так же в окне свойств по нажатию на лупу определим обработчик этой команды на «клиенте».


Код обработки в модуле формы может выглядеть так:

Чтобы мы могли видеть нашу созданную кнопку на форме её необходимо добавить в раздел элементов формы. Это можно сделать простым перетаскиванием.


Наша обработка готова, её можно сохранить в виде файла на диск.




Связана она с тем, что в конфигурациях использующих БСП(библиотеку стандартных подсистем), необходимо предоставлять некие сведения описывающие внешнюю обработку. Такие сведения необходимо возвращать из экспортной функции «СведенияОВнешнейОбработке» в виде структуры. А саму функцию разместить в модуле объекта обработки.

Пример такой функции для нашей обработки может выглядеть так:

Какие сведения необходимо использовать при регистрации той или иной обработки удобно подсмотреть в справочнике «ДополнительныеОтчетыИОбработки» в режиме конфигуратора.


Подключение внешней обработки в режиме 1С:Предприятие

Теперь можем добавить нашу обработку, указав в каких подсистемах программы, она будет располагаться.

Читайте также: