Опубликовано: 30.06.2022

Работа с последовательностями документов

Общие сведения

Последовательности документов являются вспомогательными объектами метаданных для компонент «Оперативный учет» и «Бухгалтерский учет». Они предназначены для обеспечения проведения определённых документов в непрерывной хронологической последовательности.

Все документы в системе «1С:Предприятие» образуют единую хронологическую последовательность. Для этого каждый документ имеет дату и время регистрации. Даже если два документа имеют одинаковую дату и одинаковое время, они всё равно располагаются в определённой последовательности, определяемой порядком их ввода в систему. Дата и время документа могут быть изменены. Таким образом, независимо от порядка ввода документов, они могут быть расположены в последовательности, отражающей реальною последовательность происходивших в хозяйственной жизни предприятия событий, которые эти данные документы отражают.

В системе «1С:Предприятие» в процессе проведения документ выполняет некоторые действия, которые отражают данный документ в различных механизмах учёта, поддерживаемых «1С:Предприятием». Например, для отражения в регистрах оперативного учёта документ выполняет запись движений регистров, а для отражения в бухгалтерском учёте документ выполняет запись проводок.

Алгоритм проведения документа, как правило, отражает в учёте данные, записанные в самом документе (в его реквизитах). Однако в некоторых случаях алгоритм проведения документа анализирует также и текущие итоги, используя их при проведении. Например, если документ списывает товары или материалы по средней себестоимости, то для определения суммы списания алгоритм проведения будет анализировать остатки товаров (материалов) на момент документа. Если списание выполняется по методам LIFO или FIFO, то алгоритм проведения будет анализировать существующие остатки товаров (материалов) в разрезе партий на момент (позицию) документа.

Очевидно, что документы, основывающиеся при проведении на данных итогов, должны проводиться строго последовательно. Однако на практике, из-за ошибок при вводе информации и несвоевременного поступления документов, часто приходится вводить или исправлять документы «задним числом». Разумеется, в этом случае движения регистров или проводки, сформированные всеми последующими документами (расположенными после того, который был исправлен), становятся некорректными. Например, если выяснилось, что в одной из приходных накладных, введённых в начале месяца, было неверно указано количество товара, то во всех последующих расходных накладных, списывающих имеющиеся в наличии партии, необходимо заново проанализировать остатки с учетом внесённых изменений и заново записать движения регистров или проводки. То есть, все документы, анализирующие остатки и расположенные после изменённого документа, должны быть перепроведены.

Для автоматического контроля необходимости перепроведения документов используются вспомогательные объекты типа "Последовательность". Каждая введённая в метаданных последовательность обеспечивает контроль за порядком проведения документов указанных видов. Таким образом, в системе может существовать несколько независимых последовательностей.

Приёмы создания, редактирования свойств и удаления последовательностей документов совпадают с общими приёмами управления объектами метаданных. Свойства последовательности документов устанавливаются в окне редактирования конкретного объекта типа "Последовательность" (см. рис. ниже).

Движения, влияющие на последовательность

Одним из основных параметров настройки последовательности документов является параметр «Движения, влияющие на последовательность» (см. рис. ниже). Он определяет, какие из изменений итогов будут влиять на необходимость перепроведения документов данной последовательности, то есть итоги каких механизмов учёта используются документами данной последовательности при проведении.

В качестве таких движений могут выступать движения регистров или бухгалтерские проводки. Для настройки данного параметра следует в списке «Возможные значения» выбрать (щелчком мыши или нажатием клавиши Enter) те виды регистров, движения которых будут нарушать данную последовательность, и те бухгалтерские счета, проводки по которым также будут нарушать данную последовательность. Выбранные виды движений выводятся в списке «Выбранные значения».

Принадлежность документа к последовательности

В нижней части диалога настройки последовательности документов указываются виды документов, которые относятся к данной последовательности. Для выбора видов документов следует указать их в списке «Возможные значения» (щелчком мыши или клавишей Enter). Выбранные виды будут выводиться в списке «Выбранные значения».

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

Окно редактирования объекта 'Последовательность'

Границы последовательностей

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

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

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

В режиме пересчёта документов (вызывается выбором пункта «Проведение документов» из меню «Операции» главного меню программы) существует специальная возможность восстановления последовательности проведения документов (см. рис. ниже). При её использовании система автоматически выполняет перепроведение всех документов, относящихся к данной последовательности от границы последовательности, до указанного момента.

Окно 'Проведение документов'

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

В поле «Последовательности документов» (см. рис. ниже) выводится список всех существующих в конфигурации последовательностей. Следует отметить те последовательности, которые должны быть восстановлены. В списке для каждой последовательности выводится текущая позиция границы последовательности. Для выбора всех последовательностей можно нажать кнопку «Выбрать все».

Окно 'Проведение документов'

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

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

Контекст работы с последовательностями

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

Последовательность.<ИдентификаторПоследовательности>

где <ИдентификаторПоследовательности> — идентификатор последовательности, как он объявлен в Конфигураторе.

Англоязычный вариант:

Sequence.<ИдентификаторПоследовательности>

Методы последовательностей

Методы для получения границы последовательности

Получить дату границы последовательности позволяет метод ПолучитьДату() (англоязычный синоним — GetDate()). Параметры у этого метода отсутствуют, а возвращаемым значением будет значение типа "Дата".

Пример использования:

ДатаГП = Последовательность.УправленческийУчет.ПолучитьДату();

Получить время границы последовательности позволяет метод ПолучитьВремя() (англоязычный синоним — GetTime()). Возвращаемым значением метода будет строковое значение времени границы последовательности в формате "ЧЧ.ММ.СС". Кроме того, метод передаёт в указанные переменные по отдельности строковые значения часа, минут и секунд границы последовательности.

Синтаксис:

ПолучитьВремя(<Часы>, <Минуты>, <Ceкyнды>)

где

  • <Часы> — идентификатор переменной, в которую метод возвращает строковое значение часа границы последовательности;
  • <Минуты> — идентификатор переменной, в которую метод возвращает строковое значение минут границы последовательности;
  • <Ceкyнды> — идентификатор переменной, в которую метод возвращает строковое значение секунд границы последовательности.

Пример использования:

Перем Ч;
Перем М;
Перем С;

ВремяГП = Последовательность.УправленческийУчет.ПолучитьВремя(Ч, М, С);

Получить документ границы последовательности позволяет метод ПолучитьДокумент() (англоязычный синоним — GetDocument()). Параметров у этого метода нет, а возвращаемым значением будет значение типа "Документ".

Пример использования:

ДокумГП = Последовательность.УправленческийУчет.ПолучитьДокумент();

Получить позицию границы последовательности позволяет метод ПолучитьПозицию() (англоязычный синоним — GetPosition()). Параметров у этого метода нет, а возвращаемым значением будет 32-х символьное строковое значение позиции границы последовательности.

Пример использования:

ГП = Последовательность.УправленческийУчет.ПолучитьПозицию();

Примечание: Позиция документа — это строковое значение специального формата длиной 32 символа. Позиция документа однозначно характеризует расположение документа на оси времени относительно других документов, т.е. позиция документа заключает в себе и дату и время (с точностью до секунды), плюс некоторые дополнительные данные, определяющие взаимное расположение документов в пределах одной секунды.

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

Получить строковое представление границы последовательности позволяет метод Получить() (англоязычный синоним — Get()). Параметров у этого метода нет.

Пример использования:

ПредставлениеГП = Последовательность.УправленческийУчет.Получить();

Методы для установки границы последовательности

Изменить положение границы последовательности на начало даты или документа позволяет метод Установить() (англоязычный синоним — Set()).

Синтаксис метода:

Установить(<ПоложениеГП>)

где <ПоложениеГП> — выражение типа "Дата", "Документ" или позиция документа, на который устанавливается граница последовательности.

Примечание: Следует особо обратить внимание, что механизм последовательности документов отрабатывает системой автоматически, поэтому метод Установить() можно применять только в особых случаях, в основном, чтобы границу последовательности принудительно отодвинуть назад, так как при установке вперёд документы не перерассчитываются.

Пример использования:

Последовательность.УправленческийУчет.Установить(ТекущийДокумент());

Методы для обследования документов и последовательностей

Сравнить границу последовательности с датой, документом или позицией документа позволяет метод Сравнить() (англоязычный синоним — Compare()). Возвращаемым значением метода является число -1 (минус единица), если граница последовательности меньше (раньше); 0 — если равны; 1 — если граница последовательности больше (позже).

Синтаксис метода:

Сравнить(<Положение>)

где <Положение> – выражение типа "Дата", "Документ" или позиция документа, с которой сравнивается граница последовательности.

Пример использования:

Если Последовательность.УправленческийУчет.Сравнить(Док) = 1 Тогда
   Последовательность.УправленческийУчет.Установить(Док);
КонецЕсли;

Определить, принадлежит ли последовательности указанный документ или вид документов позволяет метод ПринадлежитПоследовательности() (англоязычный синоним — BelongSequence()). Возвращаемым значением метода будет число 1, если документ принадлежит последовательности, или 0, если не принадлежит.

Синтаксис метода:

ПринадлежитПоследовательности(<Докум>)

где <Докум> — выражение типа "Документ" или строка, определяющая вид документа.

Пример использования:

Если Последовательность.УпрУчет.ПринадлежитПоследовательности(Док) = 1 Тогда
   Если Последовательность.УпрУчет.Сравнить(Док) = 1 Тогда
      Последовательность.УпрУчет.Установить(Док);
   КонецЕсли;
КонецЕсли;

Проверить, есть ли между границей последовательности и данной точкой непроведённые документы, входящие в данную последовательность (то есть является ли последовательность непрерывной от границы последовательности до этой точки) позволяет метод Проверить() (англоязычный синоним — Validate()). Возвращаемым значением метода будет число 1, если последовательность непрерывна, или 0, если есть непроведённые документы между границей последовательности и документом.

Синтаксис метода:

Проверить(<Докум>)

где <Докум> — выражение типа "Дата", "Документ" или позиция документа, от которой проверяется непрерывность последовательности.

Пример использования:

Если Последовательность.УправленческийУчет.Проверить(Док) = 1 Тогда
   Последовательность.УправленческийУчет.Установить(Док);
КонецЕсли;

Другие статьи по схожей тематике