Большое обновление системы. Новая версия VOGBIT 21.2 - Выпущено большое обновление программы. Значительные изменения произошли как в обще-системной части, так и в плане расширения возможностей программы и повышения удобства работы с ней.

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

ЕИ по умолчанию - Состав и технология
Константин Чилингаров: Здравствуйте, Можно написать плагин (будет кнопка специальная), чтобы на все выделенные строчки назначить выбранную единицу измерени ...
Печать чертежей - Обновление
Константин Чилингаров: Действие по двойному щелчку настроить нельзя. Можно настроить "горячую клавишу".
Автор ТП - Обновление
Константин Чилингаров: Я выше уже написал.  Что Ваше пожелание записано в общий список пожеланий и предложений. Когда очередь до него дойдёт, сказать сложно. ...
Назначить очередь - Производство
Fomina: Хорошо, попробую удалить параметр. Спасибо
Выделение текущей даты на графике - Интерфейс программы
Константин Чилингаров: Здравствуйте, Записал в общий список предложений.
Фильтрация по сортаменту материалов в графике производства и новом задании - Общие вопросы
Fomina: Спасибо, Константин
Помощник ориентации окна - Общие вопросы
Balukov: Здравствуйте. Нет. Эту штуку отключить нельзя. Такой вопрос был недавно. https://vogbit.ru/forum/messages/forum24/topic2724/message16739/2724#message16739 VOGBIT Прикрепление/ ...
Ошибка приложения - Прочее
Константин Чилингаров: Можно попробовать /forum/messages/forum15/topic1366/message8486/#message8486 сбросить сохраненные настройки . Может быть, поможет. Но вообще, версия очень старая ...
Прикрепление/открепление окон - Общие вопросы
Константин Чилингаров: Здравствуйте, Нет. Эту штуку отключить нельзя. А чем она так сильно прямо мешает?
Последовательность операций в изделии со сборками - Производство
Fomina: Благодарю
Календарный план - Производство
Константин Чилингаров: Ждем режим с выделением деталей одного узла. Он есть этот режим. В текущей релизной версии (21.2, обновление май 2021). По крайней мере, тот, ...
Внесение состава изделия, состоящего из большого числа вложенных сборок. - Состав и технология
Fomina: Спасибо. Похоже мы делаем все правильно и другого пути нет.
Ошибка при выборе всех заданий. - Терминалы
Fomina: написал: Вот мне нужно [B распределить задания по работникам, фиксировать время начала-окончания[/B , время выполнения, количества. Потом ...
Просмотр чертежа при получении задания в терминале. - Терминалы
Константин Чилингаров: В идеале работа мне видится так: 1. На резке, после выполнения задания, на принтере этикеток печатаются этикетки всех вырезанных детал ...
Выбор ресурса при редактировании задания - Производство
Fomina: написал: Планирование иногда очень нужно, с учетом реальной и перспективной нагрузки. Особенно, когда нужно вклинится с суперсрочным з ...
Удаление позиции из номенклатуры - Прочее
Константин Чилингаров: Помочь Вам разобраться/удалить? Давайте стандартный договор на удаленную поддержку оформим, всё сделаем. Подробности по почте.
Загрузка спецификации изделия из ЭКСЕЛЬ - Состав и технология
Константин Чилингаров: Здравствуйте,  Это дополнительный модуль. Умеет загружать из Excel файла номенклатуру, параметры, файлы, спецификацию, материалы, техпр ...
Печать ордеров и единицы измерения - Прочее
Beavis900: Доброго дня! Благодарю! Будем разбираться!.
Группа планирования - Состав и технология
Eshklyaev077: Здравствуйте , спасибо все помогло !!!
Отчет о выполнении сменного задания - Отчёты
Константин Чилингаров: В среднем, тысяч 5-7 рублей (настройка шаблона отчёта). Иногда больше, если сложный.  Пришлите на почту, как должен выглядеть отчёт. Посмот ...

Ошибка работы триггера в базе SQL

Разработка приложений и функций - Плагины - Технические вопросы
Страницы: 1
Ошибка работы триггера в базе SQL
 
Добрый день. В программе Vogbit потребовалось реализовать механизм, который при обновлении таблицы (в данном случае, штрих-коды) автоматически записывает некоторые данные в файл. Решил сделать через триггер в БД SQL.
Триггер:
Код
USE [VOGBIT_splav]
GO
/****** Object:  Trigger [General].[csvBarCodesUpdate]    Script Date: 13.11.2017 9:00:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [General].[csvBarCodesUpdate]
ON [VOGBIT].[General].[BarCodes]  
AFTER Insert, Update, Delete
AS  
   EXEC sp_xp_cmdshell_proxy_account 'SPLAV/eremin.mv','a23B49';
   EXEC xp_cmdshell "C:/Progs/BarCodesQuery.bat"

После изменения Vogbit выдает сообщение "У пользователя нет разрешений на выполнение данного действия."
Подробности ошибки:
Код
Сообщение:
   У пользователя нет разрешений на выполнение данного действия.

Отправитель:
   Csdn.Vogbit.Data.BarCodes

Исключение:
   Csdn.Vogbit.Data.SqlServerException

Источник:
   Csdn.Vogbit.Data

Версия 1.1.37841 сборка 171

Внутреннее исключение:: У пользователя нет разрешений на выполнение данного действия.<KeyErr><ErrCode:6001FFFF>
<ErrNumber:15247>
<ErrSeverity:16>
<ErrState:1>
<ErrProcedure:Called from [General].[BarCodes.Insert]: >
<ErrLine:1>
Ошибка преобразования значения varchar "except" в тип данных int.


Список вызовов:
   в Csdn.Vogbit.Data.SqlExceptionBuilder.ThrowError(Object sender, SqlException ex, String database)
   в Csdn.Vogbit.Data.DataObjectList.TryToApplyInternal(Boolean useTransaction)
   в Csdn.Vogbit.Data.DataObjectList.Apply(Boolean raiseEvent)
   в Csdn.Vogbit.Data.BizObject.Save()
   в Csdn.Vogbit.Forms.BaseEditForm.Apply()
   в Csdn.Vogbit.Forms.EditDialog.EditFormApply()
   в Csdn.Vogbit.Forms.EditDialog.Apply()

Inner Exception ---------------

Сообщение:
   У пользователя нет разрешений на выполнение данного действия.<KeyErr><ErrCode:6001FFFF>
<ErrNumber:15247>
<ErrSeverity:16>
<ErrState:1>
<ErrProcedure:Called from [General].[BarCodes.Insert]: >
<ErrLine:1>
Ошибка преобразования значения varchar "except" в тип данных int.

Исключение:
   System.Data.SqlClient.SqlException

Источник:
   .Net SqlClient Data Provider

Список вызовов:
   в System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
   в System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
   в System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
   в System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
   в System.Data.Common.DbDataAdapter.Update(DataTable dataTable)
   в Csdn.Vogbit.Data.DataAdapter.Update(DataTable dataTable)
   в Csdn.Vogbit.Data.DataAdapter.UpdateDataTable(DataTable dataTable)
   в Csdn.Vogbit.Data.DataObjectList.ApplyInternal()
   в Csdn.Vogbit.Data.DataObjectList.TryToApplyInternal(Boolean useTransaction)


Что сделано неправильно и как это исправить?

P.S. Логин и пароль пользователя правильные.
Изменено: Максим Еремин - 13.11.2017 09:05:20
 
Крайне не рекомендуется добавлять свои триггера, таблицы и т.п. непосредственно в базу. После этого мы не гарантируем никоим образом ни работоспособность штатных функций, ни возможность обновления. П.7.2. лицензионного соглашения. Т.е. фактически такую базу мы поддерживать не будем. Если что-то с ней случиться - вам разбираться только самостоятельно.

Если нужно добыть какую-то информацию для использования её снаружи, то лучше написать plugin для этого.
 
Цитата
Если нужно добыть какую-то информацию для использования её снаружи, то лучше написать plugin для этого.

Но возможно ли написать какой-либо плагин для автоматического создания csv файла, а не по нажатию на кнопку?
 
Можно написать плагин, который будет всё время запущен, раз в какое-то время (хоть каждую минуту) проверять, не пора ли что-нибудь выгрузить, и если пора, то выгружать.
Например...

А что за задача то? По сути. Для чего нужно?
 
Для передачи в другую программу нужно выгружать в csv-файлы:
1. Таблица сотрудников со штрих-кодами
2. Таблица соответствий рабочих, выполняющих задания, и используемого в этом задании инструментом.
 
И там, и там объём данных маленький, а изменения редкие.
Для второго пункта, вполне должно хватить выгрузки раз в день. Максимум пару раз в день. Но это если уж очень активно работать...
Для первого и того реже. Там и раз в день не нужно.
Так что вполне можно обойтись plugin'ом. Я бы для начала сделал просто по кнопке. Чтобы всё обкатать, наладить.
А потом, когда уже реально заработает всё по прямому назначению, если реально надоест кнопку нажимать, сделал бы, чтобы она по времени нажималась сама.
 
Где можно посмотреть руководство по созданию плагинов и по таблицам (не нашел на сайте)?
Изменено: Максим Еремин - 13.11.2017 15:43:05
 
Руководства нет.
Слишком мало желающих пописать плагины самостоятельно  :)

Есть несколько тем на форуме. Вот, например.
 
При компиляции dll возникает ошибка:
Код
1>CSC : error CS1705: Сборка "Csdn.Vogbit.Main" с удостоверением "Csdn.Vogbit.Main, Version=1.1.37841.171, Culture=neutral, PublicKeyToken=ae4e3879760d1984" использует "Csdn.Vogbit.Forms, Version=65535.65535.65535.65535, Culture=neutral, PublicKeyToken=ae4e3879760d1984" с более высокой версией, чем у сборки "Csdn.Vogbit.Forms" с удостоверением "Csdn.Vogbit.Forms, Version=1.1.37841.171, Culture=neutral, PublicKeyToken=ae4e3879760d1984", на которую делается ссылка.

Код взят отсюда
Все библиотеки подключены, ошибок до компиляции не выдает. Как это исправить?
 
Цитата
Максим Еремин пишет:
Как это исправить?
используйте Visual Studio 12

Если формы вогбита не нужны, то можно писать не плагин, а отдельное приложение.
Тогда понадобится только Csdn.Vogbit.Data.dll - для доступа к данным через API.
В этом случае должно работать и в более новых студиях.
 
При запуске программы возникает ошибка
Код
VogbitPluginExport.Export: идентификатор плагина не определён.

Код сделан на основе этого. Что нужно в нем поменять? Это как-то связано со строками ниже?
Код
[Caption("PluginExport")]
[ID("{EB7B1DCC-0DDE-4eaf-B500-2D669DE4557C}")]
 
Вы плагин пишете(dll) или свою отдельную программу(exe)?
 
Цитата
Сергей пишет:
Вы плагин пишете(dll) или свою отдельную программу(exe)?
Плагин
 
Связано.
[ID("{EB7B1DCC-0DDE-4eaf-B500-2D669DE4557C}")]
это и есть идентификатор плагина.
Сейчас попробую собрать плагин из того сообщения.
 
В том то и дела, что код из того листинга работает, но я внес правки и он перестал. Вот мой код
Код
using System;
using Csdn.Vogbit.Base;
using Csdn.Vogbit.Data;
using Csdn.Vogbit.Forms;
using Csdn.Vogbit.Main;
using DevExpress.Utils;
using DevExpress.XtraEditors;
using System.Windows.Forms;
using Csdn.Vogbit.QB;

namespace VogbitPluginExport
{
    [Caption("PluginExport")]
    [ID("{EB7B1DCC-0DDE-4eaf-B500-2D669DE4557C}")]

    public class BarCodesForm : DataViewForm
    {
        public BarCodesForm(IExtensibleApplication app) : base (app)
        {

        }

        protected override void OnLoad(System.EventArgs e)
        {
            base.OnLoad(e);

            GetData();

            DataControl.Columns.Add(DataSource.PropertyDefs["BarCode"], "Штрих-код");
            DataControl.Columns.Add(DataSource.PropertyDefs["Name"], "ФИО");
        }

        void GetData()
        {
            var sqlQuery = new SqlQuery();
            var selectQuery = sqlQuery.CreateQuery();

            var barCode = (Csdn.Vogbit.QB.Schema.Views.BarCodes)selectQuery.From.AddView(Views.BarCodes, "barCode");
            var name = (Csdn.Vogbit.QB.Schema.Views.Employees)selectQuery.From.AddView(Views.Employees, "name");

            var j = new Join(barCode, name, JoinType.Inner, new Condition().EqualTo(barCode.ObjectID, name.ID));

            selectQuery.Joins.Add(j);
            selectQuery.Columns.Add(barCode.Code, "BarCode");
            selectQuery.Columns.Add(name.Name, "Name");

            sqlQuery.Add(selectQuery);

            var data = ExtensibleApplication.Application.ExecuteQuery(sqlQuery);

            data.Close();
            data.Prepare();
            DataSource = data;          
        }            

    }

    public class Export : PlugInBase
    {
        private const string CommandGuidString = "{67ED1590-AB70-46f7-94F9-58A462D333DB}";
        private const string CategoryGuidString = "{B18D68B3-33B2-45eb-BBCA-424B30E65B48}";

        protected override void Connect()
        {
            base.Connect();
            ExtForms.EventHandler += ExtFormsEventHandler;
        }

        void ExtFormsEventHandler(object sender, ExtensibleFormsEventArgs e)
        {
            if (e.EventType == ExtensibleFormsEventType.NewForm)
            {
                if (e.PlugInForm.GetType() == typeof(EmployeesGridForm))
                {
                    var commandId = new Guid(CommandGuidString);
                    var categoryId = new Guid(CategoryGuidString);

                    var barManager = (IBarManager)e.PlugInForm;
                    var barCategory = barManager.BarCategories.Add(categoryId, "Пример");

                    var exampleButton = barManager.BarCommands.AddButtonCommand(commandId, barCategory, "Команда", false);
                    exampleButton.Caption = "Список штрих-кодов";
                    exampleButton.ActionExecute += ExampleButtonActionExecute;
                }
            }
        }

        void ExampleButtonActionExecute(object sender, ActionExecuteEventArgs e)
        {
            if (((IPlugInDataForm)ExtForms.ActiveForm).CurrentItem != null)
            {
                //long nmkId = ((IPlugInDataForm)ExtForms.ActiveForm).CurrentItem["ID"].AsLongInt;

                //var formParams = new PlugInFormParams();
                //formParams["OwnerID"].Value = nmkId;

                var barCodesForm = ExtForms.GetNewForm(typeof(BarCodesForm).ToString());
                barCodesForm.TabText = "Список штрих-кодов";
                //barCodesForm.OpenForm(formParams);
                barCodesForm.ShowFloatingForm(DockStyle.None);
            }

        }
    }
}

Не уверен, что он правильный, но и проверить никак не могу. Как прописывать ИД плагина в дальнейшем, когда буду создавать другие плагины?
 
Это атрибуты класса.
Писать их надо перед соответствующим классом. Т.е. в вашем случае перед
Код
public class Export : PlugInBase
 
Цитата
Максим Еремин пишет:
Как прописывать ИД плагина в дальнейшем, когда буду создавать другие плагины?
Сгенерить новый GUID
 
Спасибо, заработало.

Подскажите ещё, пожалуйста, каким образом можно сделать экспорт данных из таблицы в CSV-файл с помощью какой-нибудь библиотеки Vogbit? Или нужно подключать стороннюю библиотеку?
Изменено: Максим Еремин - 29.11.2017 14:09:26
 
можно так попробовать
Код
(DataConrol as IDataExport).ExportTo(ExportFormat.Csv, "filename.csv")
 
Можно подробнее? Попробовал со строкой выше, не сохранилось.

Вот функция
Код
void GetData()
        {
            var sqlQuery = new SqlQuery();
            var selectQuery = sqlQuery.CreateQuery();

            var barCode = (Csdn.Vogbit.QB.Schema.Views.BarCodes)selectQuery.From.AddView(Views.BarCodes, "barCode");
            var name = (Csdn.Vogbit.QB.Schema.Views.Employees)selectQuery.From.AddView(Views.Employees, "name");

            var j = new Join(barCode, name, JoinType.Inner, new Condition().EqualTo(barCode.ObjectID, name.ID));

            selectQuery.Joins.Add(j);
            selectQuery.Columns.Add(barCode.Code, "BarCode");
            selectQuery.Columns.Add(name.Name, "Name");

            sqlQuery.Add(selectQuery);

            var data = ExtensibleApplication.Application.ExecuteQuery(sqlQuery);

            data.Close();
            data.Prepare();
            DataSource = data;
            (DataControl as IDataExport).ExportTo(ExportFormat.Csv, "vogbit__bar_name.csv");     
        }    
 
ошибку выдаёт?
колонки не созданы у DataControl'а

UPD: Попробовал. Вставил эту строчку после создания колонок. Работает.
 
Я понял, что функция Data.Columns.Add(), но так и не понял, каким там должен быть первый параметр. Подскажете?

UPD: Разобрался.
Изменено: Максим Еремин - 30.11.2017 13:57:23
 
Подскажите, каким запросом можно вывести задание, сотрудника который его выполняет, и необходимый для него инструмент? А то без документации разобраться в БД практически невозможно, уже который день ковыряюсь
 
Тут есть нюансы.
В первую очередь:
- работник, по которому это нужно, на посту один или их там несколько может быть?
- по каким заданиям нужно смотреть? Которые включены работнику в план на смену? Или которые ему "выданы" в рамках смены?
- из задания можно добыть операцию в техпроцессе, по операции этой можно добыть из техпроцесса "инструмент". Вопрос - какой? Весь, который на эту операцию указан?

(уровень учёта подразумевается "высокий" или "максимальный" используется)

В зависимости от ответов на эти вопросы, будут следующие уточняющие.
В зависимости от этого - логика, как искать.
А от этого запрос, соответственно, зависит.

P.S. Вообще, если такими вещами заниматься серьёзно, то неплохо бы обучение какое-то организовывать. Если хотите логику понимать и знать, как там что внутри устроено.
Потому что это так в двух словах на форуме не объяснить всё.
 
Цитата
- работник, по которому это нужно, на посту один или их там несколько может быть?
Работник на посту может быть только один
Цитата
- по каким заданиям нужно смотреть? Которые включены работнику в план на смену? Или которые ему "выданы" в рамках смены?
Если я правильно понял, что задания выдаются в рамках смены.
Цитата
- из задания можно добыть операцию в техпроцессе, по операции этой можно добыть из техпроцесса "инструмент". Вопрос - какой? Весь, который на эту операцию указан?
Весь инструмент для операции

Цитата
P.S. Вообще, если такими вещами заниматься серьёзно, то неплохо бы обучение какое-то организовывать. Если хотите логику понимать и знать, как там что внутри устроено.
Скорее всего, это последний плагин, который нужно разработать для Вогбита в рамках проекта, так что обучение не целесообразно.
Изменено: Максим Еремин - 05.12.2017 09:54:07
 
Тогда нужно делать так (если от работника идти):

1. найти задание(я) (task) с типом связи = LT_Unit_Task, со статусом = ST_MAN_3, и с таким работником в "плановых трудовых ресурсах" - рис.1.

2. найти задание с типом связи = LT_Place_task, для которого (1) является Object task’ом (связанным заданием) – рис.2

3. в (2) взять Planned step (запланированные этапы). Там указан компонент (и коллекция откуда этот компонент) – это и есть операция (и техпроцесс, откуда она) – рис.3

4. Взять из коллекции компоненты, подчинённые (3) с типом связи LT_Tools – это инструмент к этой операции в техпроцессе - рис.4.

И будет то, что вы хотели.
Инструмент из операции, которая в задании, выданном работнику.
1.png (66.88 КБ)
2.png (63.84 КБ)
3.png (66.96 КБ)
4.png (40.22 КБ)
Страницы: 1
Сейчас на форуме (гостей: 16)
Всего зарегистрированных пользователей: 3499
Приняло участие в обсуждении: 387
Всего тем: 804
Всего сообщений: 6067

×
Вход на сайт