Проведение документов в 1С

Идеология механизма проведения документов предполагает преимущественно последовательный ввод и проведение документов.

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

Примеры

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

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

[свернуть]

Режим оперативного проведения документов

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

Пример

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

[свернуть]

Оперативное проведение подразумевает проведение в текущей дате. Проведение предыдущей и последующей датой, не может быть оперативным. Поэтому в оперативном проведении используется текущая системная дата.

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

Отсюда…

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

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

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

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

Изменение даты документа при оперативном проведении влияет на время в пределах дня, но не изменяет день.

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

Особенности выдачи оперативной отметки:

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

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

При этом не обязательно, чтобы время было синхронизировано с точностью до секунды. В основном, проблемы будут возникать, если у пользователя стоит неправильный день.

Пример

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

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

В аналогичном случае в клиент-серверном варианте пользователю с неправильно установленной системой датой при попытке выполнить оперативное проведение сразу будет выдано сообщение об ошибке, так как день даты введенного им документа не будет соответствовать дню системной даты компьютера, на котором установлен сервер 1С:Предприятия.

[свернуть]

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

Подробнее читай в статье «Запись и проведение документа в форме»

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

Режим неоперативного проведения

Проведение предыдущей датой является неоперативным.

В режиме неоперативного проведения система никогда не контролирует остатки.

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

Неоперативно можно провести документ за любую дату, при этом дата и время документа не изменятся.

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

Пример

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

[свернуть]

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

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

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

Ввод документов будущим временем

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

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

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

Если выполняется попытка программно вызвать оперативное проведение документа будущей датой (относительно текущей даты или оперативной отметки времени), то выдается соответствующее сообщение.

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

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

Один комментарий к “Проведение документов в 1С”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.