Last active
February 17, 2026 08:40
-
-
Save AlexandrDragunkin/18df80183dbacef576295f24d8f04493 to your computer and use it in GitHub Desktop.
Macro for editing a component from the order scene in the K3Mebel environment
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 16.02.2026 | |
| // //*************************************************** | |
| // | |
| // 2026 Александр Драгункин | |
| // | |
| //****************************************************** | |
| // Открыть модель комплектующего для редактирования | |
| // Получаем имя текущего проекта | |
| projname=sysvar(2); | |
| isORD=1; | |
| gosub isOrder; // Проверить является ли текущий проект заказом | |
| // Если проект является заказом, сохраняем его | |
| if isORD { | |
| saveOrder; //CloseOrder; //-- Записываем проект | |
| } | |
| else | |
| { | |
| save all projname [ overwrite ]; // Сохраняем проект с перезаписью | |
| } | |
| switch autosingle on; // Включаем режим одиночного выбора | |
| onerror end; // Устанавливаем переход к метке end при ошибке | |
| // Выбираем объекты с атрибутами FURNTYPE, начинающимися с "04", "06" или "02" | |
| SelbyAttr "(left(FURNTYPE,2)==\"04\")||(left(FURNTYPE,2)==\"06\")||(left(FURNTYPE,2)==\"02\")" partly : | |
| n=sysvar(61) // Получаем количество выбранных объектов | |
| if n==0 // Если объекты не выбраны | |
| { | |
| goto end ; // Переходим к завершению | |
| } | |
| comobj=getselnum(1); // Получаем ссылку на первый (единсвенный) выбранный объект | |
| IdAcces=GetAttr(comobj,"priceid",0); // Получаем ID в справочнике номенклатуры для доступа к свойствам объекта | |
| if IdAcces==0 // Если ID равен 0 | |
| { | |
| goto end ; // Переходим к завершению | |
| } | |
| nmFile=priceinfo(IdAcces,"K3File",""); // Получаем имя файла K3 из прайса | |
| // Формируем путь к файлу комплектующего | |
| comFile=MPathExpand("<userk3Files>")+"\\"+nmFile; | |
| if !FolderExist(GetFilePAth(comFile)) // Если папка пользователя не существует | |
| { | |
| comFile=MPathExpand("<k3Files>")+"\\"+nmFile; // Используем системную папку | |
| } | |
| else | |
| { | |
| if !FileExist(comFile) // Если файл не существует в пользовательской папке | |
| { | |
| comFile=MPathExpand("<k3Files>")+"\\"+nmFile; // Используем системную папку | |
| } | |
| } | |
| SaveUpdate; // Сохраняем изменения | |
| Open comFile; // Открываем файл комплектующего | |
| switch autosingle off; // Отключаем режим одиночного выбора | |
| exit; // Завершаем выполнение | |
| end: | |
| offerror; // Отключаем обработку ошибок | |
| if isORD { loadorder last; } // Если проект был заказом, загружаем последний заказ | |
| else { open projname;} // Иначе открываем проект | |
| switch autosingle off; // Отключаем режим одиночного выбора | |
| exit; // Завершаем выполнение | |
| //================================================================================ | |
| isOrder: | |
| // Проверить является ли текущий проект заказом | |
| <?python | |
| # -*- coding: cp1251 -*- | |
| import k3 | |
| import os | |
| import time | |
| import traceback | |
| params = [] | |
| params.append(k3.Var("isORD")) | |
| def isorder(params): | |
| ''' | |
| Возвращает информацию о текущем состоянии сцены. | |
| + 0 - текущее состояние ФАЙЛ | |
| + 1 - текущее состояние ЗАКАЗ | |
| ''' | |
| try: | |
| curfile = k3.sysvar(2) # Получаем имя текущего файла | |
| basedate = 0 | |
| if curfile[-2:] == 'k3': # Проверяем, что файл имеет расширение .k3 | |
| if k3.fileexist(curfile) == 1: # Проверяем существование файла | |
| basedate = os.stat(curfile).st_mtime # Получаем время модификации файла | |
| bx = k3.box(0, 0, 0, 1, 1, 1) # Создаем временный объект | |
| k3.delete(bx, k3.k_done) # Удаляем временный объект | |
| time.sleep(0.1) # Делаем паузу | |
| k3.saveorder(0) # Сохраняем заказ | |
| curdate = os.stat(curfile).st_mtime # Получаем новое время модификации файла | |
| if basedate != curdate: # Сравниваем времена модификации | |
| params[0].value = 1.0 # Если время изменилось, это заказ | |
| else : | |
| params[0].value = 0.0 # Если время не изменилось, это файл | |
| else: | |
| params[0].value = 0.0 # Если файл не .k3, это файл | |
| except: | |
| traceback.print_exc() | |
| raise BaseException('При выполнении ISORDER возникли ошибки!') | |
| isorder(params) | |
| ?> | |
| return; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment