Skip to content

Instantly share code, notes, and snippets.

@AlexandrDragunkin
Last active February 17, 2026 08:40
Show Gist options
  • Select an option

  • Save AlexandrDragunkin/18df80183dbacef576295f24d8f04493 to your computer and use it in GitHub Desktop.

Select an option

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
// 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