8require_once(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/catalog/general/store_docs.php");
22 foreach (
GetModuleEvents(
"catalog",
"OnBeforeDocumentAdd",
true) as $arEvent)
30 if (array_key_exists(
'DATE_CREATE',
$arFields))
34 if (array_key_exists(
'DATE_MODIFY',
$arFields))
54 self::increaseDocumentTypeNumber(
$arFields[
'DOC_TYPE']);
60 $arInsert =
$DB->PrepareInsert(
"b_catalog_store_docs",
$arFields);
62 $strSql =
"INSERT INTO b_catalog_store_docs (".$arInsert[0].
") VALUES(".$arInsert[1].
")";
71 $typeTableClass = StoreDocumentTableManager::getTableClassByType(
$arFields[
'DOC_TYPE']);
84 PullManager::getInstance()->sendDocumentAddedEvent([
106 private static function saveElements($documentID, $elements)
108 foreach($elements as $arElement)
110 $lastDocElementId = 0;
111 if(isset($arElement[
'ID']))
113 unset($arElement[
'ID']);
115 $arElement[
'DOC_ID'] = $documentID;
116 if (is_array($arElement))
120 if(isset($arElement[
'BARCODE']) && $lastDocElementId && is_array($arElement[
'BARCODE']))
122 foreach($arElement[
'BARCODE'] as $barcode)
125 'DOC_ID' => $documentID,
126 'DOC_ELEMENT_ID' => $lastDocElementId,
127 'BARCODE' => $barcode,
137 if (empty($arSelectFields))
138 $arSelectFields =
array(
"ID",
"DOC_TYPE",
"SITE_ID",
"CONTRACTOR_ID",
"CURRENCY",
"STATUS",
"DATE_DOCUMENT",
"TOTAL",
"DATE_STATUS",
"COMMENTARY");
141 "ID" =>
array(
"FIELD" =>
"CD.ID",
"TYPE" =>
"int"),
142 "DOC_TYPE" =>
array(
"FIELD" =>
"CD.DOC_TYPE",
"TYPE" =>
"char"),
143 "SITE_ID" =>
array(
"FIELD" =>
"CD.SITE_ID",
"TYPE" =>
"string"),
144 "CURRENCY" =>
array(
"FIELD" =>
"CD.CURRENCY",
"TYPE" =>
"string"),
145 "CONTRACTOR_ID" =>
array(
"FIELD" =>
"CD.CONTRACTOR_ID",
"TYPE" =>
"int"),
146 "DATE_CREATE" =>
array(
"FIELD" =>
"CD.DATE_CREATE",
"TYPE" =>
"datetime"),
147 "DATE_MODIFY" =>
array(
"FIELD" =>
"CD.DATE_MODIFY",
"TYPE" =>
"datetime"),
148 "DATE_DOCUMENT" =>
array(
"FIELD" =>
"CD.DATE_DOCUMENT",
"TYPE" =>
"datetime"),
149 "DATE_STATUS" =>
array(
"FIELD" =>
"CD.DATE_STATUS",
"TYPE" =>
"datetime"),
150 "CREATED_BY" =>
array(
"FIELD" =>
"CD.CREATED_BY",
"TYPE" =>
"int"),
151 "MODIFIED_BY" =>
array(
"FIELD" =>
"CD.MODIFIED_BY",
"TYPE" =>
"int"),
152 "RESPONSIBLE_ID" =>
array(
"FIELD" =>
"CD.RESPONSIBLE_ID",
"TYPE" =>
"int"),
153 "STATUS_BY" =>
array(
"FIELD" =>
"CD.STATUS_BY",
"TYPE" =>
"int"),
154 "STATUS" =>
array(
"FIELD" =>
"CD.STATUS",
"TYPE" =>
"char"),
155 "TOTAL" =>
array(
"FIELD" =>
"CD.TOTAL",
"TYPE" =>
"double"),
156 "COMMENTARY" =>
array(
"FIELD" =>
"CD.COMMENTARY",
"TYPE" =>
"string"),
157 'TITLE' => [
'FIELD' =>
'CD.TITLE',
'TYPE' =>
'string'],
158 'ITEMS_ORDER_DATE' => [
'FIELD' =>
'CD.ITEMS_ORDER_DATE',
'TYPE' =>
'datetime'],
159 'ITEMS_RECEIVED_DATE' => [
'FIELD' =>
'CD.ITEMS_RECEIVED_DATE',
'TYPE' =>
'datetime'],
160 'DOC_NUMBER' => [
'FIELD' =>
'CD.DOC_NUMBER',
'TYPE' =>
'string'],
161 'WAS_CANCELLED' => [
'FIELD' =>
'CD.WAS_CANCELLED',
'TYPE' =>
'char'],
163 "PRODUCTS_ID" =>
array(
"FIELD" =>
"DE.ID",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
164 "PRODUCTS_DOC_ID" =>
array(
"FIELD" =>
"DE.DOC_ID",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
165 "PRODUCTS_STORE_FROM" =>
array(
"FIELD" =>
"DE.STORE_FROM",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
166 "PRODUCTS_STORE_TO" =>
array(
"FIELD" =>
"DE.STORE_TO",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
167 "PRODUCTS_ELEMENT_ID" =>
array(
"FIELD" =>
"DE.ELEMENT_ID",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
168 "PRODUCTS_AMOUNT" =>
array(
"FIELD" =>
"DE.AMOUNT",
"TYPE" =>
"double",
"FROM" =>
"INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
169 "PRODUCTS_PURCHASING_PRICE" =>
array(
"FIELD" =>
"DE.PURCHASING_PRICE",
"TYPE" =>
"double",
"FROM" =>
"INNER JOIN b_catalog_docs_element DE ON (CD.ID = DE.DOC_ID)"),
172 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
174 if (empty($arGroupBy) && is_array($arGroupBy))
176 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_store_docs CD ".$arSqls[
"FROM"];
177 if (!empty($arSqls[
"WHERE"]))
178 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
179 if (!empty($arSqls[
"GROUPBY"]))
180 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
189 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_store_docs CD ".$arSqls[
"FROM"];
190 if (!empty($arSqls[
"WHERE"]))
191 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
192 if (!empty($arSqls[
"GROUPBY"]))
193 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
194 if (!empty($arSqls[
"ORDERBY"]))
195 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
198 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
199 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
201 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
203 if ($boolNavStartParams && 0 >= $intTopCount)
205 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_store_docs CD ".$arSqls[
"FROM"];
206 if (!empty($arSqls[
"WHERE"]))
207 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
208 if (!empty($arSqls[
"GROUPBY"]))
209 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
213 if (empty($arSqls[
"GROUPBY"]))
220 $cnt =
$dbRes->SelectedRowsCount();
225 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
229 if ($boolNavStartParams && 0 < $intTopCount)
231 $strSql .=
" LIMIT ".$intTopCount;
239 private static function increaseDocumentTypeNumber(
string $type): void
241 $name = self::getDocumentTypeNumberName(
$type);
242 $value = (int)Option::get(
'catalog',
$name) + 1;
243 Option::set(
'catalog',
$name, $value);
248 $value = Option::get(
250 self::getDocumentTypeNumberName(
$type)
252 return Loc::getMessage(
253 'CATALOG_STORE_DOCUMENT_TITLE_DEFAULT_NAME_' .
$type,
255 '%DOCUMENT_NUMBER%' => $value,
262 $value = (int)Option::get(
264 self::getDocumentTypeNumberName(
$type)
266 return Loc::getMessage(
267 'CATALOG_STORE_DOCUMENT_TITLE_DEFAULT_NAME_' .
$type,
269 '%DOCUMENT_NUMBER%' => $value,
274 private static function getDocumentTypeNumberName(
string $type): string
276 return 'store_document_numbers_' .
$type;
static PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
static getList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static getNextDocumentNameByNumber(string $type)
static getCurrentDocumentNameByNumber(string $type)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
global $USER_FIELD_MANAGER
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)