что такое движение документа в 1с
Инструменты пользователя
Инструменты сайта
Боковая панель
Базовые положения
Общие объекты
Общие метаданные
Прикладные объекты
Содержание
Документы
Описание
Документы в 1С как правило отражают хозяйственную деятельность организации (поступление товара, расход из кассы, продажа товара итд), как правило на каждое такое действие, существует бумажный документ, которые фиксирует это событие, например расходная накладная фиксирует факт продажи товара. А платежное поручение факт списания денежных средств с расчетного счета. Документы разумеется не всегда имеют бумажные аналоги, бывают случаи, когда нужно просто зафиксировать какое то событие(клиент спросил товар который закончился). Любой документ в 1С имеет следующие стандартные реквизиты:
Момент времени
Дата и время документа.
При вводе документа система автоматически устанавливает текущие дату и время документу. Это поведение настраивается на уровне свойств документа.
Оперативное и неоперативное проведение документа
При написании обработчика проведения документа, следует обратить внимание что перепроведение не измененного документа не должно изменять его движений, вне зависимости от режима проведения. Движения документа должны опираться на данные документа а не на данные базы данных. Бывают исключения(например расчет себестоимости) но в целом это правило должно соблюдаться.
Оперативное проведение
Оперативное проведение – это проведение и получения остатков(например для контроля) на текущий момент, то есть при оперативном перепроведении дата будет сдвигаться на текущую и в таком случае можно при списании остатков проверить «текущий» остаток, что происходит достаточно быстро, благодаря хранению текущих остатков в отдельной таблице.
Неоперативное проведение
Неоперативное проведение – это проведение документа, на любую дату в прошлом, как правило ввод докумнта «задним числом» или отражение какой либо уже свершившейся операции. Предполагается, что так как документ фиксирует уже свершившийся факт, то к примеру контроль остатков ему уже не нужен, в то же время получение остатков на дату отличную от текущей предполагает под собой некоторые вычисления и снижает производительность системы при проведении документа.
Состояние документа
Документ всегда находится в каком то одном из трех состояний
Движения документа
Часто используемые классы
У документа может быт настроен период в рамках которого номер считается уникальным, в таком случае необходимо указать любую дату из этого интервала.
Здесь мы отобрали все документы, у которых дата попадает в 2008 год и значение реквизита «Клиент» равно содержимому переменной «СпрИванов».
Ввод на основании
Ввод на основании служит для ввода нового объекта одного вида, на основании данных объекта другого вида, например ввод счета фактуры на основании документа реализация. Этот прием удобен тем, что при вводе на основании в приемнике срабатывает процедура ОбработкаЗаполнения в которой доступен источник ввода на основании, и его данные можно использовать для заполнения данных текущего объекта. Данные заполняются из программного кода, автоматически система ничего не фиксирует. Ввод на основании доступен для следующих типов метаданных:
Документ в 1С 8.3: настройка, проведение и формирование
Документы – это объекты конфигурации и метаданных в системе учета 1С:Предприятие 8.3. Они используются для хранения данных о событиях и операциях, которые происходили на предприятии. Это могут быть, например: документы на отгрузку, платежные поручения, выписки, приказы о приеме на работу и тому подобные. В данной статье будут рассматриваться формы этих документов, как они вводятся, формируются, а так же их параметры и изменения.
Структура документа в 1С
Продуманная система документооборота в 1С автоматические каждому новому документу присвоит порядковый номер, время и дату создания документа. Для того чтобы не позволить пользователям запутаться, в системе у каждого документа может быть только свой уникальный номер, без повторений.
Дата документа, то есть время – одна из ключевых характеристик в документах 1С. Благодаря этому можно легко узнать хронологический порядок создания документов и проследить всю цепочку по какому-то процессу.
В 1С:Бухгалтерия используются три вида документов: исходящие, входящие и внутренние. Для каждого документа прилагаются реквизиты, которые пользователь системы должен заполнить подробной информацией. Например, в документе типа «Заказ Поставщику» в обязательном порядке должно быть отражено наименования товара, склада, поставщика, а так же указан контрагент по операции и вид хозяйственной операции в системе.
Всем документам такого типа присущи эти характеристики, что позволяет соблюдать принципы ведения бухгалтерского учета. Каждый документ обязательно содержит свой набор информации. Она может быть однотипна по своей структуре, но различаться по количеству.
В большинстве случаев в документах 1С присутствует табличная часть, для удобства прописи однотипных данных. В качестве такие данных могут выступать, например: перечень отгружаемых или приобретаемых товаров, их количество и цены.
Дополнительные сведения документа
Для удобства работы в 1С пользователь может в любой документ добавлять дополнительные сведения. Для того чтобы сохранить порядок в документации, функциями добавления дополнительных сведений обладает только ограниченный круг пользователей с полными правами в системе. Как добавляются дополнительные сведения рассмотрим на примере документа «Заказ поставщику». Для этого сначала заполним настройки и далее заходим в пункт меню «Администрирование-Общие настройки».
В этом окне выберем вкладку «Дополнительные реквизиты и сведения» и поставим галочку в поле, которое так же называется. Затем переходим в меню «Администрирование-Формы-Дополнительные сведения».
В списке документов, открывшемся перед нами, мы можем задать дополнительные сведения. Например, для документа «Поступление (акты, накладные)» мы решили ввести дополнительные пункты. Находим нужный документ, выделяем его и кликаем на кнопку «Создать».
Откроется таблица, где создаются дополнительные сведения. Заполняем всё как необходимо. Укажем наименование дополнительного сведения и его тип значения. Тип значения для удобства может содержать различные варианты: договор, число, валюта, дата, договор и т. д.
Затем последуем на вкладку «Значения» и жмем на кнопку «Создать». Во всплывающем окне заполняем нужные пункты сведений.
Дополнительные сведения, которые создали, будут отображены в списке.
Жмем «Записать и закрыть». С этого момента в документах типа «Поступление (акты, накладные)» появляется возможность присоединить менеджера по закупкам, который занимается этим заказ.
Для проверки, что все отлично работает перейдем в «Покупки-Покупки-Поступление (акты, накладные)». Мы увидим список документов поступления. В верху списка находим значок «Дополнительные сведения», который появится после того, как создали и настроили дополнительные сведения.
Проведение документов в 1С
Важной особенностью документа является то, что возможна его запись и проведение. Если документ просто записывается, то он никак не влияет на учет других данных. Чтобы каждый документ влиял на общий учет предприятия и вносил изменения в общую картину, он имеет свойство проведения.
В каждом документе в верхней части есть кнопки типа «Провести и закрыть» или «Записать и закрыть». Например, документ «Заказ Поставщику» должен вносить изменения в состояние расчетов, текущих остатков на складе готовой продукции и заказов, так как у него есть свойство проведения. Для того, чтобы все работало как надо необходимо, чтобы у документа был статус «проведен».
Формы документов в 1С
Чтобы пользователю было удобно работать с системой, легко просматривать и изменять данные в документах, программа имеет несколько форм для одного и того же документа. 1С умеет генерировать все необходимые для документа формы. Разработчикам предоставляется возможность конфигурировать самостоятельно формы для документов, которые им необходимы. Увидеть все формы документа можно в конфигураторе системы. Для этого нужно зайти в него и в окне конфигурации выбрать интересующий объект. В раскрытой ветке документа будут отображены все формы документа.
Если необходимо просмотреть весь список документов или только определенный тип в 1С существует «Форма списка». В этих списках можно легко отобрать нужные документы, быстро изменить их или произвести поиск данных.
Макеты документов в 1С
Все документы в 1С сопровождаются макетами, которые будут содержать информацию внесенную в документ. Эти макеты используются для создания формы документа пригодной к печати
Макеты можно использовать не только для печати, но и чтобы просмотреть дополнительную информацию, которая имеет отношение к выбранному типу документа.
В них подробно отражена вся хозяйственная деятельность предприятия, связанная с налоговым учетом, покупками, продажами и другими операциями. Все документы в совокупности представляют собой единый учет компании.
Порядок записи движений регистров при проведении документа
Алгоритм проведения документа с учетом подписок на события
Если посмотреть свойства документа через палитру свойств, то можно увидеть два важных свойства: «Удаление движений» и «Запись движений при проведении», причем второе НЕ вынесено на закладку «Движения» окна редактирования документа.
1. Удаление движений.
Если для какого-либо регистра определена подписка на событие «При записи», то выполняется код из связанной процедуры.
2. Процедура «ОбработкаПроведения» модуля документа.
Обратим внимание: в начале обработки проведения у всех движений флаг модифицированности Ложь (значение возвращает метод Движения.Регистр.Модифицированность() ).
После записи движения в базу Движения.Регистр.Записать() модифицированность снова ложь.
3. Подписки на событие «При проведении» документа
Важно понимать : если в обработке проведения документа или в подписках на событие, вызванных ранее, не происходила запись движений регистров в явном виде (Движения.Регистр.Записать()), то движения документа еще НЕ записаны в базу. Поэтому их нельзя получить с помощью запроса, но можно получить из коллекции движений источника.
Очередность подписок на одно и то же событие явным образом не определяется 1С, но на практике подписки вызываются в порядке следования в ветке «Подписки на события» окна редактирования конфигурации.
4. Запись движений.
Вспомним про свойство «Запись движений при проведении» из настроек документа.
Если оно равно «Записывать модифицированные», то в базу будут записаны все движения документа, у которых флаг «Модифицированность» Истина.
Если оно равно «Записывать выбранные», то в базу будут записаны движения регистров, для которых мы явным образом указали необходимость записи.
И в конце р ассмотрим несколько примеров:
При такой процедуре проведения документ при каждом перепроведении будет добавлять запись в регистр, записи будут множиться. Т.к. строка //*** добавляет записи в регистр, признак Модифицированности снимается.
Правильнее будет написать строку //*** как
или вообще ее опустить, и тогда программа сама запишет модифицированные движения.
В 1С 8 движения документа могут формироваться не только в обработке проведения, но и извне, например, из некоторой служебной обработки (так реализовано допроведение документов, восстановление авансов и т.д.).
В этом случае при перепроведении документа, если происходит изменение движений регистра бухгалтерии (флаг Модифицированности Истина), записи будут замещены записями, сформированными документом.
Перед началом проведения документа все реквизиты документа записываются в базу данных (т.е. программист может их получить с помощью запроса). Во внутренней памяти создается Объект документа, и у этого объекта есть коллекция движений, которая будет записана после окончания процедуры проведения (см. этап 4).
Если документ должен проводиться по другим регистрам и нельзя запретить проведение, тогда нужно внимательно настраивать свойства документа:
— выбрать вариант записи движений «Записывать выбранные» и убедиться, что Движения.Регистр.Записывать = Ложь
— выбрать вариант записи движений «Записывать модифицированные» и контролировать признак Модифицированности для набора записей этого регистра.
Нужно понимать, что объект, полученный по ссылке (назовем его «ОбъектДок»), и внутренний объект («ЭтотОбъект»), созданный в памяти в момент проведения, это два разных экземляра объектов.
Если записи в набор записей добавляются по способу, описанному выше, то они могут быть замещены на этапе 4.
Документы в 1С 8.3 (8.2)
Документы в 1С 8.2 и 8.3 — объект метаданных, с помощью которого в 1С фиксируются хозяйственные операции предприятия.
Каждый созданный документ в конфигурации создать для отражения своего типа операции, например: поступление товаров, списание товаров и т.д.
Документы могут проводиться, а могут просто записываться. Документ, у которого разрешено проведение, как правило, при проведении создает записи в регистрах сведений, регистрах накопления, регистрах бухгалтерии, регистрах расчета, тем самым внося изменения в учет организации. Документы, у которых запрещено проведение, обычно используются как печатные формы, например: счет, доверенность и т.д.
Рассмотрим основные настройки и свойства документов.
Настройка и свойства документов в 1C 8.3 и 8.2
Рассмотрим самые интересные вкладки с точки зрения разработчика.
Данные
Одна из основные вкладок документа:
Здесь описывается структура хранения информации будущего документа, реквизиты аналогичны справочнику. Сильно отличаются стандартные реквизиты:
Движения документа
Самая важная вкладка, на которой определяется состав регистров, по которым будет делать движения документ:
Рассмотрим подробно свойства документа на этой странице:
Проведение — разрешить или запретить. Определяет, будут ли движения по данному документу.
Оперативное проведение — разрешить или запретить. Если установлено разрешить, то проведение документа будущей датой невозможно.
Удаление движений — определяет режим очистки движения документа: Удалять автоматически при отмене проведения — движения будут очищены только при нажатии кнопки «Отмена проведения», но не удаляет при перепроведении. Удалять автоматически — значит, что движения будут удаляться в любом случае, даже если документ 1С перепроводится. Не удалять автоматически — значит, что удаление движений берет на себя разработчик системы.
Также для построения простых движений документа существует специальный конструктор движений, позволяющий упростить разработку:
Ввод на основании
Документ может быть введен на основании плана обмена, справочника, бизнес-процесса, задачи или другого документа. Для удобства можно воспользоваться специальным конструктором ввода на основании, который автоматически сгенерирует модуль обработчика заполнения:
Прочее
На вкладке Прочее можно найти очень важное свойство документа 1С (Режим блокировки):
Режим блокировок, может быть два значения — автоматический и управляемый, подробнее о блокировках.
Также со вкладки Прочее можно перейти в модуль менеджера и модуль объекта.
Небольшое обзорное видео про документы в 1С для программистов:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Формирование движений в регистрах и производительность системы 1С:Предприятие 8
Формирование движений в регистрах и производительность системы 1С:Предприятие 8
Сравним два варианта записи движений в регистр накопления.
Есть документ «Поступление» с табличной частью «Товарыс реквизитами табличной части «Товар» и «Количество». Необходимо по каждой строчке из табличной части сделать приход в регистр накопления «Остатки».
Первый вариант, который часто применяется начинающими программистами. Этот метод прост для запоминания т.к. не требует знания механизма запросов.
Формирование движений в регистре с использованием второго варианта происходит значительно быстрее, чем при использовании первого варианта. Замеры производительности при отладке дают прирост скорости от 30 %
Специальные предложения
Это правда достойно отдельной статьи? Если уж на то пошло, то зачем выбирать в запросе регистратор и дату, если у нас и так доступен объект.
На каком основании вы делаете вывод, что запрос быстрее? Данные объекта уже в оперативной памяти, а запрос читает из базы данных.
Запрос в данном случае используется во много для удобной манипуляции данными, например чтобы сгруппировать дубли(чего вы не сделали) или отсечь услуги, например.
Очень жаль, что нельзя ставить минус. Это один из тех примеров, когда минус за статью был бы заслужен.
Вроде автор написал: «Замеры производительности при отладке дают прирост скорости от 30 %». Этого недостаточно?
Проблема не в наличии объекта в оперативной памяти, а в скорости перебора табличной части vs. формирования единой таблицы значений. Не забывайте, что 1С это интерпритатор, т.е. перебор одной коллекции с модификацией другой коллекции в общем случае проиграют производительности против целостной выборки данных и пакетной загрузки. Плюсом к запросу, конечно, идет считывание полей реквизитов табличной части и прочие манипуляции типа уже упомянутого вами удаление дублей.
В целом, если еще избавится от промежуточной таблицы значений, а загружать движения сразу из результата запроса, то вообще было бы отлично.
Проблема в том, что это в корне меняет смысл статьи. Вся разница достигается не за счет «скорости запроса», которая якобы постулируется, а просто за счет того, что перебор делается дольше, чем выгрузка/загрузка. Что по большому счету никак не связано с методом получения данных, мы ведь можем выгрузить/загрузить из табличной части.
Сейчас протестировал:
По сути не отличаются по скорости выполнения. Как следствие статья неочем 🙂
(4) Об чём я и говорил. Спасибо за подтверждение, мне было недосуг.
(5) Вячеслав, это как? Речь ведь об одном документе, точнее, о строках из табличной части, которые к нему относятся. Ты хочешь сказать, что там безотносительно объектной блокировки лочилась вся таблица табчасти? Или ты о движениях?
Гораздо интереснее, если бы вы рассказали, например, об особенностях кэширования результатов запроса, особливо о разнице между выгрузкой в таблицу значений и в ОбходРезультатаЗапроса, и о разнице в применении этих объектов к заполнению движений.
А еще умиляет вот это :
Движения.Остатки.Записать();
Так набор запишется 2 раза 🙂
Это в любом случае неправильно. Явная запись движений может приводить к взаимоблокировкам.