Изменение цен на лицензии - С 01 июня 2025 г. изменятся цены на лицензии ПО VOGBIT

Последние темы на форумах VOGBIT

Тёмная тема - Прочее
Сергей: Здравствуйте! В этом окне сейчас нет настроек отображения. Цвет текста починим в новой версии. Если ещё где-то сталкиваетесь с подобным ...
Движение за период CurrentQuery - Отчёты
Сергей: Здравствуйте! Запрос в файле.
Сменный график - Общие вопросы
Константин Чилингаров: Да, список для выбора получится так поменьше. Но зато сначала то нужно будет ещё составить этот "список поменьше" из общего. Причем ...
Альтернативное обозначение отправочных марок - Отчёты
Константин Чилингаров: Здравствуйте,  Нужно в шаблоне отчёта поменять, чтобы вместо обозначения номенклатуры выводилось значение параметра этой номенклату ...
Пример создания плагина - Плагины
Константин Чилингаров: Не вижу смысла писать в таком случае свои "удалялки". Потеря времени. Проще и быстрее штатными функциями все поудалять в данном конк ...
Создание заказа на производство с учетом остатков/задела - Прочее
Константин Чилингаров: Здравствуйте, В современных версиях VOGBIT есть (где-то в прошлом году появилось впервые) "Автоматическое" заполнение (раззворачиван ...
Типовой технологический процесс - Состав и технология
Константин Чилингаров: Здравствуйте, Можно, например, создать стандартными средствами «Производственный заказ» (там как раз «разматывается» всё изделие по ...
График производства. Текущие работы - Производство
Sidneyanton: Спасибо за ответ, действительно не было связей, наверное при запуске стояла другая настройка последовательности.
Статистика - Производство
Алексей Пономарев: Благодарю за помощь все поправил.
Складской учет - Материалы, Комплектующие, Складской учёт
Константин Чилингаров: написал: Еще бы поиск допилить в обеспеченности по заказам, чтоб искал не только номер, но и материал Будет. В ближайшем обновлении, на ...
Предварительные заявки - Материалы, Комплектующие, Складской учёт
Константин Чилингаров: Здравствуйте, Я посмотрел Ваш ролик. Спасибо! Только с обновлением это, по-моему, никак не связано.   Давайте поясню один момент: ...
Новая документация "График производства" - Прочее
Константин Чилингаров: Движок форума не разрешает напрямую Excel файлы в сообщения вставлять. Ну ладно. Понятно, в общем, о чем речь. на будущее: если нужно Excel фа ...
Ошибка отчёта "Недостаточно памяти" - Отчёты
Константин Чилингаров: Тут ещё знаете, в чем может быть дело... Не в размере даже, а во внутренностях конкретного файла с картинкой. Ошибка может озвучиваться си ...
Дублирование приходных ордеров - Прочее
Константин Чилингаров: Здравствуйте, Очень странная картина... Не сталкивались никогда с таким. Копию базы данных можете дать нам посмотреть? Если есть техни ...
Распределение работ. Дискретность настройки - Прочее
Константин Чилингаров: Здравствуйте, В этом окне, насколько я помню, сохраняется только список "постов" выбранных. При закрытии/открытии окна. Порядок сл ...
«Шаблон техпроцесса» - Состав и технология
Sidneyanton: Спасибо, за подробное разъяснение!
VOGBIT Онлайн - Общие вопросы
Владимир Белов: написал: Добрый день! Такой вопрос. Могу я установить базу данных на съемный диск и пользоваться на разных компьютерах - переставляя то ...
Создание нового производственного задания - Производство
Константин Чилингаров: Здравствуйте, написал: еперь при создании заказа в окне "Производственные заказы" этот самый заказ "дублируется" в окне " ...
Вопрос на тему "Технология подробно" - Состав и технология
Zms.komissarov: Нужно открыть, какой-нибудь (из какого удобно печатать) вариант "подробного" графика производства, там выбрать соответствующую опе ...
Не отображается выпадающий список, а также неактивна кнопка "Импорт" - Ошибки в работе
Сергей: написал: Не отображается выпадающий список при нажатии на стрелочку Напишите на mailto:info@vogbit.ru info@vogbit.ru Попробуем починить

Пример создания плагина

Разработка приложений и функций - Плагины - Технические вопросы
Страницы: Пред. 1 2 3
Пример создания плагина
 
Здравствуйте!
Перетащите мышкой из "команд" (рис.3) в нужное место на панели инструментов
 
Здравствуйте! Пишу плагин. Есть вопросы по чтению и записи данных. К примеру, как получить список всех элементов номенклатуры (деталей), чтобы потом затолкать его в LookupEdit?
Изменено: Bochik_88 - 19.10.2024 18:14:27
 
Здравствуйте!
Код
var nmkDataSource = ExtensibleApplication.App.General.Nomenclature(-1, CatalogOptions.None);
 
Цитата
написал:
var nmkDataSource = ExtensibleApplication.App.General.Nomenclature(-1, CatalogOptions.None);

Данный метод возвращает один Nomenclature объект. Как мне из него получить "читабельный" список для отображения на форме?
 
С этим вопросом разобрался, спасибо)
 
Подскажите пожалуйста, как добавлять заказ в разделе "Производственные заказы"?
Ну и соответственно назначать состав и технологию этому заказу.

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

Здравствуйте,

Распишу по объектам в БД VOGBIT, что нужно по минимуму для такой задачи создавать в базе. Коллеги подскажут, если нужно, по коду, по тем моментам, которые, возможно, не ясны.

Для начала должна быть сама номенклатура (деталей, изделий), которую будем добавлять в производственный заказ.

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

Разберем по шагам.

Деталь – номенклатурная позиция.

Техпроцесс детали – коллекция компонентов, у которой Owner = номенклатура «Деталь». Тип связи коллекции нужно поставить LT_ManProcess (здесь и далее везде пишу для используемых типов связей, параметров, статусов их идентификаторы). Обозначение коллекции ставьте любое, какое хотите. Статус ставьте тоже любой какой нравится, только НЕ ST_Invalid. Любой другой. Например, ST_Designing.

Дальше добавляем в техпроцесс операции. Операция сама – это номенклатурная позиция. Находим нужную в справочнике и добавляем её, как компонент в коллекцию LT_ManProcess (техпроцесс детали). Тип связи компонента ставим LT_Operation. Количество и единицу измерения не заполняем для этого компонента, оставляем пустыми.

Дальше нужно для операции задать место выполнения и трудоемкость.

Место выполнения (участок), в принципе, у Вас может быть настроено в самом VOGBIT по умолчанию для «операции» в справочнике «Номенклатура». Тогда в техпроцессе уже указывать в явном виде его не нужно, при формировании заданий «подхватится» настроенный по умолчанию участок. Чтобы указать в явном виде для операции место выполнения в техпроцессе, находим в справочнике «Подразделения» нужный производственный участок и добавляем его к компоненту  LT_Operation (операции) в коллекции LT_ManProcess (в техпроцессе), как связанный объект с типом связи LT_Place.

Если вы используете пооперационное нормирование, то чтобы потом создались задания для производства, нужно ещё добавть хоть какую-нибудь «Трудоемкость» к операции. Для этого добавьте параметр T_OPR_HOUR (float) к компоненту LT_Operation (операции) в коллекции LT_ManProcess (в техпроцессе), значение = Тшт в часах.

Всё, по минимуму – достаточно.

Т.е. создаете номенклатуру деталей. К каждой детали коллекцию LT_ManProcess (техпроцесс), в неё добавляете нужные компоненты LT_Operation (операции), к каждому такому компоненту добавляете связанный объект LT_Place (подразделение, участок), и параметр T_OPR_HOUR (трудоемкость).

На этом то, что вставлять в «заказ» у нас есть.

Переходим к созданию и заполнению «Производственного заказа».

Создаёте номенклатурную позицию – «Заказ». Обозначение и наименование – по Вашему усмотрению.

Для этой номенклатурной позиции создаёте коллекцию компонентов LT_MAN_CHART (тех. карта заказа). Обозначение коллекции ставьте любое, какое нравится, статус ставьте ST_InWork (с любым другим её не будет видно в окне «Производственные заказы»).

В эту коллекцию LT_MAN_CHART добавляете из номенклатуры созданные нами ранее «Детали», как компоненты. Тип связи при этом можете использовать, в принципе, почти какой хотите, тут нет особых ограничений, но стандартно используется LT_Product (изделие). В некоторых случаях - LT_Part (деталь), LT_Assemble_Unit (сборочная единица). Обязательно поставьте для компонентов в коллекции LT_MAN_CHART (позиций в карте заказа) количество и единицы измерения (в подавляющем большинстве случаев ставится «шт»).

В принципе, вроде, всё. Таким образом у Вас получится заказ, тех. карта заказа, в ней детали с указанием количества, у деталей техпроцессы с операциями. Для того, чтобы «запустить в производство» по самому минимуму достаточно. А дальше уже можно этот «скелет» наращивать «мясом» по мере надобности, в зависимости от задачи.

P.S.

В заключении вставлю свои 5 копеек…

Для пользователей, у которых «каждый новый заказ – это новая номенклатура», но при этом само производство довольно простое, в современных версиях VOGBIT есть некоторое количество штатных, встроенных функций, которые довольно сильно зачастую облегчают жизнь простым пользователям, без необходимости прибегать к программированию. Например:

  • Штатная встроенная функция «загрузки» номенклатуры из Excel файла;

  • Функция создания номенклатуры «из списка файлов» - это для случаев, когда в качестве исходных данных по некоему «заказу» на входе у пользователя есть папка с какими-нибудь PDF с чертежами деталей или DXFс развертками и т.п. Есть в современном VOGBIT такая функция – взять мышкой эти файлы из папки и «перетащить» их в окно VOGBIT. И при этом создается в базе номенклатура с названием, как имя файла, и сами файлы сразу к ней прицепляются. Умеет эта штука даже «разбирать» сама название файла автоматически на «обозначение» и «наименование», но только для случаев, когда имена файлов составлены по принципу <обозначение_наименование> (или наоборот).

  • Если по содержанию техпроцесса много деталей в заказе ничем не отличаются, то необязательно в современном VOGBIT делать отдельный техпроцесс на каждую такую деталь. Можно сделать штатными средствами в базе один «техпроцесс-шаблон», а потом просто добавить (не создавая технологии для каждой отдельно) детали в состав производственного заказа, выделить там их все и сказать «делать все, вот по этому шаблону техпроцесса». И всё, можно сразу создавать задания для производства.

Вот эти вещи есть в VOGBIT (в последних версиях) уже готовые, "из коробки".

 
Доброго времени суток. Набросал код, три основных вопроса:
1. Правильные ли объекты я использую
2. Правильно ли добавляю компонент в коллекцию
3. В какой папке должна создаваться номенклатура заказа, которая будет потом видна во вкладке 'Производственные заказы'

           //--------------------------------------------
           var mainID = 157194;    // ID папки 'Основная'
           var ordersID = 555555;  // ID папки 'Заказы'
           var tokarkaID = 666666; // ID номенклатуры 'Токарка'

           // Создаем папку заказчика
           Folder newFolder = ExtApp.Application.General.Folders(mainID).AddNew();
           newFolder.Name.Value = "Роскосмос";
           newFolder.ParentID.Value = ordersID;
           newFolder.Save();
           // Создаем номенклатуру в этой папке
           var nmk = ExtApp.Application.General.Nomenclature(newFolder.ID.AsLongInt, CatalogOptions.None).AddNew();
           nmk.Notation.Value = "DRAW.001.01";
           nmk.Name.Value = "Фланец";
           nmk.Save();

           // Дальше не знаю, на ощупь писал
           ComponentCollection collection = new ComponentCollection();
           collection.LinkTypeNotation.Value = "LT_ManProcess";
           collection.StatusNotation.Value = "ST_Designing";
           collection.Notation.Value = "Техпроцесс";

           Components component = new Components();
           component.OwnerID.DefaultValue = collection.ID.AsLongInt; // Компонент в коллекцию так добавляется?
           component.LinkTypeNotation.DefaultValue = "LT_Operation";
           component.Params["T_OPR_HOUR "].Value = 1;
           component.SourceNomenclatureID.DefaultValue = tokarkaID;

           // Создаём номенклатуру заказа
           // Дальше ключевой вопрос - где создавать номенклатуру?
           var zkz = ExtApp.Application.General.Nomenclature(КАКОЙ ID СЮДА ПИСАТЬ?, CatalogOptions.None).AddNew();
           //--------------------------------------------
Изменено: Dsolovjev - 10.03.2025 14:58:49
 
Коллекция. На входе номенклатура для которой создаётся ТП:
Код
long CreateManProcess(long nmkId)
{
   var ccs = ExtensibleApplication.Application.General.ComponentCollections(nmkId);
   var cc = ccs.AddNew();
   try
   {
      cc.Notation.Value = "Техпроцесс";
      cc.LinkTypeID.Value = //сюда ID типа связи с UID = LT_ManProcess>
      cc.StatusID.Value = //сюда ID статуса
      cc.Save();
   }
   finally
   {
      cc.Cancel();
   }

   return cc.ID.AsLongInt;
}

Компонент. На входе Id ТП и Id номенклатуры операции (в вашем случае tokarkaID):

Код
long AddOperation(long collectionId, long compNmkId)
{
   var comps = ExtensibleApplication.Application.General.Components(collectionId);
   var comp = comps.AddNew();
   try
   {
      comp.NomenclatureID.Value = compNmkId;
      comp.LinkTypeID.Value = //сюда ID типа связи с UID = LT_Operation>
      comp.Save();
   }
   finally
   {
      comp.Cancel();
   }
}

Параметр:
Код
ObjectParameter AddObjectParameter(long objectId, long parameterId, object parameterValue)
{
   var objectParameters = Utils.App.General.ObjectParameters(objectId);
   var objParam = objectParameters.AddNew();
   try
   {
      objParam.ParameterID.Value = parameterId;
      objParam.ParameterValue.Value = parameterValue;
      objParam.Save();
   }
   finally
   {
      objParam.Cancel();
   }
   return objParam;
}

Цитата
написал:
var zkz = ExtApp.Application.General.Nomenclature(КАКОЙ ID СЮДА ПИСАТЬ?, CatalogOptions.None).AddNew();
ID папки в которую вы хотите положить номенклатуру. Программе без разницы. Если вам тоже, то можно -1 написать. В таком случае будет создаваться в корне.

 
Не может почему-то присвоить ID, из-за чего так может быть?


void ExampleButtonActionExecute(object sender, ActionExecuteEventArgs e)
       {
           // ID 157337  - LT_ManProcess
           // ID 157141  - LT_Operation
           // ID 157138  - LT_MAN_CHART
           // ID 157720  - LT_Part
           //
           // ID 157205  - ST_Designing
           // ID 157206  - ST_InWork
           //
           // ID 157325  - T_OPR_HOUR
           // ID 159751  - VGB_Quantity

           long nmkID = 227610; // ID нашей детали 'Фланец'
           long oprID = 203301; // ID операции 'Токарная'

           long manID = CreateManProcess(nmkID, 157337, 157205);
           long comID = AddComponent(manID, oprID, 157141);
           AddObjectParameter(comID, 157325, 1);

           var zkz = ExtApp.Application.General.Nomenclature(-1, CatalogOptions.None).AddNew();
           zkz.Notation.Value = "1863 Роскосмос - Фланец"; // Наименование заказа

           var zkz_manID = CreateManProcess(zkz.ID.AsLongInt, 157138, 157206);
           var zkz_comID = AddComponent(zkz_manID, nmkID, 157720);
           AddObjectParameter(zkz_comID, 159751, 1);
       }


       long CreateManProcess(long nmkId, long linkID, long statusID)
       {
           var cc = ExtApp.Application.General.ComponentCollections(nmkId).AddNew();
           try
           {
               cc.Notation.Value = "Техпроцесс";
               cc.LinkTypeID.Value = linkID;
               cc.StatusID.Value = statusID;
               cc.Save();
           }
           finally
           {
               cc.Cancel();
           }
           return cc.ID.AsLongInt;
       }


       long AddComponent(long collectionId, long compNmkId, long linkID)
       {
           var comp = ExtApp.Application.General.Components(collectionId).AddNew();
           try
           {
               comp.NomenclatureID.Value = compNmkId;
               comp.LinkTypeID.Value = linkID;
               comp.Save();
           }
           finally
           {
               comp.Cancel();
           }
           return comp.ID.AsLongInt;
       }


       ObjectParameter AddObjectParameter(long objectId, long parameterID, object parameterValue)
       {
           var objParam = ExtApp.Application.General.ObjectParameters(objectId).AddNew();
           try
           {
               objParam.ParameterID.Value = parameterID;
               objParam.ParameterValue.Value = parameterValue;
               objParam.Save();
           }
           finally
           {
               objParam.Cancel();
           }
           return objParam;
       }
Bug.png (11.62 КБ)
Изменено: Dsolovjev - 11.03.2025 12:52:44
 
Код
zkz.Save();
 
Всех благодарю! У меня получилось создать заказ.
Хотелось бы ещё подсказку как удалить созданный мною заказ, т.к. при отладке плагина буду туда-сюда создавать один и тот же тестовый заказ и удалять его. И у меня нарисовалась проблемка, я прогнал тот же код что выше (заказ который создал - удалил перед этим вручную), только вместо статуса ST_InWork поставил ST_MAN_3, в надежде что таким образом сразу создадутся задания, но по итогу номенклатура уплыла в неизвестном направлении. Я решил найти её циклом и нашёл, но удалить не вышло. В Point_1 и Point_2 заходит, в Point_3 нет.

           foreach(var nmk in ExtApp.Application.General.Nomenclature(-1, CatalogOptions.None))
           {
               if(!nmk.Notation.IsNull)
               {
                   if((string)nmk.Notation.Value == "1863 Роскосмос - Фланец")
                   {
                       System.Windows.Forms.MessageBox.Show("Point_1");
                       foreach (var com in ExtApp.Application.General.ComponentCollections(nmk.ID.AsLongInt))
                       {
                           System.Windows.Forms.MessageBox.Show("Point_2");
                           // foreach (var prm in ExtApp.Application.General.Parameters(com.ID.AsLongInt, CatalogOptions.None))    // не заходит в цикл
                           // foreach (var prm in ExtApp.Application.General.Components(com.ID.AsLongInt, CatalogOptions.None))  // не заходит в цикл
                           // foreach (var prm in ExtApp.Application.General.LinkedObjects(com.ID.AsLongInt))                                    // не заходит в цикл
                           // foreach (var prm in ExtApp.Application.General.ObjectParameters(com.ID.AsLongInt))                              // не заходит в цикл
                           // foreach (var prm in ExtApp.Application.General.ComponentCollections(com.ID.AsLongInt))     // ссылка на объект не указывает на экземпляр объекта
                           // com.Count == 27
                           foreach (var prm in ExtApp.Application.General.ObjectParameters(com.ID.AsLongInt))
                           {
                               System.Windows.Forms.MessageBox.Show("Point_3");
                           }
                           com.Delete(); // Коллекция компонентов либо не существует, либо содержит компоненты.
                       }
                       nmk.Delete();
                       break;
                   }
               }
           }
Изменено: Dsolovjev - 12.03.2025 12:52:49
 
Думаю, что заходит и выходит т.к. набор данных пустой.
Цитата
написал:
// foreach (var prm in ExtApp.Application.General.Parameters(com.ID.AsLongInt, CatalogOptions.None))    // не заходит в цикл
Это получение данных из папки справочника параметров. Вместо ожидаемого ID папки, вы даёте на вход ID коллекции.

Цитата
написал:
// foreach (var prm in ExtApp.Application.General.Components(com.ID.AsLongInt, CatalogOptions.None))  // не заходит в цикл
Аналогично. Справочник компонентов. Для получения компонентов конкретной коллекции используйте
Код
ExtApp.Application.General.Components(collectionId);

Цитата
написал:
// foreach (var prm in ExtApp.Application.General.LinkedObjects(com.ID.AsLongInt))                                    // не заходит в цикл
Связанных объектов у коллекции, скорее всего, нет

Цитата
написал:
// foreach (var prm in ExtApp.Application.General.ObjectParameters(com.ID.AsLongInt))                              // не заходит в цикл
Параметров у коллекции, скорее всего, нет

Цитата
написал:
foreach (var prm in ExtApp.Application.General.ComponentCollections(com.ID.AsLongInt))     // ссылка на объект не указывает на экземпляр объекта
У коллекций не бывает своих коллекций. На вход ожидается Id номенклатуры
 
Не вижу смысла писать в таком случае свои "удалялки". Потеря времени. Проще и быстрее штатными функциями все поудалять в данном конкретном случае. Не так много насоздавали.

В сообщении #67 я Вам расписал кто как с кем связан в плане объектов в БД при создании. Удалять, как в любой базе данных, нужно "с конца".
Вы создали номенклатурную позицию (Заказ), к ней коллекцию компонентов (Карта заказа), в эту коллекцию добавили компоненты (Детали в карту заказа).
Номенклатура не удалится, пока у неё есть коллекции, коллекция не удалится пока в ней есть компоненты.
Соответственно, чтобы штатными средствами всё удалить:
1. Идем в общий справочник "Коллекции компонентов", находим там коллекцию - созданную Вами тех. карту (обычным поиском или авто-фильтром - по имени, по типу связи, как удобнее).
2. Открываем для этой коллекции зависимое окно "Компоненты". Всё там выделяем и удаляем.
3. Удаляем саму коллекцию (1).
4. Идем в общий справочник "Номенклатура", там (поиском, авто-фильтром, по обозначению или наименованию) находим созданную Вами номенклатуру "заказ". И удаляем её.

Всё. Готово.

По-моему проще руками так сделать в данном конкретном случае, чем "удалялки" писать.
Кстати, "Папка", куда складывать номенклатурную позицию "заказ" и коллекцию "карта заказа", что Вы спрашивали в сообщении #68 - они как раз и нужны, чтобы в случае задачи а-ля п. (1) и (4) искать не поиском по всему справочнику то, что вы насоздавали, а оно сразу лежало в конкретной папке и там вы его сразу и нашли при необходимости. Без папки поиском тоже найдётся. Но когда изначально известно, где лежит - проще.

Есть ещё админская утилита "Очистки заказов". Можно после п.(1), как альтернативный вариант вместо п. (2) и (3), встать в справочнике на нужную коллекцию (карту заказа, которую Вы создали) и в меню нажать "Настройка" - "Очистка заказов". Эта штука удаляет все из коллекции и саму коллекцию. Но более актуальна она, когда кроме деталей (компонентов) там ещё много чего есть (партии, назначенные ТП и т.д.). Чтобы руками всё это не удалять. В Вашем текущем случае - и руками, в принципе, не долго. Но можно и утилиту "Очистка заказов" задействовать. Готовая "удалялка" для "карт заказов".

Цитата
написал:
поставил ST_MAN_3
Самодеятельности тут не нужно  :D

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

×
Вход на сайт