перерасчет реквизита документа (7.7)

  • Автор темы Nastyusha
  • Дата начала
N

Nastyusha

#1
Добрый день.

Как правильно сделать обработку для перерасчета реквизита документа?

Сделала :
1. вариант - в обработке сделала ссылки на реквизиты док., а временные переменные так пересчитываю в обработке- считает, но отличается результат
2. вариант- в обработке
Наряд=СоздатьОбъект("Документ.НарядЗаказ") ;
Наряд.ВыбратьДокументы(НачПериода,КонПериода);
Пока Наряд.ПолучитьДокумент()=1 Цикл
Состояние("Заполнение выходной таблицы..."); //отображается внизу на панельке
Конт="";
ОткрытьФорму(Наряд.ТекущийДокумент(),Конт);
Конт.СтрокаДействийФормы = "#Записать";
Конт.Форма.Закрыть(0);
Сообщить("Перепроведен документ: " + Строка(Наряд)); //в белом окошке отображается
КонецЦикла; //Наряд.ПолучитьДокумент()=1 Цикл

просто зависает 1с

Заранее огромное спасибо за помощь
 
H

Hryv

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

vbs

Well-known member
18.02.2007
1 708
1
#3
Если я правильно понял проблему, может быть, так лучше :

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

Hryv

#4
vbs, а изменение реквизитов где в твоем варианте?
или расчет на то, что НарядЗ.Записать(); вызовет ПриЗаписи() в модуле формы документа?
 
N

Nastyusha

#5
Hryv, а пересчет- здесь ссылка на процедуру из документа ?

Если Форма.Параметр="Пересчет" Тогда
// пересчет
 
H

Hryv

#6
Да, вместо "..." надо подставить вызов нужной процедуры из документа
 
N

Nastyusha

#7
Спасибо, Hryv
вопрос еще один:
в процедуре рентабельность есть такой код:

Если вопрос ("Открыть для ввода данных или для печати (если да- то вводим данные, нет- печатаем)", "Да+Нет+Отмена") = "Нет" Тогда

При записи- пересчитываем рентабельность
Если (НазваниеНабораПрав() = "ВыпискаМенеджер") Или (НазваниеНабораПрав() = "Администратор")Тогда
Рентабельность();

КонецЕсли;


Как сделать так, чтобы при вызове обработки это сообщения не появлялись, а по умолчанию было бы ДА
 
T

TimeDontWait

#8
Код:
Процедура ВызовОбработки()
конт="Да";
ОткрытьФорму("Обработка.ТвояОбработка",конт);
КонецПроцедуры

Процедура ПриОткрытии()
нужноезнач="Да";
Если форма.параметр<>нужноезнач тогда
Если вопрос ("Открыть для ввода данных или для печати (если да- то вводим данные, нет- печатаем)", "Да+Нет+Отмена") = "Нет" Тогда
....
КонецПроцедуры
Что-то в этом роде
 
H

Hryv

#9
В принципе, TimeDontWait правильное дал направление
Но если учесть, что у тебя уже Форма.Параметр="Пересчет", то просто в том месте где:
Если вопрос ("Открыть для ввода данных или для печати (если да- то вводим данные, нет- печатаем)", "Да+Нет+Отмена") = "Нет" Тогда

переделай условие, чтобы при Форма.Параметр="Пересчет" ничего не спрашивалось, а сразу делалось то что тебе надо
 
N

Nastyusha

#10
спасибо, Вам TimeDontWait и Hryv вроде получилось.. :)

сделала так:
Если Форма.Параметр="Пересчет" Тогда
нужноезнач="Да";
Рентабельность() ;


в процедуре рентабельность
...
Если Форма.Параметр<>"Пересчет" Тогда

Если вопрос ("Открыть для ввода данных или для печати (если да- то вводим данные, нет- печатаем)", "Да+Нет+Отмена", 1) = "Нет" Тогда

Правильно переделала?


Правда еще одно сообщение осталось...
Сохранить документ? (Документ будет перепроведен)
 

vbs

Well-known member
18.02.2007
1 708
1
#11
vbs, а изменение реквизитов где в твоем варианте?
или расчет на то, что НарядЗ.Записать(); вызовет ПриЗаписи() в модуле формы документа?
Да избави Бог. Я просто не стал расписывать изменение реквизитов. Просто намекнул на то, что
использование двух одинаковых объектов должно помочь решить проблему
 
H
#12
N

Nastyusha

#13
Записать();
Провести();
Форма.Закрыть(0); !!!!!!!!!!!
Так пересчитанные данные сохраняться?

Добавлено: Благодарю всех за помощь.

Без Вас я реально бы не справилась :)