Методы выборки записей по периоду регистрации
• Методы ВыбратьПериод(<Дата>), ВыбратьПериодПоОбъекту(<Объект>,
<Дата>) и ВыбратьПоЗначению (<ГрафаОтбора>, <ЗначениеОтбора>, <НачПериод>, <КонПериод>) отличаются от вышеописанных методов тем, что осуществляют выборку в другом временном разрезе. Выбираются те записи, которые введены в том расчетном периоде, в который попадает <Дата> или периоды отбора, но не записи, имеющие дату начала и дату окончания, лежащие в этом периоде. Эти методы выбирают записи по времени их появления (регистрации) в системе.
Методы работают только для переменных, созданных функцией СоздатьОбъект, и, как правило, применяются перед циклом, выполняющим перебор записей журнала расчетов при помощи метода ПолучитьЗапись().
Упражнение 37. В модуле формы документа «Амортизация» создадим процедуру РассчитатьКалендари() для автозаполнения календарей по дату документа и функцию ВыполнитьРасчет (объект) для расчета амортизации по записям журнала расчетов. Процедуру РассчитатьКалендари() выполнять при создании нового документа в информационной базе. Процедуру ВыполнитьРасчет() вызывать для расчета результирующей суммы списания по
184______________________ 1С:Предприятие. Практика программирования на платформе V7
выбранному элементу справочника «Оборудование».
Метод Автозаполнение(<ДатаНачала>,<ДатаКонца>) выполняет автозаполнение календаря в заданном периоде. Возвращает число: 1 - получилось; 0 - не получилось <ДатаНачала> - дата начала периода автозаполнения. <ДатаКонца> - дата конца периода автозаполнения.
Функция ВыполнитьРасчет(объект)
Сум= 0;
ЖурнРасчетов=Создать0бъект("ЖурналРасчетов.Амортизация");
Если ЖурнРасчетов.ВыбратьЗаписиПоОбъекту(объект, ЖурнРасчетов.НачалоПериодаПоДате(ДатаДок), ЖурнРасчетов.КонецПериодаПоДате(ДатаДок)) =1 Тогда
Пока ЖурнРасчетов.ПолучитьЗапись()=1 Цикл
Если ЖурнРасчетов.Рассчитана=0 Тогда
ЖурнРасчетов.Рассчитать();
КонецЕсли;
Сум = Сум + ЖурнРасчетов.Результат;
КонецЦикла;
Иначе
Сообщить(" Записи по объекту "+объект+" отсутствуют !") ;
КонецЕсли;
Возврат Сум;
КонецФункции / / ВыполнитьРасчет
//_______________________________
Процедура РассчитатьКалендари ()
Н= 1 ;
Пока Метаданные.Календарь(Н).Выбран()=1 Цикл
Календарь=Создать0бъект(Метаданные.Календарь(Н). ПолныйИдентификатор());
Если Календарь.Часов(НачМесяца(ДатаДок),КонМесяца(ДатаДок))=0 Тогда
Календарь.Автозаполнение(НачМесяца(ДатаДок),ДатаДок);
КонецЕсли;
Н=Н+1;
КонецЦикла;
XI. Основы построения объектов компоненты «Расчет»__________________________ 185
КонецПроцедуры // РассчитатьКалендари
В форме диалога добавим в свойствах колонки табличной части «Оборудование» на закладке Дополнительные формулу
Результат= ВыполнитьРасчет (Оборудование).
Вызов процедуры РассчитатьКалендари () можно поместить в предопределенные процедуры ВводНового() и ВводНаОсновании().
Процедура ВводНового()
РассчитатьКалендари();
ТипСписания=Константа.ТипСписания.Получить(ДатаДок);
УстановитьНовыйНомер("А"); КонецПроцедуры