odata-1c icon indicating copy to clipboard operation
odata-1c copied to clipboard

Возможно ли составить запрос для изменения в табличной документа

Open smoln opened this issue 5 years ago • 1 comments

Добрый день, использую Вашу библиотеку в проекте, в принципе проблем не возникает, работает стабильно. Возникла необходимость изменять и обновлять информацию в табличной части, разных документов, класс update относится только к изменениям внешней части, не подскажите как мне провалиться в табличную часть и изменить определенную строку, возможно добавить новую, используя тот функционал который сейчас есть, или сейчас это невозможно?

smoln avatar Sep 27 '19 13:09 smoln

Добрый день, использую Вашу библиотеку в проекте, в принципе проблем не возникает, работает стабильно. Возникла необходимость изменять и обновлять информацию в табличной части, разных документов, класс update относится только к изменениям внешней части, не подскажите как мне провалиться в табличную часть и изменить определенную строку, возможно добавить новую, используя тот функционал который сейчас есть, или сейчас это невозможно?

Добрый день! Спасибо за обратную связь и извиняюсь за задержку с ответом. В рамках наших задач мы всегда обновляли всю табличную часть у документа. Так, например, в документе ЗаказКлиента наш код выглядит примерно так (часть кода опущена):

...
        $odata = [
            'Number'=>$doc_id,
            'Date'=>date('c',strtotime($o->add_date)),
            'ЖелаемаяДатаОтгрузки'=>date('c',strtotime($od_date)),
            'ДатаОтгрузки'=>date('c',strtotime($od_date)),
            'Организация_Key'=>'2b3e8ebe-c1c2-11e6-d495-00155dd9fc47',
            'Партнер_Key'=>$partner_id,
            'Контрагент_Key'=>$customer_id,
            'Соглашение_Key'=>'d8e27e68-c370-11e6-d495-00155dd9fc47',
            'Сделка_Key'=>'00000000-0000-0000-0000-000000000000',
            'Валюта_Key'=>'ec4378f4-c1b3-11e6-3b95-00155dd9fc47',
            'СуммаДокумента'=>$o->fullTotal,
            'ГрафикОплаты_Key'=>'00000000-0000-0000-0000-000000000000',
            'Склад_Key'=>'4a1b565a-c1c2-11e6-d495-00155dd9fc47',
            'Менеджер_Key'=>$o->userManager && $o->userManager->odata_key ? $o->userManager->odata_key : '00000000-0000-0000-0000-000000000000',
            'НеОтгружатьЧастями'=>true,
            'Статус'=>'КОбеспечению',
            'МаксимальныйКодСтроки'=>count($products)+1,
            'ПорядокОплаты'=>'РасчетыВРубляхОплатаВРублях',
            'ЭтапыГрафикаОплаты'=>[
                [   
                    'LineNumber' => '1',
                    'ВариантОплаты' => 'КредитПослеОтгрузки',
                    'ДатаПлатежа' =>date('c',strtotime($od_date)),
                    'ПроцентПлатежа' => 100,
                    'СуммаПлатежа' => $o->fullTotal,
                    'ПроцентЗалогаЗаТару' => 0,
                    'СуммаЗалогаЗаТару' => 0,
                ],
            ],
        ];
        if($comment) {
            $odata['Комментарий'] = $comment;
        }   

        $goods = [];
        $idx = 0;
        foreach($products as $idx=>$op) {
            $goods[] = [
                'LineNumber'=>$idx+1,
                'КодСтроки'=>$idx+1,
                'ДатаОтгрузки'=>$odata['ЖелаемаяДатаОтгрузки'],
                'Номенклатура_Key'=>$odata_p_id,
                'Характеристика_Key'=>$odata_v_id,
                'Упаковка_Key'=>'00000000-0000-0000-0000-000000000000',
                'КоличествоУпаковок'=>$qnt,
                'Содержание'=>$dm_p->DMArtName,
                'Количество'=>$qnt,
                'ВидЦены'=>'b9bb5abe-c370-11e6-d495-00155dd9fc47',
                'СтавкаНДС'=>'БезНДС',
                'СуммаНДС'=>0,
                'Цена'=>$price,
                'Сумма'=>$sum,
                'СуммаСНДС'=>$sum,
                'ПроцентРучнойСкидки'=>$op->discount,
                'СуммаРучнойСкидки'=>number_format($price*$qnt*($op->discount/100),2,'.',''),
                'Склад_Key'=>'4a1b565a-c1c2-11e6-d495-00155dd9fc47',
                'ВариантОбеспечения'=>'Отгрузить',
            ];
        }
        $odata['Товары'] = $goods;
        $data = $client->{'Document_ЗаказКлиента'}->update($id,$odata);

Какую-либо возможность обновить табличную часть мы не тестировали, хотя идея мне кажется интересной. В принципе, реализовать что-либо подобное не сложно, мы подумаем над этим.

Если у вас есть возможность помочь с реализацией этой задачи, то с радостью примем пул реквест )

ab-kily avatar Oct 08 '19 07:10 ab-kily