Имя: Пароль:
1C
1C 7.7
v7: Автоматическое обновление в ТЗ на форме.
0 vova1122
 
08.07.16
09:58
Сначала опишу ситуацию.
Есть документ (Товар в ремонте). В нем реквизит "СтанРемонта" Тип "Число" (1- Принят, 2- передан в СЦ, 3- Заказано запчасти, 4 - выполнен, 5- выдан клиенту). И так как в журнале все вперемешку я сделал Отчет. Поместил на форму ТаблицуЗначений. Установил флажки, для выбора документы с каким статусом показывать. Повесил на каждый флажок процедуру ПересчитатьТЗ(). Это все красиво работает.

А теперь о проблеме. Чтобы вообще исключить работу в журнале этого документа, а только в отчете, я добавил кнопку создания нового документа в этом отчете. Документ создается но в ТЗ он не появляется до тех пор пока не ПересчитатьТЗ(). Что логично.
Можно как то реализовать чтобы после создания нового документа в отчете запускался автоматически ПересчитатьТЗ()?

И еще вопрос. Можно ли выводить Данные в ТЗ в несколько строк как в ЖурналеДокумментов?
1 Builder
 
08.07.16
10:19
Повесь на форму пустой текстовый реквизит, у него в формуле пропиши вызов своей процедуры обновления, например ОбновитьМоюТаблицу()
Она будет запускаться каждый раз при обновлении формы.
Что бы запускалась только при создании документа, сделай флаг и проверяй его.
Ну или вызвать обновление после создания документа, хотя непонятно как ты его создаешь.

В таблице вроде нельзя выводить в несколько строк, не встречал такого.
2 vova1122
 
08.07.16
10:59
открываю форму документа через "ОткрытьФорму" (на кнопке повесил формулу ОткрытьФорму(Документ.ТоварВРемонте).
Как вызывать обновление после создания документа?
3 oslokot
 
08.07.16
11:02
(2) создания или записи? при создании документа его еще нет в БД
4 vova1122
 
08.07.16
11:13
Извиняюсь. Конешно нужно после записи
5 Это_mike
 
08.07.16
11:14
(0) Прикинь, в журналах тоже можно отбирать.
(2) ну как вариант, передавай в создаваемый документ контекст обработки.
а при событиях в документе, требующими реакции твоей обработки - открывай обработку с параметром этого документа, ну и соотвественно внутри формы обработки обрабатывай это дело в ПриОткрытии() или ПриПовторномОткрытии()
6 Это_mike
 
08.07.16
11:15
Ну, или возьми ТП и сделай свой журнал, с отборами и санитарками...
7 vova1122
 
08.07.16
11:18
В журнале не прокатит. (Нужно отобрать одновременно по нескольким значениям одного и того же реквизита (например отобразить СтанРемонта = 1 и 3 и 4))
8 vova1122
 
08.07.16
11:20
ТП есть в семерке?  Я далек от этого.  
А про передачу контекста можно подробнее? ТЗ в обработке должна обновиться после записи докуммента
9 Это_mike
 
08.07.16
11:22
(7) ну, если количество вариантов конечно - можно извратиться.
(8) у приличных людей - ТП есть.
подробнее - так в (5) написано достаочно подробно. код писать я не буду
10 vova1122
 
08.07.16
11:26
Код не прошу. Только поясните  в каком месте в документе прописывать? в ПриЗаписи?
11 Builder
 
08.07.16
11:34
Как вариант проверять КонтекстФормы. Если изменился со 100 на 0 - обновить.
ОткрытьФорму(<ОписательОбъекта>,<КонтекстФормы>,<ДокументОснование>)
Пока форма открыта, тип значения параметра <КонтекстФормы> равен 100, когда закрыта - 0.
12 Это_mike
 
08.07.16
11:38
(10) так я ж написал - "при событиях в документе, требующими реакции твоей обработки" Если хочешь, чтоб она при записи реагировала - ставь в ПриЗаписи (только оно вызывается _до_ записи), можешь при закрытии, можешь хоть каждый тык на клавишу обрабатывать
13 Это_mike
 
08.07.16
11:38
(11) по таймеру, чтоль? фи...
14 Builder
 
08.07.16
11:41
(13) Зачем по таймеру? В той же процедуре обновления на форме, например.
Хотя изврат еще тот.... :)
Самый простой способ - ОткрытьФормуМодально()
Тогда точно можно отследить ее закрытие.
Но устроит ли это ТС ?
15 Это_mike
 
08.07.16
11:43
(14) да есть 100500 видов решений всяких.
Хоть через генерацию внешнего события. или фабрику событий
16 vova1122
 
08.07.16
11:44
Высших материй не предлагать...
17 vova1122
 
08.07.16
12:33
Оказалось все намного проще.
В документе на стандартную Кнопку "ОК" Повесил свою процедуру записи
[code]         Записать();
             ОткрытьФорму("Отчет.Ремонты");
        Форма.Закрыть();[/code]

А в отчете написал следующий код
[code]Процедура ПриПовторномОткрытии()
Обновить();  // пересчет ТЗ
КонецПроцедуры[/code]
18 vova1122
 
08.07.16
12:52
а теперь возник другой вопрос.....
Все это работает отлично только для одного пользователя. Если отчет открыт в двух и более пользователей, то второй пользователь увидит новые документы только после того как у себя нажмет "Обновить" или также создаст новый документ.
Но думаю эту проблему уже простым путем не решить.....
19 Это_mike
 
08.07.16
13:04
(18) считай количество гомнодокументов за сегодня, и если не совпоает с предыдущим - обновляй.
млять, ну ведь спрашивать на форуме дольше, чем подумать и сделать...
20 vova1122
 
08.07.16
14:15
А когда именно считать? каждые 5 сек?
21 Это_mike
 
08.07.16
14:16
(20) по вкусу.
22 Это_mike
 
08.07.16
14:16
у тебя ж есть какой-то бизнес-процесс. вот п нему и ориентируйся...
23 vova1122
 
08.07.16
14:20
И где эту считалку прикрутить?
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший