Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Создание нового документа и проверка на наличие уже созданого. Подскажите пожалуйста что не так я делаю. , База 1с ТИС 7.7          
inna.innainna84 Подменю пользователя
сообщение 24.03.17, 10:29
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

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


Сообщение отредактировал Vofka - 24.03.17, 16:46

andrew76 Подменю пользователя
сообщение 24.03.17, 10:46
Сообщение #2

Оратор
*****
Группа: Пользователи
Сообщений: 443
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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

inna.innainna84 Подменю пользователя
сообщение 24.03.17, 10:51
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

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

nysysimara Подменю пользователя
сообщение 24.03.17, 10:58
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 312
Из: Бердянск
Спасибо сказали: 110 раз
Рейтинг: 0

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


Спасибо сказали: inna.innainna84,

daveal Подменю пользователя
сообщение 24.03.17, 11:24
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 70
Из: Киев
Спасибо сказали: 25 раз
Рейтинг: 0

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

Спасибо сказали: inna.innainna84,

inna.innainna84 Подменю пользователя
сообщение 24.03.17, 15:12
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

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
Сообщение #7

Оратор
Иконка группы
Группа: Местный
Сообщений: 312
Из: Бердянск
Спасибо сказали: 110 раз
Рейтинг: 0

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

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

Сообщение отредактировал nysysimara - 24.03.17, 15:57


Signature
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП)
1С Предприятие 8.3: Бух.предприятия 3.0 + самописка
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кроме высшего образования, нужно иметь хотя бы среднее соображение

Спасибо сказали: inna.innainna84,

inna.innainna84 Подменю пользователя
сообщение 24.03.17, 16:36
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

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

Sharzem Подменю пользователя
сообщение 28.03.17, 0:51
Сообщение #9

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

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

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

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

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


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.04.24, 8:10
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!