| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как сделать поле/field в автокаде Дата - 1 день?

Как сделать поле/field в автокаде Дата - 1 день?

Ответ
Поиск в этой теме
Непрочитано 17.10.2018, 09:35 #1
Как сделать поле/field в автокаде Дата - 1 день?
dextron3
 
проектировшик
 
СССР
Регистрация: 01.01.2007
Сообщений: 5,143

Всем привет собственно вопрос, в автокаде есть функция поле, которая присваивает тексту определенные данные, но как к кпримеру от поля даты вычесть один день к примеру сегодня 17.10.18, а поле должно показывать 16.10.18, когда ковыряю дату в поле, то поле перестает работать, и так же в поле формула не видит дату, спс

Для чего это нужно спросите, к примеру дата проверки в штампе сегодня, а дата разработки к примеру вчера, ну автоматизм нужен )))), даже в такой мелочи
__________________
инженер проектировшик с опттом программа авто гад образование высшие
Просмотров: 3207
 
Непрочитано 17.10.2018, 10:01
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,049


в подшивке два поля - разработки и проверки) с этими автоматическими датами можно "запалиться" легко)
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.10.2018, 10:30
#3
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


вот как сделать взаимозависимые даты, вот в чем вопрос
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 17.10.2018, 10:44
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


attout / attin с обработкой промежуточного файла в Excel
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 17.10.2018, 12:35
#5
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


То есть я так понимаю автокадовскими способами никак, тупо забить в блок и менять руками
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 17.10.2018, 12:55
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,049


Цитата:
Сообщение от dextron3 Посмотреть сообщение
То есть я так понимаю автокадовскими способами никак, тупо забить в блок и менять руками
ну или программно..
Сергей812 вне форума  
 
Непрочитано 17.10.2018, 13:39
#7
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992


Так пойдет?
Вложения
Тип файла: dwg
DWG 2010
Previous date in attribute field.dwg (238.3 Кб, 38 просмотров)
Nike вне форума  
 
Автор темы   Непрочитано 17.10.2018, 13:40
#8
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


нда знакомство с полями закончилось так и не начавшись, я так понял поля это оставшийся рудимент в автокаде который вообще с 2005 года не развивался

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Nike Посмотреть сообщение
Так пойдет?
можете в 2009 сохранить
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 17.10.2018, 13:50
#9
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992


В 2009 не могу.
Вложения
Тип файла: dwg
DWG 2007
Previous date in attribute field.dwg (253.6 Кб, 20 просмотров)
Nike вне форума  
 
Непрочитано 17.10.2018, 15:25
#10
frostmourn


 
Регистрация: 23.04.2015
Сообщений: 163


Nike, опередил, только хотел написать про немного фантазии.
Кстати, здесь в формуле кавычки можно не писать. Есть недостаток - первого числа будет 0 в дате. Вот вариант с учётом перехода месяца и года, правда, тут будет 28 показывать (кроме декабря), зато число всегда существующее. Наверное, можно и это исправить, но количество писанины боюсь представить...
Вложения
Тип файла: dwg
DWG 2007
дата.dwg (76.4 Кб, 40 просмотров)
frostmourn вне форума  
 
Автор темы   Непрочитано 17.10.2018, 20:41
#11
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Спасибо! Вот теперь с каждого проекта по 1 минуте жизни будут люди экономить. Нужно бабкам проектировщицам дать на тестирование. Вот бы еще в субботы и воскресенья дату не ставил да по праздникам, ну типа кто хорошо работает тот в выходные отдыхает, но это так только мечты перфекциониста, да с нулем в поле даты спалили бы когда-нибудь что дата прописывается автоматически как и подпись

----- добавлено через ~2 мин. -----
Кстати заметил что с автокада не могу на другие программы перейти, к примеру ревит или текла, врос корнями, старею наверное
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 17.10.2018, 23:08
#12
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,114


Ну например можно создать формулу в таблице, из поля даты вычесть единицу.

----- добавлено через ~2 мин. -----
Не посмотрел, там видимо проблема с конвертацией типа данных..
v.psk вне форума  
 
Непрочитано 22.10.2018, 15:11
#13
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,295


может часы на компе перевести на день назад?
asys вне форума  
 
Автор темы   Непрочитано 03.11.2018, 18:32
#14
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Цитата:
Сообщение от frostmourn Посмотреть сообщение
Nike, опередил, только хотел написать про немного фантазии.
Кстати, здесь в формуле кавычки можно не писать. Есть недостаток - первого числа будет 0 в дате. Вот вариант с учётом перехода месяца и года, правда, тут будет 28 показывать (кроме декабря), зато число всегда существующее. Наверное, можно и это исправить, но количество писанины боюсь представить...
не работает field, только сейчас заметил дата остановилась на 28.10.18, может что не так делаю, хотя field с датой сохранения меняет
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 03.11.2018, 21:26
#15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,049


ну я добавил бы два пользовательских свойства и просто вывел их значения в качестве дат. А все остальное программно:


Код:
[Выделить все]
// Windows
using System;

// AutoCAD
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;


namespace ChangeDates
{
    /// <summary>
    /// Базовый класс
    /// </summary>
    public class CommandsClass : IExtensionApplication
    {
        /// <summary>
        /// Имя тега даты выпуска
        /// </summary>
        private const string DateCreateNameTag = "DateCreate";

        /// <summary>
        /// Имя тега даты проверки
        /// </summary>
        private const string DateCheckNameTag = "DateCheck";
        
        /// <summary>
        /// Имя тега разницы дат при проверке
        /// </summary>
        private const string DiffDateNameTag = "DateDiff";
               

        /// <summary>
        /// Событие открытия или создания нового документа 
        /// </summary>
        /// <param name="sender">Менеджер чертежей</param>
        /// <param name="e">Дополнительные аргументы</param>
        private void DocumentManager_DocumentCreated(object sender,
            DocumentCollectionEventArgs e)
        {
            ChangeDate(e.Document);
        }


        /// <summary>
        /// Изменение даты в документе
        /// </summary>
        /// <param name="aAcadDoc">Документ</param>
        private void ChangeDate(Document aAcadDoc)
        {
            // Блокируем документ
            using (aAcadDoc.LockDocument())
            {
                // Получаем пользовательские свойства документа
                DatabaseSummaryInfoBuilder lDatabaseSumInfoBuilder = new
                    DatabaseSummaryInfoBuilder(aAcadDoc.Database.SummaryInfo);
                var lCustomProperties = lDatabaseSumInfoBuilder.CustomPropertyTable;
                // Если заданы пользовательские данные
                if (lCustomProperties.Keys.Count > 0)
                {
                    // Разница дат в свойствах
                    int lDiffDays = -1;
                    // Пробуем получить разницу дат из свойств
                    try
                    {
                        lDiffDays = int.Parse(lCustomProperties[DiffDateNameTag] as string);
                    }
                    catch (System.Exception)
                    {
                    }
                    // Если данные были успешно получены
                    if (lDiffDays != -1)
                    {
                        // Формируем новые даты
                        DateTime lDateChecked = DateTime.Now;
                        DateTime lDateCreated = lDateChecked.AddDays(-lDiffDays + 1);
                        // Если дата создания попала на выходные - отъезжаем на первый рабочий день
                        while ((lDateCreated.DayOfWeek == DayOfWeek.Saturday) ||
                            (lDateCreated.DayOfWeek == DayOfWeek.Sunday))
                                lDateCreated = lDateCreated.AddDays(-1);
                        // И пробуем занести их в свойства чертежа
                        try
                        {
                            lCustomProperties[DateCreateNameTag] = lDateCreated.ToShortDateString();
                            lCustomProperties[DateCheckNameTag] = lDateChecked.ToShortDateString();
                            aAcadDoc.Database.SummaryInfo =
                                lDatabaseSumInfoBuilder.ToDatabaseSummaryInfo();
                            // И обновляем чертеж
                            aAcadDoc.Editor.Regen();
                        }
                        catch (System.Exception ex)
                        {
                            aAcadDoc.Editor.WriteMessage(
                                "\nПри обновлении дат произошла ошибка: {0}\n", ex.Message);
                        }
                    } // Если данные были успешно получены
                } // Если заданы пользовательские данные
            }
        }


        /// <summary>
        /// Инициализация сборки
        /// </summary>
        public void Initialize()
        {
            // Событие создания нового или открытия существующего документа
            Application.DocumentManager.DocumentCreated += new
                DocumentCollectionEventHandler(DocumentManager_DocumentCreated);
            // Проходим по коллекции уже открытых документов
            foreach (Document lAcadDoc in Application.DocumentManager)
            {
                // И обрабатываем документ
                ChangeDate(lAcadDoc);
            }
        }


        /// <summary>
        /// Деинициализация сборки
        /// </summary>
        public void Terminate()
        {
        }


        /// <summary>
        /// Установка пользовательских свойств
        /// </summary>
        [CommandMethod("SetDates", CommandFlags.Modal)]
        public void SetDates()
        {
            // Получаем текущий документ, его БД и редактор
            Document lAcadDoc = Application.DocumentManager.MdiActiveDocument;
            Database lAcadDb = lAcadDoc.Database;
            Editor lAcadEd = lAcadDoc.Editor;
            // Запрос пользователя
            PromptIntegerOptions lPromptIntOptions = 
                new PromptIntegerOptions("\nВведите разницу в днях между датой выпуска и датой проверки:");
            lPromptIntOptions.DefaultValue = 1;
            lPromptIntOptions.UseDefaultValue = true;
            lPromptIntOptions.LowerLimit = 1;
            lPromptIntOptions.UpperLimit = 180;
            PromptIntegerResult lPromptIntRes = lAcadEd.GetInteger(lPromptIntOptions);
            // Если пользователь ввел допустимое значение
            if (lPromptIntRes.Status == PromptStatus.OK)
            {
                // Формируем новые даты
                DateTime lDateChecked = DateTime.Now;
                DateTime lDateCreated = lDateChecked.AddDays(-lPromptIntRes.Value + 1);
                // Если дата создания попала на выходные - отъезжаем на первый рабочий день
                while ((lDateCreated.DayOfWeek == DayOfWeek.Saturday) ||
                    (lDateCreated.DayOfWeek == DayOfWeek.Sunday)) lDateCreated = lDateCreated.AddDays(-1);
                // Получаем пользовательские свойства документа
                DatabaseSummaryInfoBuilder lDatabaseSumInfoBuilder = new
                    DatabaseSummaryInfoBuilder(lAcadDb.SummaryInfo);
                var lCustomProperties = lDatabaseSumInfoBuilder.CustomPropertyTable;
                // И пробуем занести их в свойства чертежа
                try
                {
                    lCustomProperties[DateCreateNameTag] = lDateCreated.ToShortDateString();
                    lCustomProperties[DateCheckNameTag] = lDateChecked.ToShortDateString();
                    lAcadDb.SummaryInfo = lDatabaseSumInfoBuilder.ToDatabaseSummaryInfo();
                    // И обновляем чертеж
                    lAcadEd.Regen();
                }
                catch (System.Exception)
                {
                    // Пробуем добавить свойства в чертеж
                    try
                    {
                        lCustomProperties.Add(DateCreateNameTag, lDateCreated.ToShortDateString());
                        lCustomProperties.Add(DateCheckNameTag, lDateChecked.ToShortDateString());
                        // И обновляем чертеж
                        lAcadEd.Regen();
                    }
                    catch (System.Exception ex)
                    {
                        lAcadEd.WriteMessage(
                            "\nПри обновлении дат произошла ошибка: {0}\n", ex.Message);
                    }
                }
            }
        }

    }
}


Командой SetDates задается разница между днями выпуска и проверки, при каждом открытии документа - если нашли свойство пользовательское DateDiff, то обновляем свойства дат и сам документ. Если дата выпуска выпадает на выходные - отползает до пятницы. Несложно и праздничные дни учесть - положить где-нибудь на сервере файлик с датами и загружать при старте сборки.

Можно и на любом другом языке программирования написать - суть от этого не меняется.
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.11.2018, 10:16
#16
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


И как этот код бабкам объяснить, мне нужно такой формат чтобы из чертежа в чертеж копировать без замороки, даже уже согласен на блочок маленький
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 04.11.2018, 10:26
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,049


Да никак не объяснять - скомпилировать один раз под ваши версии акада в библиотеку *.dll и кинуть в автозагрузку всем. И шаблон сделать - где прописать свойства командой SetDates один раз и вставить поля с ссылкой на эти свойства. Все остальное будет делать автоматически при открытии чертежей на основе данного шаблона - для ваших женщин это просто будут поля, которые нельзя трогать)
Сергей812 вне форума  
 
Непрочитано 06.11.2018, 09:08
#18
frostmourn


 
Регистрация: 23.04.2015
Сообщений: 163


Цитата:
Сообщение от dextron3 Посмотреть сообщение
не работает field, только сейчас заметил дата остановилась на 28.10.18, может что не так делаю, хотя field с датой сохранения меняет
У меня работает...
frostmourn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как сделать поле/field в автокаде Дата - 1 день?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать Импорт ПДФ в автокаде 2017? Arraders AutoCAD 26 06.06.2023 20:08
Подскажите пожалуйста, возможно ли сделать выпадающий список со слоями в автокаде по всей высоте экрана? (т.е. до нижней части рабочего окна) igor3dviz AutoCAD 3 17.10.2016 23:22
Не увеличивается текст над линейным размером в 2006 автокаде rtyu AutoCAD 5 19.06.2012 11:33
как сделать так, чтобы заливка в автокаде 2012 не выделялась при нажатии на неё? filnett AutoCAD 4 29.03.2012 17:37
Как сделать фасад в Автокаде Rebel AutoCAD 19 07.11.2008 16:50