К списку форумов К списку вопросов
Периодические реквизиты
RSK
16.06.2004 - 18:09
Имеется справочник. Некоторые реквизиты - периодические. Использовал в предопределенной процедуре "ПриОткрытии" метод СохранениеПериодическихРеквизитов(2,"*"). Реквизиты то обнулялить на текущую дату, то полностью пропадала ВСЯ история значения. Перепробовал много вариантов. Остановился на последнем решении "1С", где в процедуру "ПриОткрытии" добавляется "глПолучитьДатупериодическихРеквизитов(Контекст)" и в глобальном модуле прописывается сама функция глПолучитьДатупериодическихРеквизитов. Вроде перестали пропадать и обнуляться. Но сегодня опять обнулились все значения первой записи этого справочника(на рабочую дату)... Смоделировать ситуацию на своей РС не могу. Нет возможности отловить в отладчике эту ошибку. Она возникает не всегда. Уже "тихо шифером шурша, крыша едет не спеша". ЛЮ-Ю-Ю-ДИ !!! Помогите!!!! Кто - нибудь воевал с такой бедой? Чего они пропадают?
RSK
1 - 17.06.2004 - 08:51
Уточню: после последнего преобразования модуля этого справочника обнуляются все значения 1-ой записи при изменении других записей.
Glide
2 - 17.06.2004 - 08:53
твой кусок модуля - в студию.
RSK
3 - 17.06.2004 - 13:00
Процедура Заполнить()
  //----------------------------
  
  Если Вопрос(ПолноеИмяПользователя()+", Вы действительно хотите занести аванс на "+МойМесяц+ " - месяц?",1)=1 Тогда
    // Обнуляем авансы.
    Спр=СоздатьОбъект("Справочник.Потребность");
    Спр.ПорядокКодов();
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
      Спр.АвансРУССтрах.Установить(НачМесяца(РабочаяДата()),0);
      Спр.АвансРУСБаз.Установить(НачМесяца(РабочаяДата()),0);
      Спр.АвансРУСГос.Установить(НачМесяца(РабочаяДата()),0);
      Спр.АвансУпрСтрах.Установить(НачМесяца(РабочаяДата()),0);
      Спр.АвансУпрБаз.Установить(НачМесяца(РабочаяДата()),0);
      Спр.АвансУпрГос.Установить(НачМесяца(РабочаяДата()),0);
    КонецЦикла;
    
    
    Спр=СоздатьОбъект("Справочник.Потребность");
    Спр.ПорядокКодов();
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
      КодНаименование=Спр.Код;
      Док=СоздатьОбъект("Документ");
      Док.ИспользоватьЖурнал ("ПлатежныеПоручения", 1);
      Док.ВыбратьПоЗначению(КонМесяца(ДобавитьМесяц(РабочаяДата(),-1))-11,КонМесяца(ДобавитьМесяц(РабочаяДата(),-1)),"НаАванс",1);
      АвансРУСБаз=0;
      АвансРУССтрах=0;
      АвансРУСГос=0;
      АвансУпрБаз=0;
      АвансУпрСтрах=0;
      АвансУпрГос=0;
      Пока Док.ПолучитьДокумент()=1 Цикл
        Если Док.Аванс=1 Тогда
          Если Док.Получатель.Код=КодНаименование Тогда
            Если Док.НомерС=1 Тогда АвансРУСБаз=АвансРУСБаз+Док.Сумма;
              Спр.АвансРУСБаз.Установить(НачМесяца(РабочаяДата()),АвансРУСБаз);
            ИначеЕсли Док.НомерС=2 Тогда АвансРУССтрах=АвансРУССтрах+Док.Сумма;
              Спр.АвансРУССтрах.Установить(НачМесяца(РабочаяДата()),АвансРУССтрах);
            ИначеЕсли Док.НомерС=3 Тогда АвансРУСГос=АвансРУСГос+Док.Сумма;
              Спр.АвансРУСГос.Установить(НачМесяца(РабочаяДата()),АвансРУСГос);
            ИначеЕсли Док.НомерС=4 Тогда АвансУпрБаз=АвансУпрБаз+Док.Сумма;
              Спр.АвансУпрБаз.Установить(НачМесяца(РабочаяДата()),АвансУпрБаз);
            ИначеЕсли Док.НомерС=5 Тогда АвансУпрСтрах=АвансУпрСтрах+Док.Сумма;
              Спр.АвансУпрСтрах.Установить(НачМесяца(РабочаяДата()),АвансУпрСтрах);
            ИначеЕсли Док.НомерС=6 Тогда АвансУпрГос=АвансУпрГос+Док.Сумма;
              Спр.АвансУпрГос.Установить(НачМесяца(РабочаяДата()),АвансУпрГос);
            КонецЕсли;
          КонецЕсли;
        КонецЕсли;
      КонецЦикла;
    КонецЦикла;
  КонецЕсли;
КонецПроцедуры
//Процедура обнуляющая возвраты.
Процедура Обнулить()
  Если Вопрос(ПолноеИмяПользователя()+", Вы действительно хотите обнулить все возвраты на "+НачМесяца(РабочаяДата())+ "?",1)=1 Тогда
    Спр=СоздатьОбъект("Справочник.Потребность");
    Спр.ПорядокКодов();
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
      Спр.ВозвратРУСБаз.Установить(НачМесяца(РабочаяДата()),0);
      Спр.ВозвратРУССтрах.Установить(НачМесяца(РабочаяДата()),0);
      Спр.ВозвратРУСГос.Установить(НачМесяца(РабочаяДата()),0);
      Спр.ВозвратАвансРУСГос.Установить(НачМесяца(РабочаяДата()),0);
      Спр.ПотребностьРУСБаз1.Установить(НачМесяца(РабочаяДата()),0);
      Спр.ПотребностьРУСГос1.Установить(НачМесяца(РабочаяДата()),0);
      Спр.ПотребностьРУССтрах1.Установить(НачМесяца(РабочаяДата()),0);
    КонецЦикла;
  КонецЕсли;
КонецПроцедуры
//{{ПРОЦЕДУРА_ПЕЧАТИ(Печать)
Процедура Печать()
  ВсегоПотребностьРУС=0;
  ВсегоПотребностьУпр=0;
  ВсегоПроавансировано=0;
  Спр = СоздатьОбъект("Справочник.Потребность");
  Спр.ПорядокКодов();
  Таб = СоздатьОбъект("Таблица");
  Таб.ИсходнаяТаблица("Печать");
  Таб.ВывестиСекцию("Шапка");
  Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
  Спр.ВыбратьЭлементы();
  Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Наименование=Спр.Наименование;
    ПотребностьРУС=Спр.ПотребностьРУСБаз.Получить(РабочаяДата())+Спр.ПотребностьРУСГос.Получить(РабочаяДата())+Спр.ПотребностьРУССтрах.Получить(РабочаяДата());
    ПотребностьУпр=Спр.ПотребностьУпрСтрах.Получить(РабочаяДата())+Спр.ПотребностьУпрГос.Получить(РабочаяДата())+Спр.ПотребностьУпрБаз.Получить(РабочаяДата());
    Проавансировано=Спр.АвансРУСГос+Спр.АвансРУССтрах+Спр.АвансРУСБаз+Спр.АвансУпрГос+Спр.АвансУпрСтрах+Спр.АвансУпрБаз-Спр.ВозвратАвансРУСГос.Получить(РабочаяДата());
    Таб.ВывестиСекцию("Строка");
    ВсегоПотребностьРУС=ВсегоПотребностьРУС+ПотребностьРУС;
    ВсегоПотребностьУпр=ВсегоПотребностьУпр+ПотребностьУпр;
    ВсегоПроавансировано=ВсегоПроавансировано+Проавансировано;
  КонецЦикла;
  Таб.ВывестиСекцию("Подвал");
  Таб.ВывестиСекцию("ПодвалПодвала");
  Таб.ТолькоПросмотр(1);
  Таб.Показать("Печать","");
КонецПроцедуры
////
Процедура ПриОткрытии()
  глПолучитьДатуПериодическихРеквизитов(Контекст);
  СохранениеПериодическихРеквизитов(2, "*");
КонецПроцедуры
-----------------------------------------------------------------------------------------------------------------------------------------
В глобальном модуле такая бяка:
Функция глПолучитьДатуПериодическихРеквизитов(КонтекстФормы) Экспорт
  
  Если ТипЗначенияСтр(КонтекстФормы.Форма.Параметр) = "СписокЗначений" Тогда
    Текущая_Дата = Дата(КонтекстФормы.Форма.Параметр.Получить("ИспользоватьДату()"));
    
    Если Текущая_Дата <> '00.00.0000' Тогда
      КонтекстФормы.ИспользоватьДату(Текущая_Дата, 1);
      Возврат 1;
    КонецЕсли;
  КонецЕсли;
  
  Возврат 0;
  
КонецФункции // глПолучитьДатуПе
RSK
4 - 17.06.2004 - 16:08
Если метод СохранениеПериодическихРеквизитов применять с параметром "Отображать окно диалога", то будет видно, что при измнении последней колонки первой, либо последней записи прога автоматом предлагает изменить значения ВСЕХ других периодических реквизитов!!! А т. к. новое значение только в текущей ячейке, становятся равными нулю все другие периодические реквизиты (если не было значения на рабочую дату). Как этой заразе объяснить, что надо менять только в ОДНОМ ПОЛЕ ЗАПИСЬ??!!!
RSK
5 - 18.06.2004 - 09:38
Такое происходит только на РС, где установлена ОС Windows2000. Так что это глюк из-за конфликта ОС и 21-ой платформы "Предприятия". На 98-ых и XP такой ситуации добиться не удалось. Кто нибудь воевал с такой бедой? Или ее можно победить только переустановкой ОС?
RSK
6 - 22.06.2004 - 17:26
Тихо, сам с собою , я веду беседу...
ДДД
7 - 23.06.2004 - 13:24
У меня тоже самое, к томуже и мой вопрос из обсуждения СТИРАЮТ
RSK
8 - 24.06.2004 - 08:39
Ур-р-р-а! Я не один! Я не сошел с ума!!! (Кстати нас уже трое. Еще в одном месте такая же ботва под 2000. Задал этот вопрос по "горячей линии 1С", отослал тестовую БД с этой ошибкой. Пока молчание... Если ответят, либо каким-либо обманом победю 1С, сообщу.)
RSK
9 - 24.06.2004 - 14:36
Сегодня передрал из комплексной конфигурации процедуры "ПриОткрытии" и "ПриЗаписи", вставил в модуль формы списка своего справочника, добавил (оттуда же) в глобальный модуль процедуру "ГлаЗаписьПериодическихРеквизитов" и вставил в конфигурацию их обработку "ЗаписьПериодическихРеквизитов", и О ЧУДО! Теперь, если "глючное Предприятие" хочет обнулить значения всех записей, ента обработка не пускает поменять НИЧЕГО! Затем нужно только еще раз внести эту цифру по новой и все чики-чики. Это конечно не решение проблемы. Но пока хоть что-то. Во всяком случае, можно сказать, что побеждено (на 98%)следствие. Но я не успокоюсь пока не победю первопричину.
RSK
10 - 28.06.2004 - 10:05
Нет. Не хочется мне переписывать "Предприятие". Остановимся пока на этом...

К списку вопросов на форуме 1C

>>