Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на платформе 1С Предприятие 8.3. Учебное пособие
.pdf
5.2. Проведение документа
71
Рис. 5.2. Настройка нумерации документа
Не интерфейсные реквизиты доступны только средствами встроен-
ного языка. К ним относятся следующие.
1. ПометкаУдаления – Истина, если документ помечен на удаление
Ложь в противном случае.
2. Проведен – Истина, если документ проведён и Ложь в противном
случае.
5.2. Проведение документа
Проведение документа – процесс занесения описываемых им дей-
ствий в информационную базу, после которого изменяется состояние ее
учетных механизмов. К учетным механизмам относятся регистры накопления, расчета и бухгалтерские регистры.
Документ может находиться в одном из трех состояний.
1. Записан, но не проведен – рабочий документ, который является не-
завершенным, находится в состоянии разработки. Этот документ никак не
влияет на учетные механизмы системы.
2. Проведен – действия, описываемые документом, занесены в учет-
ные механизмы. Такой документ отработан, и изменить его уже нельзя. Для
изменения нужно отменить проведение, внести изменения, опять провести
документ.

5. Документы
72
3. Помечен на удаление – документ не проведен и подготовлен к уда-
лению при помощи пункта меню Удаление помеченных объектов.
На рис. 5.3 изображен фрагмент журнала документов.
Рис. 5.3. Фрагмент журнала документов
Здесь присутствуют документы в каждом из перечисленных состояний. Документы с номерами 1 и 2 проведены. Документ ЦБ000000001 записан, но не проведен, а документ ЦБ000000002 помечен на удаление.
Для отработки действий, выполняемых при проведении документа,
предназначен модуль документа. В нем могут быть размещены две предопределенные процедуры: ОбработкаПроведения и ОбработкаУдаленияПроведения.
Проведение документа фактически означает выполнение процедуры
ОбработкаПроведения, которая и должна выполнять запись в учетные механизмы. Записи в регистры, выполненные при проведении документа, называются движениями регистра. Каждое движение регистра имеет ссылку на
записавший его документ, который называется регистратором. Наличие такой ссылки позволяет выделить из общего потока движений регистра только
те движения, которые созданы конкретным документом-регистратором.
В случае отмены проведения необходимо откатить обратно все действия, которые выполнила процедура ОбработкаПроведения и ликвидировать движения, созданные данным документом в регистрах.
Возможны два варианта обработки отмены проведения: удалять автоматически (используется по умолчанию) и не удалять автоматически. Режим настраивается в свойствах документа на вкладке Движения, которая
изображена на рис. 5.4.

5.2. Проведение документа
73
Рис. 5.4. Вкладка Движения окна свойств документа
Режим автоматического удаления движений означает, что при отмене проведения система сама найдет все движения регистров, принадлежащие данному документу как регистратору. После чего удалит эти движения из регистров.
Режим не удалять автоматически движения используется тогда, когда автоматическое движение либо не подходит, либо его недостаточно.
В этом случае отмену проведения нужно реализовать вручную. Для задания механизма обработки отмены проведения в модуле документа предназначена процедура ОбработкаУдаленияПроведения.
Существует два режима проведения:
оперативное – документ проводится в реальном времени;
неоперативное – проведение документа отражает уже свершив-
шийся факт.
Оперативное проведение в реальном времени необходимо, когда
ввод и проведение документа не просто фиксируют в системе произошед-

5. Документы
74
шее событие, а участвуют в его формировании, помогая оператору правильно ввести информацию. Это имеет смысл только в тот момент, когда
данное событие происходит в реальной жизни.
Например, продажа товара со склада или в торговом зале, когда
нужно проверить наличие достаточного количества товара и запретить продажу одной и той же единицы товара разными продавцами.
Неоперативное проведение – в момент проведения известно, что со-
бытие уже произошло, документ проводится без каких-либо проверок.
Например, в торговом зале нет электричества, но работа идет, продавцы продают товар и фиксируют проданное количество на бумажном носителе. После появления электричества оформляются документы продажи, которые
проводятся в неоперативном режиме и фиксируют уже свершившийся факт.
Возможны следующие варианты проведения документов.
1. Неоперативно всегда.
2. Оперативно всегда.
3. Автоматически – если дата документа раньше текущей, выполня-
ется неоперативное проведение, если равна текущей – оперативное.
5.3. Последовательности документов
Алгоритм проведения документов, как правило, основывается на
данных, введенных в самом документе. Однако в некоторых случаях он основывается еще и на текущих значениях итогов регистров. Например, алгоритм списания товаров со склада зависит от их количества на складе.
Документы, проведение которых зависит от значений итогов,
должны проводиться строго последовательно. В реальной жизни возможны
ошибки, которые ведут к исправлениям и перепроведению документов задним числом. После перепроведения документа и изменения движения регистров задним числом, движения всех уже проведенных после этого момента времени документов могут оказаться неверными, что требует их перепроведения.
Для автоматического контроля необходимости перепроведения до-
кументов используются специальные объекты конфигурации – последовательности (ветвь Документы – Последовательности). Последовательность предназначена для отслеживания границы последовательности,

5.3. Последовательности документов
75
т.е. момента времени, до которого отслеживаемые с ее помощью документы проведены верно, а после – требуют перепроведения. Основное
окно свойств последовательности изображено на рис. 5.5. Оно состоит из
двух списков.
1. Входящие документы – список документов, проведение которых
отслеживается данной последовательностью.
2. Движения, влияющие на последовательность – перечень реги-
стров, движения которых изменяют границу последовательности.
Рис. 5.5. Окно свойств последовательности
Границу последовательности могут изменять не только движения
указанных регистров, но и проведение входящих в нее документов. Если в
поле Перемещать границы при проведении указано Перемещать (по умолчанию), то документы последовательности будут пытаться установить границу на момент их проведения. Если задано Не перемещать – документы
передвигать границу не будут.

5. Документы
76
Рассмотрим случай, когда документы перемещают границу последо-
вательности. Возможны три варианта взаимодействия документа и границы последовательности.
Вариант 1. Нормальная ситуация – последовательное проведение
документов.
Граница последовательности совпадает с позицией последнего про-
веденного документа. Следующий документ, входящий в последовательность, проводится позже, чем установлена граница. Граница будет перемещена на момент этого документа. Эта ситуация изображена на рис. 5.6.
Начальная граница последовательности изображена на нем аббревиатурой
ГП1, а конечная граница – ГП2.
Рис. 5.6. Вариант 1 изменения границы последовательности
Вариант 2. Аномальная ситуация – нарушение последовательного
проведения документов.
Возникает в случае проведения некоторого документа задним чис-
лом. Это приводит к смещению границы последовательности назад по
шкале времени на момент проведения такого документа. Между смещенной назад границей и текущим моментом времени могут оказаться уже проведенные документы, проведение которых становится не корректным. Для
исправления этой ситуации потребуется перепроведение всех таких документов. Эта ситуация изображена на рис. 5.7.
Рис. 5.7. Вариант 2 изменения границы последовательности
ГП1
ГП2

5.4. Ввод документов на основании
77
Вариант 3. Развитие аномального варианта.
Вытекает из второго варианта, если перепроведение документов не
было выполнено. Ситуация изображена на рис. 5.8. «Правильная» ГП
должна располагаться на оси в том месте, куда указывает стрелка проводимого документа, однако, поскольку перепроведение выполнено не было,
ГП будет располагаться на оси времени там же, где и ГП1.
Рис. 5.8. Вариант 3 изменения границы последовательности
5.4. Ввод документов на основании
Ввод на основании означает заполнение вновь создаваемого документа данными из некоторого документа-основания, который уже содержит большую часть данных, требуемых для заполнения полей нового документа.
Например, счет на оплату сборки компьютера содержит перечень
комплектующих, входящих в собираемый компьютер. Все последующие
документы, отражающие прохождение этапов сборки, вплоть до выдачи готового компьютера заказчику, содержат тот же самый перечень комплектующих, которые могут быть скопированы из первоначального счета.
Для реализации ввода на основании следует выполнить 2 шага.
1. В окне свойств документа на вкладке Ввод на основании задать пе-
речень документов, на основании которых может вводиться данный документ. Здесь же задается список документов, основанием для которых может служить данный документ.
2. В модуле документа создается предопределенная процедура Обра-
боткаЗаполнения, которая вызывается при вводе документа на основании.
Ее задача – проверить, на основании какого документа выполняется ввод и
выполнить заполнение реквизитов документа требуемыми значениями.

5. Документы
78
Описание процедуры имеет следующий вид.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, Стандарт-
наяОбработка)
ДанныеЗаполнения – ссылка на объект, на основании которого вы-
полнен ввод. По ней и следует определить вид документа-основания.
СтандартнаяОбработка – необязательный флаг выполнения стан-
дартной обработки (по умолчанию – Истина).
Пример.
Процедура ОбработкаЗаполнения(ДЗ,СО)
Если ТипЗнач(ДЗ)=Тип(ДокументыСсылка.Лекция) Тогда
ЗапНаОснЛекции(ДЗ)
КонецЕсли
КонецПроцедуры
Процедура ЗапНаОснЛекции(Лек)
//Собственно заполнение через ссылку Лек
Предмет=Лек.Предмет;
. . .
КонецПроцедуры
5.5. Примеры работы с документами
В этом разделе приведены различные варианты обработки докумен-
тов средствами встроенного языка.
Создание документа
&НаКлиенте
Процедура СоздатьНовыйДокумент()
Если СоздатьНовыйДокументНаСервере() = 0 Тогда
Сообщить("Не удалось создать новый документ");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СоздатьНовыйДокументНаСервере()
НоваяРН=Документы.РасходнаяНакладная.СоздатьДоку-
мент();

5.5. Примеры работы с документами
79
//Заполняем реквизиты шапки
НоваяРН.Дата= ТекущаяДата();
НоваяРН.Фирма=Справочники.Фирмы.ОсновнаяФирма;
НоваяРН.Контрагент=Справочники.Контрагенты.НайтиПо-
Коду ("000000001");
НоваяРасходнаяНакладная.Склад=Справочники.Склады.Ос-
новнойСклад;
//Заполняем табличную часть
СтрокаТЧ=НоваяРасходнаяНакладная.ТЧТовары.Добавить();
СтрокаТЧ.Товар=Справочники.Номенклатура.НайтиПоКоду
("000000002");
СтрокаТЧ.Цена=СтрокаТЧ.Товар.РозничнаяЦена;
СтрокаТЧ.Количество= 2;
СтрокаТЧ.Сумма=СтрокаТЧ.Цена*СтрокаТЧ.Количество;
Попытка
НоваяРН.Записать();
Возврат 1;
Исключение
Возврат 0;
КонецПопытки;
КонецФункции
Удаление документа.
&НаКлиенте
// Режим = 1 – пометка удаления, 0 – непосредственное удаление
Процедура УдалитьДокумент(Режим)
УдалитьДокументНаСервере(Режим);
КонецПроцедуры
&НаСервере
Процедура УдалитьДокументНаСервере(ПометкаУдаления)
УдаляемыйДокумент=Документы.РасходнаяНакладная.НайтиПо-
Номеру ("000000004");
Если ПометкаУдаления= 1 Тогда
УдаляемыйДокумент.ПолучитьОбъект(). УстановитьПометкуУ-
даления (Истина);

5. Документы
80
Иначе
УдаляемыйДокумент.ПолучитьОбъект().Удалить();
КонецЕсли;
КонецПроцедуры
Перебор табличной части документа
&НаКлиенте
Процедура ПеребратьТабличнуюЧасть()
Для Каждого СтрокаТЧ ИЗ Объект.ТЧТовары Цикл
Сообщить(СтрокаТЧ.Номенклатура);
КонецЦикла;
КонецПроцедуры
Поиск в табличной части документа
Для поиска необходимого значения воспользуемся функцией Найти
Строки (). Ее можно использовать не только в табличной части документа,
но и в таблице значений.
&НаСервере
ПроцедураНайтиТовар(СправочникНоменклатураСсылка)
Отбор=НовыйСтруктура();
Отбор.Вставить("Номенклатура", СправочникНоменклатураС-
сылка);
НайденноеЗначение=ТЧНоменклатура.НайтиСтроки(Отбор);
Для Сч=1 По НайденноеЗначение.Количество() Цикл
Сообщить(НайденноеЗначение[Сч].Наименование);
КонецЦикла;
КонецПроцедуры
Контрольные вопросы
1. Для чего используются документы?
2. Приведите пример хозяйственных операций, которые должны
быть отражены документами?
3. Для чего предназначены журналы документов?
4. Сколько документов может быть зарегистрировано в журнале до-
кументов?
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
