Заказ звонка

Закрыть

*
*
*

Удаление производственных

Страницы: 1 2 След.
RSS
Удаление производственных
Не плохо бы было как-то упростить удаление производственных. Например скрипт в режиме Список ПСп, запустил его и производственная полностью удалилась вместе с составом и прочим. Тяжко пользователей учить удалять производственные.
С уважением, Никифоров В.Н.
Цитата
Вячеслав Никифоров пишет:
скрипт в режиме Список ПСп, запустил его и производственная полностью удалилась вместе с составом и прочим

Нет проблем. Подписывайтесь на расширенную техподдержку. Нарисуем.
Условия - по почте.
Ну, за такие вещи, которые должны быть изначально, денег брать не стоит.
Попробуйте моим кодом. Он простой, но для моих нужд хватает... да и комментариев добавил - разобраться будет не сложно.

Код
Sub FormMacro_Looper(TCSActiveModule) 'Удалить ПСП

Do While j < TCSActiveModule.SelectedRowsCount' пока есть ещё выделення номенклатура, то
    If TCSActiveModule.GotoSelectedRow(j) = True Then' встаём на выделенную номенклатуру 
    Call TCSApp.ShowProgressMessage( "Выполняется удаление ПСП", CStr((j*100)\TCSActiveModule.SelectedRowsCount)&" %" ) 
    Set Prop = TCSActiveModule.Properties("ProductionBOMList").AsIDispatch'Залазим в Перечень ПСП
    Prop.First'Становимся на первую запись
    Do While Not Prop.EOF  'И крутим до последней
    Call Prop.DeleteRecord( False ) 'Удаляем запись
    Prop.Refresh 'Обновляем записи
    Prop.Next 'Переходим к следующей
    Loop               
    Call TCSActiveModule.DeleteRecord( False ) 'Удаляем сам ПСП
    j = j+1
End If    
Loop       

TCSActiveModule.Refresh  'Обновляем список ПСП
Call TCSApp.HideProgressMessage 'Скрываем все сообщения 
End Sub

Изменено: Ruch - 11.02.2011 19:15:19
Ruch,
Спасибо большое, все вроде работает. Единственное добавил туда еще запрос-подтверждение, а то пользователи любят запускать того-чего не надо.

Код
If (TCSApp.MessageBoxAskOkCancel ("Удаление ПСП", "Точно хотите удалить ПСП безвозвратно?", 1, True)=1) Then
..........
end if
Изменено: Вячеслав Никифоров - 14.02.2011 07:43:44
С уважением, Никифоров В.Н.
smile:idea: Андрей (Ruch) и Вячеслав, пока наград у нас на форуме не предусмотрено, получите "спасибо от разработчиков" в текстовом виде. Нас очень радует, когда пользователи делятся друг с другом своим опытом.

PS:
Цитата
Ruch пишет:
должны быть изначально
А тут как в поговорке - на вкус и цвет все фломастеры разные.. smile:|
ПСп удаляются? Да! А уж со вкусностями "изначально" на всех не угодишь. Для этого API и прикручено smile;)
Цитата
Павел Алексеев пишет:
А тут как в поговорке - на вкус и цвет все фломастеры разные.. smile:| ПСп удаляются? Да! А уж со вкусностями "изначально" на всех не угодишь. Для этого API и прикручено smile;)


ИМХО в программе должны быть реализованы стандартные функции такие, как создание, удаление и перенос записи. В TCS, к сожалению, удалять приходится с помощью самопальных граблей: что бы удалить номенклатурную позицию приходится проверять вхождение этой позиции в спецификацию, итоговую спецификацию, ПСП, в техпроцессы, была ли она в сдачах, есть ли параметры у этой номенклатуры и т.д. А вот перенести в другой класс вообще невозможно smile:(

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

Код
Sub FormMacro_Looper(TCSActiveModule) 'Циклический перебор

Do While j < TCSActiveModule.SelectedRowsCount' пока есть ещё выделення номенклатура, то
    If TCSActiveModule.GotoSelectedRow(j) = True Then' встаём на выделенную номенклатуру 
    Call TCSApp.ShowProgressMessage( "Выполняется удаление ПСП", CStr((j*100)\TCSActiveModule.SelectedRowsCount)&" %" ) 
    If TCSActiveModule.Properties("STATE").AsInteger <> 1 Then   'Если состояние ПСП не допускает редактирования
        Call TCSActiveModule.CancelChanges
        Call TCSActiveModule.Edit    
        TCSActiveModule.Properties("STATE").Value = 1'Делаем статус "Разработка"
        Call TCSActiveModule.SaveChanges   
        Call TCSActiveModule.CancelChanges
    End If    
    If TCSActiveModule.Properties("OrderId").AsInteger <> "" Then 'Если ПСП привязана к заказу то будем отвязывать
        Set Ord = TCSApp.Manufacturing.Orders 'Переходим в заказы
        If Ord.Locate("ID",TCSActiveModule.Properties("OrderId").AsInteger,0) Then 'Ищем нужный нам заказ 
            Set PSP = Ord.Properties("ProductionBOMs").AsIDispatch 'Переходим в привязанные ПСП
            If PSP.Locate("PRODUCTIONBOM_ID",TCSActiveModule.Properties("ID").AsInteger,0) Then 'Находим наш ПСП   
                Call PSP.DeleteRecord( False )'Удаляем его
            End If 
            Set PSP = Nothing   
        End If
        Set Ord = Nothing
    End If       
   
    Set Prop = TCSActiveModule.Properties("ProductionBOMList").AsIDispatch'Залазим в Перечень ПСП
    Prop.First X 'Становимся на первую запись
    Do While Not Prop.EOF 'И крутим до последней
    Call Prop.DeleteRecord( False) 'Удаляем запись
    Prop.Refresh X 'Обновляем записи
    Prop.Next X 'Переходим к следующей
    Loop               
    Call TCSActiveModule.DeleteRecord( False )'Удаляем сам ПСП
    j = j+1
End If    
Loop       

TCSActiveModule.Refresh X 'Обновляем список ПСП
Call TCSApp.HideProgressMessage X 'Скрываем все сообщения 
End Sub

В строчке
Код
If TCSActiveModule.Properties("OrderId").AsInteger <> "" Then 'Если ПСП привязана к заказу то будем отвязывать
ошибка, вот исправления:
Код
If TCSActiveModule.Properties("OrderId").AsSafeInteger <> 0 Then 'Если ПСП привязана к заказу то будем отвязывать
С уважением, Никифоров В.Н.
Цитата
Вячеслав Никифоров пишет:
В строчке
Код
If TCSActiveModule.Properties("OrderId").AsInteger <> "" Then 'Если ПСП привязана к заказу то будем отвязывать
ошибка, вот исправления:

Код
If TCSActiveModule.Properties("OrderId").AsSafeInteger <> 0 Then 'Если ПСП привязана к заказу то будем отвязывать


Может быть... писал на скорую руку... не тестил еще.
Цитата
Ruch пишет:
ИМХО в программе должны быть реализованы стандартные функции такие, как создание, удаление и перенос записи.В TCS, к сожалению, удалять приходится с помощью самопальных граблей: что бы удалить номенклатурную позицию приходится проверять вхождение этой позиции в спецификацию, итоговую спецификацию, ПСП, в техпроцессы, была ли она в сдачах, есть ли параметры у этой номенклатуры и т.д.


Как вы себе это представляете (в вашем примере с номенклатурой)? Т.е. должно быть как-то так - стою я в номенклатуре, жму Удалить. И при этом автоматически:

- сносятся из базы все версии спецификаций этой номенклатуры, включая все параметры позиций, привязанные документы и т.д., независимо от того, кто их, когда и зачем делал;
- аналогично, без вопросов, удаляются все созданные кем-либо, когда-либо для этой позиции версии ТП (включая привязанные файлы, документы и т.д.?);
- удаляются все параметры этой номенклатуры;

ну это ещё цветочки... вот дальше начинается самое веселье!

- внезапно меняются спецификации куда эта номенклатура входит - она исчезает оттуда;
- аналогично, если она была где-то в других ТП, она неожиданно оттуда пропадает;
- из производственных спецификаций исчезают целые куски - сама эта номерклатура, её состав, техпроцессы связанные с ней и с входящими в неё компонентами;
- что происходит в режиме план производства сложно даже описать: из самых разных мест и периодов пропадает номенклатура из плана (причём не только та, которую удаляли, а ещё и куча другой), исчезают работы из плана вместе с датами, станками, работниками и т.п. (причём, возможно, десятками и сотнями), пропадают (удаляются?) партии запуска, меняется содержимое производственных партий (некоторые из них неожиданно могут стать пустыми), уже закрытые наряды пропадают, исчезает оформленный брак, неожиданно изменяется выработка работников за предыдущие периоды и т.д. не говоря уже о таких мелочах как параметры фактической сдачи и т.п.
- само по себе изменяется содержимое складских докуметов (в т.ч. давно проведённых), например, исчезают отдельные строчки из накладных, ордеров, требований и т.д.;
- неожиданно изменяются остатки на складах, как в суммовом, так и в количественном выражении, меняются обороты по прошлым периодам;
- удаляюся напрочь складские карточки, партии, параметры партий, связанные документы вся история движения;
- и т.д. ...

Т.е. нажимаю я кнопку Удалить в номенклатуре.... Рраз - и все пользователи неожиданно видят совсем другую базу данных smile:)

А представляете, какая красота будет, если несколько пользователей одновременно работают? smile:) Тут нужно держать ухо востро... Никогда нельзя быть уверенным, что то, что ты сейчас вводишь в программу, через секунду-другую не исчезнет навсегда, т.к. каким-то боком относилось к тому, что кто-то другой удалил. Надо быть настороже! smile:)

А если серьёзно, то функция Удалить то стандартная как раз есть! И она работает. Просто работает она, когда можно удалить запись. А если позиция где-то задействована, то наверное, логично, сначала всё таки определиться что делать с теми местами где её кто-то, зачем-то использовал, а уж потом удалять...
Цитата
Константин Чилингаров пишет:
Как вы себе это представляете (в вашем примере с номенклатурой)? Т.е. должно быть как-то так - стою я в номенклатуре, жму Удалить. И при этом автоматически:


С удовольствием отвечу... надеясь на доработки в этом направлении. Итак приступим:
Цитата
Константин Чилингаров пишет:
- сносятся из базы все версии спецификаций этой номенклатуры, включая все параметры позиций, привязанные документы и т.д., независимо от того, кто их, когда и зачем делал;

При удалении номенклатурной позиции, по моему мнению, должно удаляться все, что в нее входит: параметры, спецификации, техпроцессы.

Цитата
Константин Чилингаров пишет:
- аналогично, без вопросов, удаляются все созданные кем-либо, когда-либо для этой позиции версии ТП (включая привязанные файлы, документы и т.д.?);


А зачем тогда нужны права доступа и состояния версий?

Цитата
Константин Чилингаров пишет:
- удаляются все параметры этой номенклатуры;


Да, черт побери... ДА!
Цитата
Константин Чилингаров пишет:
- внезапно меняются спецификации куда эта номенклатура входит - она исчезает оттуда; - аналогично, если она была где-то в других ТП, она неожиданно оттуда пропадает; - из производственных спецификаций исчезают целые куски - сама эта номерклатура, её состав, техпроцессы связанные с ней и с входящими в неё компонентами; - что происходит в режиме план производства сложно даже описать: из самых разных мест и периодов пропадает номенклатура из плана (причём не только та, которую удаляли, а ещё и куча другой), исчезают работы из плана вместе с датами, станками, работниками и т.п. (причём, возможно, десятками и сотнями), пропадают (удаляются?) партии запуска, меняется содержимое производственных партий (некоторые из них неожиданно могут стать пустыми), уже закрытые наряды пропадают, исчезает оформленный брак, неожиданно изменяется выработка работников за предыдущие периоды и т.д. не говоря уже о таких мелочах как параметры фактической сдачи и т.п. - само по себе изменяется содержимое складских докуметов (в т.ч. давно проведённых), например, исчезают отдельные строчки из накладных, ордеров, требований и т.д.; - неожиданно изменяются остатки на складах, как в суммовом, так и в количественном выражении, меняются обороты по прошлым периодам; - удаляюся напрочь складские карточки, партии, параметры партий, связанные документы вся история движения; - и т.д. ...


Долго разбирать по строчкам, поэтому опишу полностью: если номенклатурная позиция связана (не входит, а именно связана), то должно быть предупреждение о том, куда она входит, а не вываливаться ошибка типа: SQL Server Error: Conversion failed when converting the varchar value 'sa' to data type int.
Exception. Master record missing. DELETE statement conflicted with COLUMN REFERENCE constraint "CONSTRAINT FK_N_ORDTREEDM_NMK ". The conflict occurred in database. Как из этого сообщения ОБЫЧНОМУ ПОЛЬЗОВАТЕЛЮ понять - почему не удаляется? Приходится использовать костыли, которые ищут вхождения в ПСП, расчетные и учетные документы и т.д. Почему нельзя сразу показать, почему невозможно удаление? Почему нельзя сообщить пользователю что-то типа: "Удаление невозможно, т.к. данная номенклатура используется в заказах ХХХ, YYY и расчетном документе ZZZ"?
Никто не говорит про красную кнопку, которая поломает всю базу. Разговор идет про упрощение каждодневных операций обычного пользователя и создания более дружелюбного интерфейса.
Страницы: 1 2 След.
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)