Книга знаний

1С:Предприятие

Установка периодических реквизитов с точностью до секунды

Установка периодических реквизитов с точностью до секунды штатно через доп. документАвтор статьи: Rovan | Редакторы: Волшебник,
Последняя редакция №2 от 15.02.06 | История
URL: http://kb.mista.ru/article.php?id=89

Ключевые слова: Периодический, реквизит, секунда, минута, час


Как известно, время установки (секунда, минута, час) периодического реквизита появляется только, если дата документа и дата записи реквизита совпадают, поэтому такую ситуацию можно обойти путем создания дополнительного документа.

СлужебнаяУстановкаРеквизитов
Поле Шапки - ДокументОснование.
Поля ТЧ - Значение, Реквизит, Элемент.

Процедура ОбработкаПроведения()
 Если ВыбратьСтроки() = 0 Тогда
  Возврат;
 КонецЕсли;
           
Пока ПолучитьСтроку() = 1 Цикл
   Если ( ПустоеЗначение( Элемент ) = 1 ) или
        ( ПустоеЗначение( Реквизит) = 1 ) Тогда
       Продолжить;
   КонецЕсли;
       
   УстановитьРеквизитСправочника( Элемент, СокрЛП( Реквизит ), Значение, ДатаДок );
КонецЦикла;
КонецПроцедуры

//Теперь самое интересное - нужно выявить факкты несоответсвия дат при записи периодических //реквизитов и провести их этим документом, я сделал это технологически так - в ОбработкеПроведения //добавляем конструкцию:

ТЗ_Позднее_Проведение = СоздатьОбъект( "ТаблицаЗначений" );
ТЗ_Позднее_Проведение.НоваяКолонка( "Дата"        , "Дата" );
ТЗ_Позднее_Проведение.НоваяКолонка( "Элемент"    , "Справочник.Сотрудники" );
ТЗ_Позднее_Проведение.НоваяКолонка( "Реквизит"    );
ТЗ_Позднее_Проведение.НоваяКолонка( "Значение"    );
...
Если ДатаДляРеквизита <> ДатаДок Тогда
 ТЗ_Позднее_Проведение.НоваяСтрока();
 ТЗ_Позднее_Проведение.Дата = ДатаДляРеквизита;
 ТЗ_Позднее_Проведение.Элемент = ТекЭлементСправочника;
 ТЗ_Позднее_Проведение.Реквизит = ТекРеквизит;
 ТЗ_Позднее_Проведение.Значение = ТекЗначение;
КонецЕсли;
...
Если ТЗ_Позднее_Проведение.КоличествоСтрок() > 0 Тогда
 ТекСлужДок = СоздатьОбъект( "Документ.СлужебнаяУстановкаРеквизитов" );
 ТекСлужДок.АвтоВремяКонецДня();

 ТЗ_Позднее_Проведение.Сортировать( "Дата, Элемент" );
 СтарДата = '..';      
 ТЗ_Позднее_Проведение.ВыбратьСтроки();
       
 Пока ТЗ_Позднее_Проведение.ПолучитьСтроку() = 1 Цикл
   Если ( ПустоеЗначение( ТЗ_Позднее_Проведение.Дата ) = 1 ) или
    ( ПустоеЗначение( ТЗ_Позднее_Проведение.Элемент) = 1 ) или
    ( ПустоеЗначение( ТЗ_Позднее_Проведение.Реквизит)= 1 ) Тогда
     Продолжить;
   КонецЕсли;                                          
           
   Если СтарДата <> ТЗ_Позднее_Проведение.Дата Тогда
   СтарДата = ТЗ_Позднее_Проведение.Дата;
   ТекСлужДок.Новый();
   ТекСлужДок.ДатаДок = СтарДата;
   
   ТекСлужДок.ДокументОснование = ТекущийДокумент();
   ТекСлужДок.Записать();
               
   глСписокДоковДействия.ДобавитьЗначение( ТекСлужДок.ТекущийДокумент(), "Провести" );
   КонецЕсли;                                          
                           
   ТекСлужДок.НоваяСтрока();
   ТекСлужДок.Элемент  = ТЗ_Позднее_Проведение.Элемент;
   ТекСлужДок.Реквизит = ТЗ_Позднее_Проведение.Реквизит;
                               
   ТекСлужДок.НазначитьТип( "Значение", "Число", 14, 2 );
   ТекСлужДок.Значение = ТЗ_Позднее_Проведение.Значение;
           
   ТекСлужДок.Записать();
 КонецЦикла;          
       
 ОбработкаОжидания( "ПроверкаРасписания", 2 );
КонецЕсли;                                            

//Проведение этого служебного документа делается через список значений глСписокДоковДействия
//подробности в ветке Книга знаний: Отмена проведения из открытой формы документа
//Дополнительно скажу, что при отмене основно должны удаляться и все служебные документы,
//подчиненные основному

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика