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

Тема в разделе "1C и всё что с ней связано", создана пользователем Nastyusha, 10 авг 2010.

  1. Nastyusha

    Nastyusha Гость

    Добрый день.

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

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

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

    Заранее огромное спасибо за помощь
     
  2. Hryv

    Hryv Гость

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Если я правильно понял проблему, может быть, так лучше :

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

    Hryv Гость

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

    Nastyusha Гость

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

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

    Hryv Гость

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

    Nastyusha Гость

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

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

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

    КонецЕсли;


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

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Код (Text):
    Процедура ВызовОбработки()
    конт="Да";
    ОткрытьФорму("Обработка.ТвояОбработка",конт);
    КонецПроцедуры

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

    Hryv Гость

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

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

    Nastyusha Гость

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

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


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

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

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


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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Да избави Бог. Я просто не стал расписывать изменение реквизитов. Просто намекнул на то, что
    использование двух одинаковых объектов должно помочь решить проблему
     
  12. Hryv

    Hryv Гость

    Если работает, то правильно
    нужноезнач="Да"; - это можно убрать

    Форма.Закрыть(0);

    vbs, тут, похоже, намеками не помочь :)
     
  13. Nastyusha

    Nastyusha Гость

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

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

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

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    достаточно одного
     
  15. Hryv

    Hryv Гость

    В некоторых случаях, возможно
    В общем случае - нет
     
  16. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Просто в большинстве случаев совсем нет необходимости лазать в форму документа,
    А 2 объекта одинакового типа - простой механизм для изменения реквизитов
     
Загрузка...

Поделиться этой страницей