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

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 Тогда

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12