Имя: Пароль:
1C
1C 7.7
v7: Сброс периодического реквизита при програмной записи. ☑
0 Susirya
 
07.05.12
✎
23:55
В продолжение заархивированной v7: Изменение периодического реквизита из модуля формы элемента справочника
У меня точно такая же оказия произошла.
Собственно код:
ВыбСтатусыКлиентов - периодический реквизит (справочник)
ПоКнОк()- процедура сохранения элемента с периодическим реквизитом
<CODE>Процедура ПоКнОк()
   Если ВыбСтатусыКлиентов.Выбран()=0 Тогда
       Предупреждение("Не выбран статус!");
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;

       //!!!
   СпрКЛ=СоздатьОбъект("Справочник.Статусы_");
   СпрКЛ.ПорядокКодов();
   СпрКЛ.ВыбратьЭлементы(Код);
   Пока СпрКЛ.ПолучитьЭлемент()=1 Цикл
           //
           // тра-та-та с никак не связанная со значениями ТекущийЭлемемент() и ВыбСтатусыКлиентов
           //
   КонецЦикла;
   //!!!

   Если СтарСтатус <> ВыбСтатусыКлиентов Тогда
       Записать();
       Периодический = СоздатьОбъект("Периодический");
       Периодический.ИспользоватьОбъект(Метаданные.Справочник("Статусы_").Реквизит(3).Идентификатор, ТекущийЭлемент());
       Периодический.Значение = ВыбСтатусыКлиентов;
       Периодический.ДатаЗнач = ТекущаяДата();
       Периодический.Записать();
   КонецЕсли;
   Записать();
   Форма.Закрыть();
КонецПроцедуры</CODE>

С проблемой столкнулся когда заметил что в одном месте кода значение реквизита сохраняется при записи ТекущегоЭлемента, а в другом месте (указанном выше и АБСОЛЮТНО аналогичном - нет). Последовал примеру ТС предыдущей ветки - закометнил участок с обращением к справочнику (между восклицательными знаками) и - О ЧУДО! значение точно также как и в другом месте кода начало сохранятся...
При этом разкоментаривание участка между восклицательными знаками никак ничего не поменяло - значение нормально сохраняется...
С чем связан глюк непонятно... Но глюк есть... Спасибо за внимание!
1 Susirya
 
08.05.12
✎
11:04
updt Проблема осталась, но в немного ином случае. Периодический реквизит тип Перечисление.
При Записать() элемента справочника в конце процедуры записи пропадает определенное и сохраненное на дату значение периодического реквизита. Реквизит также - реквизит диалога формы элемента справочника.
 В чем причина? Подскажите пожалуйста, кто сталкивался, где собака зарыта?
2 bodri
 
08.05.12
✎
11:40
Установить(<?>,);
Синтаксис:
(1)Если я правильно понял вопрос, тогда

побробуй убрать

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

и воспользуйся этим

Установить(<Дата>,<Значение>)
Назначение:
Установить значение периодического реквизита справочника на заданную дату.
Параметры:
<Дата> - выражение со значением требуемой даты;
<Значение> - выражение, содержащее устанавливаемое значение периодического реквизита справочника.
Замечание:
Метод  можно использовать только для периодических реквизитов справочника и если для справочника еще не применялся метод ИспользоватьДату. Метод  можно использовать только для объектов-справочников, созданных функцией СоздатьОбъект.
3 Susirya
 
08.05.12
✎
12:17
(2) Сам элемент справочника создается

ОткрытьФормуМодально ("Элемент." + ВидСправочника)

потому Установить(,) не получится использовать. Иначе придется кроить схему изменения элемента справочника (хотя это тож мысль.... )
4 Susirya
 
08.05.12
✎
12:48
(2)(3) Приношу извинения - все получилось (через вспомогательную переменную-справочник того же типа).
Спасибо за подсказку!