1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
bizprocdocumentlists.php
См. документацию.
1<?php
2
3namespace Bitrix\Lists;
4
5use Bitrix\Main\Loader;
6use Bitrix\Main\Localization\Loc;
7use Bitrix\Main\ModuleManager;
8
9Loc::loadMessages(__FILE__);
10
11if (!Loader::includeModule('bizproc'))
12{
13 return;
14}
15
17{
18 public static function getEntityName()
19 {
20 return Loc::getMessage('LISTS_BIZPROC_ENTITY_LISTS_NAME');
21 }
22
30 public static function getDocument($documentId)
31 {
32 $args = func_get_args();
33 $select = $args[2] ?? [];
34 $documentId = (int)$documentId;
35 if ($documentId <= 0)
36 {
37 throw new \CBPArgumentNullException('documentId');
38 }
39
40 $result = [];
41 $element = [];
42 $elementProperty = [];
43
44 if (!empty($select))
45 {
46 $select = array_filter($select, fn($field) => !str_starts_with($field, 'PROPERTY_'));
47 $select = array_merge(['ID', 'IBLOCK_ID'], $select);
48
49 if (in_array('CREATED_BY', $select) && !in_array('CREATED_USER_NAME', $select))
50 {
51 $select[] = 'CREATED_USER_NAME';
52 }
53 if (in_array('MODIFIED_BY', $select) && !in_array('USER_NAME', $select))
54 {
55 $select[] = 'USER_NAME';
56 }
57 }
58
59 $userNameFields = [
60 'CREATED_BY_PRINTABLE' => 'CREATED_USER_NAME',
61 'MODIFIED_BY_PRINTABLE' => 'USER_NAME',
62 ];
63
64 $select = array_map(static fn($selectField) => $userNameFields[$selectField] ?? $selectField, $select);
65
66 $queryElement = \CIBlockElement::getList(
67 [],
68 ['ID' => $documentId, 'SHOW_NEW'=>'Y', 'SHOW_HISTORY' => 'Y'],
69 arSelectFields: $select
70 );
71 while($queryResult= $queryElement->fetch())
72 {
73 $element = $queryResult;
74 $queryProperty = \CIBlockElement::getProperty(
75 $queryResult['IBLOCK_ID'],
76 $queryResult['ID'],
77 array('sort'=>'asc', 'id'=>'asc', 'enum_sort'=>'asc', 'value_id'=>'asc'),
78 array('ACTIVE'=>'Y', 'EMPTY'=>'N')
79 );
80 while($property = $queryProperty->fetch())
81 {
82 $propertyKey = 'PROPERTY_'.$property['ID'];
83 if($property['MULTIPLE'] == 'Y')
84 {
85 if(!array_key_exists($propertyKey, $elementProperty))
86 {
87 $elementProperty[$propertyKey] = $property;
88 $elementProperty[$propertyKey]['VALUE'] = array();
89 }
90 $elementProperty[$propertyKey]['VALUE'][] = $property['VALUE'];
91 }
92 else
93 {
94 $elementProperty[$propertyKey] = $property;
95 }
96 }
97 }
98
99 foreach($element as $fieldId => $fieldValue)
100 {
101 $result[$fieldId] = $fieldValue;
102 if (in_array($fieldId, array('MODIFIED_BY', 'CREATED_BY')))
103 {
104 $result[$fieldId] = 'user_'.$fieldValue;
105 $result[$fieldId.'_PRINTABLE'] = $element[($fieldId == 'MODIFIED_BY')
106 ? 'USER_NAME' : 'CREATED_USER_NAME'];
107 }
108 elseif (in_array($fieldId, array('PREVIEW_TEXT', 'DETAIL_TEXT')))
109 {
110 if ($element[$fieldId.'_TYPE'] == 'html')
111 $result[$fieldId] = HTMLToTxt($fieldValue);
112 }
113 }
114 foreach($elementProperty as $propertyId => $property)
115 {
116 if(trim($property['CODE']) <> '')
117 $propertyId = $property['CODE'];
118 else
119 $propertyId = $property['ID'];
120
121 if(!empty($property['USER_TYPE']))
122 {
123 if ($property['USER_TYPE'] == 'UserID' || $property['USER_TYPE'] == 'employee' &&
124 (\COption::getOptionString('bizproc', 'employee_compatible_mode', 'N') != 'Y'))
125 {
126 if(empty($property['VALUE']))
127 continue;
128 if(!is_array($property['VALUE']))
129 $property['VALUE'] = array($property['VALUE']);
130
131 $listUsers = implode(' | ', $property['VALUE']);
132 $userQuery = \CUser::getList('ID', 'ASC',
133 array('ID' => $listUsers) ,
134 array('FIELDS' => array('ID' ,'LOGIN', 'NAME', 'LAST_NAME')));
135 while($user = $userQuery->fetch())
136 {
137 if($property['MULTIPLE'] == 'Y')
138 {
139 $result = self::setArray($result, 'PROPERTY_'.$propertyId);
140 $result = self::setArray($result, 'PROPERTY_'.$propertyId.'_PRINTABLE');
141 $result['PROPERTY_'.$propertyId][] = 'user_'.intval($user['ID']);
142 $result['PROPERTY_'.$propertyId.'_PRINTABLE'][] = '('.$user['LOGIN'].')'.
143 (($user['NAME'] <> '' || $user['LAST_NAME'] <> '') ? ' ' : '').$user['NAME'].
144 (($user['NAME'] <> '' && $user['LAST_NAME'] <> '') ? ' ' : '').$user['LAST_NAME'];
145 }
146 else
147 {
148 $result['PROPERTY_'.$propertyId] = 'user_'.intval($user['ID']);
149 $result['PROPERTY_'.$propertyId.'_PRINTABLE'] = '('.$user['LOGIN'].')'.
150 (($user['NAME'] <> '' || $user['LAST_NAME'] <> '') ? ' ' : '').$user['NAME'].
151 (($user['NAME'] <> '' && $user['LAST_NAME'] <> '') ? ' ' : '').$user['LAST_NAME'];
152 }
153 }
154 }
155 elseif($property['USER_TYPE'] == 'DiskFile')
156 {
157 if (is_array($property['VALUE']))
158 {
159 $diskValues = current($property['VALUE']);
160 $userType = \CIBlockProperty::getUserType($property['USER_TYPE']);
161 $result = self::setArray($result, 'PROPERTY_'.$propertyId);
162 $result = self::setArray($result, 'PROPERTY_'.$propertyId.'_PRINTABLE');
163 foreach($diskValues as $attachedId)
164 {
165 $fileId = null;
166 if (array_key_exists('GetObjectId', $userType))
167 $fileId = call_user_func_array($userType['GetObjectId'], array($attachedId));
168 if(!$fileId)
169 continue;
170 $printableUrl = '';
171 if (array_key_exists('GetUrlAttachedFileElement', $userType))
172 $printableUrl = call_user_func_array($userType['GetUrlAttachedFileElement'],
173 array($documentId, $fileId));
174
175 $result['PROPERTY_'.$propertyId][$attachedId] = $fileId;
176 $result['PROPERTY_'.$propertyId.'_PRINTABLE'][$attachedId] = $printableUrl;
177 }
178 }
179 else
180 {
181 continue;
182 }
183 }
184 elseif($property['USER_TYPE'] == 'HTML')
185 {
186 if(\CBPHelper::isAssociativeArray($property['VALUE']))
187 {
188 if($property['VALUE']['TYPE'] == 'HTML')
189 {
190 $result['PROPERTY_'.$propertyId] = HTMLToTxt($property['VALUE']['TEXT']);
191 }
192 else
193 {
194 $result['PROPERTY_'.$propertyId] = $property['VALUE']['TEXT'];
195 }
196 }
197 else
198 {
199 $result = self::setArray($result, 'PROPERTY_'.$propertyId);
200 foreach($property['VALUE'] as $htmlValue)
201 {
202 if($htmlValue['TYPE'] == 'HTML')
203 {
204 $result['PROPERTY_'.$propertyId][] = HTMLToTxt($htmlValue['TEXT']);
205 }
206 else
207 {
208 $result['PROPERTY_'.$propertyId][] = $htmlValue['TEXT'];
209 }
210 }
211 }
212 }
213 elseif($property['USER_TYPE'] == 'Money')
214 {
215 $userType = \CIBlockProperty::getUserType($property['USER_TYPE']);
216 if(is_array($property['VALUE']))
217 {
218 $result = self::setArray($result, 'PROPERTY_'.$propertyId);
219 $result = self::setArray($result, 'PROPERTY_'.$propertyId.'_PRINTABLE');
220 foreach($property['VALUE'] as $moneyValue)
221 {
222 $result['PROPERTY_'.$propertyId][] = $moneyValue;
223 if(array_key_exists('GetPublicViewHTML', $userType))
224 {
225 $result['PROPERTY_'.$propertyId.'_PRINTABLE'][] = call_user_func_array(
226 $userType['GetPublicViewHTML'],
227 array($property, array('VALUE' => $moneyValue), array())
228 );
229 }
230 }
231 }
232 else
233 {
234 $result['PROPERTY_'.$propertyId] = $property['VALUE'];
235 if(array_key_exists('GetPublicViewHTML', $userType))
236 {
237 $result['PROPERTY_'.$propertyId.'_PRINTABLE'] = call_user_func_array(
238 $userType['GetPublicViewHTML'],
239 array($property, array('VALUE' => $property['VALUE']), array())
240 );
241 }
242 }
243 }
244 else
245 {
246 $result['PROPERTY_'.$propertyId] = $property['VALUE'];
247 }
248 }
249 elseif ($property['PROPERTY_TYPE'] == 'L')
250 {
251 $result = self::setArray($result, 'PROPERTY_'.$propertyId);
252 //$result = self::setArray($result, 'PROPERTY_'.$propertyId.'_PRINTABLE');
253 $propertyArray = array();
254 $propertyKeyArray = array();
255 if(!is_array($property['VALUE']))
256 $property['VALUE'] = array($property['VALUE']);
257 foreach($property['VALUE'] as $enumId)
258 {
259 $enumsObject = \CIBlockProperty::getPropertyEnum(
260 $property['ID'],
261 array('SORT' => 'asc'),
262 array('ID' => $enumId)
263 );
264 while($enums = $enumsObject->fetch())
265 {
266 $propertyArray[] = $enums['VALUE'];
267 $propertyKeyArray[] = (self::getVersion() > 1) ? $enums['XML_ID'] : $enums['ID'];
268 }
269 }
270 for ($i = 0, $cnt = count($propertyArray); $i < $cnt; $i++)
271 $result['PROPERTY_'.$propertyId][$propertyKeyArray[$i]] = $propertyArray[$i];
272 }
273 elseif ($property['PROPERTY_TYPE'] == 'F')
274 {
275 $result = self::setArray($result, 'PROPERTY_'.$propertyId);
276 $result = self::setArray($result, 'PROPERTY_'.$propertyId.'_PRINTABLE');
277 $propertyArray = $property['VALUE'];
278 if (!is_array($propertyArray))
279 $propertyArray = array($propertyArray);
280
281 foreach ($propertyArray as $v)
282 {
283 $fileArray = \CFile::getFileArray($v);
284 if ($fileArray)
285 {
286 $result['PROPERTY_'.$propertyId][] = intval($v);
287 $result['PROPERTY_'.$propertyId.'_PRINTABLE'][] =
288 "[url=/bitrix/tools/bizproc_show_file.php?f=".
289 urlencode($fileArray["FILE_NAME"])."&i=".$v."&h=".md5($fileArray["SUBDIR"])."]".
290 htmlspecialcharsbx($fileArray["ORIGINAL_NAME"])."[/url]";
291 }
292 }
293 }
294 else
295 {
296 $result['PROPERTY_'.$propertyId] = $property['VALUE'];
297 }
298 }
299
300 if(!empty($result))
301 {
302 $documentFields = static::getDocumentFields(static::getDocumentType($documentId));
303 foreach ($documentFields as $fieldKey => $field)
304 {
305 if (!array_key_exists($fieldKey, $result))
306 $result[$fieldKey] = null;
307 }
308 }
309
310 return $result;
311 }
312
318 public static function getDocumentFields($documentType)
319 {
320 $iblockId = intval(mb_substr($documentType, mb_strlen("iblock_")));
321 if ($iblockId <= 0)
322 throw new \CBPArgumentOutOfRangeException("documentType", $documentType);
323
324 $documentFieldTypes = self::getDocumentFieldTypes($documentType);
325
327
328 $propertyObject = \CIBlockProperty::getList(
329 array("sort" => "asc", "name" => "asc"),
330 array("IBLOCK_ID" => $iblockId, 'ACTIVE' => 'Y')
331 );
332 $ignoreProperty = array();
333 while ($property = $propertyObject->fetch())
334 {
335 if (trim($property["CODE"]) <> '')
336 {
337 $key = "PROPERTY_".$property["CODE"];
338 $ignoreProperty["PROPERTY_".$property["ID"]] = "PROPERTY_".$property["CODE"];
339 }
340 else
341 {
342 $key = "PROPERTY_".$property["ID"];
343 $ignoreProperty["PROPERTY_".$property["ID"]] = 0;
344 }
345
346 $result[$key] = array(
347 "Name" => $property["NAME"],
348 "Filterable" => ($property["FILTRABLE"] == "Y"),
349 "Editable" => true,
350 "Required" => ($property["IS_REQUIRED"] == "Y"),
351 "Multiple" => ($property["MULTIPLE"] == "Y"),
352 "TypeReal" => $property["PROPERTY_TYPE"],
353 "UserTypeSettings" => $property["USER_TYPE_SETTINGS"]
354 );
355
356 if(trim($property["CODE"]) <> '')
357 $result[$key]["Alias"] = "PROPERTY_".$property["ID"];
358
359 if ($property["USER_TYPE"] <> '')
360 {
361 $result[$key]["TypeReal"] = $property["PROPERTY_TYPE"].":".$property["USER_TYPE"];
362
363 if ($property["USER_TYPE"] == "UserID"
364 || $property["USER_TYPE"] == "employee" && (\COption::getOptionString("bizproc", "employee_compatible_mode", "N") != "Y"))
365 {
366 $result[$key]["Type"] = "user";
367 $result[$key."_PRINTABLE"] = array(
368 "Name" => $property["NAME"].GetMessage("IBD_FIELD_USERNAME_PROPERTY"),
369 "Filterable" => false,
370 "Editable" => false,
371 "Required" => false,
372 "Multiple" => ($property["MULTIPLE"] == "Y"),
373 "Type" => "string",
374 );
375 }
376 elseif ($property["USER_TYPE"] == "DateTime")
377 {
378 $result[$key]["Type"] = "datetime";
379 }
380 elseif ($property["USER_TYPE"] == "Date")
381 {
382 $result[$key]["Type"] = "date";
383 }
384 elseif ($property["USER_TYPE"] == "EList")
385 {
386 $result[$key]["Type"] = "E:EList";
387 $result[$key]["Options"] = $property["LINK_IBLOCK_ID"];
388 }
389 elseif ($property["USER_TYPE"] == "ECrm")
390 {
391 $result[$key]["Type"] = "E:ECrm";
392 $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"];
393 $result[$key]["Options"] = $property["USER_TYPE_SETTINGS"];
394 }
395 elseif ($property["USER_TYPE"] == "Money")
396 {
397 $result[$key]["Type"] = "S:Money";
398 $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"];
399 $result[$key."_PRINTABLE"] = array(
400 "Name" => $property["NAME"].GetMessage("IBD_FIELD_USERNAME_PROPERTY"),
401 "Filterable" => false,
402 "Editable" => false,
403 "Required" => false,
404 "Multiple" => ($property["MULTIPLE"] == "Y"),
405 "Type" => "string",
406 );
407 }
408 elseif ($property["USER_TYPE"] == "Sequence")
409 {
410 $result[$key]["Type"] = "N:Sequence";
411 $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"];
412 $result[$key]["Options"] = $property["USER_TYPE_SETTINGS"];
413 }
414 elseif ($property["USER_TYPE"] == "DiskFile")
415 {
416 $result[$key]["Type"] = "S:DiskFile";
417 $result[$key."_PRINTABLE"] = array(
418 "Name" => $property["NAME"].GetMessage("IBD_FIELD_USERNAME_PROPERTY"),
419 "Filterable" => false,
420 "Editable" => false,
421 "Required" => false,
422 "Multiple" => ($property["MULTIPLE"] == "Y"),
423 "Type" => "int",
424 );
425 }
426 elseif ($property["USER_TYPE"] == "HTML")
427 {
428 $result[$key]["Type"] = "S:HTML";
429 }
430 else
431 {
432 $result[$key]["Type"] = "string";
433 }
434 }
435 elseif ($property["PROPERTY_TYPE"] == "L")
436 {
437 $result[$key]["Type"] = "select";
438
439 $result[$key]["Options"] = array();
440 $dbPropertyEnums = \CIBlockProperty::getPropertyEnum($property["ID"]);
441 while ($listPropertyEnum = $dbPropertyEnums->getNext())
442 {
443 $result[$key]["Options"][(self::getVersion() > 1) ?
444 $listPropertyEnum["XML_ID"] : $listPropertyEnum["ID"]] = $listPropertyEnum["~VALUE"];
445 }
446 }
447 elseif ($property["PROPERTY_TYPE"] == "N")
448 {
449 $result[$key]["Type"] = "double";
450 }
451 elseif ($property["PROPERTY_TYPE"] == "F")
452 {
453 $result[$key]["Type"] = "file";
454 $result[$key."_PRINTABLE"] = array(
455 "Name" => $property["NAME"].GetMessage("IBD_FIELD_USERNAME_PROPERTY"),
456 "Filterable" => false,
457 "Editable" => false,
458 "Required" => false,
459 "Multiple" => ($property["MULTIPLE"] == "Y"),
460 "Type" => "string",
461 );
462 }
463 elseif ($property["PROPERTY_TYPE"] == "S")
464 {
465 $result[$key]["Type"] = "string";
466 }
467 elseif ($property["PROPERTY_TYPE"] == "E")
468 {
469 $result[$key]["Type"] = "E:EList";
470 $result[$key]["Options"] = $property["LINK_IBLOCK_ID"];
471 $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"];
472 }
473 else
474 {
475 $result[$key]["Type"] = "string";
476 }
477 }
478
479 $list = new \CList($iblockId);
480 $fields = $list->getFields();
481 foreach($fields as $fieldId => $field)
482 {
483 if(empty($field["SETTINGS"]))
484 $field["SETTINGS"] = array("SHOW_ADD_FORM" => 'Y', "SHOW_EDIT_FORM"=>'Y');
485
486 if(array_key_exists($fieldId, $ignoreProperty))
487 {
488 $ignoreProperty[$fieldId] ? $key = $ignoreProperty[$fieldId] : $key = $fieldId;
489 $result[$key]["sort"] = $field["SORT"];
490 $result[$key]["settings"] = $field["SETTINGS"];
491 $result[$key]["active"] = true;
492 $result[$key]["DefaultValue"] = $field["DEFAULT_VALUE"];
493 if (isset($field['ROW_COUNT'], $field['COL_COUNT']) && $field['ROW_COUNT'] && $field['COL_COUNT'])
494 {
495 $result[$key]["row_count"] = $field["ROW_COUNT"];
496 $result[$key]["col_count"] = $field["COL_COUNT"];
497 }
498 }
499 else
500 {
501 $result[$fieldId] = array(
502 "Name" => $field['NAME'],
503 "Filterable" => !empty($result[$fieldId]['Filterable']) ? $result[$fieldId]['Filterable'] : false,
504 "Editable" => !empty($result[$fieldId]['Editable']) ? $result[$fieldId]['Editable'] : true,
505 "Required" => ($field['IS_REQUIRED'] == 'Y'),
506 "Multiple" => ($field['MULTIPLE'] == 'Y'),
507 "Type" => !empty($result[$fieldId]['Type']) ? $result[$fieldId]['Type'] : $field['TYPE'],
508 "sort" => $field["SORT"],
509 "settings" => $field["SETTINGS"],
510 "active" => true,
511 "active_type" => $field['TYPE'],
512 "DefaultValue" => $field["DEFAULT_VALUE"],
513 );
514 if (isset($field['ROW_COUNT'], $field['COL_COUNT']) && $field['ROW_COUNT'] && $field['COL_COUNT'])
515 {
516 $result[$fieldId]["row_count"] = $field["ROW_COUNT"];
517 $result[$fieldId]["col_count"] = $field["COL_COUNT"];
518 }
519 }
520 }
521
522 $keys = array_keys($result);
523 foreach ($keys as $k)
524 {
525 $result[$k]["BaseType"] = $documentFieldTypes[$result[$k]["Type"]]["BaseType"] ?? null;
526 $result[$k]["Complex"] = $documentFieldTypes[$result[$k]["Type"]]["Complex"] ?? null;
527 }
528
529 return $result;
530 }
531
532 public static function isFeatureEnabled($documentType, $feature)
533 {
534 return in_array($feature, array(\CBPDocumentService::FEATURE_MARK_MODIFIED_FIELDS));
535 }
536
537 public static function getDocumentAdminPage($documentId)
538 {
539 $documentId = intval($documentId);
540 if ($documentId <= 0)
541 {
542 throw new \CBPArgumentNullException("documentId");
543 }
544
545 $db = \CIBlockElement::getList(
546 array(),
547 array("ID" => $documentId, "SHOW_NEW"=>"Y", "SHOW_HISTORY" => "Y"),
548 false,
549 false,
550 array("ID", "IBLOCK_ID", "IBLOCK_TYPE_ID", "DETAIL_PAGE_URL")
551 );
552 if ($ar = $db->fetch())
553 {
554 foreach(GetModuleEvents("iblock", "CIBlockDocument_OnGetDocumentAdminPage", true) as $arEvent)
555 {
556 $url = ExecuteModuleEventEx($arEvent, array($ar));
557 if ($url)
558 {
559 return $url;
560 }
561 }
562
563 if ($ar['IBLOCK_TYPE_ID'] === 'lists')
564 {
565 if (ModuleManager::isModuleInstalled('bitrix24'))
566 {
567 return sprintf('/company/lists/%u/element/0/%u/', $ar['IBLOCK_ID'], $ar['ID']);
568 }
569
570 return sprintf('/services/lists/%u/element/0/%u/', $ar['IBLOCK_ID'], $ar['ID']);
571 }
572
573 return "/bitrix/admin/iblock_element_edit.php?view=Y&ID=".$documentId."&IBLOCK_ID=".
574 $ar["IBLOCK_ID"]."&type=".$ar["IBLOCK_TYPE_ID"];
575 }
576
577 return null;
578 }
579}
static getDocument($documentId)
Определения bizprocdocumentlists.php:30
static getDocumentFields($documentType)
Определения bizprocdocumentlists.php:318
static isFeatureEnabled($documentType, $feature)
Определения bizprocdocumentlists.php:532
static getDocumentAdminPage($documentId)
Определения bizprocdocumentlists.php:537
static getSystemIblockFields()
Определения bizprocdocument.php:449
static setArray(array $result, $value)
Определения bizprocdocument.php:440
const FEATURE_MARK_MODIFIED_FIELDS
Определения documentservice.php:9
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$iblockId
Определения iblock_catalog_edit.php:30
$select
Определения iblock_catalog_list.php:194
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
HTMLToTxt($str, $strSiteUrl="", $aDelete=[], $maxlen=70)
Определения tools.php:2587
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$user
Определения mysql_to_pgsql.php:33
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$k
Определения template_pdf.php:567
$url
Определения iframe.php:7
$fields
Определения yandex_run.php:501