日付計算の方法

UiPath初心者です。
以下のデータテーブルと、会社休日表を元に日付計算を行いたいです。
1行ずつ繰り返し処理とし、
生産予定日 ”ー” 積上日数(ただし会社休日を除く稼働日で計算)= 納期
とし、納期を払い出ししたいです。

方法を教えて頂きたく、よろしくお願いいたします。

image

【会社休日表】
image

会社休業日をどう考えるかは別として、日数の加減算には、AddDaysという日付型のメソッドがあります。

代入
左辺:Row.Item(“納期”)
右辺:DateTime.Parse(Row.Item(“生産予定日”).ToString).Adddays(Ctype(Row.Item(“積上日数”).ToString) * -1)

文字列にした生産予定日を、DateTime型に変換し、そこに積上日数*-1とした値を加算(マイナスなので、実質減算)した結果を納期に入れる。

なるほど!
AddDaysという日付型のメソッドがあるのですね!
ありがとうございます。

ただ、どうしても会社休業日を考慮した 最悪の納期を算出したくて。。

日付のAddDaysメソッドに関しては、こちら。
その他のメソッドも左のフレームに表示されているのでご覧ください。

休業日を勘案するには、カウンタを用意し、
-1した日付が休業日であったら何もしない、営業日だったら+1し、積上日数と一致するまで繰り返していく。

その為には、休業日情報を記載したEXCELなどを用意し、読みこんでDataTableにしておくなど、いろいろと方法はあると思いますよ

曜日に関しては、 DateTime.DayOfWeek プロパティがありますので、その戻り値が [DayOfWeek.Sunday]だったりをご確認ください。

む。。。難しくて、、、理解が、、、涙
頑張ります。。

日付計算の方法.zip (11.4 キロバイト)

メリークリスマス!

2 Likes

サンタさん🎅ありがとうございます!
クリスマスプレゼント頂きました!

1 Like

明けましておめでとうございます。
今年もよろしくお願いいたします。
昨年頂いたクリスマスプレゼントですが、
開封し中身を楽しんでいたのですがどうしても理解できない場所があり。。
と言ってもまだ中身が分からず最初で躓いているのですが、、
2点教えて頂けませんか。。

■まず、2つのrobotを組み合わせるのが初めて見たもので💦
生産予定日ー積上日数のrobotで、
土日を省き、残った日付が「休業日」に一致しないか調べて。。という中で、

この部分の「日数」 と言うのがどこから来たのか分かりませんでした💦

■また、この後で、「繰り返しをブレーク」と言う箇所があるのですが、
これは、2日以上連続の休み(お正月休暇など)でも繰り返して日数を遡らずに
そこで終わるのかそれとも rowだから。。と分からなくなってしまいました。

もう1つのrobot のinvoke 部分はまだまだ解明できていません。
ネット検索しまくり中です、、。
まずはこの2点を検索しても分らなかったため教えて頂きたく、よろしくお願いいたします。

日数は適当に作成した変数で、積上日数になったかどうかの判定用に使っています。

image

繰り返しをブレイクは、以降の繰り返し処理を中止させるもので、納期が休業日であったら、次の納期計算に回す必要があって、以降のRow中の休業日の比較は不要となるから設置しています。

INVOKEに関しては、必要な情報を「生産予定日-積上日数」に渡して、「生産予定日-積上日数」で計算した結果を得るための機能です。

1 Like

ご丁寧にありがとうございます。

日数の部分なのですが、
積上日数と比べるのは分かるのですが、その「日数」そのもの(比較するもの)を
どこから取って来てるのかが分かりませんでした。。
申し訳ございません。。

また、生産予定日と積上日数は、別ファイルより取ってきて繰り返しをしたければ、
そちら側のファイルの以下の部分を繰り返し処理にすれば良いと思ったら良いでしょうか。
image

日数はとってくるものを格納するのではなく、INVOKEされた都度変数として確保され、そこには初期値として0が設定されているものです。ですので、繰り返しの前に代入アクティビティで、「日数 = 0」として初期化しておけば、混乱させずにすみましたね<m(__)m>

「繰り返し処理にすれば良いと思ったら良い」です!

サンプルは、その繰り返し処理を意識して、別のXAMLファイルにしました(^^♪

まずは、繰り返し処理のなかでINVOKEしてみてください。

==================
どれくらいの量があるか分からなかったので、考慮しなかったのですが、
「生産予定日-積上日数.xaml」で「休業日カレンダー.xlsx」を開いていますが、
Main.xaml側で開いて、休業日データテーブルを、「生産予定日-積上日数.xaml」に引数として渡してあげてあげれば、「生産予定日-積上日数.xaml」で「休業日カレンダー.xlsx」を開くことがいらなくなるので、高速化が見込めますよ。

1 Like

ありがとうございます。
日数についてはそのような使い方があったのですね。

また、別のXAMLファイルと言う考え方が初めてでビックリだったのですが、
繰り返し処理が重なる場合に便利になるのですね。
大変勉強になります。

件数については、かなりあるので高速化がありがたいです。
ただ。。
引数がイマイチ分からないのですが、、

Main.xaml側で開いて、休業日データテーブルを、「生産予定日-積上日数.xaml」に引数として渡してあげてあげれば、「生産予定日-積上日数.xaml」で「休業日カレンダー.xlsx」を開くことがいらなくなるので、高速化が見込めますよ。

と教えて頂いておりますが、この部分はMain側で開いてDTとして保存してるのでは??となってしまい分かりませんでした。。。
また、「生産予定日-積上日数.xaml」の引数を見ると以下のようになっているので、
もしかして。。はなっち様が高速化してくれてる??と思ってしまったり。。です。
image

ふっふっふっ…発展して頂くための下拵えでした!:sweat_drops:

1 Like

やっぱり最初から対応して頂いてたのですね!
ありがとうございます☆ミ

あれ?実装はしていなかったと…

はい!まだです!!
理解が出来ていなかったのでまずは理解してから。。でした^^;
実はいつもそうさせて頂いておりました。

すみません!
invoke の後の1行書き込みはどこに書き込みになりますか。
DTやExcel等、書き込み先と思われるものが分かりませんでした。

お疲れ様です。
繰り返し部分を作ってみたのですが、
dtから取って来る方法がおかしいのかエラーです、、

row(0)はEXCEL上日付のように見えていますが、DateTime型ではないので、DateTime.Parse(row(0).ToString)として日付型に変換する必要があります。

同様に、
row(9)はEXCEL上数値のように見えていますが、Int32型ではないので、Int32.Parse(row(9).ToString)としてInt32型に変換する必要があります。

Excelシート上の値を読んだとき、その列の属性はObject型になります。

1 Like

これはログファイルに出力、あるいはStudioでしたら、一番下の「出力」パネルになります。

image