Пополнение в разделе «Документация» - Складской учёт, упрощённые операции

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

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

Ошибка работы триггера в базе 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
Сейчас на форуме
Всего зарегистрированных пользователей: 4161
Приняло участие в обсуждении: 430
Всего тем: 804
Всего сообщений: 6067

×
Вход на сайт