Имя: Пароль:
1C
1C 7.7
v7: Установки периодического реквизита проведением документа
0 yur4egg
 
16.07.12
14:42
В модуле проведения документа использую:
УстановитьРеквизитСправочника(СпрЦенКон,"Цена",Цена,ДатаИзм);
где ДатаИзм - не обязательно дата документа, а может быть другая. Документ не оперативный (только такие могут работать с произвольной датой).
В итоге цена записывается в справочник, но после просмотра истории изменения, наблюдается дата самого документа, а не та, что указывалась при проведении как ДатаИзм.
Как это можно исправить?
1 Lea_Lear
 
16.07.12
14:50
//-----------------------------------------------
Процедура ОбработкаПроведения(ВходЗнач)
   глДокументПриПроведении(Контекст,0);
   
   СпрКатегорииЦен=СоздатьОбъект("Справочник.Категориицен");
   
   СпрКатегорииЦен.ИспользоватьДату(ДатаЦен);
   
   СпрЦены=СоздатьОбъект("Справочник.Цены");
   Контр=СоздатьОбъект("Справочник.Контрагенты");
   
   Если ПустоеЗначение(Контрагент.КатегорияЦены)=1 Тогда
       Если СпрКатегорииЦен.НайтиПонаименованию(СокрЛП(Контрагент.Наименование),1,1)=0 Тогда
           СпрКатегорииЦен.Новый();
           СпрКатегорииЦен.Наименование=Контрагент.Наименование;
           СпрКатегорииЦен.ТипЦен=ТипЦен;
           СпрКатегорииЦен.ВключенНДС=ВключенНДС;
           СпрКатегорииЦен.ВключенНП=ВключенНП;
           СпрКатегорииЦен.ВидОплаты=ВидОплаты;
           СпрКатегорииЦен.Валюта=Валюта;
           СпрКатегорииЦен.Основная=0;
           СпрКатегорииЦен.Доставка=ЦенаДоставки;
           СпрКатегорииЦен.Наценка=ЦенаНаценки;       //***ШО 2010-03-15
           СпрКатегорииЦен.Записать();  
           Контр.НайтиЭлемент(Контрагент);
           Контр.КатегорияЦены= СпрКатегорииЦен.ТекущийЭлемент();
           Контр.Записать();
       Иначе
           Контр.КатегорияЦены= СпрКатегорииЦен.ТекущийЭлемент();
           Контр.Записать();
       КонецЕсли;
   Иначе
       СпрКатегорииЦен.НайтиЭлемент(Контрагент.КатегорияЦены);
   КонецЕсли;
   
   Если СпрКатегорииЦен.Доставка<>ЦенаДоставки Тогда
       УстановитьРеквизитСправочника(СпрКатегорииЦен.ТекущийЭлемент(),"Доставка",ЦенаДоставки,ДатаЦен);
   КонецЕсли;
   
   //***ШО 2010-03-15
   Если СпрКатегорииЦен.Наценка<>ЦенаНаценки Тогда
       УстановитьРеквизитСправочника(СпрКатегорииЦен.ТекущийЭлемент(),"Наценка",ЦенаНаценки,ДатаЦен);
   КонецЕсли;
   //***шо
   
   ВыбратьСтроки();
   Пока ПолучитьСтроку()=1 Цикл
       СпрЦены.ИспользоватьВладельца(Номенклатура);                                        
       
       //выбрать по реквизитам: КатегорияЦены = СпрКатегорииЦен.ТекущийЭлемент(),
       //                         Подразделение = Подразделение,
       //                         Договор = Договор
       ЦенаПоРеквизитам = Пусто;
       
       Если СпрЦены.ВыбратьЭлементыПоРеквизиту("КатегорияЦены",СпрКатегорииЦен.ТекущийЭлемент(),,0)>0 Тогда
           Пока СпрЦены.ПолучитьЭлемент()<>0 Цикл
               Если  (СпрЦены.ПометкаУдаления()=0) И
               //Совпало по Подразделению
               (?(ПустоеЗначение(Подразделение)=0,?(СпрЦены.Подразделение=Подразделение,1,0),ПустоеЗначение(СпрЦены.Подразделение)) = 1 ) И
               //Совпало по Договору
               (?(ПустоеЗначение(Договор)=0,?(СпрЦены.Договор=Договор,1,0),ПустоеЗначение(СпрЦены.Договор)) = 1 ) Тогда                        
                   ЦенаПоРеквизитам = СпрЦены.ТекущийЭлемент();                  
                   //Сообщить("Нашли цену!");
                   Прервать;
                   //УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(),"Цена",Цена,ДатаЦен);
                   //УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(),"ЦенаПК",ЦенаПК,ДатаЦен);
               КонецЕсли;
           КонецЦикла;    
       КонецЕсли;
       
       Если ПустоеЗначение(ЦенаПоРеквизитам)=1 Тогда    
           //Сообщить("Создаем новую цену!");
           СпрЦены.Новый();
           СпрЦены.КатегорияЦены = СпрКатегорииЦен.ТекущийЭлемент();
           СпрЦены.Подразделение = Подразделение;
           СпрЦены.Договор       = Договор;
           //СпрЦены.МассаЛитр     = МассаЛитр;    //***ШО 2008-11-29
           СпрЦены.Записать();
           //УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(),"Цена",Цена,ДатаЦен);
           //УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(),"ЦенаПК",ЦенаПК,ДатаЦен);
       КонецЕсли;                                    
       
       //Сообщить("установили новое значение для цены: "+СпрЦены.ТекущийЭлемент());
       //Сообщить("Владелец = <"+СпрЦены.Владелец+">, КатегорияЦены = <"+СпрЦены.КатегорияЦены+">, Подразделение = <"+СпрЦены.Подразделение+">, Договор = <"+СпрЦены.Договор+">");
       
       УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(),"Цена",Цена,ДатаЦен);
       УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(),"ЦенаПК",ЦенаПК,ДатаЦен);
       
       //***ШО 2010-03-22
       //Если ЦенаН<>0 Тогда
          УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(),"ЦенаН",ЦенаН,ДатаЦен);  
       //КонецЕсли;
       //***шо 2010-03-22
       
       УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(),"МассаЛитр",МассаЛитр,ДатаЦен);    //***ШО 2008-11-29  
       УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(),"МассаЛитр1",МассаЛитр1,ДатаЦен);  //***ШО 2009-01-21 Признак вторых цен ЦенПК
       //СпрЦены.МассаЛитр     = МассаЛитр;   //***ШО 2008-11-29
       СпрЦены.Записать();                  //***ШО 2008-11-29
       
       
   КонецЦикла;    
КонецПроцедуры

//-----------------------------------------------
Процедура ОбработкаУдаленияПроведения()  
     
   
      //Если СОКРЛП(ВРЕГ(Строка(глПользователь))) = "АДМИНИСТРАТОР" Тогда   //***ШО 2010-08-26
      Если (СОКРЛП(ВРЕГ(Строка(глПользователь))) = "АДМИНИСТРАТОР")  или  (СОКРЛП(ВРЕГ(Строка(глПользователь))) = "ГУБАНОВА")    или  (СОКРЛП(ВРЕГ(Строка(глПользователь))) = "КЛИМЕНКОВА") Тогда
      Иначе
            Предупреждение("Только АДМИНИСТРАТОР может удалять или делать не проведенными эти документы!");
            СтатусВозврата(0);            
      КонецЕсли;
     
КонецПроцедуры
2 Lea_Lear
 
16.07.12
14:51
Все работает. хз почему у Вас не работает.
3 Mikeware
 
16.07.12
14:57
(1) за (СОКРЛП(ВРЕГ(Строка(глПользователь))) = "ГУБАНОВА")  и т.п. надо бить ногами по хлебалу...
4 andrewks
 
16.07.12
14:58
(3) а чё, нормальный такой быдлокодинг :)
5 andrewks
 
16.07.12
14:59
(0) давай скрин истории
6 Lea_Lear
 
16.07.12
15:19
(3) Лучше потвоему три константы наваять , умник.
7 Mikeware
 
16.07.12
15:28
(6) я что, завсом, что ли, константы на кажжый пук вводить...
8 Ёпрст
 
16.07.12
15:30
(6) для этого есть права и НазваниеНабораПрав
9 Lea_Lear
 
16.07.12
15:30
ну тогда гони решение , а не умничай - сам знаю что некрасиво написано.
10 Lea_Lear
 
16.07.12
15:31
А если влом из-за одного документа мутить новые права?
11 Lea_Lear
 
16.07.12
15:32
уволились люди - сел и переписал документ.
Основная теорема систематики: Новые системы плодят новые проблемы.