Имя: Пароль:
1C
1C 7.7
v7: Как закрыть документ при проведении (т.е. из модуля дока) до открытия другого до
,
0 mirvel
 
25.10.11
13:54
Надо успеть при проведении закрыть док№1 перед тем как создастья док№2, который изменяет док№1.
1 mirvel
 
25.10.11
13:54
:) не смеейтесь
2 mirvel
 
25.10.11
13:54
самому смешно
3 Попытка1С
 
25.10.11
13:55
Успеть мышкой? Рекомендую игру мархуны, развивает.
4 mirvel
 
25.10.11
13:55
и помните что проведение срабатывает позже чем записывание дока!!! поэтому писать надо в модуле дока!!а не в модуле формы дока
5 Гектор
 
25.10.11
13:56
док.закрыть();
6 mirvel
 
25.10.11
13:56
(3) мышка не пойдет все программно создается
7 mirvel
 
25.10.11
13:56
(5) расмешил
8 Virusaka
 
25.10.11
13:57
(0) Телепаты подключайтесь
Объясни нормально, что ты хочешь получить/сделать.
9 mirvel
 
25.10.11
13:57
(8) начинаю
10 mirvel
 
25.10.11
13:59
короче такая ситуация.....

была такая ситуация нормальная....

в док№1 на кнопку создается док№2, который пользователем закрывается и при записи изменяетя док№1 а точнее в нем пишем, что реквизит1=док№2
11 Ёпрст
 
25.10.11
14:00
(10) глввестисчетфактуру в типовом ТиС\комплексной
12 mirvel
 
25.10.11
14:03
реквизит1 влияет на статус документа!!
а при проведении этот статус зависит от этого и других реквизитов....
вот этот статус должен быть использован в док№2...
Поэтому я переместил функцию создания док2 из кнопку а в конецпроведения....
и теперь сделал чтобы док№2 создавался без октрытия...
но так как док№1 еще открыт док№2 не может править док№1
13 mirvel
 
25.10.11
14:04
(11) А КОД НЕ СКИНЕШЬ...РЯДОМ КОНФЫ НЕТУ ТАКОЙ
14 mirvel
 
25.10.11
14:04
или мдшник
15 mirvel
 
25.10.11
14:05
(11) или объясни на словах как они вышли из ситуации?
16 Virusaka
 
25.10.11
14:16
(12) Что то у вас с постановкой задачи не то)

Док1 создает док2 и записывает его в свой реквизит, который меняет другие реквизиты док1, которые в свою очередь влияют на док2....

Какое то зацикливание :(
17 Virusaka
 
25.10.11
14:18
(12) Переносить создание документа в процедуру проведения, по моему, плохая идея.
Не лучше оставить на кнопке, но перед созданием документа док2 изменить реквизиты док1, которые будут использованы в док2? %)
18 mirvel
 
25.10.11
14:18
(12)...поэтому то и зацикливание потому что форму дока№! не могу закрыть

щас я подробно опишу ситуацию...
19 mirvel
 
25.10.11
14:19
(17) я бы с радостью....но при проведении на данный момент куча проверочного кода которые меняют реквизиты....и поэтому до провведения при записи нельзя отправить верные данные!
20 mirvel
 
25.10.11
14:19
придеться все переписывать...я хочу попробывать закрыть заранее док
21 mirvel
 
25.10.11
14:25
И так имеем документ заявка, доставка
создается заявка если стоит галочка доставка и при других условиях создается автоматом документ доставка...документ доставка при записи выгружает данные в мускул на сайт для водителей...

заявка имееет различные статусы: оформлена, , принята на сборку, готова к сборке, собрана, готова к доставке,  доставлена.

статус заявки зависят от того есть ли в реквизатах заявки заполнененные поля документами: расходная накладная, Акт-Сборка, Доставка и других....

при создании расходной из заявки, создается расходная, и в заявке заполняется поле расходная
акт сборка тоже также создается из заявки при нажатию на кнопку формы, и также акт-сборка при записи меняет реквизит заявки, т.е отмечает что поле докакт-сборка=заполненТЕкущимдокументомАктСборки

т.е. все выше созданные доки спокойно меняют реквизиты из которых были созданы...потому что перед записью документ заявка предварительно закрывается


теперь возникает такая проблема...
если создание документа доставка вставить не в модуль формы документа а в обработкупроведения...то не возможно закрыть эту самый документ...чтобы документ который создался а именно доставка, смог бы изменить поле "докдоставка"....


Почему в конецобработкупроведения приходитсья вставлять ОткрытьФорму("новыйдокумент");
потому что у заявки меняется статус припроведении!!!!
22 Escander
 
25.10.11
14:31
(0) в обработке проведения:
1.находишь корректируемый (типа как зависимый документ).
2.Втыкаешь в него все правильные данные.
3. открываешь форму документа и передаёшь какие-то параметры (ну пусть список с элементами "рассчитать","провести","закрыть").

В "зависимом" документе в процедуре при открытии смотришь на параметры (Форма.Параметр) и если это список и есть у него нужные команды то:
1.вызываешь всякие внутренние расчёты - если необходимо.
2.вызываешь метод провести()
3.Закрываешь документ...

Хороший стиль программирования предполпгает что результат успешного выполнения этапа 2 будет обратно возвращён через апраметр и проанализирован со стороны "главного" документа.

Ферштейн?
23 Erhov_egor
 
25.10.11
14:31
(0)ПриЗаписи()
получаешь последний документ(номердок-1),если он не равен 1,    IsClosed=0;ReadOnly=1;
24 mirvel
 
25.10.11
14:43
(22) "хороший" стиль программирование был заложен ранее...
такой вариант не подходит, так так после возвращения параметра в главный документ он опять должен будет перепровестись, чтобы изменить статус...а это уже зацикливание....
этот вариант отпал в начале пути
25 Virusaka
 
25.10.11
15:00
(24) При поставленных условиях - ответ на вопрос - никак.

Возможно как то можно решить с помощью

Книга знаний: Асинхронные события 1С: полезные алгоритмы
26 mirvel
 
25.10.11
15:03
я только хотел узнать можно ли закрыть форму документа из обработкипроведения....
и получил однозначный ответ = Невозможно!
если это так...то я тольк это хотел услышать....
27 Virusaka
 
25.10.11
15:14
(26) Я бы всё таки остановился на варианте "кнопка в форме".
При нажатии создавал и записывал пустой документ2, чтобы получить его ссылку, эту ссылку записывал в реквизит1 и инициировал проведение документа.
После проведения - запускал создание документа2.
Как то так.
Естественно, я вижу задачу по своему и тому кто "варится" в ней некоторые вещи видятся по другому.
28 Virusaka
 
25.10.11
15:16
(26) *Создание документа2 = заполнение документа2
29 Lepochkin
 
25.10.11
15:27
Формекс ПослеЗакрытия() не прокатит?
30 Escander
 
25.10.11
18:05
(24) не вижу проблемы! Нужно что-то вытянуть из подчинённых и запихать в главный документ до проведения главного? Воткни код первыми строками ОбработкаПроведения() главного документа.

Что не так-то?
31 FN
 
25.10.11
18:15
Если уж сильно хочется то можно так

Док1:
Процедура ОбработкаПроведения()
...
ОткрытьФорму("Обработка.СозданиеСлужебныхДокументов",ТекущийДокумент());
КонецПроцедуры

Обработка:


Перем Док1;
Процедура ПриОткрытии
Форма.ОбработкаОжидания("Выполнить",1);
Док1=Форма.Параметр;
КонецПроцедуры


Процедура Выполнить()
СоздатьДокумент2();
ПровестиДокумент1();
ПровестиДокумент2();
УдалитьВсеДоки();
ВсеЧтоДушаПожелает_ДокиУжеРазблокированы();
Форма.Закрыть();
КонецПроцедуры
32 FN
 
25.10.11
18:17
(31)+На форме обработки красивую надпись "Идет обработка данных..." и тп
33 Escander
 
25.10.11
20:08
(31) Я не это предлагал?
34 FN
 
25.10.11
21:48
(33) если ты про (22), то это в корне разный подход. В твоем случае происходит типа вложенная транзакция - потом можно нехилых глюков наловить. Хотя  (31) - тоже не айс...
35 Escander
 
26.10.11
05:30
(34) а ну  да есть разница, у мну производятся всякие внутренние операции внутри документа.

Ну так и сама задача не айс, чего уж тут говорить... но иногда приходится
36 Erhov_egor
 
26.10.11
05:59
(0)я так понял что тебе перед созданием 2 дока нужно закрыть 1 док,делай призаписи(),т.к. пользователя может создать док и не записать а просто отменить создание дока+(23)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан