Имя: Пароль:
1C
1C 7.7
v7: Обработка перенос документов на другую дату
0 Pasha-Buh
 
03.06.14
13:12
Помогите разобраться. Задача перенести часть документов (по условию) в конце текущего на следующий месяц, либо в начале месяца с прошлого забрать часть документов. В диалоге есть выбора периода из которого переносить, кнопка перенести.
Почему-то выбирает только один документ в выборке (делает не проведенным, меняет дату и выходит):

    перем Дат;                                          
    Дат=НачМесяца(ТекущаяДата());
    ВвестиДату(Дат,"Дата на какое будут перенесены зн");
    Док=СоздатьОбъект("Документ.ЗаказНаряд");
    Док2=СоздатьОбъект("Документ.ЗаказНаряд");
    Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
    Пока Док. ПолучитьДокумент()=1 Цикл
        Если Найти(Док.СтрСтадии, "Заказ закрыт")=0 Тогда
            Если Док.Проведен()=1 Тогда  
                Если ПустоеЗначение(Док2)=0 Тогда
                    Док2.Провести();
                    Сообщить ("Проведен наряд: "+Док2.ТекущийДокумент());
                КонецЕсли;    
                Док.СделатьНеПроведенным();
                Сообщить ("Снят с проведения наряд: "+Док.ТекущийДокумент());
                Док.ДатаДок=Дат;
                Док2.НайтиПоНомеру(Док.НомерДок);
                                Док.Записать();
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Если ПустоеЗначение(Док2)=0 Тогда
        Док2.Провести();
        Сообщить ("Снят с проведения наряд: "+Док2.ТекущийДокумент());
    КонецЕсли;    
    Сообщить ("Все перенесено");
1 ДенисЧ
 
03.06.14
13:13
Выборка сбивается.
Отбери сначала все документы в список, потом из него и переноси
2 deputat
 
03.06.14
13:16
или через метку заново цикл открывай
3 ДенисЧ
 
03.06.14
13:16
(2) You're fired!
4 deputat
 
03.06.14
13:19
(3) всегда говорят метки плохо. А что плохого не понятно. Все от ситуации зависит.
5 ДенисЧ
 
03.06.14
13:20
(4) Да тут не метки. Тут повторное открытие выборки...
6 deputat
 
03.06.14
13:22
(5) ты на счет времени выполнения?
7 ДенисЧ
 
03.06.14
13:23
(6) И нагрузки на сервер
8 vova4321
 
03.06.14
13:30
есть у меня универсальная обработка, меняющая дату в документе (с сохранением статуса (проведен/не проведен/помечен на удаление). Если актуально, могу поделится.
9 Pasha-Buh
 
03.06.14
14:04
А сбивается из-за чего? (проведения)?
10 Pasha-Buh
 
03.06.14
14:08
Т.е. если я сделаю типа:
сначала в выборке
ТЗ.НовояКолонка("ДОкумент");
Тз.Документ=Док.ТекущийДокумент();

Потом
ТЗ. Выбрать Строки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл.
Док.НайтиДокумент(ТЗ.Документ);
Док.СделатьНеПроведенным();
Док.ДатаДок=Дат;
Док.Провести();
КонецЦикла;

Все должно заработать?
11 palpetrovich
 
03.06.14
14:16
(10) должно, разве что так красивей будет
12 palpetrovich
 
03.06.14
14:16
* попытка
док.записаить()
док.провести()
...
13 Мигало
 
03.06.14
14:35
Дат=НачМесяца(ТекущаяДата());
ВвестиДату(Дат,"Дата на какое будут перенесены зн");

спДок = СоздатьОбъект("СписокЗначений");

ДокЗаказНаряд = СоздатьОбъект("Документ.ЗаказНаряд");
ДокЗаказНаряд.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
Пока ДокЗаказНаряд.ПолучитьДокумент() = 1 Цикл
    Если ДокЗаказНаряд.Проведен() = 0 Тогда Продолжить; КонецЕсли;
    Если Найти(ДокЗаказНаряд.СтрСтадии, "Заказ закрыт")= 0 Тогда
        спДок.ДобавитьЗначение(ДокЗаказНаряд.ТекущийДокумент());
    КонецЕсли;
КонецЦикла;

Для I = 1 По спДок.РазмерСписка() Цикл
    ТекДок = спДок.ПолучитьЗначение(I);
    ДокЗаказНаряд.НайтиДокумент(ТекДок);
    
    Попытка
         ДокЗаказНаряд.СделатьНеПроведенным();
    Исключение
         Сообщить("Заблокирован документ: " + ТекДок);
    КонецПопытки;
    
    Если Док.Проведен() = 0 Тогда
         ДокЗаказНаряд.ДатаДок = Дат;
        
         Переменная = 0;
         Попытка
             ДокЗаказНаряд.Записать();
             Переменная = 1;
         Исключение
             Сообщить("Не удалось обновить дату документа: " + ТекДок);
         КонецПопытки;
        
         Если Переменная = 1 Тогда
             Попытка
                 ДокЗаказНаряд.Провести();
             Исключение
                 Сообщить("Не удалось провести документ: " + ТекДок);
             КонецПопытки;            
         КонецЕсли;
    КонецЕсли;
КонецЦикла;

Пользуйся
14 Pasha-Buh
 
04.06.14
10:14
спасибо