Вопрос: При просмотре отчета все поля DataBand видны, при печати в этих же полях происходят переносы и часть информации не видно. Как это исправить?
Ответ: Для текст бокса необходимо установить свойство TextQuality в значение WYSIWYG или Typographic.
Можно сделать отдельную тему про ширмер (Schirmer BAZ-1000)?
С выгрузкой данных для ширмера в xml проблема
Спасибо, помогло)
Кирилл, для этого не требуется никаких методов, т.к. это штатный элемент. Возможно, он у вас просто скрыт. Для настройки элементов жмите под админом правой кнопкой мышки между элементами:
take.ms/i4FSA
и ищите/вытаскивайте нужную таблицу. Если что, можете писать мне на почту: an.host[a]ya.ru
Дмитрий, у меня к Вам вопрос:
какой метод используется (и как) у Вас, чтобы пользователь видел вот такую табличку с данными (вроде, называется лайаут, поправьте, если ошибаюсь)
yadi.sk/d/QVAfj08z4cn8P
У меня подозрение, что у меня такая табличка не выводится из-за того, что привел в самом начале (метод search) входную переменную к LeafForm, а не к AssemblyForm (что правильно, вроде, но имеет последствия), а потом закомментировал 1 метод.
Да, возможно разные
я посмотрел баркоды в таблице equipmentprofile, там содержатся баркоды не те, которые вижу на этикетках(
Но idorderitem у меня есть, подход работает, спасибо)
У меня в optimdocpos вообще нет поля barcode ) Все баркоды и прочее лежат в equipmentprofile. Далее я там беру idorderitem и нахожу все, что мне нужно по изделия.
Возможно, у нас была другая модель внедрения.
Всем привет)
Столкнулся с очередной проблемой, поставившей меня в тупик:
В безбумажке среди кода есть запрос, выдергивающий информацию по изделию по баркоду: сравнивает введенный баркод с содержащимися номерами таблицы optimdocpos столбца barcode. Проблема в том, что все поля этого столбца таблицы = NULL.
Запрос
select *
from optimdocpos
where not barcode = NULL
выводит пустую таблицу.
Я в жопе)
вот еще:
переписал условие цикла (ограничение по количеству элементов):
foreach (DataRow drMC in profileTable.Select ())
{
/code
if (globalid != -1 && ModelPart.Contains («С-») && (globalid <= con.Imposts.Count — 1)) // выделяем балку
con.Imposts[globalid].Selected=true;
}
Теперь ошибки нет, но не знаю, на сколько это правильно
Смотрел методы в con, искал метод доступа до элемента по ID, не нашел пока.
С pbModelPicture проблема решилась, есть аналогичный (надеюсь) метод ModelPicture
Да, отдельно проверил MessageBox'ом этот метод при обращении к конкретному элементу, вылетает ошибка именно на нем.
Вот только определения для GetImpostByID () нет в clsModel (тип экземпляра con)
Есть какой-нибудь альтернативный способ доступа до элементов массива?
С чем сравнивать свойства, приведенные выше?
Меня вот еще что интересует:
я привел object sender к LeafControl (LeafControl c = (LeafControl sender))
В LeafControl нет определения для pbModelPicture, используется вот как:
//Получить рисунок
if (c.ModelPictureDrawOptions != null)
c.pbModelPicture.Image = con.GetPictureForMetafile (c.ModelPictureDrawOptions);
чтобы компилировалось, я его закомментил, наверняка, это не очень хорошо. Это (получение рисунка) кусок кода из bool Search, который вызывается в стартовом методе public void Run (DBConnections2.dbconn _db, DataRow [] _dr, bool _isDelete, object _form)
здесь _form содержит в себе тип LeafForm.
Меня интересует, где вызывается метод Run, чтобы попробовать там изменить тип на AssemblyForm, чтобы в след вызываемых методах не было запар. Это реально, или место, где метод вызывается, недоступно рукам простого программиста?)
Но если нет, помогите, пожалуйста решить проблему с доступом до элементов массива и с методом с рисунком.
Спасибо, буду пробовать)
Ошибка «System.ArgumentOutOfRangeExeption» возникает в цикле foreach, но не в момент обхода строк таблицы profileTable, а, скорее всего, в методе: con.Imposts[globalid].Selected=true;
Т.е. Вы пытаетесь обратиться к элементу массива con.Imposts по индексу globalid. Это неправильно, поскольку нет гарантии, что массив con.Imposts имеет индексы, совпадающие с globalid . Для получения конкретного импоста в расчётной модели по известному globalid нужно воспользоваться методом con.GetImpostByID (). Для нативной модели надёжнее определять импост перебором в цикле и сравнивать свойства, типа: Key, Name, VisibleID (потому что для импостов свойства GlobalID разработчики почему-то не предусмотрели 🙂 )
в моей случае (с моим штрихкодом) вылетает на третьей итерации
вот, что в циклах:
было:
foreach (DataRow drMC in profileTable.Select ()) { ModelPart=drMC["modelpart"].ToString (); globalid=Useful.GetInt32 (drMC["addint3"], -1);
(globalid != -1 && ModelPart.Contains («С-»)) // выделяем балку con.Imposts[globalid].Selected=true;
}
мой вариант:
for (int i = 0; i<drMC2.Length; i++) {
ModelPart=drMC2[i]["modelpart"].ToString ();
globalid=Useful.GetInt32 (drMC2[i]["addint3"], -1);
if (globalid != -1 && ModelPart.Contains ("С-")) // выделяем балку
con.Imposts[globalid].Selected=true; }
Я все с той же проблемой)
Тип sender — LeafControl
Привел к этому типу. Выпала ошибка на этапе компиляции, что нет определения для pbModelPikture. Закомментил до лучших времен, скомпилировал, все круто, казалось бы.
Захожу в сам модуль, где происходит вся работа, ввожу штрихкод, проходит поиск, сообразили таблицу profileTable, далее программа выводит ошибку:
System.ArgumentOutOfRangeExeption. Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
смотрю контрольную точку, где произошла ошибка. Цикл foreach (DataRow drMC in profileTable.Select ())
Меня к такому не готовили) Как можно сделать так, чтобы цикл foreach не вылетал за пределы?
переписал цикл, вот, что получилось:
DataRow [] drMC2 = profileTable.Select ();
for (int i = 0; i<drMC2.Length; i++)
{
//код
}
Обращаюсь к столбцам, естественно, уже по 2 индексам, а не по 1 (i — номер столбца в массиве, + идентификатор, который был в старом методе (название столбца)). Скомпилировал, включаю приложение, проверяю, ошибка все та же.
Как тут быть?
Пробовал еще в стартовом методе объявлять formCurrent, как Assemblyform. Ничего не получилось: метод Run прекращает работу на проверке приведения formCurrent:
if (formCurrent == null) return;
formCurrent не приводится к AssemvlyControl т.к. _form передаваемый в Run, из которого распаковывается firmCurrent, имеет тип LeafForm
>>На крайний случай можно всегда попробовать привести к AtUserControl, Form, Control
Эти типы не содержат определений для членов, используемых в функции (которые есть в AssemblyControl)
В безбумажке есть другие интерфейсы (работают с другими фурнитурами/изделиями), в них есть метод Search, выполняет те же функции, и ссылка на объект интерфейса, которым вызван метод, приводится там тоже к AssemblyControl. Логично предположить, что этот тип не просто так.
Нет таких проблем с приведениями там по причине того, что объект, вызывающий метод имеет тип не LeafControl (в отличие от обсуждаемого случая).
Дмитрий, нет, к сожалению, не прояснило.
У меня такой же тип переменой formCurrent, в этом и проблема)
Ее не удается привести к типу AssemblyControl
>>В результате выполнения отобразится текстовое окно с наименованием класса экземпляра переменной sender
Вот к нему и нужно приводить!
Пробовал приводить к типу LeafControl, который и был упокован, но при компилляции выдает ошибку, что этот тип не содержит определения для pbVodelPicture, с помощью которого получается рисунок (ниже в примере 2 показал, как он используется).
Тип переменной, упакованной в sender LeafControl, писал выше)
(узнавал именно этим способом)
вот, как он вызывается метод search:
((LeafControl) formCurrent).evSearch+=Search;
formCurrent имеет тип ILeafForm
(Atechnology.winDraw.NoPaper.Interfaces.ILeafForm formCurrent = (_form as Atechnology.winDraw.NoPaper.Interfaces.ILeafForm);)
>>Встречный вопрос: для чего в дальнейшем Вы используете:
1)Получение таблицы с искомой сущностью:
profileTable = c.db.GetDataTable (sqlSearchOrderItem);
где profileTable — таблица, sqlSearchOrderItem — переменная, содержащая текст запроса
2)Конфигурирование/получение рисунка:
//Конфигурировать рисунок
c.ConfigureModelPictureDrawOptions ();
c.InvokeOnModelDrawOptionsConfigure (this, new OnModelDrawOptionsConfigureEventArg (c.ModelPictureDrawOptions, con));
//Получить рисунок
if (c.ModelPictureDrawOptions != null)
c.pbModelPicture.Image = con.GetPictureForMetafile (c.ModelPictureDrawOptions);
Что такое переменная con:
//Получаем нативную модель
Atechnology.winDraw.Classes.clsModel con = DbUtis.GetModelByIdOrderItem (idorderitem);
где idorderitem — номер изделия в заказе
Вот, собственно, все
Проблема остается в силе
Объясните мне, пожалуйста, что такое нативная модель в данной терминологии?
>> Можно ли где-нибудь посмотреть и исправить типы IAssemblyForm, ILeafForm, AssemblyControl, LeafControl?
Посмотреть можно только в исходниках кода самой программы (если они у Вас есть, хотя вряд ли)!
Нет, исправить уж точно нельзя (для этого нужно как минимум пересобирать программу, что доступно только разработчикам)!
Встречный вопрос: для чего в дальнейшем Вы используете:
AssemblyControl c=(AssemblyControl) sender;
???
Если он нигде не используется, то можно просто закомментировать эту строку и всё!
Если используется — то нужно смотреть, какие именно свойства используются.
Обычно, в качестве параметра sender передаётся ссылка на элемент управления или интерфейса, откуда была вызвана функция.
В нашем случае в bool Search (object sender, string barcode) скорее всего передаётся ссылка на интерфейс безбумажки, с помощью которого отсканировали баркод.
Приведение sender осуществляется с помощью оператора as, как Вы верно пробовали. Чтобы узнать, что именно передалось в функцию в качестве sender, можно воспользоваться кодом:
MessageBox.Show (sender.ToString ());
В результате выполнения отобразится текстовое окно с наименованием класса экземпляра переменной sender
Вот к нему и нужно приводить!
На крайний случай можно всегда попробовать привести к AtUserControl, Form, Control
Возможно вот так будет понятнее:
// Безбумажка. События форм. Стенд сборки.
public void Run ( DBConnections2.dbconn _db, DataRow [] _dr, bool _isDelete, object _formNoPaper )
{
// Получение ссылки на общий объект интерфейса
Atechnology.winDraw.NoPaper.Interfaces.IBaseNopaperForm formBase = (_formNoPaper as Atechnology.winDraw.NoPaper.Interfaces.IBaseNopaperForm);
// Получение ссылки на текущий объект интерфейса
Atechnology.winDraw.NoPaper.Interfaces.IAssemblyForm formCurrent = (_formNoPaper as Atechnology.winDraw.NoPaper.Interfaces.IAssemblyForm);
}
// Безбумажка. События форм. Фурнитурный стол.
public void Run ( DBConnections2.dbconn _db, DataRow [] _dr, bool _isDelete, object _formNoPaper )
{
// Получение ссылки на общий объект интерфейса
Atechnology.winDraw.NoPaper.Interfaces.IBaseNopaperForm formBase = (_formNoPaper as Atechnology.winDraw.NoPaper.Interfaces.IBaseNopaperForm);
// Получение ссылки на текущий объект интерфейса
Atechnology.winDraw.NoPaper.Interfaces.ILeafForm formCurrent = (_formNoPaper as Atechnology.winDraw.NoPaper.Interfaces.ILeafForm);
}
Кирилл, посмотрите скрин, возможно он что-то прояснит:
yadi.sk/d/GHTZ8nfI3tgn2
Внедряется безбумажное производство.
Есть отдельный модуль программы, в котором должно все происходить.
Писался задолго до меня, естественно, не работает)
Суть моей проблемы:
есть метод Search, который осуществляет поиск по баркоду.
Его декларация:
bool Search (object sender, string barcode)
В переменную sender упаковано что-то с типом LeafControl
Далее должна идти обработка след. переменной:
AssemblyControl c=(AssemblyControl) sender;
Естественно, приведение типов не проходит.
Что пробовал я:
-приведения типов с помощью as, упаковку/распаковку через новую переменную типа object (результат 0);
-Объявление переменной, передаваемой в качестве параметра в Search как IAssemblyForm (интерфейс, предок AssemblyControl),приводимый к AssemblyControl (в итоге в поиске что-то выводилось но не то и не так, а стартовый метод Run переставал полностью работать)
Собственно, вопрос:
Что можно сделать?
Можно ли где-нибудь посмотреть и исправить типы IAssemblyForm, ILeafForm, AssemblyControl, LeafControl?
Хотелось бы добавить оператор приведения, ну или услышать, что можно попробовать сделать.
Кто-нибудь из прочитавших уже сталкивался с поиском по баркоду? Или с безбумажкой
Спасибо,помогло!
Установил 2ой .Net Framework, т.к. 4ый не содержит предыдущие версии
Кирилл, для начала, я бы попробовал перенакатить Framework и запустить WinDraw локально.
У меня вот такая проблема:
программа WinDraw запускается из расшаренной сетевой папки.
Решили запускать безбумажное производство, закупили компы, сканеры штрихкодов и тп, естественно, до того, как я стал работать в этой компании.
Безумажка запцщена не была и теперь ее все-таки решили запустить. Проверял компы на рабочесть: работают, с сетью связь есть, но на 1 из компов не запускается программа (на другом все работает), выдает ошибку (отправить отчет и все такое)
Источник .NET Runtime 2.0
Код: 1000
С чем может быть связано и как можно поправить?
На сайте можно только писать комментарии или можно как-то создавать рубрики или писать в существующих?
Ну наконец-то я нашел реальный совет.