Книга знаний

1С:Предприятие / Объекты конфигурации / Справочники

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

Установка периодических реквизитов с точностью до секунды штатно через доп. документАвтор статьи: Rovan | Редакторы: Волшебник
Последняя редакция №5 от 30.05.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

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