Проведение документа программно 1с. Павел чистов. Стандартные реквизиты документа

Поводом для написания данной статьи послужила дискуссия на форуме Общий модуль: клиент и сервер о необходимости разработчика доработать типовую УТ 11.1 так, чтоб в момент проведения документа "Заказ клиента" выводилось диалоговое окно с вопросами для обновления информации на форме для изменения логики проведения документа. При попытке разобраться в необходимости такой меры на первое место встал методологический вопрос: почему нельзя провести подобное в клиент-серверном выполнении? А на самом деле нужно было задать вопрос: зачем нужно подобное уточнение в момент проведения документа. Конечно данная вещь запрещена средствами платформы 1С 8.3 и более ранних версий 8.2 где есть поддержка клиент-серверного режима работы. С сервера нельзя вызвать клиентскую процедуру.
В данной статье я решил использовать опыт разработки практически с "нуля" одной нетиповой торговой конфигурации, где ставилась задача обеспечить максимальную производительность при записи, проведении и отмены проведения документов.
При разработке собственных мелких конфигураций или при необходимости оптимизации таких громоздких как УТ 11.1, которая даже на мощных компьютерах при полностью включенном функционале начинает подтормаживать на любых действиях, не только при записи и проведении "массовых" документов: заказов клиентов, реализации товаров и услуг и прочих. Особенно это неприятно при выполнении регламентных операций по восстановлению последовательностей. Конечно, по данной теме есть множество статей, суть которых заключается (особенно это касается клиент-серверных вариантов) в переносе вычислительной нагрузки даже не на сервер приложений, а на SQL сервер, путем не только получения на нем данных из базы 1С, но и проведения там путем запросов математических вычислений с передачей готового результата (при необходимости) за один раз на сервер приложений для записи движений документа "одним пакетом". Ну или, в случае отказа от проведения, передачи некоторой информации на компьютер клиента для обновления информации в форме документа.
Конечно, это все очень важно и нужно, но есть еще одно узкое "бутылочное горло" это подход к самой методологии проведения документов. При сложных случаях во всей цепочке проведения необходимо знать: кто же в данный момент проводит документ человек или компьютер? Поясню на конкретном примере. Допустим есть маленькая конфигурация с несколькими документами и регистрами сведений и накопления. Из нашего примера это даже не маленький аналог УТ 11.1, а скорее очень упрощенная Розница. А вот функционал этой маленькой "розницы" не примитивное пробивание чеков и подготовка отчетов о розничных продажах, а более мощный. В крупных, территориально распределенных организациях бывают так называемые "номенклатурные войны" среди менеджеров: кто раньше всех успел оформить заказ клиента тот заработал больше. Имея номенклатуру в несколько сотен тысяч единиц в реале массово продается несколько десятков. Наподобие советского дефицита "товары повышенного спроса", которые к тому же нужно особым образом резервировать и по сложной логистической структуре доставлять до адресата - конечного покупателя. А есть товар, которого везде буквально завались и он никому не нужен:) А если для подобной системы требуется еще и получение сложной специализированной отчетности, то создание подобной системы учета "с нуля" оправданы.
Так как же добиться быстрого проведения документов? Нужны ли всегда все проверки при использовании файлового или клиент-серверного режима?
Предметная область конфигурации была следующей. Как уже упоминалось выше часть товара "повышенного спроса" приходится в реальном времени резервировать и анализировать свободные остатки. Остановимся на одном документе "Заказ покупателя". В подобной торговой конфигурации он имеет сложный алгоритм резервирования, заполнения и отображения предварительных результатов. Данные для такого документа не один раз приходится получать перед окончательным использованием из различных источников. Там присутствует первоначальная обработка в табличной части некоторой информации с пересылкой на сервер приложений, далее запрос данных на сервере базы данных SQL, дальнейший первоначальный расчет уже в другом запросе, затем возврат результата на сервер приложений, выгрузка в таблицы значений и далее опять обработка кодом в циклах (не все можно получить одним запросом).
А если подобная база должна работать в файловом режиме на 2-3 маломощных компьютерах? Как ускорить восстановление посделовательности и обмен данными?
Исходя из того, что при программной обработке и проведении документов нужно минимум проверок, а в большинстве случаев они должны вообще отсутствовать (как при обмене данными) мы выбрали два режима функционирования:
1. Документ проводился от руки человека (тут срабатывали интерактивные обработчики формы документа при котором максимум проверок по всевозможным вариантам);
2. Программное проведение (восстановление последовательности, обмен данными, внешнее подключение к базе, при котором программно можно все).
В первом случае, события управляемой формы ПередЗаписью(<Отказ>, <ПараметрыЗаписи>) и ПриЗаписи (Отказ) срабатывают только интерактивно (иначе кнопку провести "нажала рука пользователя"). И поскольку при "ручном" нажатии на кнопку можно не только провести (записать без проведения, можно отменить проведение, пометить на удаление), тут срабатывает куча системных обработчиков событий формы, объекта документа (еще не забудем про подписки на события, куда собственно и встраиваем функционал). В таком режиме на клиентской стороне можно использовать возможность задания вопросов пользователю до начала транзакции записи, обращаясь периодически на сервер для забора данных с целью "кто не успел, тот опоздал" проводить анализ данных и, главное что-то записывать в регистры. Дальше возвращаемся на клиент и снова можем задать вопрос, обновить форму и.т.д.
Самое главное, чтоб документ на сервере в момент проведения в процедуре ОбработкаПроведения() , "знал" кто его проводит человек или компьютер (конечно это сильно упрощенно, до этого момента вся серверная часть должна быть подготовлена обработчиками формы либо программными обработчиками второго режима. Обратимся к описанию обработчиков формы (использованы материалы статей :
Модуль формы ПередЗаписью(Отказ, ПараметрыЗаписи)
Выполняется на клиенте!
Этот обработчик следует использовать, если необходимо организовать диалог с пользователем перед тем, как записать объект. Запросить дополнительную информацию, предупредить о чём-либо, дать возможность отказаться и т.п.
Второй параметр этого обработчика «ПараметрыЗаписи» имеет тип «Структура». У документов эти параметры заполняются системой предопределенными параметрами РежимЗаписи, РежимПроведения. Можно добавить свои.
Эти параметры передаются между событиями формы ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, где их можно благополучно использовать. Например, при записи регистра сведений, надо сделать запись в другой регистр сведений старое значение ресурса. Можно передать старое значение в эти самые параметры и уже в ПриЗаписиНаСервере сделать запись в другой регистр.
Создадим тестовый пример. В тестовой конфигурации 8.3 будет один документ "заказ покупателя"

И посмотрим на обработчики объекта документа (в модуле документа). Далее создадим управляемую форму и посмотрим на список ее обработчиков

Видим их схожесть. Дальше можно посмотреть участок кода типовой УТ 11.1, где также используется обработчик формы ПередЗаписью (см. рисунок) и обратим внимание на параметры записи, которые можно передать вглубь процедуры (рис. отладчика).

Документы в 1С 8.2 и 8.3 — объект метаданных, с помощью которого в 1С фиксируются хозяйственные операции предприятия.

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

Документы могут проводиться, а могут просто записываться. Документ, у которого разрешено проведение, как правило, при проведении создает записи в , тем самым внося изменения в учет организации. Документы, у которых запрещено проведение, обычно используются как печатные формы, например: , и т.д.

Рассмотрим основные настройки и свойства документов.

Настройка и свойства документов в 1C 8.3 и 8.2

Рассмотрим самые интересные вкладки с точки зрения разработчика.

Данные

Одна из основные вкладок документа:

Здесь описывается структура хранения информации будущего документа, реквизиты аналогичны . Сильно отличаются стандартные реквизиты:

Получите 267 видеоуроков по 1С бесплатно:

Движения документа

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

Рассмотрим подробно свойства документа на этой странице:

Проведение — разрешить или запретить. Определяет, будут ли движения по данному документу.

Оперативное проведение — разрешить или запретить. Если установлено разрешить, то проведение документа будущей датой невозможно.

Удаление движений — определяет режим очистки движения документа: Удалять автоматически при отмене проведения — движения будут очищены только при нажатии кнопки «Отмена проведения», но не удаляет при перепроведении. Удалять автоматически — значит, что движения будут удаляться в любом случае, даже если документ 1С перепроводится. Не удалять автоматически — значит, что удаление движений берет на себя разработчик системы.

Также для построения простых движений документа существует специальный конструктор движений, позволяющий упростить разработку:

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

Проведение документов в 1С – это главное условие корректного учета всех денежных средств, товаров и услуг. Существует несколько способов провести документ в 1С. Это сделать можно при открытии списка документов. На рисунке показано, как в Расходных кассовых ордерах провести нужный документ или отменить проведение. Первая колонка показывает, проведен ли документ. Если на «пиктограмме» присутствует зеленая галочка, значит документ проведен. Для примера, у нас в списке один документ не проведен. Выбрав нужный расходный кассовый ордер правой кнопкой мыши, можно выбрать в меню «Провести» или «Отменить проведение».Как провести и распровести документ 1с

Провести документ в 1С Предприятие 8.2 можно и другими методами. Зайдя в нужный документ, вверху окна мы увидим кнопки с зеленой и красной стрелочкой. Первая отвечает за проведение, а вторая – за ее отмену. Также, провести и закрыть документ можно через кнопку «ОК».

Существует способ группового проведения документов в 1С. Для этого нужно воспользоваться групповой обработкой справочников и документов (Сервис – Универсальные обработки – Групповая обработка справочников и документов).

В групповой обработке нужно выбрать тип объекта «Документы», добавить нужные документы (например, «Поступление товаров и услуг»). Также, следует в «Настройках» поставить галочку напротив «Разрешить изменение реквизитов объектов», и при необходимости, внизу добавить критерии отбора. Например, можно найти все проведенные документы «Поступление товаров и услуг», и через обработку отменить им проведение. Жмем на кнопку «Отобрать».

На вкладке «Обработка» будет размещен выбранный нами список документов. В поле «Действие» выберите значение «Изменить реквизит: Проведен», выберите нужное значение (установить или снять) и нажмите на кнопку «Выполнить». Обратите внимание, что при проведении документов 1С необходимо учитывать время для корректного учета денег и товаров. В некоторых случаях групповое проведение документов может повлечь за собой нарушение последовательности в учете.

Теперь вы знаете, как провести документ в 1С Предприятие 8.2. Рекомендуем вам почитать статьи о регистрах накопления и регистрах сведений.



Поделиться