Тема: Макрос в макросе

При переходе от 4.7 к 5.7.
Наши макросы перестали работать.
Сообщение:
"Не могу выполнить макрос, пока выполняется другой макрос!"
Нельзя ли разрешить такой запуск?

(изменено: Светлаков Кирилл, 16 июня 2010 08:15:54)

Re: Макрос в макросе

Олег пишет:

При переходе от 4.7 к 5.7.
Наши макросы перестали работать.
Сообщение:
"Не могу выполнить макрос, пока выполняется другой макрос!"
Нельзя ли разрешить такой запуск?

Данное ограничение будет снято в следующей версии.

Re: Макрос в макросе

При переходе от 4.7 к 5.7.

Прошу прощения, но такое ограничение существовало всегда. Может быть что то еще вы полменяли?

Re: Макрос в макросе

Олег Зырянов пишет:

При переходе от 4.7 к 5.7.

Прошу прощения, но такое ограничение существовало всегда. Может быть что то еще вы полменяли?

Данный макрос был разработан сотрудниками CSoft. Работник, который запускал данный макрос утверждает, что все работало.

Re: Макрос в макросе

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

Re: Макрос в макросе

Хм, может быть вы и правы. Действительно в 5.7 такое ограничение было введено, так как повторный вызов в прошлых версиях вызывал много ошибок, вплоть до перезапуска TechnologiCS (правда это от макроса зависело), и в процессе переделок его просто запретили.

Подумаем как быть.

Re: Макрос в макросе

А про какой наш макрос идет речь кстати?

Re: Макрос в макросе

Ввод новой документации (Техпроцесс)
Добавляем материал. А при ее отсутствии запускаем...

Re: Макрос в макросе

Присоединюсь к дискуссии.

Итак, что касается возможности запуска макроса из макроса, тут Олег Зырянов, естественно, прав - небезопасно это. Много раз на проектах сталкивались с тем, что подобные механизмы приводили к серьезным сбоям. Поэтому, начиная с TechnologiCS 5 версии эту возможность закрыли. 
Даже Ваш пользователь сам признается, что в конце работы второго макроса, запущенного из-под первого, модальное окно становилось серым, что неправильно.

Что касается конкретно макроса "Ввод новой документации (Техпроцесс)". Если я правильно помню, то по цепочке управляющих документов этот макрос находил нужную версию ТП, которую открывал в новом (модальном) окне, и в котором  нужно было, используя стандартные инструменты, добавить в ТП ссылку на материал из справочника. Эта логика предусматривалась и в регламенте работ, и в инструкциях.
Собственно, когда мы писали этот макрос, мы предполагали, что при работе с ТП пользователь никакие дополнительные макросы с панели инструментов запускать не будет, а будет пользоваться только стандартными функциями TechnologiCS. Поэтому подобный вариант даже не тестировали, пользователям его не показывали. То есть тут человек что называется сам нашел дополнительные возможности.

Как эту возможность можно реализовать в новых условиях. Первое, что приходит на ум - добавить возможность вызова этого макроса внутрь макроса "Ввод новой документации (Техпроцесс)". Там ведь целый каскад макросов запускается, прежде чем появляется ТП: вначале запускается сам макрос "Ввод новой документации (Техпроцесс)", макрос формирует перечень возможных действий (каждое из которых по сути является самостоятельным макросом), пользователь выбирает действие "редактировать ТП", у него появляется новое окно с перечнем деталей, которые проходят по текущему документу ИИ0, в этом перечне пользователь позиционируется на конкретной детали, запускает действие "редактировать ТП" (это еще один "вложенный" макрос) и только потом пользователь получал модальное окно с ТП, где он пытался через панель инструментов запустить еще один макрос (не предусмотренный изначальной логикой).
То есть получается структура из 3 уровней макросов. Но поскольку в каждом из них прописана возможность вызова других макросов, то все работает. Получается, что возможность вызова макроса "добавить новый материал в справочник" надо прописать на одном из уровней этой структуры макросов. На каком - решать Вам вместе с пользователем. Как ему будет удобнее.

В качестве послесловия: вообще процедура создания нового материала в справочнике, на Вашем предприятии представляет отдельный самостоятельный процесс, на который есть свой регламент и инструкция. Так как там целый комплекс действий нужно сделать - добавить материал в справочник; оповестить ИВЦ, что появился новый материал; получить от ИВЦ код материала; добавить этот код к созданной позиции в справочник.
Насколько я помню, именно так это выглядело.
Если добавлять новый материал в справочник в процессе работы с макросом "Ввод новой документации (техпроцесс)", есть вероятность, что пользователь забудет оповестить ИВЦ  о новом материале. И материал вовремя не получит соответствующий код.
Понятно, что потом это обнаружат, код присвоят, и все встанет на свои места. Но до этого момента может произойти выгрузка данных в BAAN, для которого эти коды важны, и в BAANe часть данных придется править вручную. Риск небольшой, но вполне реальный.
Поэтому прежде чем добавлять вызов макроса "добавить новый материал в справочник" внутрь макроса "ввод новой документации (ТП)", я бы еще подумал, насколько безопасно это для Вас.

Вывод из всего вышесказанного: давайте работать в четком соответствии с разработанными регламентами и инструкциями.

Re: Макрос в макросе

Боря, приежай к нам. Поговорим на данную тему. Покажу все, что перестало работать.

Re: Макрос в макросе

Я уже писал  выше

Хм, может быть вы и правы. Действительно в 5.7 такое ограничение было введено, так как повторный вызов в прошлых версиях вызывал много ошибок, вплоть до перезапуска TechnologiCS (правда это от макроса зависело), и в процессе переделок его просто запретили.

Подумаем как быть.

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

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