|
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
|
спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |