Как изменить момент времени документа 1с

Установка момента времени документа

Установка момента времени документа

Я
   Snork

18.04.11 — 16:16

Есть: дата + ссылка у 1 документа

Надо: У нового документа установить момент документа той же датой, но моментом времени позже, чем у 1го документа

Т.е. дата+ссылка у 2го документа должна быть позднее дата+ссылка у 1го, но даты у 1го и го должны быть равны

Как?

   Maxus43

1 — 18.04.11 — 16:17

если 2-й записывается позже 1-го, но одной датой — то так и будет

   Ненавижу 1С

2 — 18.04.11 — 16:18

(0) в общем случае задача не разрешима средствами платформы

   aleks-id

3 — 18.04.11 — 16:19

ДатаВторогоДокумента = ДатаПервогоДокумента+КоличествоСекундНаСколькоПозже;

   aleks-id

4 — 18.04.11 — 16:19

(2) хДДД

   John83

5 — 18.04.11 — 16:20

новый документ всегда в конец временной оси ставится

   Ненавижу 1С

6 — 18.04.11 — 16:22

(3)  у тебя:
ДатаВторогоДокумента != ДатаПервогоДокумента

   aleks-id

7 — 18.04.11 — 16:23

(6) только при условии что ДатаПервогоДокумента+КоличествоСекундНаСколькоПозже > КонецДня(ДатаПервогоДокумента)

   Maxus43

8 — 18.04.11 — 16:23

(6) не по 1совски…
(НЕ ДатаВторогоДокумента = ДатаПервогоДокумента) = ИСТИНА

   Ненавижу 1С

9 — 18.04.11 — 16:24

(7) дата документа в 8.* это еще и время

   Maxus43

10 — 18.04.11 — 16:24

(7) Я полагаю что в (0) имеет ввиду Дата+Время

   aleks-id

11 — 18.04.11 — 16:25

(9)(10) и что?

   Maxus43

12 — 18.04.11 — 16:26

Перефразирую: >>но дата-время у 1го и 2го должны быть равны

   Snork

13 — 18.04.11 — 16:26

(12) так точно

   Snork

14 — 18.04.11 — 16:27

ссылку 2го документа надо поставить раньше ссылки 1го внутри одной даты+время

   aleks-id

15 — 18.04.11 — 16:28

(14)теперь вкурил

   Maxus43

16 — 18.04.11 — 16:29

имхо так просто никак. извратом только если. Т.е. записываем 2-й док, удаляем 1-й, и создаём заново 1-й. Встанет после 2-го тогда.
для чего хоть надо то? секундами не разрулить разными чтоли?

   aleks-id

17 — 18.04.11 — 16:30

тогда никак. при одинаковых дате-времени первым будет более старый документ имхо, хотя не уверен…

   Ненавижу 1С

18 — 18.04.11 — 16:33

где написано, что есть гарантия получения ссылки больше чем данная? разве только вручную UUID подсунуть

   hhhh

19 — 18.04.11 — 16:34

(17) не, ну если оперативное проведение там, то перепроведение может решить вопрос.

   Maxus43

20 — 18.04.11 — 16:34

(18) гарантий нет, но как правило так и происходит, мниться мне

   Ненавижу 1С

21 — 18.04.11 — 16:37

(20) тогда это незачет

   Maxus43

22 — 18.04.11 — 16:38

(21) дак вся задача незачет… зачем это вобще?)

   Snork

23 — 18.04.11 — 16:39

как UUID подсунуть?

   Maxus43

24 — 18.04.11 — 16:42

УстановитьСсылкуНового(), правда хз как он отработает для уже записанного объекта… СП молчит

   Ненавижу 1С

25 — 18.04.11 — 16:42

(22) а почему нет?
(23)  ПолучитьСсылку + УстановитьСсылкуНового

   Dmitrii

26 — 18.04.11 — 16:44

Нельзя средствами платформы поменять UID (ссылку) уже записанного документа.

   PVV65

27 — 18.04.11 — 16:45

ЦИТАТА

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

   Maxus43

28 — 18.04.11 — 16:47

(26)(27) всё испортили…)

   PVV65

29 — 18.04.11 — 16:50

+(27) Т.е. задача из (0) решаема.

   Ненавижу 1С

30 — 18.04.11 — 16:51

(29) я же в (2) еще писал

   hhhh

31 — 18.04.11 — 16:53

(27) и теперь вопрос: если явно поменять дату, а потом явно вернуть назад, то документ вернется на прежнее место?

   also

32 — 18.04.11 — 16:57

http://partners.v8.1c.ru/forum/thread.jsp?id=279626#279626

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

Нуралиев Сергей (1С, Москва)

   Dmitrii

33 — 18.04.11 — 16:57

(31) Да

   PVV65

34 — 18.04.11 — 16:57

(30) В (2) ты написал, что задача не решаема.
(31) Не вернется.

   Dmitrii

35 — 18.04.11 — 16:59

+ к (33) Вернее так: «скорее всего ДА, но Нуралиев этого не гарантирует (см. (32))

   wPa

36 — 18.04.11 — 16:59

(0) Нет жесткой привязки документа ко времени. Сортировка идет по ГУИДу, ГУИД — в момент создания по времени в миллисекундах, прошедших с 15 октября 1582 года 04:00

Но это если один тип документов, а если разные — то сначала отсортирует по ГУИДУ (а гуид типа по тому же принципу — момент создания в конфигураторе)

   Dmitrii

37 — 18.04.11 — 16:59

+ к (35) то есть закладываться на это не следует.

   hhhh

38 — 18.04.11 — 17:00

(34) а чего же говоришь, что решаема?

   SunFox

39 — 18.04.11 — 17:01

(0) А если сделать вертуальный момент времени, дополнительным реквизитом, поможет?

   PVV65

40 — 18.04.11 — 17:03

при перепроведении (с изменением даты) гуид сохраняется, но на оси времени его позиция меняется.

   Dmitrii

41 — 18.04.11 — 17:03

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

   wPa

42 — 18.04.11 — 17:03

(31) Нет места документа на оси документов. Есть гуид документа и гуид типа документа. Ну и дата. Уложить их  запросом с одной датой-временем можно только по комбинированному гуиду — Ссылке. А ее платформа считает с гуидом ссылки.
Т.е. документы с одним временем будут отсотрированы по Ссылка
Тип1
Тип1
Тип1
Тип2
Тип2
Тип3

   wPa

43 — 18.04.11 — 17:04

(41) точно

   hhhh

44 — 18.04.11 — 17:05

(37) проверил. Документ вернулся на место.

   Dmitrii

45 — 18.04.11 — 17:05

(39) Да ради бога. Но только если у тебя не завязано  получение остатков по регистру накопления на момент времени.

   Ненавижу 1С

46 — 18.04.11 — 17:06

(40) сам придумал?

   SunFox

47 — 18.04.11 — 17:06

да, грустая картина получается, с сортировкой одинакового времени

   Maxus43

48 — 18.04.11 — 17:07

(46) а как ещё то? чтоб битые ссылки при перепроведении появлялись?)

   Dmitrii

49 — 18.04.11 — 17:08

(44) В одном конкретном случае — да. И так будет в большинстве случаев, но ни кто не даст тебе гарантию, что так будет всегда.

   Ненавижу 1С

50 — 18.04.11 — 17:08

(48) я про «меняется»

   Dmitrii

51 — 18.04.11 — 17:09

Вот бы автор объяснил зачем ему это надо….

   Ненавижу 1С

52 — 18.04.11 — 17:09

(49) вернется на тоже место

   wPa

53 — 18.04.11 — 17:10

(49) это не документ вернулся. Это его платформа отсортировала по ГУИДУ. Но… ГУИД же можно создать принудительно при первой записи.

   PVV65

54 — 18.04.11 — 17:11

(46) Да, я ошибся. Возвращается на место.

   hhhh

55 — 18.04.11 — 17:13

(49) ну понятно, на разных компах по разному может отсортировать этот ГУИД. 1С ведь использует сортировку WINDOWS или SQL.

   SunFox

56 — 18.04.11 — 17:14

(55) если это так, то сортировка по ГУИД бесмыслена

   hhhh

57 — 18.04.11 — 17:19

(56) ну вообще там двоичный код — не текст, сортировка в принципе везде должна быть одинакова.

(55) там бинарик в сиквельном представлениии (сегменты местами переставлены)

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

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

МоментВремени() — это момент непосредственно ПЕРЕД позицией документа (аналог РассчитатьРегистрыНа(ТекущийДокумент() в 7-рке), а если необходимо получить момент непосредственно после позиции документа, то используйте объект Граница

Код 1C v 8.х

  МоментСразуПослеДокумента = Новый Граница(ДокументСсылка,ВидГраницы.Включая)    

Код 1C v 8.х

  // Пример создает момент времени по дате и ссылке на объект в базе данных. 
Момент = Новый МоментВремени(ТекДокумент.Дата, ТекДокумент.Ссылка);

При получение остатков:
«Момент времени» — виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя ДАТУ и ССЫЛКУ НА ДОКУМЕНТ)
<Виртуальная> таблица остатков не хранится в БД, а строится в момент обращения к ней.
1. подбирается больший или равный значению ПАРАМЕТР момент времени, на который РАССЧИТАНЫ остатки
2. на этот момент получаются остатки из таблицы итогов
3. если момент времени, на который считаются остатки, не совпадает с моментом времени итогов, то остатки ДОСЧИТЫВАЮТСЯ по движениям.

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

ВидГраницы — Определяет набор видов границ по отношению к граничному значению:
ВидГраницы.Включая — Граница включает граничное значение.
ВидГраницы.Исключая — Граница исключает граничное значение.

Код 1C v 8.х

  Граница = Новый Граница(Дата, ВидГраницы.Включая);
Запрос.УстановитьПараметр("КонГраница", Граница);

Пример получения остатков на дату документа, включая его движения

Код 1C v 8.х

  Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру("00012","31.12.2009 23:59:59");
Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Включая));
Запрос.УстановитьПараметр("Физик", Справочники.ФизическиеЛица.НайтиПоКоду("365"));
ВывестиРезультат(Запрос.Выполнить());

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

Код 1C v 8.х

  Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру("00012","31.12.2009 23:59:59");
Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Исключая));
// или так: Запрос.УстановитьПараметр("МомВрем", МомВрем.МоментВремени());
Запрос.УстановитьПараметр("Физик", Справочники.ФизическиеЛица.НайтиПоКоду("365"));
ВывестиРезультат(Запрос.Выполнить());

Содержание:

1.     Что такое момент времени 1С

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

         Например, если у нас существует несколько документов с одинаковой датой, но время этих документов отличается, то, логично предположить, что документ с большим временем будет стоять после документа с меньшим на оси времени, однако, как будет выглядеть последовательность документов 1С если и дата, и время будут одинаковыми? Для этого и существует понятие «момент времени». Момент времени 1С позволяет учитывать последовательность документов 1С в пределах секунды.

         Пример

Есть документы:

·        Документ1 от 05.04.2022 10:30

·        Документ2 от 05.04.2022 10:31

·        Документ3 от 05.04.2022 10:31

·        Документ4 от 05.04.2022 10:31

         Документ2, Документ3 и Документ4 имеют одинаковые даты (05.04.2022) и одинаковое время (10:31). Имея только эти данные, мы не можем, с точностью, сказать какой порядок этих документов на временной шкале в пределах 31-й секунды. Поэтому нам необходимо третье измерение, и этим измерением является ссылка на документ.

         Например, для Документа1 моментом времени 1С будет являться совокупность Даты (05.04.2022), времени (10:31) и ссылки на Документ1. На временной оси это выглядит так:

1s-statusy-dokumentov-.png

         Стоит учитывать то, что последовательность документов Документ2, Документ3 и Документ4 в пределах 31-й секунды мы не контролируем, и она может отличаться от порядка записей этих документов.  

2.     Использование момента времени на платформе системы 1С Предприятие

         Момент времени 1С мы можем использовать, когда нам необходимо узнать Остатки регистра накопления 1С до 31-й секунды, а также, до определенного документа, например, до документа: Документ 3.

Документ3.МоментВремени();

         В таком случае, в результат попадут остатки, сформированные документами: Документ1 и Документ2, при этом, остатки, сформированные документами: Документ3 и Документ4 в результат, не попадут, хотя они и попадают во временной промежуток (31-я секунда).

         Учитывайте, что при выводе Остатков регистра 1С, остатки, сформированные документом: Документ 3, не попадут в результат, однако, при выводе Оборотов регистра 1С, обороты, сформированные документом: Документ3 – попадут.

         Для включения или исключения движений документа в 1С: Документ3, рекомендуется использовать объект: Граница, с видом границы: включая или исключая, в зависимости от потребности на данный момент:

         Граница(Документ3.Дата, ВидГраницы.Включая);

         Граница(Документ3.Дата, ВидГраницы.Исключая);

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

Специалист компании «Кодерлайн»

Дмитрий Цой

Когда происходит интерактивное или программное проведение документа, срабатывает выполнение процедуры ОбработкаПроведения(), которая находится в модуле объекта документа.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    // Вставить содержимое обработчика
КонецПроцедуры

Данная процедура имеет два параметра: Отказ и РежимПроведения. Если выставить параметру Отказ значение Истина, то проведение не будет выполнено. Параметр РежимПроведения устанавливает режим проведения документа — «оперативное» или «неоперативное». Сами движения в регистры разработчик должен прописать в этой процедуре самостоятельно.

Рассмотрим подробно свойства документа на вкладке «Движения»

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

Процедура ОбработкаПроведения

Формирование новых наборов записей регистров включает в себя операции, состоящие:

  • из добавления новых записей к набору записей;
  • заполнения полей записей;
  • записи набора записей.

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    // Укажем, что движения по данному регистру нужно записывать
    Движения.ТоварыНаСкладах.Записывать = Истина;
    // Перебрать коллекцию строк табличной части документа
    Для Каждого ТекСтрокаСостав Из Состав Цикл
        // Добавить новую запись к набору записей регистра ТоварыНаСкладах
        Движение = Движения.ТоварыНаСкладах.Добавить();
        // Заполнить поля добавленной записи
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаСостав.Номенклатура;
        Движение.Склад = Склад;
        Движение.Количество = ТекСтрокаСостав.Количество;
        Движение.ВидОперации = ВидОперации;
    КонецЦикла;
КонецПроцедуры

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

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

// По умолчанию параметр Замещать имеет значение Истина
Движения.ТоварыНаСкладах.Записать();

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

// Добавлять новые движения к старым
Движения.ТоварыНаСкладах.Записать(Ложь);

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

Подробнее о формировании движений

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

Свойство «Удаление движений» документа как объекта конфигурации стандартно устанавливается платформой в значение «Удалять автоматически при отмене проведения». Это значит, что при перепроведении документа движения, подчиненные данному документу, перезаписываются, а при отмене проведения движения документа автоматически удаляются.

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

При записи с проведением система автоматически запишет выбранные и незаписанные наборы записей, находящиеся в свойстве «Движения». Отсюда следуют два важных вывода:

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

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

Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный);

Пример перепроведения документов РеализацияТоваров в интервале с ДатаНачала по ДатаОкончания:

// Получить ссылки на проведенные документы в требуемом интервале
Запрос = Новый Запрос();
Запрос.Текст =
    "ВЫБРАТЬ
    |  РеализацияТоваров.Ссылка
    |ИЗ
    |  Документ.РеализацияТоваров КАК РеализацияТоваров
    |ГДЕ
    |  РеализацияТоваров.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |  И РеализацияТоваров.Проведен";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Результат = Запрос.Выполнить();
// Перебрать ссылки полученных документов
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
    // Перепровести каждый документ неоперативно
    Документ = Выборка.Ссылка.ПолучитьОбъект();
    Документ.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;

Здесь инициировалось проведение в неоперативном режиме. Значение по умолчанию параметра РежимПроведения метода объекта документа Записать() — именно РежимПроведенияДокумента.Неоперативный.

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

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

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

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

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

С оперативным проведением документов связано понятие оперативной отметки времени и понятие момента времени.

Понятие момента времени

Для определения положения документа на оси времени используется реквизит документа «Дата». Дата содержит время с точностью до секунды. Это позволяет контролировать последовательность записи документов. Однако при большом объеме создаваемых документов вероятна ситуация, когда несколько документов будут иметь одинаковое значение даты (т. е. будут созданы в течение одной секунды). Как в этом случае определить последовательность созданных документов?

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

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

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

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

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

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

Поиск:
1С:Предприятие • Движения • Документ • Момент времени • Обработка проведения

1c:объекты:документы

Содержание

Документы

Описание

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

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

  • Дата — содержит дату документа

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

  • Ссылка — содержит ссылку на документ.

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

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

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

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

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

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

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

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

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

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

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

Состояние документа

Документ всегда находится в каком то одном из трех состояний

  • Создан – обозначается иконкой с пустым прямоугольником. Возникает, когда документ записали, но не стали проводить, или провели и потом отменили.

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

  • Помечен на удаление – обозначается иконкой с крестиком. Возникает когда документ помечают на удаление.

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

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

Часто используемые классы

  • ДокументМенеджер позволяет:

    • Искать документы

      ТотСамыйДокумент = Документы.РасходИзКассы.НайтиПоНомеру("000001",'01.01.2008');

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

    • Строить выборки:

      ПараметрыОтбора = Новый Структура("Клиент", СпрИванов);
      ВыборкаДокументов = Документы.РасходИзКассы.Выбрать('01.01.2008', '31.12.2008', ПараметрыОтбора);

      Здесь мы отобрали все документы, у которых дата попадает в 2008 год и значение реквизита «Клиент» равно содержимому переменной «СпрИванов».

    • Создавать документы:

      НовыйДок = Документы.ПриходнаяНакладная.СоздатьДокумент();
      НовыйДок.Дата = ТеущаяДата();
      НовыйДок.Клиент = СпрИванов;
      //и тд
      НовыйДок.Записать();
  • ДокументВыборка – Позволяет обходить существующие в выборке документы, получать ссылки на них или читать значения их реквизитов.

  • ДокументСсылка – позволяет читать все данные объекта. Обычно в реквизитах хранятся именно ссылки на объекты.

  • ДокументОбъект – позволяет изменять данные объекта. Запись можно производить только в этом классе.

Ввод на основании

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

  • Документы.

  • Справочники.

  • Планы счетов.

  • Планы видов характеристик.

  • Планы видов расчетов.

  • Планы обмена.

Только авторизованные участники могут оставлять комментарии.

1c/объекты/документы.txt

· Последнее изменение: 2016/04/23 21:23 —

admin

Механизм проведения документов

Информация, отражающая хозяйственную деятельность предприятия, хранится в регистрах.  Документы могут изменять состояние регистров. Этот процесс называется проведением. Данный механизм является рекомендуемым механизмом изменения состояния регистров. Проведение может выполняться в оперативном или неоперативном режиме (свойство Оперативное проведение).
ПРИМЕЧАНИЕ. Как правило, механизм оперативного проведения используется для решения задач оперативного учета.

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

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

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

Расширение формы и проведение

Кроме свойства документа Оперативное проведение существует возможность задания режима проведения у расширения формы документа. Свойство Использовать режим проведения может принимать следующие значения:
Неоперативный – документ всегда будет проводиться в неоперативном режиме. Если отсутствуют права на неоперативное проведение, будет выдано исключение.
Оперативный – документ всегда будет проводиться в оперативном режиме. Если отсутствуют права на неоперативное проведение, то будет выдано исключение при попытке провести документ прошлого периода.
Запрашивать – система всегда будет запрашивать текущий режим проведения.
Автоматически – в этом случае система работает по следующему алгоритму:
● если дата документа меньше текущей, выполняется неоперативное проведение;
● если дата документа равна текущей, выполняется оперативное проведение;
● если дата документа больше текущей, выдается исключение;
● если невозможно провести документ в выбранном режиме (не хватает прав доступа и            т. д.), также будет выдано исключение;
● если на стороне клиента режим проведения неизвестен, то в параметр РежимПроведения обработчика события ПередЗаписью будет передано
значение Неопределено.

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

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

Для обработки подобных ситуаций существует понятие момент времени. Момент времени представляет собой совокупность даты, времени и ссылки на объект базы данных. Он позволяет однозначно идентифицировать любой объект ссылочного типа базы данных на оси событий, но имеет смысл в основном только для документов. Кроме того, момент времени позволяет идентифицировать и необъектные данные, например, записи регистров, подчиненных регистратору.
Понятие момента времени реализовано во встроенном языке при помощи универсального объекта МоментВремени.
Для нескольких документов, имеющих одинаковую дату и время, последовательность их на оси событий определяется системой исходя из ссылок на эти документы. Она может не совпадать с последовательностью создания документов, и она недоступна для изменения пользователем, то есть нельзя каким-либо образом повлиять на последовательность документов внутри одной секунды или «вычислить», что один документ создан раньше, а другой – позже.

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

Оперативная отметка времени – это значение типа Дата. Оперативная отметка времени – это «основа», которая собственно и позволяет выполнять оперативное проведение документов. Оперативная отметка времени создается системой каждый раз при оперативном проведении документа. Ее значение формируется исходя из текущей даты сеанса и последней созданной оперативной отметки.

Поясное время

При работе системы в различных часовых поясах необходимо учитывать эту особенность при получении оперативной отметки времени. Например, когда в единой информационной базе, физически расположенной в одном городе (часовом поясе), ведется учет нескольких удаленных предприятий (например, филиалы холдинга), которые расположены в других городах (и других часовых поясах). В этом случае необходимо, чтобы для каждого филиала выдавалась своя отметка времени.
Для учета часовых поясов существует понятие часового пояса информационной базы и часового пояса сеанса.
Часовой пояс информационной базы определяет часовой пояс, который по умолчанию будет установлен для нового сеанса. При создании информационной базы часовой пояс информационной базы не определен. Однако может быть установлен с помощью метода глобального контекста УстановитьЧасовойПоясИнформационнойБазы(). Информация о часовом поясе информационной базы сохраняется в базе данных и не меняется при
операциях загрузки/выгрузки информационной базы. При создании начального образа информационной базы (с помощью механизмов распределенной информационной базы, см. здесь) в создаваемый образ переносится часовой пояс информационной базы, из которой создается образ.
Если часовой пояс информационной базы не задан, то используется часовой пояс компьютера, на котором установлен сервер «1С:Предприятия» (в клиент-серверном варианте), или часовой пояс локального компьютера (в файловом варианте).
Часовой пояс сеанса описывает тот часовой пояс, в котором работает конкретный сеанс. По умолчанию часовой пояс сеанса равен часовому поясу
информационной базы.
Часовой пояс сеанса может быть установлен с помощью метода глобального контекста УстановитьЧасовойПоясСеанса(). Часовой пояс сеанса сохраняется до конца сеанса. Используется для определения текущей даты сеанса и получения оперативной отметки времени.

Получение оперативной отметки времени

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

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

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

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

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

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

Итак у нас есть документ бумажный и документ электронный. Между ними необходимо произвести аналогию. При оформлении бумажного документа обязательным условием является наличие в нем номера и даты. Аналогично и электронный документ должен содержать номер и дату. По этим полям мы может найти нужный нам документ. Поэтому номер и дата являются ключевыми свойствами.

Рассмотрим ключевое свойство «Дата». В версии 7.7 оно называлось «ДатаДок», в версии же 8 оно стало называться просто «Дата». Это очень важное свойство документа. Почему это так? Рассмотрим ситуацию с торговой организацией, в которой осуществляется регистрация факта поступления товара и его продажи. Так вот продать товар, дата поступления которого больше даты продажи, не представляется возможным, потому как нельзя продать товар который еще не поступил.

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

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

Очень часто такой идентификации документа на временной оси оказывается недостаточно.

Представим ситуацию, когда на склад поступает 100 единиц товара 1-го числа месяца. Далее 2-го числа этого же месяца в 23:59:59 происходит его продажа, в количестве 80 единиц. Документ проводится без проблем, потому как товара хватает. Допустим, что также 2-го числа в 23:59:59 этот же товар еще кто-то тоже продает в количестве 50 единиц. Этот документ также проведется без проблем, потому как на время 23:59:59 этот товар есть. Хотя фактически у нас, по итогу проведения второго документа образуется отрицательный остаток в 30 единиц товара.

Чтобы таких ситуаций не возникало к дате и времени прибавляется еще и позиция документа, а именно его ссылка. Эта идентификация документа по дате и времени + ссылка называется момент времени. И при проведении второго документа система выдаст сообщение о нехватке 30 единиц товара и не позволит провести документ.

Как же получить момент времени? А получается он методом «МоментВремени», принадлежащий классу «ДокументОбъект». При этом возвращается тип данных «МоментВремени».

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

Пример получения момента времени:

&НаКлиенте
Процедура ПолучитьМоментВремени(Команда)
	ПолучитьМоментВремениНаСервере(Объект.Ссылка);
КонецПроцедуры

&НаСервере
Процедура ПолучитьМоментВремениНаСервере(Ссылка)
	
	Если Ссылка.Пустая() Тогда
	    Сообщить("Документ не записан!");
		Возврат;
	КонецЕсли;
    
	ДокументОбъект 	= Ссылка.ПолучитьОбъект();
	МоментВремени 	= ДокументОбъект.МоментВремени();
	
	Сообщить(МоментВремени);

КонецПроцедуры // ПолучитьМоментВремениНаСервере()

Установка времени документа

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

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

И еще ситуация. Представим себе, что у нас в базе есть документ с отметкой времени 23:59:59 и если прибавить еще одну секунду это уже будут следующие сутки. Поэтому система оставляет такое же время, то есть 23:59:59.

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

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

Возможность проведения

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

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

Помимо тех реквизитов, которые разработчик добавляет в документ, есть еще стандартный набор реквизитов, внедренные в документ уже на уровне платформы. Это: ссылка, номер, дата, пометка удаления, проведен.
Найти их можно на закладке «Данные», кнопка «Стандартные реквизиты».

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

Документ может находится в трех состояниях:

  • Не помечен на удаление и не проведен;
  • Не помечен на удаление и проведен;
  • Помечен на удаление и не проведен.

Как уже отмечалось ранее, разработчик может самостоятельно добавлять необходимые реквизиты, а также табличные части. Каждая табличная часть имеет один стандартный реквизит — «НомерСтроки».

Хранение документов в информационной базе

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

Нумерация документов

Каждый документ имеет номер, настройка которого задается на вкладке «Нумерация». На этой вкладке можно задать признак автоматической нумерации, признак контроля уникальности, задать какого типа будут номер (числовой или строковый) и его длину.

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

Префикс устанавливается в модуле объекта документа, в процедуре «ПриУстановкеНовогоНомера».

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
	// Вставить содержимое обработчика.
КонецПроцедуры

Также на вкладке «Нумерация» мы можем задать периодичность документа.

Возможные значения:

  • Непериодический;
  • В пределах года;
  • В пределах квартала;
  • В пределах месяца;

  • В пределах дня.

Обычно выбирают значение «в пределах года», это означает, что в новом году нумерация документов начнется сначала.

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

Его необходимо указывать в поле «Нумератор».

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

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

Когда происходит интерактивное или программное проведение срабатывается выполнение процедуры «ОбработкаПроведения()», которая находится в модуле объекта документа.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	// Вставить содержимое обработчика.
КонецПроцедуры

Данная процедура имеет два параметра: отказ и режим. Если выставить параметру отказ значение «Истина», то проведение не будет выполнено. Параметр «Режим» устанавливает режим проведения документа — оперативное или неоперативное. Сами движения в регистры разработчик должен прописать в данной процедуре самостоятельно.

То, в какие регистры документ будет делать движения задается на вкладке «Движения».

Пример процедуры обработки проведения

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	//__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения 
        // будут утеряны!!!

	// регистр ТоварыНаСкладе Приход
	Движения.ТоварыНаСкладе.Записывать = Истина;
	Для Каждого ТекСтрокаТовары Из Товары Цикл
		Движение = Движения.ТоварыНаСкладе.Добавить();
		Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
		Движение.Период = Дата;
		Движение.Товар = ТекСтрокаТовары.Товар;
		Движение.Количество = ТекСтрокаТовары.Количество;
	КонецЦикла;

	//__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Права доступа на документы

В системе 1С существуют различные виды доступа. Это анализ интерактивных действий и анализ программных действий.

Что такое интерактивные действия? Это действия совершаемые непосредственно пользователем: нажатие кнопок, галок и т. д. Программные же действия совершаются каким-либо алгоритмом, о их совершении пользователь может и не догадываться.

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

Раздел «Роли» отображает все роли заведенные в информационной базе, для которых в разделе «Права» мы как раз и устанавливаем права доступа.

Возможные виды прав доступа:

  • чтение (программно), просмотр (интерактивно);
  • добавление (программно), интерактивное добавление (интерактивно);
  • изменение (программно), редактирование (интерактивно);
  • удаление (программно), интерактивное удаление (интерактивно);
  • проведение (программно), интерактивное проведение (интерактивно);
  • отмена проведения (программно), интерактивная отмена проведения (интерактивно);

Интерактивный вид доступа содержит еще такие права как: интерактивная пометка на удаление, интерактивное снятие пометки на удаление, интерактивное удаление помеченных, интерактивное проведение неоперативное, интерактивное изменение проведенных, ввод по строке.

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

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

Заключение

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

Вы еще не читали? Вам это будет интересно…

  • 1С фоновое задание — Общее описание механизма
  • Отладка фоновых (регламентных) заданий в 1С 8
  • Пример работы с деревом значений в 1С. Часть первая — добавление строк
  • Рабочие процессы 1С
  • Удаленное программирование в 1С. Какие преимущества?

Понравилась статья? Поделить с друзьями:
  • Как изменить молочно раздаточный пункт
  • Как изменить мой характер
  • Как изменить мой регион
  • Как изменить мой голос на твой
  • Как изменить мой айпи адрес компьютера