![]() |
![]() |
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 | Нет. Не хочется мне переписывать "Предприятие". Остановимся пока на этом... |