퇴근5분전

 

작업이력 관리 툴을 일부 수정하였다.

 

 

 

기존 방식에서는 작업이력을 관리하기 위해 지시받은 작업내용에 대해 등록하고

등록한 Item에 관련 파일에 텍스트파일을 만들어서 상세 내용등을 기록했다.

그러다 보니 실제 작업시 체크를 해야 할때 엑셀등을 다시 만들어서 작업 한것과 안한것들을 구별해야되는 2중 작업들이 있었고.

스케쥴러에 등록되지 않으니 주간 보고서 같은게 요구될때는 일일이 찾아서 작성해야 될것 같아서 수정을 하기로 결정하였다.

 

 새로 수정된 방식은 작업이력들을 초기에 분할해서 자동으로 스케쥴러에 등록하는 방법으로 하루 하루 스케쥴들을 관리하도록 만들어졌다.

 

>> 기존방식

 : 작업지시 내역

  #작업내역어쩌고 저쩌고

    대상항목 a

    대상항목 b

    대상항목 c

 

이런게 있다면

   '#작업내역어쩌고 저쩌고' 를 작업 이력으로 등록하고 상세관리에서 파일을 만들어서 위 내용들을 모두 기록한다. excel로 만들어서 관리!

  -> 작업중에 또는 기간중에 엑셀을 열어서 색칠하면서 해당 항목들이 끝났는지 체크!!

  -> 이때 스케쥴러에는 해당 항목들이 등록되지 않았기에 스케쥴러가 휑하다... -> 파일이 등록된 것만 보여짐.

 

>> 수정된 방식

 위 작업지시내역을 통으로 등록처리 하면

   '#작업내역어쩌고 저쩌고' 를 작업 이력으로 등록하고 상세관리에 파일을 만들어서 위 내용들을 파일로 기록함. text파일로 만들어 관리!

 내역 정보를 스케쥴러에 기간을 포함하여 등록함.

 매일 매일 처리해야 되는 이력에 대한 정보를 확인할수 있음.

 

 작업내역을 2개를 등록하며 , 다음 숫자는 현재부터 ~ 작업소요예상일자 를 넣을수 있다.

 작업항목에 지정되지 않은 것은 작업내역에 기록된 일자를 기본값으로 하며

 모두 지정되지 않으면 당일처리를 목표로 한다.

 

## 수정.

> 입력 모드를 두가지로 만들었음. 기본은 One!

  하나의 입력창으로 등록하도록...

 > Multi를 만든 이유는.

  곰곰히 생각해보니...

   엊그제 처럼 5가지를 설명해서 작업내역을 받았을땐... 

  그대로 등록하려면 조금 번거롭게 되어서 이걸 멀티로 등록가능하도록 바꾸었다.

 

 

 

왼쪽은 등록된 작업이력 - 우측은 스케쥴러의 항목 

 

스케쥴러!  작업이력 외에도 직접 등록이 가능하며, 작업이력과 관련된 작업에 대하여 완료예정일전에도 완료처리가 가능하다.

 

 

작업완료 처리된 항목은 완료예정일 에서 회색처리!

 

작업이력 목록에서도 등록된 이력중 완료처리된 것과 일자, 설명등을 볼 수 있다.

 

 

 

 

 

 

 

 

 

 

'# 9) My Program(.NET)' 카테고리의 다른 글

Visual Studio AddIns] Code Tip History  (0) 2016.06.03
Visual Studio AddIns 개발  (0) 2016.04.29
PGMMNG] DataGrid 소스 제너레이터?  (0) 2015.10.01
SQL_FMT] 요소들을 분해!!  (0) 2015.09.09
SQL_FMT] 새로 만들어진...  (0) 2015.09.08

 

 음... SourceGrid를 이용해서 간단히 그리드관련 소스를 만드는 프로그램을 간단히 손보고 있다.

 

기본 프로그램에서 컬럼 목록들을 등록하고 폼을 띄우면 아래처럼 뜬다.

 

 

헤더를 설정하고 병합하거나 헤더를 설정하고 각 컬럼 값들을 설정할수 있다.

ID, 설명, Datatype 등은 현재 프로젝트에 사용하고 있는 그리드의 설정값들에 대한 목록정의 판넬이다. 언제든 교체가능하도록 떼어 놓았다.

 

 

헤더를 설정하고 우측 버튼 두개 중 필요한 걸 누르면... 그리드를 설정하는 프로그래밍 코드가 만들어져 클립보드에 복사된다.

 

소스를 붙여넣으면 간단히 프로그래밍 할 수 있게 된다.  매번 하나 하나 치거나 복사해서 수정하는 것보단 빠르니까...

 

아직 수정중이긴 한데 크게 바뀌는건 없다. 그리드 설정은 지금걸로 하니까..

 

디자이너를 다시 설계하고 있긴 한데... 왠지 뻘짓 같아서 ... ㅡ.,ㅡ;;; 이 정도로 끝낼까 싶기도 하고, 뭔가 좀 더 즐거운 일을 찾아야 되는데...

 

 

 

 근 9년 가까이 해왔던 개발 커뮤니티 Hoons.kr 어제부로 탈퇴했다.

 

 국내 개발 언어가 자바쪽으로 몰려서 그런지... 닷넷 개발 커뮤니티를 돌아다녀보면 귀신나올것 같은 분위기??? 사이트들이 죽어있는듯 하다. 원래 여름엔 좀더 없고 겨울에 좀 활동이 있긴한데 자바쪽을 안가봐서 그런건지 몰라도 느낌상 오래 못가겠다 싶을때도 있고... 그럭저럭 유지 되고 있는것 같아보이기도 하고... 하루에 두세번씩(휴일포함) 들어가서 질문 글 올라오면 도움이 될까해서 보는데, 이번에 골때린넘이 등장했다.

 

 요 몇일사이에 왜 덜떨어진 놈이 나타나서 자기가 최고인냥 구는 것도 보기 싫고, 그런넘과 엮여서 말(글) 섞는 것 또한 구역질 나고 열불나고...

정신건강에 해로울것 같아서 탈퇴했다.

 언어는 코딩을 해본적도 없다는 넘이 프로필에는 하루 하루 코딩을 하는데 초보라고 써놓고. 뭔가 용어사용에 대한 부적절하다는 의견을 써놓은 의도는 알겠지만 이런 저런 의견을 대면 지가 답을 정해놓고 다른 답이라 생각이 되면 까는 새끼... 자기는 고상한척 다하는데 과연... 어떤놈인지 궁금하긴 한데. 개발다니면서 만나지 않기를 바랄뿐... 그런 놈과 같은 류가 될까봐 겁난다.

 

 훈스 활동하면서 수많은 질문들을 보면서 모르는 것들은 직접 코딩해보고 찾아보면서 더 많이 배웠었는데... 이제 어쩔수 없이 훌훌 털어버리고 혼자 열심히 공부하고 답을 찾아야징... 다양한 생각들을 보는게 좋았던 곳인데, 그런곳이 없으니 카페활동이나 열심히 해야겠다.

 음 이참에 자바쪽에서 활동을 해볼까낭?

 

 

 

 

'--- 취미 > 생각하기' 카테고리의 다른 글

가르쳐 본다는 것...  (0) 2016.01.05
pc가 자다가 깨는 현상... 제거  (0) 2015.12.25
티브로드. 한빛넷... 해킹차단 서비스?  (0) 2015.09.19
메르스 좀 사라져라...  (0) 2015.07.01
프로젝트 마치고...  (0) 2013.10.01

 

 매달 엑셀로 은행 잔고등을 확인하는데 엑셀 백업하면서....

프로그램으로 만들어 관리해야지 했는데... 꾀 오래 손도 못대고 있다가 어제 잠자기전에 간단하게 만들었다.

 

 프로그램은 엑셀처럼 현재 잔고들을 입력하고 이전 이력을 따로 보관하도록 만들어놨다.

매달 나가는 금액들에 대한 내역이나 특이사항등을 기록하고 이력을 보관하도록 만들어놨다.

 

 

 

추후에 이력을 보거나 그래프등으로 자산변화등을 표기해볼까 한당.

 

가계부처럼 상세하게 기록하는 것은 없다. ( 가계부 못쓰겠더랑 ㅠㅠ 뭐랄까??? 어렵다. )

 

## 추가.

  조카들과 놀아주는게 역시 이제 체력이 ...

 조카들 가고 집에서 조금 손대봤다. 추석 특집영화 해적 재밌넹...

 초간단 가계부를 만들었다.

 왼쪽은 월 수입 내역, 오른쪽은 월(일별) 지출

 

수입과 지출에 대한 내용을 볼 수 있도록 만들었고... 물론 작성을 해야되는데...

10월부터는 엑셀을 대신해서 이걸로 써볼 것인다.

내 개발프레임웍을 간만에 써보니 가물 가물.. 그래도 적은 코드로 후딱 만들어서 사용이 가능하니 좋긴 하네.

이 페이지 기능 만드는데 딱 365라인이넹. 우연치 않게 딱 떨어지네...

 매일 매일 열어서 지출 내역을 써보고 매월 지출이 얼마인지 알 수 있겠넹..

 

 

 

'# 9) My Program(.NET) > JsFW40' 카테고리의 다른 글

PPT 헬퍼...  (0) 2022.10.13
LayerGrid] 다시 만듬.  (0) 2015.10.27
그리드 폼 만들기 (2)  (0) 2014.03.18
그리드 폼 만들기 (1)  (0) 2014.03.15
PRJMNG] JS 디자이너~  (0) 2012.12.27

 

  오늘 전화한통을 받았다.

 

 티브로드 인터넷과 TV를 사용하고 있는데 인터넷 해킹관련해서 차단서비스를 1달간 무료이용시켜주고

종료될때 문자보내면 받고 종료시키려면 전화주면 종료해준단다... 3,300원짜리!!!

 

 이런 건 자신들 망관리를 위해서라도 기본으로 가지고 가야되는거 아닌가? 그걸 서비스로 만들어서 팔겠다니?

서비스 종료일자 확인해서 옮겨야겠다.

 

'--- 취미 > 생각하기' 카테고리의 다른 글

pc가 자다가 깨는 현상... 제거  (0) 2015.12.25
훈스를 탈퇴!  (0) 2015.09.29
메르스 좀 사라져라...  (0) 2015.07.01
프로젝트 마치고...  (0) 2013.10.01
GUI Design Studio  (0) 2013.09.06

 

오늘 ( 2015-10-02 ) CodeProject 갔더니.

http://www.codeproject.com/Tips/1035207/Number-Only-Behaviour-for-WPF

 

내가 만든 프로그램 버그 : Ctrl + C눌렀는데 복사가 안되고 붙여넣기가 된다?

>> 집에서 수정해놓았던 소스는 C , V 코드가 이미 수정되어 있네...

 

>> 숫자 이외에 붙여넣기 할때 붙여지는 현상

  SetValue 에서 valueString의 데이타 타입확인 후 변환 후 콤마 찍고 바인딩 하도록 수정함!

 

#########################################################################

 

WPF Numeric 컨트롤이 없을줄이야 ㅡ.,ㅡ^

 

구글링 해도 없네..?

 

거기다가 ... ErrorProvidor가 없어 ㅡㅡ;?

 

예제들이 모두 바이딩을 해야 되다뉘???

 

 

 

 

쨔안!~~~ 만들었다.

 

컨트롤을 만들었다기 보다.. Textbox에 Template 을 이용해서 만들었다.

 

위 예로는 5, 2 <-- Numeric( 5, 2 ) 로 만들어진 컬럼을 대상으로 컨트롤 입력/출력을 함!!

 

입력할때마다 콤마 콤마가 자동으로 위치잡고 소수점 찍으면 뒤로는 한자리씩 교체되고...

 

유효성 체크도 한방에 주르륵... 처리 해주고..

 

이게 컨트롤로 만든게 아니라서 ... 뭐... 필요할때쯤 되면 만들어 보든가~

 

### 디버깅..

 

 

 

ReadOnly 스타일을 넣었고,

정수만 처리할때 - 자리를 처리 하지 않도록 뺌.

Control + c, v, x 처리.

 

디버깅을 하다가 예상하지 못한 일을 격었다.

 

SetValue( NumberText1, 99999999.99999999999 )   로 지정하였을때!!

 

double 인데 문자열로 변환 했더니 반올림이 되어서 나온다?

 

음... 일단 컨트롤에 자리수가 8, 2 이기 때문에 소수 2자리 뒤에 문자들은 반올림 없이 잘라내려고

 

문자열로 만드는 과정에서 당황했었다.

 

찾은 방법은 r !! n, d, x등등 봤는데... r... 이건 반올림 없이 문자열로 만들어준다.

뒤에 자르고 콤마를 넣어주며 마무리!!!

 

### 수정본 ### 소수점처리가 잘못되어있었넹... , 파라미터 부분에서 포맷도 제거 함.

 

private string GetNumberFormat(object dm, NumericTextBoxInfo info)
        {
            string number = "" + dm;

            if (info.Scale > 0)
            {
                // 소수점뒷자리를 잘라냄.
                if (number.IndexOf('.') >= 0)
                {
                    string[] nums = number.Split('.');
                    number = nums[0] + ".";
                    if (nums[1].Length > info.Scale)
                    {
                        number += nums[1].Substring(0, info.Scale);
                    }
                    else
                    {
                        number += nums[1].PadRight(info.Scale, '0');
                    }
                }
                else
                { 
                    number = number + "." + "".PadRight(info.Scale, '0');
                }
            }
            else
            {
                if (number.IndexOf('.') >= 0)
                {
                    number = number.Remove(number.IndexOf('.'));
                }
            }
            /*뒤에서부터 콤마 찍고 온다..*/
            int start = number.Length;
            if (number.IndexOf('.') > 0) {
                start = number.IndexOf('.');
            }

            for (int end = start - 3; end >= 0; end -= 3 )
            {
                number = number.Insert(end, ",");
            }

            return number.TrimStart(',');
        }

 

 

하핫.. 재미있당.

 

소스 hidden~ ( 갱신 20150915 )

숫자를 한글로 변환하는 method.

 

소숫점은... 에러남 크크... 고치면 되겠지머

 

 

        string ConvertNumberToKoreanCurrency(string txt)
        {
            string kornum = "영일이삼사오육칠팔구";
            string[] kor = "|십|백|천".Split('|');
            string[] kor2 = "|만|억|조|경".Split('|');
            string numString = "" + StringConvertToDecimal(txt);
            List<string> korlst = new List<string>();
            int korIndex = 0;
            for (int i = numString.Length - 1; i >= 0; i--, korIndex++)
            {
                int idx = Convert.ToInt16("" + numString[i]);

                if (korIndex % 4 == 0)
                {
                    korlst.Insert(0, "" + kor2[korIndex / 4] + " ");
                }

                if (idx != 0)
                {
                    korlst.Insert(0, "" + kor[korIndex % 4]);
                    if (korIndex > 1 && idx == 1) continue;
                    korlst.Insert(0, "" + kornum[idx]);
                }
            }
            return string.Join("", korlst.ToArray());
        }

 

        decimal StringConvertToDecimal(string txt)
        {
            decimal value = 0m;
            decimal.TryParse(("" + txt).Replace(",", ""), out value);
            return value;
        }

 

  뭐라고 써야 좋을까??? 딱히... 떠오르지는 않네?

 

다양한 컨트롤들의 이벤트들이 즉시 호출되지 않고 일정 시간내에 다른 컨트롤들의 이벤트발생이 없으면

 

지정된 메서드를 호출하는 형태를 만들었다.

 

버튼1, 버튼2, 라디오1, 라디오2 가 있을때

 

버튼들을 1초내에 클릭 또는 체크시 지정된 메서드를 바로 호출하는 것이 아니고 기다린다!

 

1초내에 다른 버튼의 이벤트가 발생하면 계속 기다려주다가 일정 시간동안 이벤트가 없으면 지정된 메서드를 호출한다.

 

이게 필요한곳이 있어서 샘플로 만들어봤을뿐...  다른 개발자분이 맡아서 진행하는 부분이라 ...

 

 

5회 연속 이벤트를 여기저기 컨트롤을 건드려 이벤트를 발생하였다.

 

시간이 되어 3125이벤트 발생 결과를 뿌려주고 있다.

 

프로그래스바는 100%가 되면 이벤트 호출이 되는 시점을 직접 볼 수 있도록 붙여봤다.

소스 (hidden)!

 

 

 망한 케이스

 

쿼리를 처음 정해놓은 keyword 목록으로 .Replace( ) 를 이용해서 치환하는 방법으로

 

"\r\n" + " " + keyword + " " + "\r\n" 

 

위 같은 방법으로 여러 형태를 만들어서 각 요소들을 분리해냈었다.

 

결국엔 실패.. * <-- 을 바꿀때 이상한 동작으로 무한루프를 돈다거나 원하는데로 분리가 안되었다.

 

또는 '문자열    문자열... '  싱글 쿼테이션을 만났을때 ...;;; 공백을 다 짤라먹든가 문장인데 잘려 나갔다.

 

그래서 우선 쪼개진걸로 계속 개발을 진행하다가 바꾸었다.

 

성공한 케이스

 

 각 char을 차례로 지나가면서 공백을 만나거나 특정 문자열들을 만났을때 문자열을 걸러내는 작업을 했다.

 

ex)   select 'aa bb',  '  랄 ''가나'' 라'  

이런 쿼리를 샘플로 만들어서

아래 Parser 를 돌리면

 

"select"

"'aa bb'"

"' 랄 ''가나'' 라'

 

세 묶음으로 분리되어진다.

쿼리를 분리하기위해 좀더 손봤다. 주석문을 건너뛰는 동작으로 대상 쿼리요소를 제외시키는 방법을 썼다.

 

 private List<string> Parser(string txt)
        {
            string content = txt.Trim().Replace(Environment.NewLine, " ");

            List<string> lst = new List<string>();

            List<char> chr = new List<char>();
            
            char old = '\0';

            int cnt = 0;

            // 양사이드 빼고!!
            for (int loop = 0; loop < content.Length; loop++)
            {
                char ch = content[loop];
                char nch = '\0';
                if (loop + 1 < content.Length)
                {
                    nch = content[loop + 1];
                }

                if (ch == '\'')
                {
                    cnt++;
                    chr.Add(ch);

                    if (nch == '\'')
                    {
                        cnt++;
                        chr.Add(nch); loop++;
                    }

                    if (cnt % 2 == 0)
                    {
                        lst.Add(string.Join("", chr.ToArray()).Trim());
                        chr.Clear();
                        cnt = 0;
                    }
                    continue;
                }
                else if( cnt > 0)
                {
                    chr.Add(ch);
                    continue;
                }


                if (ch == ' ' && old != ch)
                {
                    chr.Add(ch);
                    lst.Add(string.Join("", chr.ToArray()).Trim());
                    chr.Clear();
                }
                else if (ch == '(' && nch == ')')
                {
                    chr.Add(ch);
                    lst.Add(string.Join("", chr.ToArray()).Trim());
                    chr.Clear();
                }
                else if (ch == ',')
                {
                    lst.Add(string.Join("", chr.ToArray()).Trim());
                    chr.Clear();
                    chr.Add(ch);
                    lst.Add(string.Join("", chr.ToArray()).Trim());
                    chr.Clear();
                }
                else if (ch == '(' || ch == ')')
                {
                    lst.Add(string.Join("", chr.ToArray()).Trim());
                    chr.Clear();
                    chr.Add(ch);
                    lst.Add(string.Join("", chr.ToArray()).Trim());
                    chr.Clear();
                }
                else
                {
                    chr.Add(ch);
                }
                old = ch;
            }
            if( chr.Count > 0)
                lst.Add(string.Join("", chr.ToArray()).Trim());
            return lst;
        }

 

 

내부 소스는 모두 뜯어서 새로 만들어냈다.

 

사전 기능은 컬럼과 테이블에 부착될 주석문!

다량으로 {key\t설명\r\n} 형태로 붙여넣기가 가능하다.

 

 프로그래밍 하면서 가장 힘들었던건 case문 처리인데...  워낙 다양하게 작성이 가능하여

 

여러 타입을 검토하고 작성해보다가

  case {요소}

          when {요소} then {요소}

          when {요소} then {요소}

          else {요소}

  end

위와 같은 형태로 잡았다.

 case  when {요소} then {요소}

          when {요소} then {요소}

          else {요소}

  end

여기서 {요소} 는 컬럼이 될수도, function이 될수도 case문이 될수도 있다!

 

그래서 where문에 조립이 될때

 

col = case when col1 = 0 then  0

      else 1

end

이런 형태로 표시된다.

 

이제 여러 쿼리들을 넣으면서 디버깅 하면서 탄탄하게 만들어봐야지...

 

수정]  디버깅을 통해서 조금씩 더 다듬고 있다.

insert into tablename ( 일대

into가 빠지면. tableName (로 표시되는 처리를 체크해서 (가 아래로 내려가 자기 자리 찾아가도록.

 

into가 대/소문자 처리 할때 영향을 안받아서 바뀌도록.

 

update table set col1 = 1, col2 = 2  이런 쿼리에서

col1에 대한 설명문구가 제대로 표시되도록 수정.

 

기타 잔잔한 버그들 잡고 있다.

 

프로젝트를 진행하면서 조금이라도 안해본 쿼리처럼 보인다거나 좀 긴 쿼리들은 넣어서 제대로 변형이 되는지 체크중이다.

 

 

'# 9) My Program(.NET)' 카테고리의 다른 글

PGMMNG] DataGrid 소스 제너레이터?  (0) 2015.10.01
SQL_FMT] 요소들을 분해!!  (0) 2015.09.09
SQL_FMT] 새로 다시 만드는 쿼리 포멧터  (0) 2015.08.19
쿼리포맷터 III  (2) 2015.05.24
쿼리포맷터II  (0) 2015.05.05