|
v7: Как закрыть контекст открытой формы документа | ☑ | ||
---|---|---|---|---|
0
ketonija
21.03.13
✎
17:05
|
Суть вопроса такая:
Есть документ, в котором при нажатии на кнопку должны создаться несколько других документов, которые заполняются данными на основании текущего, но в табличных частях этих документов все строки удаляются и заполняются другими данными из подготовленной заранее таблицы значений. Не знаю как закрыть форму, чтоб она не блокировала возможность записи документа (ошибка выскакивает при записи: Объект заблокирован: Счет Мос-000184 (21.03.13)). Пробовал закрывать Конт.Форма.Закрыть();, но типзначения(конт) всеравно остается равным 100. Вот пример кода, что вешается на кнопку: Процедура ВыписатьСчета() СчетаПлан.ВыбратьСтроки(); Строчка = 1; Спр = СоздатьОбъект("Справочник.Единицы"); Спр.НайтиПоНаименованию("шт."); Конт="АвтоСчет"; ОткрытьФорму("Документ.Счет", Конт, ТекущийДокумент()); Дока = СоздатьОбъект("Документ.Счет"); Дока.НайтиДокумент(Конт.ТекущийДокумент()); Конт.Форма.Закрыть(); Дока.УдалитьСтроки(); Пока СчетаПлан.ПолучитьСтроку() = 1 Цикл ТоварСчета = СчетаПлан.Товар; КоличествоСчета = СчетаПлан.ПолучитьЗначение(Строчка,"Отгрузка"+СокрЛП(1)); Если Количество > 0 Тогда Дока.НоваяСтрока(); Дока.Товар = ТоварСчета; Дока.Количество = КоличествоСчета; Дока.Единица = Спр.ТекущийЭлемент(); Дока.Коэффициент = 1; КонецЕсли; Строчка = Строчка+1; КонецЦикла; Попытка Дока.Записать(); Исключение Предупреждение("Не удалось записать счет"); Дока.Записать(); КонецПопытки; КонецПроцедуры В модуле формы документа Счет: Процедура ПриОткрытии() Если Форма.Параметр="АвтоСчет" Тогда Записать(); СтатусВозврата(1); Возврат; КонецЕсли; КонецПроцедуры |
|||
1
StanLee
21.03.13
✎
17:06
|
СтатусВозврата(0)
? |
|||
2
Ёпрст
21.03.13
✎
17:08
|
(0)
//ОткрытьФорму("Документ.Счет", Конт, ТекущийДокумент()); Дока = СоздатьОбъект("Документ.Счет"); Дока.Новый(); //заполнение реквизитов..далее запись //И никаких нахрен ОткрытьФорму в коде!!!!!!!!!!!!!!!! //Дока.НайтиДокумент(Конт.ТекущийДокумент()); |
|||
3
ketonija
21.03.13
✎
17:22
|
Вариант
Дока = СоздатьОбъект("Документ.Счет"); Дока.Новый(); это другой вариант решения, т.к. не отработается заполнение реквизитов обработкой ввода на основании. Можно конечно каждый реквизит прописывать вручную, но интересует вариант решения с использованием предопределенной процедуры ВводНаОсновании(ДокОснование) в модуле формы документа Счет. |
|||
4
ДенисЧ
21.03.13
✎
17:24
|
толи 1с++, толи формекс имеют методы StartBatch()/EndBatch() которые обходють эту проблему.
|
|||
5
Mikeware
21.03.13
✎
17:29
|
(4) 1cплюсплюсом каждый может... :-)
|
|||
6
ДенисЧ
21.03.13
✎
17:32
|
(5) ну, положим, не каждый... :-)
|
|||
7
ketonija
21.03.13
✎
17:42
|
ДенисЧ, можешь пример на формексе привести? Что в исходном коде надо подправить?
|
|||
8
ДенисЧ
21.03.13
✎
17:45
|
(7) Да я не помню уже...
|
|||
9
ДенисЧ
21.03.13
✎
17:46
|
что-то типа
|
|||
10
ДенисЧ
21.03.13
✎
17:46
|
||||
11
Ёпрст
21.03.13
✎
18:18
|
||||
12
aka MIK
21.03.13
✎
18:23
|
(0)
Док=""; ОткрытьФорму("Документ.ЦенообразованиеНовый",Док); Док.ЗагрузитьТабличнуюЧасть(ТЗВыб); Док.ВводНаОсновании(ДокОсн); |
|||
13
ketonija
21.03.13
✎
18:59
|
Док.ВводНаОсновании(ДокОсн);
Поле агрегатного объекта не обнаружено (ВводНаОсновании) Не работает. |
|||
14
ketonija
21.03.13
✎
19:19
|
В (11) эта задача не решается, т.к. там создается новый документ, а не тот, что создавался при вызове
Вид = "СчетФактура"; ОткрытьФорму("Документ."+Вид,КонтекстФормы,Док.ТекущийДокумент()); Тут делается полный перебор реквизитов и переброска их из КонтекстФормы в новый документ ДокНа в процедуре ОбработатьФорму(КонтекстФормы,Вид). Это фактически тоже самое, даже немного сложнее чем в (2). |
|||
15
Ёпрст
22.03.13
✎
08:39
|
(14) та ну ?!
|
|||
16
Ёпрст
22.03.13
✎
08:39
|
там именно то, что тебе нужно - штатный вызов ВВодНаОсновании
|
|||
17
Ёпрст
22.03.13
✎
08:40
|
и заполнение всех реквизитов формы.
|
|||
18
ketonija
22.03.13
✎
18:57
|
В конце концов чтоб не терять время я (2) дополнил кодом из ВВодНаОсновании что в модуле формы документа Счет, а от метода ОткрытьФорму("Документ.Счет", Конт, ТекущийДокумент()); отказался.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |