Index: branches/version-2_5-dev/data/class/SC_Product.php
===================================================================
--- branches/version-2_5-dev/data/class/SC_Product.php	(revision 19689)
+++ branches/version-2_5-dev/data/class/SC_Product.php	(revision 19695)
@@ -591,4 +591,27 @@
                                         MDB2_FETCHMODE_ORDERED);
         return $paymentIds;
+    }
+
+    /**
+     * 商品規格に支払方法を設定する.
+     *
+     * TODO 現在は DELETE/INSERT だが, UPDATE を検討する.
+     *
+     * @param integer $productClassId 商品規格ID
+     * @param array 設定する支払方法IDの配列
+     * @return void
+     */
+    function setPaymentOptions($productClassId, $paymentIds) {
+        $val['product_class_id'] = $productClassId;
+
+        $objQuery =& SC_Query::getSingletonInstance();
+        $objQuery->delete('dtb_payment_options', 'product_class_id = ?', array($productClassId));
+        $rank = 1;
+        foreach ($paymentIds as $paymentId) {
+            $val['payment_id'] = $paymentId;
+            $val['rank'] = $rank;
+            $objQuery->insert('dtb_payment_options', $val);
+            $rank++;
+        }
     }
 
Index: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php	(revision 19688)
+++ branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php	(revision 19695)
@@ -145,4 +145,5 @@
                 $productStatus= $objProduct->getProductStatus(array($_POST['product_id']));
                 $this->arrForm['product_status'] = $productStatus[$_POST['product_id']];
+                $this->arrForm['payment_ids'] = $objProduct->getEnablePaymentIds(array($this->arrForm['product_class_id']));
 
                 // DBデータから画像ファイル名の読込
@@ -638,4 +639,9 @@
             }
 
+            // 支払方法チェック
+            if (empty($array['payment_ids'])) {
+                $objErr->arrErr['payment_ids'] = "※ 支払方法は、いずれかを選択してください。<br />";
+            }
+
             //ダウンロード商品チェック
             if($array['product_type_id'] == PRODUCT_TYPE_DOWNLOAD) {
@@ -882,4 +888,7 @@
 
         }
+
+        $objProduct = new SC_Product();
+        $objProduct->setPaymentOptions($sqlval['product_class_id'], $arrList['payment_ids']);
     }
 
Index: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php	(revision 19670)
+++ branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php	(revision 19695)
@@ -54,4 +54,5 @@
         $this->tpl_subno = 'product';
         $this->tpl_subtitle = '商品登録(商品規格)';
+        $this->arrPayments = SC_Helper_DB_Ex::sfGetIDValueList("dtb_payment", "payment_id", "payment_method");
     }
 
@@ -290,4 +291,8 @@
                 $objQuery->insert("dtb_products_class", $pVal);
             }
+
+            // 支払方法登録
+            $objProduct = new SC_Product();
+            $objProduct->setPaymentOptions($pVal['product_class_id'], $arrList['payment_ids:'.$i]);
             $i++;
         }
@@ -355,4 +360,9 @@
                 if($array["stock_unlimited:".$no] != '1') {
                     $objErr->doFunc(array("在庫数", "stock:".$no, AMOUNT_LEN), array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
+                }
+
+                // 支払方法チェック
+                if (empty($array['payment_ids:' . $no])) {
+                    $objErr->arrErr['payment_ids:' . $no] = "※ 支払方法は、いずれかを選択してください。<br />";
                 }
 
@@ -442,19 +452,29 @@
         $this->arrForm['select_class_id2'] = $this->arrForm["class_id2"];
         $this->arrClassCat = $this->getAllClassCategory($this->arrForm["class_id1"], $this->arrForm["class_id2"]);
+        $objProduct = new SC_Product();
         $total = count($this->arrClassCat);
+        // XXX $i = 1 にすれば ($i+1) は $i で良い？
         for ($i = 0; $i < $total; $i++) {
             if ($existsValue) {
                 foreach ($productsClass as $key => $val) {
-                	if(!$usepostValue){
-                    	$this->arrForm[$key . ":" . ($i+1)] = $val;
-                	}
+                    if(!$usepostValue){
+                        $this->arrForm[$key . ":" . ($i+1)] = $val;
+                    }
                 }
             }
             foreach ($existsProductsClass[$i] as $key => $val) {
-            	if(!$usepostValue){
-                	$this->arrForm[$key . ":" . ($i+1)] = $val;
-            	}
-                if($key=="down"){
+                if(!$usepostValue){
+                    $this->arrForm[$key . ":" . ($i+1)] = $val;
+                }
+
+                switch ($key) {
+                case 'down':
                     $this->objDownFile->addFile("ダウンロード販売用ファイル". ":" . ($i+1), 'down_realfilename'. ":" . ($i+1), explode(",", DOWNLOAD_EXTENSION),DOWN_SIZE, true, 0, 0);
+                    break;
+
+                    case 'product_class_id':
+                        $this->arrForm["payment_ids:" . ($i+1)] = $objProduct->getEnablePaymentIds(array($val));
+                        break;
+                default:
                 }
             }
