Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Волшебство программирования на 1С:Предприятие 7.7 и 8.0. Выпуск 104



Волшебство программирования на 1С:Предприятие 7.7 и 8.0
Выпуск 104 / 30.06.2006

7.7: Установка периодических реквизитов с точностью до секунды
URL: http://kb.mista.ru/article.php?id=89
Автор: Rovan.

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

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

Процедура ОбработкаПроведения()
  Если ВыбратьСтроки() = 0 Тогда
   Возврат;
  КонецЕсли;
            
 Пока ПолучитьСтроку() = 1 Цикл

    Если ( ПустоеЗначение( Элемент ) = 1 ) или 
         ( ПустоеЗначение( Реквизит) = 1 ) Тогда

        Продолжить;
    КонецЕсли;
        
    УстановитьРеквизитСправочника( Элемент, СокрЛП( Реквизит ), Значение, ДатаДок );
 КонецЦикла;
КонецПроцедуры
Теперь самое интересное - нужно выявить факкты несоответсвия дат при записи периодических //реквизитов и провести их этим документом, я сделал это технологически так - в ОбработкеПроведения //добавляем конструкцию:
ТЗ_Позднее_Проведение = СоздатьОбъект( "ТаблицаЗначений" );
ТЗ_Позднее_Проведение.НоваяКолонка( "Дата", "Дата" );
ТЗ_Позднее_Проведение.НоваяКолонка( "Элемент", "Справочник" );
ТЗ_Позднее_Проведение.НоваяКолонка( "Реквизит"     );
ТЗ_Позднее_Проведение.НоваяКолонка( "Значение"    );
 ...

Если ДатаДляРеквизита <> ДатаДок Тогда
  ТЗ_Позднее_Проведение.НоваяСтрока();
  ТЗ_Позднее_Проведение.Дата = ДатаДляРеквизита;
  ТЗ_Позднее_Проведение.Элемент = ТекЭлементСправочника;
  ТЗ_Позднее_Проведение.Реквизит = ТекРеквизит;
  ТЗ_Позднее_Проведение.Значение = ТекЗначение;
КонецЕсли;
 ...
Если ТЗ_Позднее_Проведение.КоличествоСтрок() > 0 Тогда

  ТекСлужДок = СоздатьОбъект( "Документ.СлужебнаяУстановкаРеквизитов" );
  ТекСлужДок.АвтоВремяКонецДня();

  ТЗ_Позднее_Проведение.Сортировать( "Дата, Элемент" );
  СтарДата = '..';      
  ТЗ_Позднее_Проведение.ВыбратьСтроки();
        
  Пока ТЗ_Позднее_Проведение.ПолучитьСтроку() = 1 Цикл
    Если ( ПустоеЗначение( ТЗ_Позднее_Проведение.Дата ) = 1 ) или

     ( ПустоеЗначение( ТЗ_Позднее_Проведение.Элемент) = 1 ) или
     ( ПустоеЗначение( ТЗ_Позднее_Проведение.Реквизит)= 1 ) Тогда

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

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

Интересные ветки форума

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

v7: Не восстановимая ошибка базы данных код: -10
v7: Сдвиг документов по времени
v7: Каков критический объем базы для v 7.7
v7: выбор принтера в форме обработки
v7: Старт 1С в новой учетной записи пользователя.

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

v8: Подвисает обмен данными.
v8: Ключ защиты
v8: Причины для разделения сервера 1с8 и SQL-сервера
v8: Ускорение типовой свертки таблиц значений в 1С80
v8: .Записать(Истина); от 78 до 80% от общего времени выполнения

Информационные технологии

IT: Еще один крупный сайт, который криво отображает Firefox
IT: Интеграция мисты с форумом GotDotNet.Ru
IT: Новейшие истребители F-35 Joint Strike Fighter будут использовать LynxOS
IT: Сбор заявок торговыми представителями + Сбор заявок торговыми представителями 2
IT: Не запускаются сетевые команды в командной строке

О жизни...

LIFE: OFF Перерыв для доллара
LIFE: OFF: Жители Феодосии блокировали корабль НАТО
LIFE: OFF: Сколько необходимо денег на открытие магазина?
LIFE: OFF: Бомба! Большинство белорусов, украинцев и казахов хотели бы жить в России!
LIFE: OFF: Иномарки под запретом


Официальный сайт рассылки - www.mista.ru
Волшебный форум -
www.forum.mista.ru
Книга знаний - www.kb.mista.ru

С уважением,
Станислав Митичкин (Волшебник)
stasmit@mail.ru



В избранное