Больше никаких изменений в документ «Приходная накладная» вносить не нужно и можно перейти к созданию документа «Оплата покупки».
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 |


