1С Предприятие. Практика программирования на платформе v7


Методы выборки записей по периоду регистрации


• Методы ВыбратьПериод(<Дата>), ВыбратьПериодПоОбъекту(<Объект>,

<Дата>) и ВыбратьПоЗначению (<ГрафаОтбора>, <ЗначениеОтбора>, <НачПериод>, <КонПериод>) отличаются от вышеописанных методов тем, что осуществляют выборку в другом временном разрезе. Выбираются те записи, которые введены в том расчетном периоде, в который попадает <Дата> или периоды отбора, но не записи, имеющие дату начала и дату окончания, лежащие в этом периоде. Эти методы выбирают записи по времени их появления (регистрации) в системе.

Методы работают только для переменных, созданных функцией СоздатьОбъект, и, как правило, применяются перед циклом, выполняющим перебор записей журнала расчетов при помощи метода ПолучитьЗапись().

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

184______________________ 1С:Предприятие. Практика программирования на платформе V7

выбранному элементу справочника «Оборудование».

Метод Автозаполнение(<ДатаНачала>,<ДатаКонца>) выполняет автозаполнение календаря в заданном периоде. Возвращает число: 1 - получилось; 0 - не получилось <ДатаНачала> - дата начала периода автозаполнения. <ДатаКонца> - дата конца периода автозаполнения.

Функция ВыполнитьРасчет(объект)

Сум= 0;

ЖурнРасчетов=Создать0бъект("ЖурналРасчетов.Амортизация");

Если ЖурнРасчетов.ВыбратьЗаписиПоОбъекту(объект, ЖурнРасчетов.НачалоПериодаПоДате(ДатаДок), ЖурнРасчетов.КонецПериодаПоДате(ДатаДок)) =1 Тогда

Пока ЖурнРасчетов.ПолучитьЗапись()=1 Цикл

Если ЖурнРасчетов.Рассчитана=0 Тогда



ЖурнРасчетов.Рассчитать();

КонецЕсли;

Сум = Сум + ЖурнРасчетов.Результат;

КонецЦикла;




Иначе

Сообщить(" Записи по объекту "+объект+" отсутствуют !") ;

КонецЕсли;

Возврат Сум;

КонецФункции / / ВыполнитьРасчет

//_______________________________

Процедура РассчитатьКалендари ()

Н= 1 ;

Пока Метаданные.Календарь(Н).Выбран()=1 Цикл

Календарь=Создать0бъект(Метаданные.Календарь(Н). ПолныйИдентификатор());

Если Календарь.Часов(НачМесяца(ДатаДок),КонМесяца(ДатаДок))=0 Тогда

Календарь.Автозаполнение(НачМесяца(ДатаДок),ДатаДок);

КонецЕсли;

Н=Н+1;

КонецЦикла;

XI. Основы построения объектов компоненты «Расчет»__________________________ 185

КонецПроцедуры //  РассчитатьКалендари

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

Результат= ВыполнитьРасчет (Оборудование).

Вызов процедуры РассчитатьКалендари () можно поместить в предопределенные процедуры ВводНового() и ВводНаОсновании().

Процедура ВводНового()

РассчитатьКалендари();

ТипСписания=Константа.ТипСписания.Получить(ДатаДок);

УстановитьНовыйНомер("А"); КонецПроцедуры


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