Версия для печати темы (https://pro1c.org.ua/index.php?s=866d9bccbe059515644c606a4730ecbc&showtopic=36140)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Создание нового документа и проверка на наличие уже созданого. Подскажите пожалуйста что не так я делаю.

Автор: inna.innainna84 24.03.17, 10:29

Код

Процедура СоздаемПЛ() 
    
    тз.выбратьстроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл                     
        //================создаем новый!=====================          
        ДокМ=СоздатьОбъект("Документ.ПутевойЛистГрузовой");                 
        ДокМ.Новый();          
        глЗаполнитьШапку(ДокМ);
        ДокМ.ДатаДок = ТЗ.ДатаДок;  
        ДокМ.Автомобиль = ТЗ.Автомобиль.ТекущийЭлемент();         
        Докм.ПоказанияСпидометраНаНачало=ТЗ.КоличествоНачПокСпид;
        Докм.ПоказанияСпидометраНаКонец=ТЗ.КоличествоКонПокСпид;
        Докм.ПробегGPS=ТЗ.GPS;
        Докм.ПробегНорма=ТЗ.Км;
        Докм.СуммаЗаправки=ТЗ.ПоступилоСумма;
        Докм.ПоступилоГСМ=ТЗ.ПоступилоЛитр;
        Докм.Автор=глПользователь;
        //================создаем новый!=====================             
        
        //=========================проверям на наличие уже созданного пл=======================    
        ДокПЛ=СоздатьОбъект("Документ.ПутевойЛистГрузовой");    
        ДокПЛ.ВыбратьДокументы(Дата1,Дата2);
        Пока ДокПл.ПолучитьДокумент()=1 Цикл
                       Если ДокПЛ.ПометкаУдаления() = 0 Тогда // проверяем все кроме помеченных!!
                
                //================находим документ и редактируем его!=====================           
                Если (ДокПЛ.Автомобиль=ДокМ.Автомобиль) и (ДокПЛ.ДатаДок=ДокМ.ДатаДок) Тогда                  
                    Если Вопрос("ПЛ № "+ДокПЛ+" уже записан (№ "+ДокПЛ.Номердок+"). РЕДАКТИРОВАТЬ?", "Да+Нет") =  "Да" Тогда  
                        
                        ДокМ=ДокПЛ;
                        
                        Если ДокМ.Проведен()=1 Тогда                            
                            ДокМ.СделатьНеПроведенным();                             
                        КонецЕсли;
                    КонецЕсли;
                    Докм.Автор=глПользователь;
                    ДокМ.ПоказанияСпидометраНаНачало=ТЗ.КоличествоНачПокСпид;
                    ДокМ.ПоказанияСпидометраНаКонец=ТЗ.КоличествоКонПокСпид;
                    ДокМ.ПробегGPS=ТЗ.GPS;
                    ДокМ.ПробегНорма=ТЗ.Км;
                    ДокМ.СуммаЗаправки=ТЗ.ПоступилоСумма;
                    ДокМ.ПоступилоГСМ=ТЗ.ПоступилоЛитр;
                    ДокМ.Записать();        
                    Сообщить("Редактирован! "+ДокМ.ТекущийДокумент());                     
                КонецЕсли;                   
                //================находим документ и редактируем его!=====================         
            КонецЕсли;             
        КонецЦикла;  
        
        //===========================================================
    КонецЦикла;                                        
    
    Попытка
        ДокМ.Записать();
        Сообщить("№2 "+ ДокМ);    
    Исключение
    КонецПопытки;
    
    сообщить("Ок.");    
КонецПроцедуры

Автор: andrew76 24.03.17, 10:46

В какой строке ошибка и что за ошибка ?

Автор: inna.innainna84 24.03.17, 10:51

Этот код не верно сработает.

Автор: nysysimara 24.03.17, 10:58

inna.innainna84 @ Сегодня, 10:29 * ,
предложение по коду:
1) вначале проверить на наличие необходимого документа,
если он есть и дано согласие на редактирование - отменяем проведение,
иначе - ДокМ.Новый();
2) использовать один объект "Документ.ПутевойЛистГрузовой"
и соответственно один блок заполнения реквизитов


Автор: daveal 24.03.17, 11:24

ДокМ.Записать(); за циклом. При создании нового документа он запишется только на последней строке - т.е. правильная работа, в случае отсутствия документа для редактирования, будет только если строка в таблице одна.

Автор: inna.innainna84 24.03.17, 15:12

09000000.gif 09000000.gif 09000000.gif
10 раз переделыааю код и все равно возвращаюсь в начало

Процедура ЗаполняемПЛраб() 
          
          тз.выбратьстроки();
          Пока ТЗ.ПолучитьСтроку()=1 Цикл                     
              //================создаем новый!=====================          
              ДокМ=СоздатьОбъект("Документ.ПутевойЛистГрузовой");                 
              ДокМ.Новый();      
              глЗаполнитьШапку(ДокМ);
              ДокМ.ДатаДок = ТЗ.ДатаДок;  
              ДокМ.Автомобиль = ТЗ.Автомобиль.ТекущийЭлемент();         
              Докм.ПоказанияСпидометраНаНачало=ТЗ.КоличествоНачПокСпид;
              Докм.ПоказанияСпидометраНаКонец=ТЗ.КоличествоКонПокСпид;
              Докм.ПробегGPS=ТЗ.GPS;
              Докм.ПробегНорма=ТЗ.Км;
              Докм.СуммаЗаправки=ТЗ.ПоступилоСумма;
              Докм.ПоступилоГСМ=ТЗ.ПоступилоЛитр;
              Докм.Автор=глПользователь;
              
              //================создаем новый!=======================================================      
              
              
              //=========================проверям на наличие уже созданного пл=======================    
              ДокПЛ=СоздатьОбъект("Документ.ПутевойЛистГрузовой");    
              ДокПЛ.ВыбратьДокументы(Дата1,Дата2);
              Пока ДокПл.ПолучитьДокумент()=1 Цикл
                  Если ДокПЛ.ПометкаУдаления() = 0 Тогда // (ДокПЛ.Проведен() = 0) И                  
                      
                      //================находим документ и редактируем его!=====================           
                      Если (ДокПЛ.Автомобиль=ДокМ.Автомобиль) и (ДокПЛ.ДатаДок=ДокМ.ДатаДок) Тогда                  
                          Если Вопрос("ПЛ № "+ДокПЛ+" уже записан (№ "+ДокПЛ.Номердок+"). РЕДАКТИРОВАТЬ?", "Да+Нет") =  "Да" Тогда  
                              
                              ДокМ=ДокПЛ;
                              
                              Если ДокМ.Проведен()=1 Тогда                        
                                  ДокМ.СделатьНеПроведенным();
                                  
                              КонецЕсли;                      
                          КонецЕсли;                      
                          Докм.ПоказанияСпидометраНаНачало=ТЗ.КоличествоНачПокСпид;
                          Докм.ПоказанияСпидометраНаКонец=ТЗ.КоличествоКонПокСпид;
                          Докм.ПробегGPS=ТЗ.GPS;
                          Докм.ПробегНорма=ТЗ.Км;
                          Докм.СуммаЗаправки=ТЗ.ПоступилоСумма;
                          Докм.ПоступилоГСМ=ТЗ.ПоступилоЛитр;
                          Докм.Автор=глПользователь;
                          ДокМ.Записать();        
                          Сообщить("Редактирован! "+ДокМ.ТекущийДокумент());                          
                          
                      КонецЕсли;                      
                      //================находим документ и редактируем его!=====================         
                  КонецЕсли;             
              КонецЦикла;  
              Попытка
                  ДокМ.Записать();
                  Сообщить("Создан новый ПЛ "+ ДокМ);    
              Исключение
              КонецПопытки;
              //===========================================================
          КонецЦикла;                      
          
          сообщить("Ок.");    
      КонецПроцедуры

создаю новый
сообщает:
Создан новый ПЛ ПутевойЛистГрузовой ЗЕ-0000001 (04.01.17)
Создан новый ПЛ ПутевойЛистГрузовой ЗЕ-0000002 (05.01.17)
Создан новый ПЛ ПутевойЛистГрузовой ЗЕ-0000003 (06.01.17)
Ок.
Здесь все хорошо.


теперь провераю на наличие дока и редактирую его
сообщает:
Редактирован! ПутевойЛистГрузовой ЗЕ-0000001 (04.01.17)
Редактирован! ПутевойЛистГрузовой ЗЕ-0000002 (05.01.17)
Редактирован! ПутевойЛистГрузовой ЗЕ-0000003 (06.01.17)
Редактирован! ПутевойЛистГрузовой ЗЕ-0000002 (05.01.17)
Редактирован! ПутевойЛистГрузовой ЗЕ-0000003 (06.01.17)
Редактирован! ПутевойЛистГрузовой ЗЕ-0000003 (06.01.17)
Ок.
************************************************************************
Редактирован! ПутевойЛистГрузовой ЗЕ-0000002 (05.01.17)
Редактирован! ПутевойЛистГрузовой ЗЕ-0000003 (06.01.17)
Редактирован! ПутевойЛистГрузовой ЗЕ-0000003 (06.01.17)
Почему 2 строчка задваеветься, а 3 вовсе троит?

Автор: nysysimara 24.03.17, 15:55

попробуйте:

Процедура СоздаемПЛ() 
    
    ДокПЛ=СоздатьОбъект("Документ.ПутевойЛистГрузовой");    
    
    ТЗ.ВыбратьВтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
        БудемРедактироватьСуществующий = 0;
        ДокПЛ.ВыбратьДокументы(Дата1,Дата2);
        Пока ДокПл.ПолучитьДокумент()=1 Цикл
            Если ДокПЛ.ПометкаУдаления() = 0 Тогда // проверяем все кроме помеченных!!
                Если (ДокПЛ.Автомобиль=ТЗ.Автомобиль.ТекущийЭлемент()) и (ДокПЛ.ДатаДок=ТЗ.ДатаДок) Тогда                  
                    Если Вопрос("ПЛ № "+ДокПЛ+" уже записан (№ "+ДокПЛ.Номердок+"). РЕДАКТИРОВАТЬ?", "Да+Нет") =  "Да" Тогда  
                        Если ДокПЛ.Проведен()=1 Тогда                            
                            ДокПЛ.СделатьНеПроведенным();                            
                        КонецЕсли;
                        БудемРедактироватьСуществующий = 1;
                    КонецЕсли;
                    Прервать;
                КонецЕсли;                  
            КонецЕсли;            
        КонецЦикла;  
        Если БудемРедактироватьСуществующий=0 Тогда
            ДокПЛ.Новый();          
            глЗаполнитьШапку(ДокПЛ);
            ДокПЛ.ДатаДок = ТЗ.ДатаДок;  
            ДокПЛ.Автомобиль = ТЗ.Автомобиль.ТекущийЭлемент();  
        КонецЕсли;
        ДокПЛ.ПоказанияСпидометраНаНачало=ТЗ.КоличествоНачПокСпид;
        ДокПЛ.ПоказанияСпидометраНаКонец=ТЗ.КоличествоКонПокСпид;
        ДокПЛ.ПробегGPS=ТЗ.GPS;
        ДокПЛ.ПробегНорма=ТЗ.Км;
        ДокПЛ.СуммаЗаправки=ТЗ.ПоступилоСумма;
        ДокПЛ.ПоступилоГСМ=ТЗ.ПоступилоЛитр;
        ДокПЛ.Автор=глПользователь;
        Попытка
            ДокПЛ.Записать();
        Исключение
        КонецПопытки;
    КонецЦикла
КонецПроцедуры

и еще проверьте, что у вас в ТЗ

Автор: inna.innainna84 24.03.17, 16:36

Огромное спасибо. Все отлично срабатывает.

Автор: Sharzem 28.03.17, 0:51

inna.innainna84 @ 24.03.17, 17:36 * ,
Привет, все еще мучаете маршрутки ? ))) .... все по своей "прикольной" схемке...
Не хотели послушать, проанализировать, подумать...

Насколько помню Вашей "проблемке" уже наверное месяцев восемь... скоро родить пора, а еще ничего так и не придумали...

Опять те ж грабли..., те ж подходы...

Умом вас, женщин, не понять,
И иногда ничем вас не измеришь...
Жена, хозяйка, любящая мать.
Что остается? Просто верить.....

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua