Документы в 1С 8.3

Курс

Реквизиты документа

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

В конфигурации документы расположены в узле Документы:

Документы в 1С 8.3

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

Документы в 1С 8.3

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

Документы в 1С 8.3

Таблица базы данных:

СсылкаДатаНомерПоставщикСклад

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

Документы в 1С 8.3
СсылкаДатаНомерПоставщикСклад
8eae102c-86d5-11eb-80a3-e0d55e4e266920.03.2021 20:00:04000000001АлхимовОсновной
8eae102d-86d5-11eb-80a3-e0d55e4e266920.03.2021 20:00:25000000002ИП ИвановОсновной

Табличная часть документа

Один документ может содержать в себе некоторый список однотипных данных. Например, в приходной накладной может быть 10 разных товаров. Для хранения таких данных предназначены табличные части.

Табличная часть описывается на закладке Данные. Указывается имя табличной части и реквизиты табличной части:

Документы в 1С 8.3

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

СсылкаНомерСтрокиТоварКоличество
8eae102c-86d5-11eb-80a3-e0d55e4e26691Смартфон2
8eae102c-86d5-11eb-80a3-e0d55e4e26692Клавиатура4

Формы документа

На закладке Формы для документа можно создать свои формы документа, списка или выбора:

Документы в 1С 8.3
  • Форма документа — используется для просмотра и редактирования реквизитов документа.
  • Форма списка — для просмотра списка всех документов. Из данной формы можно открыть форму документа.
  • Форма выбора — для выбора документа в реквизитах других объектов.

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

Документы в 1С 8.3

В этом случае при открытии формы документа будет использоваться созданная в конфигураторе форма. А для формы списка и формы выбора будут использоваться сгенерированные платформой формы.

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

Запись документа — это процесс переноса значений реквизитов в таблицы базы данных.

Запись бывает трех видов:

  • Запись
  • Проведение
  • Отмена проведения

Проведение документа — это запись документа в режиме проведения. Как правило при проведении документа формируются движения по регистрам. Также при проведении будет вызываться обработчик ОбработкаПроведения из модуля объекта. У документа есть реквизит Проведен, который равен Истина, если документ проведен и Ложь, если не проведен.

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

Состав движений документа настраивается на закладке Движения. Там же можно разрешить или запретить проведение документа. Если проведение запрещено, то у документа не будет кнопки «Провести», при записи не будет вызываться обработка проведения в модуле объекта:

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

Для примера сформируем движения по регистру ОстаткиТоваров. Регистр имеет следующую структуру:

Регистр накопления в 1С 8.3

Тип изменения «Товар» — СправочникСсылка.Товары. Тип ресурса «Количество» — число, 15, 3. Аналогичные реквизиты есть у табличной части документа.

В модуле объекта документа нужно добавить процедуру ОбработкаПроведения и заполнить ее следующим образом:

Через коллекцию Движения можно обратиться к регистру. Сначала у него устанавливается признак Записывать = Истина, чтобы после выхода из обработки проведения движения были записаны в регистр. Затем в цикле перебирается табличная часть и для каждой строки добавляется новая запись в регистр ОстаткиТоваров.

В свойствах документа есть свойство Запись движений при проведении. Чтобы открыть свойства нужно в дереве метаданных в контекстном меню документа выбрать пункт «Свойства».

Запись движений при проведении в 1С 8.3

Если данное свойство равно Записывать выбранные, то после обработки проведения будут записаны только те наборы записей, у которых был установлен признак Записывать = Истина. Если Записывать модифицированные, то признак Записывать = Истина можно не устанавливать вручную. Любые измененные в обработке проведения наборы записей будут записаны. Платформа автоматически установит им признак Записывать = Истина при их изменении.

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

Если в обработке проведения установить параметр Отказ = Истина, то проведение не будет выполнено, движения не будут записаны в регистр и при проведении будет выдано исключение: «Не удалось провести «Приход товара 000000002 от 20.03.2021 20:00:25″!».

Отмена проведения документов

При записи документа в режиме отмены проведения выполняется удаление движений по регистрам. До непосредственного удаления движений вызывается обработчик ОбработкаУдаленияПроведения в модуле объекта документа. В данном обработчике можно прописать свой алгоритм действий при отмене приведения документа.

На закладке Движения можно настроить будут ли автоматически удалять движения при отмене проведения или нет. За это отвечает свойство УдалениеДвижений:

Удаление движений документа в 1С 8.3

Свойство УдалениеДвижений может принимать три значения:

  • Удалять автоматически при отмене проведения — движения документа будут автоматически удаляться только при отмене проведения документа. При перепроведении документа движения не удаляются, а перезаписываются.
  • Удалять автоматически — движения документа будут автоматически удаляться как при отмене проведения, так и при перепроведении документа.
  • Не удалять автоматически — движения документа не будут удаляться автоматически.

При создании нового документа в конфигураторе автоматически устанавливается Удалять автоматически при отмене проведения.

Если выбрано значение Не удалять автоматически, то в обработчике ОбработкаУдаленияПроведения нужно очистить движения программно:

Здесь также есть параметр Отказ. Если установить Отказ = Истина, то отмена проведения документа не будет выполнена с исключением «Не удалось сделать непроведенным «Приход товара 000000001 от 20.03.2021 20:00:04″!».

Оперативное проведение

Оперативное проведение — это проведение документа текущим временем. Настраивается на закладке Движения:

Оперативное проведение документа в 1С 8.3

Если разрешено оперативное проведение, то:

  • Если дата документа равна текущей дате, то при проведении будет автоматически установлено текущее время.
  • Если дата документа меньше текущей, то время не изменяется, документ проведется неоперативно.
  • Если установить дату документа больше текущей, то документ не проведется с ошибкой «Дата оперативно проводимого документа больше текущей. Документ не может быть проведен оперативно!».

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

Режим проведения (оперативный или неоперативный) передается в обработку проведения вторым параметром:

В свойствах формы документа есть еще три настройки:

Свойства формы документа в 1С 8.3

Автовремя — устанавливается при создании нового документа:

  • Не использовать — время равно текущему времени сеанса.
  • Последним — при создании время равно 00:00:00, при записи время установится на 1 секунду больше, чем время последнего документа за этот день.
  • Первым — при создании время равно 00:00:00, при записи время установится на 1 секунду меньше, чем время самого первого документа за этот день.
  • Текущее или последним — при создании время равно 00:00:00. При записи, если дата равна текущей дате, то время установится как текущее время. Если дата не равна текущей, то время установится на 1 секунду больше, чем время последнего документа за этот день.
  • Текущее или первым — при создании время равно 00:00:00. При записи, если дата равна текущей дате, то время установится как текущее время. Если дата не равна текущей, то время установится на 1 секунду меньше, чем время самого первого документа за этот день.

Если для документа разрешено оперативное проведение, то при проведении время все равно будет установлено равным текущему.

Использовать режим проведения:

  • Автоматически — режим проведения определяется от даты документа и в зависимости от свойства Оперативное проведение.
  • Оперативный — всегда оперативно, если это возможно.
  • Неоперативный — всегда неоперативно, если это возможно.

ПриЗаписиПерепроводить — если данный флаг установлен, то если записать уже проведенный документ кнопкой «Записать», то он перепроведется. Если флаг снят, то он только запишется, обработчик ОбработкаПроведения не будет вызван.

Оперативная отметка времени

Оперативная отметка времени — это дата, которая формируется при проведении документа в оперативном режиме. Как правило она равна текущему времени, но если последняя выданная оперативная отметка времени равна текущего времени, то новая отметка увеличивается на одну секунду.

Например, если создать новый документ и провести его, то будет получена оперативная отметка времени, которая равна текущему времени и данное время будет установлено документу. Если перепровести документ через пять секунд, то будет получена новая оперативная отметка времени, снова равная текущего времени. В итоге время документа увеличится на пять секунд. Но если в течении одной секунды пять раз подряд перепровести документ, то оперативная отметка времени будет получена пять раз. Причем в течении одной секунды. В итоге в первый раз будет получено текущее время. Во второй раз текущее время + 1 секунда (так как новая оперативная отметка времени должна быть больше на 1 секунду последней выданной оперативной отметки). В третий — текущее время + 2 секунды и т.д. То есть итоговое время документа будет на несколько секунд больше текущего. Документ как бы «попал в будущее».

Формула расчета оперативной отметки времени:

В базе может храниться несколько оперативных отметок времени. Их количество равно количеству разных часовых поясов, используемых в информационной базе. В клиент-серверной базе оперативная отметка хранится в памяти сервера, в файловой базе — в специальной таблице. Хранится до тех пор, пока в базе есть хотя бы один пользователь с таким часовым поясом.

Оперативную отметку можно получить программно:

Момент времени

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

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

Момент времени может быть создан программно на основании даты и ссылки на документ:

Два момента времени можно сравнить между собой:

Для сравнения нужно вызвать метод Сравнить, а параметром передать момент времени с которым нужно сравнить. Если они равны, то результат будет равен нулю. Если текущий момент времени больше, то результат равен 1. Если меньше, то -1.

Находясь в модуле объекта документа можно получить его момент времени методом МоментВремени:


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Здесь может быть Ваша реклама
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

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