Имя: Пароль:
1C
1C 7.7
v7: ПриОткрытии() как заставить 1с 7.7 сохранить изменения?
,
0 Invzor
 
09.12.13
14:17
Здравствуйте.
Можете подсказать... не пойму почему 1с 7.7 не сохраняет изменения...
Есть справочник "договор", в нем есть предопределенныя процедура ПриОткрытии() ... там записана маленькая проверка... проверку проходит все в порядке... далее он заносит в справочник в реквизит определенное значение...  - это тоже срабатывает... а вот нажимаешь на крестик закрыть договор.. он молча закрывает и не предлагает сохранить... а если что-то руками попытаться исправить.. то он уже предлагает сохранить.. когда закрываешь его... можно как-то это исправить?
1 1Сергей
 
09.12.13
14:19
покажи код ПриОткрытии()
2 Ёпрст
 
09.12.13
14:20
Значение поди периодики, да ?
3 Invzor
 
09.12.13
14:21
периодические есть значения
4 Invzor
 
09.12.13
14:21
сейчас скину
5 Invzor
 
09.12.13
14:22
Процедура ПриОткрытии()  
    
    СпрИдентификаторов = создатьОбъект("Справочник.Идентификатор");
                    
    ТабОборудование.Очистить();          
    ТабОборудование.НоваяКолонка("Наименование",,,,,,,1);
    ТабОборудование.НоваяКолонка("Контрагент", "Справочники.Контрагенты",,,,15);
    ТабОборудование.НоваяКолонка("Адрес","Строка",50);
    ТабОборудование.НоваяКолонка("Договор", "Справочники.Договоры",,,,15);
    ТабОборудование.НоваяКолонка("Вид", "Справочники.ГазовоеОборудование",,,,15);
    ТабОборудование.НоваяКолонка("Количество", "Число",,,,6);
    ТабОборудование.НоваяКолонка("Цена", "Число",12,2,,6);
    ТабОборудование.НоваяКолонка("Сумма", "Число",12,2,,6);
    ТабОборудование.НоваяКолонка("НДС", "Число",12,2,,6);    
    ТабОборудование.НоваяКолонка("Всего", "Число",12,2,,6);
    ТабОборудование.НоваяКолонка("К2", "Число",4,2,,6);
    ТабОборудование.НоваяКолонка("ДО", "Строка",,,"Дата обслуж.",3);
    ТабОборудование.ВидимостьКолонки("Наименование",0);        
    
    ТабОборудование.ВидимостьКолонки("К2",0);
    
    Оборудование = СоздатьОбъект("Справочник.ГазовоеОборудование");  
    
    УчитыватьНДС = 0;  
    Если ЭтапыРабот = 0  Тогда
        ЭтапыРабот = 1;
    КонецЕсли;
                                          
    ДатаТарифа = ДатаЗаключения;
    //Если ДатаПролонгации.Получить(ТекущаяДата()) > ДатаЗаключения Тогда
    //        ДатаТарифа = ДатаПролонгации.Получить(ТекущаяДата());    
    //КонецЕсли;
    
    Если ВидДоговора.Выбран()=1 Тогда
    
    Если (ВидДоговора.Вид <> Перечисление.ВидДоговора.Тройственный) или (ПустоеЗначение(ДоговорКонтрагента) = 0) Тогда
        Оборудование.ИспользоватьВладельца(ТекущийЭлемент());
        Оборудование.ВыбратьЭлементы();            
    
        Если ПустоеЗначение(ДоговорКонтрагента)=0 Тогда
            ДатаТарифа = ДоговорКонтрагента.ДатаЗаключения;
            //Если ДоговорКонтрагента.ДатаПролонгации.Получить(ТекущаяДата()) > ДоговорКонтрагента.ДатаЗаключения Тогда
            //    ДатаТарифа = ДоговорКонтрагента.ДатаПролонгации.Получить(ТекущаяДата());    
            //КонецЕсли;
        КонецЕсли;
        Пока Оборудование.ПолучитьЭлемент()=1 Цикл        
            Если Оборудование.ПометкаУдаления() = 0 Тогда
                ТабОборудование.НоваяСтрока();          
                ТабОборудование.Контрагент = Оборудование.Владелец.Владелец;
                ТабОборудование.Договор = Оборудование.Владелец;
                ТабОборудование.Вид = Оборудование.Вид;
                ТабОборудование.Количество = Оборудование.ВЭксплуатации;    
                ТабОборудование.К2 = Оборудование.К2;    
                
                ПорядокХраненияОтпускнойЦены = Оборудование.Вид.ПорядокХраненияОтпускнойЦены;
                Ставка = Оборудование.Вид.ПолучитьАтрибут("СтавкаНДС").Получить(ДатаЗаключения);      
                                                                
                Если ПустоеЗначение(ВариантРасчетаНалогов.СтавкаНДС) = 0 Тогда
                    Ставка = ВариантРасчетаНалогов.СтавкаНДС;    
                КонецЕсли;                                                                                       
                
                Количество = ТабОборудование.Количество;
                
                Если ПорядокХраненияОтпускнойЦены = 2 Тогда
                    
                    ТабОборудование.Цена = Оборудование.Вид.Цена.Получить(ДатаТарифа)*100/(100+Ставка.Ставка);
                    ТабОборудование.Всего = Оборудование.Вид.Цена.Получить(ДатаТарифа)*Количество;
                    ТабОборудование.НДС = ТабОборудование.Всего - ТабОборудование.Цена*Количество;
                    ТабОборудование.Сумма = ТабОборудование.Всего - ТабОборудование.НДС;
                    
                Иначе                                          
                    ТабОборудование.Цена = Оборудование.Вид.Цена.Получить(ДатаТарифа);
                    ТабОборудование.Сумма = Количество * ТабОборудование.Цена;
                    ТабОборудование.НДС = ТабОборудование.Сумма*Ставка.Ставка/100;
                    ТабОборудование.Всего = ТабОборудование.Сумма + ТабОборудование.НДС;
                КонецЕсли;
                
                
                УчитыватьНДС = УчитыватьНДС + ТабОборудование.НДС;
                        
                
                ТабОборудование.ДО = "";
            
                Периодический = СоздатьОбъект("Периодический");
                Периодический.ИспользоватьОбъект("ДатаОбслуживания", Оборудование.ТекущийЭлемент());
                Периодический.ВыбратьЗначения(ДатаЗаключения, ТекущаяДата());
                Колво = 0;
                Пока Периодический.ПолучитьЗначение()=1 Цикл
                    ТабОборудование.ДО = ТабОборудование.ДО + " " + Периодический.Значение;
                КонецЦикла;
                
                
//                ТабОборудование.ДО = Оборудование.ДатаОбслуживания.Получить(ТекущаяДата());
            КонецЕсли;
        КонецЦикла;        
        ТабОборудование.ВидимостьКолонки("Контрагент",0);
        Если ((ВидДоговора.Вид = Перечисление.ВидДоговора.СПГ) или (ВидДоговора.Вид = Перечисление.ВидДоговора.СВГО)) и (Владелец.ВидКонтрагента=Перечисление.ВидыКонтрагентов.Организация) Тогда
            СвернутьДоговор();                    
        КонецЕсли;                                                                
    Иначе                                          
        Если (ПустоеЗначение(ДоговорКонтрагента) = 1)  Тогда  
                                          
        Дог = ТекущийЭлемент();    
        Запрос = СоздатьОбъект("Запрос");  
        ТекстЗапроса =
        "//{{ЗАПРОС(Сформировать)
        |Оборудование=Справочник.ГазовоеОборудование.ТекущийЭлемент;
        |Владелец=Справочник.ГазовоеОборудование.Владелец.ДоговорКонтрагента.ТекущийЭлемент;
        |Условие(Владелец=Дог);  
        |Обрабатывать НеПомеченныеНаУдаление;
        |Группировка Оборудование;";
        
        Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда        
        
        Пока Запрос.Группировка("Оборудование")=1 Цикл    
        
            ТабОборудование.НоваяСтрока();          
            ТабОборудование.Контрагент = Запрос.Оборудование.Владелец.Владелец;
            ТабОборудование.Адрес = ТабОборудование.Контрагент.ЮридическийАдрес;
            ТабОборудование.Договор = Запрос.Оборудование.Владелец;
            ТабОборудование.Вид = Запрос.Оборудование.Вид;
            ТабОборудование.Количество = Запрос.Оборудование.ВЭксплуатации;
            
            ПорядокХраненияОтпускнойЦены = Запрос.Оборудование.Вид.ПорядокХраненияОтпускнойЦены;
            Ставка = Запрос.Оборудование.Вид.ПолучитьАтрибут("СтавкаНДС").Получить(ДатаЗаключения);      
                                                            
            Если ПустоеЗначение(ВариантРасчетаНалогов.СтавкаНДС) = 0 Тогда
                Ставка = ВариантРасчетаНалогов.СтавкаНДС;    
            КонецЕсли;                              
            
            Количество = ТабОборудование.Количество;
            
            Если ПорядокХраненияОтпускнойЦены = 2 Тогда
                ТабОборудование.Цена = Запрос.Оборудование.Вид.Цена.Получить(ДатаТарифа)*100/(100+Ставка.Ставка);
                ТабОборудование.Всего = Запрос.Оборудование.Вид.Цена.Получить(ДатаТарифа)*Количество;
                ТабОборудование.НДС = ТабОборудование.Всего - ТабОборудование.Цена*Количество;
                ТабОборудование.Сумма = ТабОборудование.Всего - ТабОборудование.НДС;
                
            Иначе                                          
                ТабОборудование.Цена = Запрос.Оборудование.Вид.Цена.Получить(ДатаТарифа);
                ТабОборудование.Сумма = Количество * ТабОборудование.Цена;
                ТабОборудование.НДС = ТабОборудование.Сумма*Ставка.Ставка/100;
                ТабОборудование.Всего = ТабОборудование.Сумма + ТабОборудование.НДС;
            КонецЕсли;
            
            
            УчитыватьНДС = УчитыватьНДС + ТабОборудование.НДС;
            
                                            
            ТабОборудование.ДО = "";
            
            Периодический = СоздатьОбъект("Периодический");
            Периодический.ИспользоватьОбъект("ДатаОбслуживания", Оборудование.ТекущийЭлемент());
            Периодический.ВыбратьЗначения(ДатаЗаключения, ТекущаяДата());
            Колво = 0;
            Пока Периодический.ПолучитьЗначение()=1 Цикл
                ТабОборудование.ДО = ТабОборудование.ДО + " " + Периодический.Значение;
            КонецЦикла;
            
//            ТабОборудование.ДО = Запрос.Оборудование.ДатаОбслуживания.Получить(ТекущаяДата());
            
        
        КонецЦикла;      
        КонецЕсли;
        
        КонецЕсли;
        ТабОборудование.ВидимостьКолонки("Контрагент",1);        
    КонецЕсли;
    
    ТабОборудование.Выгрузить(ТабКонтрагентов);  
    ТабКонтрагентов.Свернуть("Контрагент, Договор, Адрес", "");
    ТабКонтрагентов.Сортировать("+Адрес");
                                                                          
    Если Группировать = 1 Тогда
        ТабОборудование.Свернуть("Вид,Цена","Количество,НДС,Сумма,Всего,ДО");
    КонецЕсли;  
    
    ТабОборудование.ВидимостьКолонки("Количество",1);        
    ТабОборудование.ВидимостьКолонки("НДС",?(УчитыватьНДС>0,1,0));        
    ТабОборудование.ВидимостьКолонки("Договор",0);
    ТабОборудование.ВидимостьКолонки("Адрес",0);        
    
    
    
КонецЕсли;
    
    НазначениеВидимыхОбъектов();
    


//_____________________________________________________________________________
// доработка. штрихкод Сплошная идентификация договаора

Если СокрЛП(Строка(ИдентификаторШтриха)) = "" тогда
    СпрИдентификаторов.Новый();
    СпрИдентификаторов.Записать();
    ИдентификаторШтриха = СпрИдентификаторов.ТекущийЭлемент();  
     СОобщить(ИдентификаторШтриха);
     Комментарий = "+штрих";
КонецЕсли;


    

//_______________Конец Доработки Штрихкодов____________________________________
  










КонецПроцедуры // ПриОткрытии()
6 Invzor
 
09.12.13
14:22
здесь только вот в этом куске вопрос:


Если СокрЛП(Строка(ИдентификаторШтриха)) = "" тогда
    СпрИдентификаторов.Новый();
    СпрИдентификаторов.Записать();
    ИдентификаторШтриха = СпрИдентификаторов.ТекущийЭлемент();  
     СОобщить(ИдентификаторШтриха);
     Комментарий = "+штрих";
КонецЕсли;


    

//_______________Конец Доработки Штрихкодов____________________________________

  










КонецПроцедуры // ПриОткрытии()
7 Invzor
 
09.12.13
14:23
Комментарий = "+штрих"; - вносит эти значения... но при закрытии не предлагает сохранять... просто закрывает и не сохраняет ессно
8 Ёпрст
 
09.12.13
14:25
Комментарий - это что ?
9 Ёпрст
 
09.12.13
14:25
поди просто реквизит формы, а не реквизит справочника, да ?
10 Ёпрст
 
09.12.13
14:25
:))
11 Invzor
 
09.12.13
14:25
нет
12 Ёпрст
 
09.12.13
14:26
(11)  че нет ?
13 Invzor
 
09.12.13
14:26
ИдентификаторШтриха = СпрИдентификаторов.ТекущийЭлемент();
Идентификатор - реквизит и коммент реквизит... а не сохраняет ...
14 Ёпрст
 
09.12.13
14:26
И где вас учат вот так писать ?
СокрЛП(Строка(ИдентификаторШтриха)) = ""
15 Ёпрст
 
09.12.13
14:26
Еше раз, что такое Комментарий ?
Реквизит справочника, Реквизит формы ?
16 Invzor
 
09.12.13
14:27
да это уже что только не пробывал потом...
17 Invzor
 
09.12.13
14:27
вот и налепил
18 Ёпрст
 
09.12.13
14:27
И еще.. присвоение новых значений надо писать во ВВодНового, а не в ПриОткрытии..
19 Invzor
 
09.12.13
14:29
мне при вводе не нужно...
20 Ёпрст
 
09.12.13
14:29
^))
21 Invzor
 
09.12.13
14:30
нужно что бы при открытии элемента справчника проверялся элемент и если условия подходят вносил в определенные реквизиты значения
22 Ёпрст
 
09.12.13
14:30
Как это не нужно ?
А потом чего, каждый раз будешь элемент открывать, чтоб быть уверенным, что твой реквизит заполнился/записался ?
23 Invzor
 
09.12.13
14:30
значения вносятся... но не сохраняются...
24 Ёпрст
 
09.12.13
14:30
:)
25 Ёпрст
 
09.12.13
14:31
Еще раз, что есть Комментарий ?
Какой у него тип, периодический ли он, ежели это всё же реквизит справочника и т.д..
26 Invzor
 
09.12.13
14:32
непериодический реквизит справочника...
ИдентификаторШтриха - непереодический реквезит справочника тип СПРАВОЧНИК
27 Invzor
 
09.12.13
14:32
комментарий - тип СТРОКА
28 Злопчинский
 
09.12.13
14:32
Ёпрст, может нам курсы открыть...? ;-) такие.. простенькие... с веником и лопатой.. учить людей отвечать на вопросы.. ;-0)
29 Ёпрст
 
09.12.13
14:33
(28) лучше курсы по поиску..
30 Ёпрст
 
09.12.13
14:34
(26)
Перем Комментарий;

в коде есть ?
31 Ёпрст
 
09.12.13
14:35
+ Это форма чего хоть ?
Форма Элемента/Списка Справочника ?
32 Ёпрст
 
09.12.13
14:35
Что написано в ПриЗакрытии ?
+ ВК используешь ?
типа turbomd. к примеру ?
33 Lazy Stranger
 
09.12.13
14:36
на форме есть этот комментарий?
если нет - оно может не считать что данные модифицированы
34 Invzor
 
09.12.13
14:36
Форма Элемента. В  Перем Комментарий - нет в коде.... нужно объявлять, если работаешь в этом же справочнике?
35 Invzor
 
09.12.13
14:37
На форме есть этот "Комментарий" и "Идентификатор"
36 Ёпрст
 
09.12.13
14:38
(34) нет.
37 Invzor
 
09.12.13
14:39
при открытии он показывает на форме , что значения "идентификатор" и "коммент" внесены то что нужно.. но вот не предлагает сохранить и все
38 КонецЦикла
 
09.12.13
14:39
После просмотра (5) Епрст надо памятник поставить при жизни...
39 Invzor
 
09.12.13
14:41
(32) не использую. ПриЗакрытии нет в модуле
40 Ёпрст
 
09.12.13
14:42
(37) Ну воткни     Форма.Обновить(1); в это условие, сразу после присвоения..
41 Invzor
 
09.12.13
14:43
сейчас попробую
42 Ёпрст
 
09.12.13
14:43
будет тебе вопрос.
А так, хз, надо пофигуратор открывать, мне лень..
я не меняю реквизиты из приОткрытии формы элемента - мот это фича такая, не устанавливать флаг модифицированности формы тама.
43 Invzor
 
09.12.13
14:46
(40) спасибо! Помогло обновление формы! блин мелочь... а времени отняла...
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой