Имя: Пароль:
1C
1С v8
Версия данных документа 1С
0 Shmidt
 
25.04.14
15:00
Каким образом реализовать проверку объектов (документ и элемент справочника) на предмет того, что объект изменяется, а не создается новый?
1 Wobland
 
25.04.14
15:00
это ли новый
2 Wobland
 
25.04.14
15:01
а какое эпичное название у ветки!
3 Shmidt
 
25.04.14
15:03
Ну при записи нового документа отрабатываются некоторые условия и делают оперд. изменения в документе. Задача в том, чтобы, если мы зайдем в этот документ еще раз, что-то изменим и перепроведем, условия не выполнялись.
4 Wobland
 
25.04.14
15:06
(3) понятно
5 neo_matrix_123
 
25.04.14
15:15
ну как то так...


Если Источник.ЭтоНовый() Тогда
                    Если Источник.Дата>ДатаЗапрета тогда
                    Отказ=Ложь;
Если ТипЗнч(Источник.Ссылка) = Тип("ДокументСсылка.ВнутреннийЗаказ") Тогда
                            Если Источник.Дата < НачалоДня(ТекущаяДата()) Тогда
                                Сообщить("Дата документа меньше текущей! Документ будет сохранен оперативно.");
                                Источник.Дата = ТекущаяДата();
                                
                            КонецЕсли;
                        КонецЕсли;
ИначеЕсли  Источник.Дата <= ДатаЗапрета  Тогда                 // пользователю запрещена запись документа
                        
                        Сообщить("Документ находится в закрытом для вас периоде!");
                        Отказ = Истина;
                    ИначеЕсли Источник.Дата <= ДатаЗапретаМертвыйПериод  Тогда     // пользователю запрещена запись документа
                        
                        Сообщить("Документ находится в закрытом для вас периоде!");
                        Отказ = Истина;
                    КонецЕсли;                

                КонецЕсли;
ПараметрыПроверкиДокумента = ПолучитьПараметрыПроверкиДокумента(Источник);
                
                Если Не Источник.ЭтоНовый() Тогда
                    СтараяВерсияДокумента = ПолучитьВерсиюДокументаПередИзменением(Источник, ПараметрыПроверкиДокумента);
                    СтараяДатаДокумента = СтараяВерсияДокумента.Дата;
                    ПроверитьВерсиюДокумента(СтараяВерсияДокумента, ПараметрыПроверкиДокумента, СоответствиеГраницЗапрета, Отказ);
                                                            
                    Если Не Отказ Тогда
                        ПроверитьВерсиюДокумента(Источник, ПараметрыПроверкиДокумента, СоответствиеГраницЗапрета, Отказ, РежимЗаписи);
                    КонецЕсли;

                    Если Источник.Дата>ДатаЗапрета И СтараяДатаДокумента>ДатаЗапрета тогда
                        Отказ=Ложь;
Если ТипЗнч(Источник.Ссылка) = Тип("ДокументСсылка.ВнутреннийЗаказ") Тогда
                            Если СтараяВерсияДокумента.Проведен = Истина Тогда
                                Сообщить("Ранее проведенный документ не может быть изменен! Воспользуйтесь корректировкой внутреннего заказа");
                                Отказ = Истина;    
                            ИначеЕсли СтараяВерсияДокумента.Проведен = Ложь И Источник.Дата < НачалоДня(ТекущаяДата()) Тогда
                                Сообщить("Дата документа меньше текущей! Документ будет сохранен оперативно.");
                                Источник.Дата = ТекущаяДата();
                                
                            КонецЕсли;
                        КонецЕсли;
                        
                    ИначеЕсли  Источник.Дата > ДатаЗапрета  И СтараяДатаДокумента <= ДатаЗапрета Тогда                 // пользователю запрещена запись документа
                        Если СтараяВерсияДокумента.Проведен = Истина Тогда
                        Сообщить("Документ находится в закрытом для вас периоде!");
                        Отказ = Истина;
                        Иначе
                        Отказ = Ложь;
                        КонецЕсли;
                    ИначеЕсли  Источник.Дата <= ДатаЗапрета  И СтараяДатаДокумента <= ДатаЗапрета Тогда                 // пользователю запрещена запись документа
                        Если СтараяВерсияДокумента.Проведен = Истина Тогда
                        Сообщить("Документ находится в закрытом для вас периоде!");
                        Отказ = Истина;
                        КонецЕсли;
                    ИначеЕсли  Источник.Дата <= ДатаЗапрета  И СтараяДатаДокумента > ДатаЗапрета Тогда                 // пользователю запрещена запись документа
                        
                        Сообщить("Документ находится в закрытом для вас периоде!");
                        Отказ = Истина;
    
                    КонецЕсли;
                КонецЕсли;
Основная теорема систематики: Новые системы плодят новые проблемы.