d9e5a92d

Глава 3. Особенности проведения документов

2. Создайте перечисление ВидНоменклатуры,

значения: товар, услуга.

3, Для справочника «Номенклатура» необходимо добавить реквизит, имеющий

следующие свойства:

Идентификатор

ВидНоменклатуры




Синоним

Вид номенклатуры

Комментарий

Определяет, является ли элемент справочника товаром

Тип

Перечисление

Вид

ВидНоменклатуры : :

Ручное Изменение

v -- "' "" .

Использование

Для группы

Остальные свойства реквизита можно не заполнять.

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

Идентификатор

Взаиморасчеты

Синоним

Комментарий

Тип регистра

Остатки

Периодичность

Быстрая обработка движений

Для того чтобы проверить, правильно ли мы спроектировали регистр, заполним таблицу, в которой опишем какие виды документов какой флаг движет™ (//приход» или «расход») будут использовать:

| Регистр «Вэамюора отчеты» 1

Флаг движения

Вид документа

«-» - расход

Приходная накладная

«+» - приход

Оплата покупки

«+» - приход

Расходная накладная

«-» - расход

Приход денег

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





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

апрель 2004 г.



45

44 1С:Предприятие 7.7. Компонента Оперативный^чет

Упражнение JV»3.2

!. Для осуществления возможности учета остатков товаров по отдельным складам добавьте в регистр «ОстаткиТоваров» следующее измерение:

Идентификатор

Склад

Синоним

Комментарий

Тип значения

Справочник

Вид

МестаХранения

Остальные свойства измерения можно оставить пустыми.

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



Идентификатор

Поставщик

Склад

Синоним

Поставщик-

Склад

Комментарий

Пар! нер, продающий товар

Место хранения товара

-Тип значения

С гфаючник

Справочник

Вид

Контрагенты

МестаХранения

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

Если Поставщик. Выбран () =0 Тогда

// если не введено, вызовем окно предупреждения и запретим запись Предупреждение ( "Не выбран поставщик!"); СтатусВозврата (0 ); КонецЕсли;

// проверим, правильно ли введены значения реквизитов Склад и Товар

Если ПроверкаСкладаТовара (Контекст )=0 Тогда СтатусВозврата (0) ;

КонецЕсли; КонецПроцедуры

В связи с тем, что подобная проверка будет необходима и для реквизитов документа «Расходная накладная», в рассматриваемой процедуре проверка правиль-

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

Глава 3. Особенности проведения документов

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

модулям:

Функция ПроверкаСкладаТовара(Конт) Экспорт // проверим, введено ли значение реквизита шапки Склад Флаг1=1;

Если Конт.Склад.Выбран()=0 Тогда // если не введено, вызовем окно предупреждения и запретим запись

Предупреждение("Не выбран склад!"); Флаг1=0; КонецЕсли;

// открываем выборку строк спецификации документа Флаг2=Конт.ВыбратьСтроки(); Если Флаг2-0 Тогда // если нет ни одной строки, вызовем окно предупреждения и запретим запись

Предупреждение("Нет ни одной строки в табличной части!");

КонецЕсли;

// цикл выбора строк спецификации документа Пока Конт.ПолучитьСтроку{)=1 Цикл

Если Конт.Товар.Выбран()=0 Тогда

// если не введено значение товара, вызовем окно сообщений и запретим запись

Сообщить("В строке № "+Конт.НомерСтроки+

" не выбран товар!"); Флаг2=0; КонецЕсли;

КонецЦикла; ;

Возврат Флаг1*Флаг2;

КонецФункции

Упражнение №3.3

  1. Добавьте реквизиты Склад и Поставщик в Диалог формы документа «При

    ходная накладная».
  2. В Модуль формы документа «Приходная накладная» добавьте процедуру

ПриЗаписи().

3. Добавьте функцию ПроверкаСкладаТовара () в глобальный модуль.

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

апрель 2004 г.





46

1C .'Предприятие 7.7. Компонента Оперативный учет

«ОстаткиТоваров» необходимо добавить строку, присваивающую значение изме-

npHMip регистра Склад:

Регистр.ОстаткиТоваров.Склад=Склад;

Кроме этого, необходимо выполнить запись в регистр «Взаиморас

. ~г ~"-~Г

Регистр.Взаиморасчеты.ДвижениеРасход(Поставщик,

Итог("СуммаУЕ"),Итог("СуммаРуб") } ;

-- , -^ ~ / , ж.ж^д. v v^ivuviar yvj ; / f

Больше никаких изменений в документ «Приходная накладная» вносить не нужно и можно перейти к созданию документа «Оплата покупки».

3.2.1. Документ «Оплата покупки»

Для отражения факта оплаты организацией закупленных товаров служит документ «Оплата покупки».

Упражнение №3.4

1. Воспользовавшись Конструктором отчетов, создайте документ «Оплата покупки» СП rnf»nvirnTTT.r»*i* г.омт.*».™-»'""



Идентификатор

Синоним

Комментарий

Журнал

Номер: Нумератор

Номер: Периодичность

Номер: Автоматическая нумерация

"V

Номер: Контроль уникальности

V .

Номер: Тип:

Номер: Длина

5

Разрешить проведение документа

V

Автоматическое удаление движений

V

Автоматическая нумерация строк

V

Оперативный учет

V

2. Добавьте в документ реквизиты шапки:

Идентификатор

Курс

ДатаКурса

Синоним

Курс

Комментарий

Служит для хранения величины курса v.e. в документе

Хранит дату, на которую в

Тип значения

Число

Вид

Точность

4

Не отрицательный

л/

Разделять Триады





Глава 3. Особенности проведения документов 47

И д енти фи к а т о р

Поставщик

СуммаУЕ

СуммаРуб

Синоним

Поставщик

Сумма в у.е.

Сумма в руб.

Комментарий

Партнер, кому мы платим

Сумма по документу в у.е., которую мы платим

Сумма по документу в рублях, которую мы платим

Тип значения

Справочник

Число

Число

Вид

Контрагенты

Длина

14

14

Точность

2

2

Не отрицательный

V

V

Разделять Триады

V

V

Перейдем к созданию формы документа. Вид диалога показан на рисунке 3.1



3.1, Диалог документа «ОплатаПокупки»

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

Текст используемых процедур поместим в Модуль формы:

Процедура ПриОткрытии

// установим режим обязательного перепроведения

// при записи уже проведенного документа

ПриЗаписиПерепроводить(1); КонецПроцедуры

Процедура ВводНового(Копирование)

// Копирование^! - документ введен копированием, иначе О

Если Копирование^ Тогда // введем значения "по умолчанию" реквизитов шапки

ДатаКурса^ДатаДок;

Курс=Константа.КурсУЕ.Получить(ДатаКурса) ;





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

апрель 2004 г.



Глава 3. Особенности проведения документов

49



48

1C: Предприятие 7.7. Компонента Оперативный учет

КонецЕсли; КонецПроцедуры

Процедура ПриЗаписи() //проверка по поставщику

Если Поставщик.Выбран()=0 Тогда

// если не введено, вызовем окно предупреждения и запретим запись

Предупреждение("Не выбран поставщик!");

СтатусВозврата(0); ;

КонецЕсли; КонецПроцедуры

// Процедура пересчета суммы в у.е. при изменении даты, //на которую получен курс Процедура Пересчет{)

Курс=Константа.КурсУЕ.Получить(ДатаКурса);

Если Курс=0 Тогда СуммаУЕ=0;

Иначе

СуммаУЕ=СуммаРуб/Курс;

КонецЕсли; КонецПроцедуры

Как следует из Блок-схемы информационных потоков, документ «Оплата п о куп ки» двигает только регистр «Взаиморасчеты»:



Взаиморасчеты | Увеличение долга клиента (получил оплату)

Поэтому, в Модуль документа можно добавить только одну строку:

[Регистр.Взаиморасчеты.ДвижениеПриход(Поставщик,СуммаУЕ,СуммаРуб);

3.3. Внесение изменений в документ «Расходная накладная»

Чтобы иметь возможность ведения оперативного учета хозяйственной деятельности нашего предприятия отдельно по каждому покупателю и каждому складу, добавим одноименные реквизиты в шапку документа «Расходная накладная» и Диалог его формы:

Идентификатор

Покупатель

Склад

Синоним

Покупатель

Склад

Комментарий

Партнер, покупающий товар

Место хранения товара

Тип значения

Справочник

Справочник

Вид

Контрагенты

МестаХранения

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

Процедура ПриЗаписи()

// проверим, введено ли значение реквизита шапки Покупатель

Если Покупатель.Выбран()=0 Тогда

// если не введено, вызовем окно предупреждения и запретим запись

Предупреждение("Не выбран покупатель!"); СтатусВозврата{0); КонецЕсли;

// проверим, правильно ли введены значения реквизитов Склад и Товар

Если ПроверкаСкладаТовара(Контекст)=0 Тогда СтатусВозврата(0);

КонецЕсли; КонецПроцедуры

В связи с тем, что у регистра «Остатки товаров» появилось новое измерение -Склад, заменим поле «Формула» столбца «Остаток» многострочной части документа на следующую строку:

[Регистр.ОстаткиТоваров.Остаток(Товар,Склад/"Количество") |

Без учета операции резервирования товаров документ «Расходная накладная» совершает следующие движения регистров:

Регистр Движение

ОстаткиТоваров Расход товара на складе, с уменьшением стоимости запасов

Взаиморасчеты

Увеличение долга клиента (получил товар)

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

Для проведения временного расчета регистров в системе «1С:Предприятие» используется метод с таким же названием. Метод ВременныйРасчет () устанавливает флаг участия регистра во временном расчете. После такой установки можно выполнять системные процедуры работы с регистрами РассчитатьРегистрыНа ()

апрель 2004 г.



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



j50 1С:Предприятие 7.7. Компонента Оперативный учет

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

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

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

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

Учитывая все вышеизложенное, Модуль документа необходимо было бы начать со следующих строк кода:

''использование временного расчета

// запрещено дублирование товара в табличной части Рег=СоздатьОбъект("Регистр.ОстаткиТоваров"); Если ИтогиАктуальны()=0 Тогда //проводим «задним числом» Per.ВременныйРасчет(1);

РассчитатьРегистрыНа(ТекущийДокумент{)) ; КонецЕсли;

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

51

Глава 3. Особенности проведения документов

Заметим, что непосредственное использование методов

Рассчитать РегистрыНа (), так и Рассчитать РегистрыПо (} позволяет в системе иметь только один временный расчет.

Однако, в версии 7.7 системы «1C: Пред приятие» имеется возможность преодолеть ограничение на выполнение временного расчета только на один момент времени только по одному регистру каждого вида. Это может быть достигнуто использованием вспомогательных объектов типа «Регистры». В этом случае система позволяет выполнять параллельно временные расчеты одних и тех же регистров, но для разных объектов «Регистры». Дело в том, что регистры одного объекта воспринимаются системой независимо от регистров другого объекта.

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

СпецРег=СоздатьОбъект{"Регистры");

Объект «Регистры» через свои атрибуты предоставляет доступ к любому виду регистра конфигурации. Методы данного объекта Рассчитать РегистрыНа () и Рассчитать РегистрыПо {} имеют тот же механизм воздействия на регистры, что и одноименные системные процедуры, и позволяют выполнять временный расчет именно для регистров данного объекта, независимо от регистров другого (аналогичного) объекта.

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

Приведем окончательный вид фрагмента Модуля нашего документа, отражающий последовательность формирования движений по регистрам ^ОстаткиТоваров» и «Взаиморасчеты»:

ОбщРег=СоздатьОбъект{"Регистры"}; //будем поддерживать итоги в актуальном состоянии

ОбщРег. Актуальность (1) ; -., ..

Рег=ОбщРег. ОстаткиТоваров; .--..-,

// если проводим "задним числом"

Если ИтогиАктуальны()=0 Тогда

Per.ВременныйРасчет(1) ;

ОбщРег.РассчитатьРегистрыПо{ТекущийДокумент());

апрель 2004 г.



52

1C предприятие 7.7. Компонента Оперативный учет

КонецЕсли; ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл

// если-услуга, то регистр "Остатки товаров" двигать не надо Если Товар.Родитель.ВидНоменклатуры^

Перечисление.ВидНоменклатуры.Товар Тогда ОстКол=Рег.Остаток(Товар,Склад,"Количество"); Если ОстКол0 Тогда

Если ОстКолКоличество Тогда

Сообщить("В строке №"+НомерСтроки+ " не хватило товара "+Товар+ ". Реально есть "+ОстКол+" !"); СтатусВозврата(0); Продолжить; КонецЕсли;

ОстСумУЕ=Рег. Остаток (-Товар, Склад, "СтоимостьУЕ") ; ОстСумРуб=Рег.Остаток{Товар,Склад,"СтоимостьРуб"); //определим суммы списания с учетом "проблемы копеек" СуммаСписУЕ=?(ОстКол=Количество,ОстСумУЕ,

Окр{ОстСумУЕ*Количество/ОстКол,2)); СуммаСписРуб==? (ОстКол=Количество,ОстСумРуб,

Окр(ОстСумРуб*Количество/ОстКол,2));

53

Глава 3. Особенности проведения документов

3.3.1. Особые случаи, связанные с проведением документов

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

Режим «Управление оперативными итогами...» позволяет «вручную» сдвигать ТА во времени как вперед, так и назад, при этом производится пересчет итогов. Проведенные документы, оказавшиеся после ТА, при пересчете итогов не учитываются.

При установке ТА в режиме «Управление оперативными итогами...» итоги пересчитываются на 00 часов 00 минут 00 секунд даты, выбранной в качестве даты актуальности итогов. Например, если вы хотите, чтобы при подсчете итогов были учтены все проведенные документы по 20 февраля 2000 года включительно, то в качестве ТА следует выбрать 21 февраля 2000 года.

В документации рассматривается несколько ситуаций, связанных с ТА, которые могут возникнуть при проведении документов. 1. Если не проведенный документ имеет более поздние дату и время, чем ТА, то

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

если между документом и ТА нет других проведенных документов (см. рис 3.2), то при проведении документа ТА автоматически сдвигается вперед и







Регистр. Регистр. Регистр. Регистр. Регистр. Регистр. Иначе

Сообщить

КонецЕсли; КонецЕсли; КонецЦикла;

ОстаткиТоваров ОстаткиТоваров ОстаткиТоваров ОстаткиТоваров ОстаткиТоваров ОстаткиТоваров

.Товар=Товар;

. Склад=Склад;

. Количество=Количество;

. СтоимостьУЕ=СуммаСписУЕ;

. СтоимостьРуб=СуммаСписРуб

.ДвижениеРасходВыполнить() ,

"На "+ДатаДок+", в строке №'ЧНомерСтроки+ совсем нет товара "+Товар+" !");

//движение регистра Взаиморасчеты

Регистр.Взаиморасчеты.ДвижениеПриход(Покупатель,

Итог("СуммаУЕ"),Итог("СуммаРуб"));

становится равной дате и времени проведенного документа; если между документом и ТА существуют проведенные документы (см. 3.3), то такой документ не проводится, при этом выдается сообщение о существовании более ранних проведенных документов.





После того, как нами сформированы Модули всех трех документов, рассмотрим более подробно некоторые вопросы, связанные с особенностями проведения этих документов.

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

Дата + время.

апрель 2004 г.









2.

Дата, Время Ненроюднгся

3.3. Между ТА и документом есть проведенные документы

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

«j Дата, Время

3.4. Дата и время нового документа меньше чем ТА

Если дата не проведенного документа равна дате ТА, но между ТА существуют проведенные документы (см. 3.4), то nf мента будет выдан диалог изображенный на 3.5:

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

Методические материалы

Глава 3. Особенности проведения документов

55



3.5. Диалог «Проведение документа»

Чтобы избежать этого, следует выбрать опцию «Изменить время документа» (см. 3.5). Тогда время документа будет изменено на время большее времени самого последнего документа, и уже с этим временем документ будет проведен. Очевидно, что в такой ситуации состояние итоговой информации регистров будет актуальным на момент проведения документа (см. 3.6).

3.6. Режим «Изменить время документа» позволяет записать документ после ТА

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

если между документом и ТА нет других проведенных документов, то

ч^---~- ТА автоматически сдвигается и становится равной дате и времени до

кумента;

если между документом и ТА находятся другие проведенные докумен

ты, то такой документ не проводится, при этом выдается сообщение о

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

апрель 2004 г.



56

1C предприятие 7.7. Компонента Оперативный учет

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

Упражнение №3.5

Рассмотрите вышеперечисленные особые случаи проведения документов, создав для этого в режиме работы «1C:Предприятия» необходимое количество документов различного вида.

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

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

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

\

57

Глава 3. Особенности проведения документов

3.3.2. Последовательность документов

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

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

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

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

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

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

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

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

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







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

апрель 2004 г.



5g 1С:Предприятие 7.7. Компонента Оперативный учет

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

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

Создадим последовательность документов «ДляРасходныхНакладных» со еле-



m/ющими свойствами:

И

дентификатор

ДляРасходныэсНакладных

г!иноним

Для расходных накладных

комментарий

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

Регистр . ОстаткиТоваров

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

РасходнаяНакладная

lCwMU 1 МЛ Г1* iv. Т. I V/ 1Ґ4^/ЛС*.1.1.Ж1~»1»А W JL w^»x,/.«»..«»a-«vm.mma« ** »-v ^ ^ -«-« г т-

документов отрабатывается системой автоматически, средства языка предос-та#ляют возможность непосредственного доступа к методам последовательностей. 0се объявленные в конфигураторе последовательности принадлежат глобальному кортексту конфигурации. Доступ к методам возможен в любом программном мо-ду/te. Во всех текстах программных модулей вызовы методов последовательностей мо?кно записывать просто через точку после имени последовательности.

Например, применив метод Проверить {) можно определить, является ли по-сл^довательность проведенных документов непрерывной и, в случае ее нарушения, запретить проведение документа. Текст подобной проверки в модуле документа «Расходная накладная» может выглядеть следующим образом:

Последовательность.ДляРасходныхНакладных.Проверить( ТекущийДокумент())=0 Тогда

// если последовательность нарушена, запретим проведение документа Сообщить("Нарушена последовательность проведения документов!"); СтатусВозврата (0); Возврат;

Упражнение №3.6

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

2.

Сформируйте отчет «Остатки товаров на ТА». Обратите внимание на количество оставшегося товара и цену его списания.

3.

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

тавшегося товара. __

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

59

Глава 3. Особенности проведения документов

  1. Создайте еще один новый документ «Расходная накладная». Убедитесь в не

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

    меню: «Операции», «Проведение документов...». В данном окне выберите за

    кладку «Последовательности». В списке последовательностей поставьте «V» в

    квадрате слева от последовательности «ДляРасходныхНакладных». Для запус

    ка режима перепроведения необходимых документов нажмите на кнопку «Вы

    полнить». Еще раз сформируйте отчет «Остатки товаров на ТА». Обратите

    внимание, что теперь цена списания товара определена правильно. Проведите

    не проведенный документ «Расходная накладная».

3.3.3. Предварительное проведение

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

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

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

Для определения того, является ли документ полностью или частично проведенным, добавим в шапку документа «Расходная накладная» новый реквизит:

Идентификатор

РежимПроведения

Синоним

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

Комментарий

НЕ проведен, Полностью=0; Частичной

Тип значения

Число

Вид

Длина

1

Точность

0

Не отрицательный

V

Разделять Триады



Содержание раздела