<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.gbsoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alexey</id>
		<title>GB wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.gbsoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alexey"/>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Alexey"/>
		<updated>2026-04-09T21:06:27Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3307</id>
		<title>ASSIGN</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3307"/>
				<updated>2025-11-24T04:46:03Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=ASSIGN&lt;br /&gt;
|Описание=Изменяет одно поле текущей записи [[Датасет|датасета]]. &lt;br /&gt;
|Синтаксис=ASSIGN ('''Датасет и поле''', '''Значение''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Датасет и поле&lt;br /&gt;
 |Пояснение=строка, которая состоит из имени одного из датасетов электронной или печатной формы и имени поля этого датасета, разделенных точкой.&amp;lt;br&amp;gt;Можно указать через &amp;quot;;&amp;quot; сразу несколько полей данного датасета: ''датасет.поле1;поле2;поле3;...''&lt;br /&gt;
Особыe режимы:&lt;br /&gt;
*Если перед именем датасета указан символ &amp;quot;*&amp;quot;, то поле изменяется во всех записях датасета. В этом случае второй аргумент - всегда выражение, потому записывается в кавычках.&amp;lt;br&amp;gt;'''Примечание: датасет не должен быть отфильтрован и(или) отсортирован по полям, которые изменяются функцией, вызываемой в этом режиме.'''&lt;br /&gt;
*Если вместо имени поля указан символ &amp;quot;*&amp;quot;, то изменятся все данные датасета. В этом случае значением должны быть данные другого датасета, либо 1/0 (тогда датасет будет закрыт).&lt;br /&gt;
*Имя поля может иметь вид Heap.XXX, в этом случае модифицируется одна строка поля Heap&lt;br /&gt;
*Префикс EMBEDDED:Имя_контейнера: означает, что датасет нужно искать в форме, [[Внедрение форм|внедренной]] в указанный контейнер&lt;br /&gt;
*Префикс EMBEDDING: означает, что датасет нужно искать в форме, в которую [[Внедрение форм|внедрена]] текущая форма&lt;br /&gt;
*Префикс LAUNCHFORM: означает, что датасет нужно искать в форме, с которой запущена текущая форма&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Значение&lt;br /&gt;
 |Пояснение=значение произвольного типа данных для записи в поле. Если изменяется сразу несколько полей датасета, то их значения перечисляются через &amp;quot;,&amp;quot;.&amp;lt;br&amp;gt;В режиме изменения всех записей датасета &amp;amp;ndash; строка с формулой.&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Assign( `Goodies.Price`, 1 ) &amp;amp;ndash; изменит текущую запись&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `Dataset.Document;Articul;Certificate;BarCode`, :Id, :Art, :Cert, :BC ) &amp;amp;ndash; изменит сразу несколько полей&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*Goodies.Price`, `Price*2` ) &amp;amp;ndash; изменит все записи (удвоит цену)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsGds.Qty;New`, `1,0` ) &amp;amp;ndash; инициализация двух полей во всех записях датасета (в данном случае значения полей - это выражение, поэтому записываются в кавычках)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsLines.Name;Note`, `'Имя','Комментарий'` ) &amp;amp;ndash; то же самое с текстовыми значениями&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*ds.f1;f2;f3`, `IIF( f1=11,f1*5,f1),0,IIF( f1=55,'b',f3 )` ) &amp;amp;ndash; то же самое с выражениями для каждого поля (вычисление значений полей производится в порядке их следования)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `DataSet.Heap.xxx`, 1 ) &amp;amp;ndash; изменит хиповое поле&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `launchform:HeapSet.@FullName`, HeapSet.FullName ) &amp;amp;ndash; изменит поле родительской формы&lt;br /&gt;
&lt;br /&gt;
В целях оптимизации перед записью нового значения оно вначале сравнивается с прежним, а запись производится только при их неравенстве. При этой проверке старое значение приводится к типу нового значения.&lt;br /&gt;
&amp;lt;br/&amp;gt;Пример. Нужно преобразовать значения &amp;quot;01&amp;quot;, &amp;quot;02&amp;quot; и т.п. в строковом поле Type в значения без ведущих нулей. Если использовать функцию так:&lt;br /&gt;
 Assign( `*dsDocs.Type`, `StrToFloat( Type )` )&lt;br /&gt;
то запись изменённых значений не произойдёт, поскольку при проверке старое значение будет приведено к типу нового значения, т.е. &amp;quot;01&amp;quot; -&amp;gt; 1, после чего будет сравнение с новым значением (1=1) и, поскольку равенство выполнится, записи не будет.&lt;br /&gt;
&amp;lt;br/&amp;gt;Чтобы произвести запись, нужно для нового значения принудительно указать тип старого значения, тогда будет сравнение значений с одинаковым типом, т.е. в примере строки со строкой &amp;quot;01&amp;quot;&amp;lt;&amp;gt;&amp;quot;1&amp;quot;:&lt;br /&gt;
 Assign( `*dsDocs.Type`, `&amp;quot;&amp;quot;+StrToFloat( Type )` )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3306</id>
		<title>ASSIGN</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3306"/>
				<updated>2025-10-28T03:50:23Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=ASSIGN&lt;br /&gt;
|Описание=Изменяет одно поле текущей записи [[Датасет|датасета]]. &lt;br /&gt;
|Синтаксис=ASSIGN ('''Датасет и поле''', '''Значение''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Датасет и поле&lt;br /&gt;
 |Пояснение=строка, которая состоит из имени одного из датасетов электронной или печатной формы и имени поля этого датасета, разделенных точкой.&amp;lt;br&amp;gt;Можно указать через &amp;quot;;&amp;quot; сразу несколько полей данного датасета: ''датасет.поле1;поле2;поле3;...''&lt;br /&gt;
Особыe режимы:&lt;br /&gt;
*Если перед именем датасета указан символ &amp;quot;*&amp;quot;, то поле изменяется во всех записях датасета. В этом случае второй аргумент - всегда выражение, потому записывается в кавычках.&amp;lt;br&amp;gt;'''Примечание:''' датасет не должен быть отфильтрован и(или) отсортирован по полям, которые изменяются функцией, вызываемой в этом режиме&lt;br /&gt;
*Если вместо имени поля указан символ &amp;quot;*&amp;quot;, то изменятся все данные датасета. В этом случае значением должны быть данные другого датасета, либо 1/0 (тогда датасет будет закрыт).&lt;br /&gt;
*Имя поля может иметь вид Heap.XXX, в этом случае модифицируется одна строка поля Heap&lt;br /&gt;
*Префикс EMBEDDED:Имя_контейнера: означает, что датасет нужно искать в форме, [[Внедрение форм|внедренной]] в указанный контейнер&lt;br /&gt;
*Префикс EMBEDDING: означает, что датасет нужно искать в форме, в которую [[Внедрение форм|внедрена]] текущая форма&lt;br /&gt;
*Префикс LAUNCHFORM: означает, что датасет нужно искать в форме, с которой запущена текущая форма&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Значение&lt;br /&gt;
 |Пояснение=значение произвольного типа данных для записи в поле. Если изменяется сразу несколько полей датасета, то их значения перечисляются через &amp;quot;,&amp;quot;.&amp;lt;br&amp;gt;В режиме изменения всех записей датасета &amp;amp;ndash; строка с формулой.&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Assign( `Goodies.Price`, 1 ) &amp;amp;ndash; изменит текущую запись&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `Dataset.Document;Articul;Certificate;BarCode`, :Id, :Art, :Cert, :BC ) &amp;amp;ndash; изменит сразу несколько полей&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*Goodies.Price`, `Price*2` ) &amp;amp;ndash; изменит все записи (удвоит цену)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsGds.Qty;New`, `1,0` ) &amp;amp;ndash; инициализация двух полей во всех записях датасета (в данном случае значения полей - это выражение, поэтому записываются в кавычках)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsLines.Name;Note`, `'Имя','Комментарий'` ) &amp;amp;ndash; то же самое с текстовыми значениями&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*ds.f1;f2;f3`, `IIF( f1=11,f1*5,f1),0,IIF( f1=55,'b',f3 )` ) &amp;amp;ndash; то же самое с выражениями для каждого поля (вычисление значений полей производится в порядке их следования)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `DataSet.Heap.xxx`, 1 ) &amp;amp;ndash; изменит хиповое поле&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `launchform:HeapSet.@FullName`, HeapSet.FullName ) &amp;amp;ndash; изменит поле родительской формы&lt;br /&gt;
&lt;br /&gt;
В целях оптимизации перед записью нового значения оно вначале сравнивается с прежним, а запись производится только при их неравенстве. При этой проверке старое значение приводится к типу нового значения.&lt;br /&gt;
&amp;lt;br/&amp;gt;Пример. Нужно преобразовать значения &amp;quot;01&amp;quot;, &amp;quot;02&amp;quot; и т.п. в строковом поле Type в значения без ведущих нулей. Если использовать функцию так:&lt;br /&gt;
 Assign( `*dsDocs.Type`, `StrToFloat( Type )` )&lt;br /&gt;
то запись изменённых значений не произойдёт, поскольку при проверке старое значение будет приведено к типу нового значения, т.е. &amp;quot;01&amp;quot; -&amp;gt; 1, после чего будет сравнение с новым значением (1=1) и, поскольку равенство выполнится, записи не будет.&lt;br /&gt;
&amp;lt;br/&amp;gt;Чтобы произвести запись, нужно для нового значения принудительно указать тип старого значения, тогда будет сравнение значений с одинаковым типом, т.е. в примере строки со строкой &amp;quot;01&amp;quot;&amp;lt;&amp;gt;&amp;quot;1&amp;quot;:&lt;br /&gt;
 Assign( `*dsDocs.Type`, `&amp;quot;&amp;quot;+StrToFloat( Type )` )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=PROCESSCOMMAND&amp;diff=3305</id>
		<title>PROCESSCOMMAND</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=PROCESSCOMMAND&amp;diff=3305"/>
				<updated>2025-09-19T11:01:25Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=PROCESSCOMMAND&lt;br /&gt;
|Описание=Функция позволяет выполнить любую команду ГБ - открыть электронную форму, запустить отчет, создать объект, удалить его, сменить состояние, напечатать и т.д.&amp;lt;br/&amp;gt;&lt;br /&gt;
Список некоторых команд можно посмотреть в [[:Категория:Справочник команд ГБ|справочнике команд]].&lt;br /&gt;
|Синтаксис=PROCESSCOMMAND ('''Тип объекта''','''Строка параметров''','''Команда''') &amp;lt;br/&amp;gt;&lt;br /&gt;
или &amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND ('CURRENT','''Строка параметров''','''Команда''') &amp;lt;br/&amp;gt;&lt;br /&gt;
или &amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND ('''тип:коды''','''Строка параметров''','''Команда''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Тип объекта&lt;br /&gt;
 |Пояснение=Целое число, являющееся кодом типа объекта (см. Объектная модель данных ГБ). Если указано слово 'CURRENT' - берется тип активного в данный момент объекта. Если указано тип:коды, берется множество объектов заданного типа с указанными кодами.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Строка параметров&lt;br /&gt;
 |Пояснение=Строка, которая содержит через &amp;quot;,&amp;quot; список параметров команды.&lt;br /&gt;
&lt;br /&gt;
{{Внимание|1=Если значение любого из параметров содержит пробелы, запятые или кавычки, следует всю строку Имя=Значение взять в двойные кавычки. Например, '''SET:Heap.@Note=Это комментарий''' - неправильно. Правильно '''&amp;quot;SET:Heap.@Note=Это комментарий&amp;quot;'''&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Вот полный список параметров, которые можно передать в объект при создании и открытии существующего через ProcessCommand:&lt;br /&gt;
*То, что работает в любой форме свойств: &lt;br /&gt;
**DuplicateId - ид объекта, копию которого мы хотим создать. Причем установка поля Node является обязательным.&lt;br /&gt;
**DoOnOpen - скрипт, выполняемый сразу после открытия &lt;br /&gt;
**DoOnSave - скрипт, выполняемый непосредственно перед сохранением &lt;br /&gt;
**ActivePage - имя закладки по умолчанию &lt;br /&gt;
**SaveImmediate=Y - сохранить изменения сразу, не показывая форму пользователю&lt;br /&gt;
**SendSaveMessage=1 - ожидать успешного завершения сохранения объекта. ''С версии 1.9.0.9 в ProcessCommand с SaveImmediate больше не нужно писать SendSaveMessage=1, такое поведение стало поведением по умолчанию. Если нужно из соображений совместимости сделать, чтобы скрипт продолжил выполняться до отработки команды ProcessCommand, следует писать SendSaveMessage=0''&lt;br /&gt;
**AddZero=1 - разрешить добавлять товарные строки с количеством товара ноль (GoodiesQty=0)&lt;br /&gt;
**CloseOnError=1 - при ошибке закрывать форму (иначе форма будет показана пользователю)&lt;br /&gt;
*установка любых полей '''ПРИ СОЗДАНИИ НОВОГО ОБЪЕКТА''' (но в документах этого лучше не делать, т.к. там с большинством полей связана специфическая функциональность - используйте параметры, описанные ниже): &lt;br /&gt;
**SET:Field= &lt;br /&gt;
**SET:Heap.Field= &lt;br /&gt;
* в документах основные поля через SET ставить нельзя, надо использовать стандартные параметры: &lt;br /&gt;
**Partner - заполняет соотв. поле &lt;br /&gt;
**Agent - заполняет соотв. поле &lt;br /&gt;
**Kind - заполняет соотв. поле &lt;br /&gt;
**OpDate - заполняет сразу и OperationDate и DocDate &lt;br /&gt;
**NOTE - заполняет поле HeapSet.@Note &lt;br /&gt;
**DOCNUMBER - для товарных документов заполняет соответствующее поле. Для нетоварных используется SET:DOCNUMBER&lt;br /&gt;
**WWWORDER - заполняет поле Imported_Id &lt;br /&gt;
**CURRENCY - заполняет поле DocCurrency &lt;br /&gt;
**PRICELIST - заполняет поле HeapSet.@PriceList &lt;br /&gt;
**ActiveLinkPage - открывает документ на закладке &amp;quot;связи&amp;quot;, на подзакладке с заданным номером. &lt;br /&gt;
**Link (Link1, ...) - список кодов документов, с которыми нужно связать создаваемый &lt;br /&gt;
**LinkSide (LinkSide1, ...) - направление связи - LinkSide=С означает что новый (т.е. создаваемый) документ будет записан в связях в поле CreditDoc, иначе - в DebetDoc &lt;br /&gt;
**LinkType (LinkType1, ...) - тип связи &lt;br /&gt;
**Update=True - при создании не имеет значения, а при открытии существующего документа означает, что товарные **строки необходимо заполнить заново, а не дописывать к существующим &lt;br /&gt;
**PosOnly=True - означает что из списка товарных строк нужно выбрать только положительные количества &lt;br /&gt;
**NegOnly=True - означает что из списка товарных строк нужно выбрать только отрицательные количества &lt;br /&gt;
**DontCreateEmpty - не создавать пустой документ (без тов. строк) &lt;br /&gt;
**GoodiesDs=имя - имя датасета, который содержит список товарных строк &lt;br /&gt;
**GoodiesDs==выражение - запрос, который вернет нам список товарных строк &lt;br /&gt;
**GoodiesArt &lt;br /&gt;
**GoodiesCert &lt;br /&gt;
**GoodiesQty &lt;br /&gt;
**GoodiesNote &lt;br /&gt;
**GoodiesHeap.XXXX - запись в хиповое поле ХХХХ&lt;br /&gt;
**GoodiesField.AutoSaveXXXX - запись в поле вида AutoSaveCert@Apt &lt;br /&gt;
**GoodiesPrice - цена с НДС и затратами (выражение, вычисляемое на GoodieDs)&lt;br /&gt;
**GoodiesPriceList - цена без НДС и затрат (выражение, вычисляемое на GoodieDs)&lt;br /&gt;
**ExpensesDs - имя датасета со списком затрат &lt;br /&gt;
**ExpensesDs.Field &lt;br /&gt;
**ExpensesDs.Heap.Field - выражения, вычисляемые на ExpensesDs, заполняют соотв. поля&lt;br /&gt;
**EntriesDs - имя датасета со списком проводок (например, документ типа &amp;quot;Бухгалтерская операция&amp;quot;)&lt;br /&gt;
*'''ДЛЯ ИЗМЕНЕНИЯ ЗНАЧЕНИЙ ПОЛЕЙ В СУЩЕСТВУЮЩЕМ ОБЪЕКТЕ НУЖНО ИСПОЛЬЗОВАТЬ СКРИПТ DoOnOpen'''&lt;br /&gt;
Управление остатками:&lt;br /&gt;
**UseAvailableRest - для команды &amp;quot;импорт товарных документов&amp;quot; (ID125), позволяет создавать документы в пределах свободного остатка товара&lt;br /&gt;
**CutToRest - для команды &amp;quot;PROPERTIES&amp;quot;, позволяет создавать документы в пределах свободного остатка&lt;br /&gt;
**AutoCompensate - для команды &amp;quot;импорт товарных документов&amp;quot; (ID125) и &amp;quot;PROPERTIES&amp;quot;, включает автоматическое создание компенсационных документов при нехватке товара&lt;br /&gt;
:''UseAvailableRest (CutToRest) и AutoCompensate взаимоисключающие, т.о. если задан UseAvailableRest, то компенсации не будут создаваться''&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Команда&lt;br /&gt;
 |Пояснение=Строка, описывающая команду. Возможные варианты:&lt;br /&gt;
*'''&amp;quot;EXPLORE&amp;quot;''' - открыть справочник. Возможные параметры:&lt;br /&gt;
**Id=X - открыть справочник на объекте с кодом X&lt;br /&gt;
*'''&amp;quot;PROPERTIES&amp;quot;''' - открыть свойства объекта. Возможные параметры:&lt;br /&gt;
**Id=X - открыть свойства объекта с кодом X.&lt;br /&gt;
**Id=-1 - создать новый объект, при этом:&lt;br /&gt;
**DuplicateId=Y - создать копию объекта с кодом Y.&lt;br /&gt;
**SubType=Y - создать объект с подтипом Y.&lt;br /&gt;
**ItemType=0 - создать новую папку.&lt;br /&gt;
**ItemType=1 - создать новую запись.&lt;br /&gt;
**Node=Y - создать объект в папке с кодом Y.&lt;br /&gt;
**KeepPack=1 - принудительная простановка типа упаковки (без него, например, при количестве &amp;lt; целой коробки упаковка приводится к минимальной).&lt;br /&gt;
**GoodiesDsMaxLines=100 - ограничение количества товарных строк в документе (в примере ограничение равно ста строкам).&lt;br /&gt;
**CheckPostConds=1 - перед открытием свойств электронной формы создаваемого документа проверить постусловия. Осуществится выполнение только постусловий с вызовом [[Функции ГБ|Exception]]. В случае срабатывания исключения текст ошибки поместится в переменную :LastError.&lt;br /&gt;
**ActivePage=Имя закладки - установить активную закладку.&lt;br /&gt;
**SaveImmediate=Y - сохранить изменения сразу по открытии.&lt;br /&gt;
**DoOnOpen=скрипт - выполнить скрипт после открытия.&lt;br /&gt;
**DoOnSave=скрипт - выполнить скрипт после сохранения.&lt;br /&gt;
**Кроме того, для документов:&lt;br /&gt;
***Имя поля=значение - присвоить данному полю датасета DataSet данное значение.&lt;br /&gt;
*'''&amp;quot;PRINT&amp;quot;''' - напечатать объект. Возможные параметры:&lt;br /&gt;
**ReportId=X или CmdParams=X -печатать форму с кодом X (ReportId=X).&lt;br /&gt;
**ShowForm=Y - вывести окно для выбора печатной формы.&lt;br /&gt;
**Target=файл - печатать в файл (для текстовых, Word и Excel форм).&lt;br /&gt;
**Template=файл - шаблон для Word и Excel форм.&lt;br /&gt;
*'''&amp;quot;SETFLAG&amp;quot;''' - изменить [[Флаг|состояние]] документа. Возможные параметры:&lt;br /&gt;
**SetState=X -Установить [[флаг]]=X.&lt;br /&gt;
*'''&amp;quot;SETREADONLY&amp;quot;''' - сделать текущую форму доступной только для чтения. Возможные параметры:&lt;br /&gt;
**ReadOnly=1 - Вся форма будет доступна только для чтения.&lt;br /&gt;
**Кроме того, для документов:&lt;br /&gt;
**ReadOnlyDesc=причина - При попытке что-то поправить, будет выдаваться сообщение: Документ доступен только для чтения, так как недостаточно полномочий для изменения документов с  + причина&lt;br /&gt;
**GoodiesReadOnly=1 - нельзя добавлять и удалять товарные строки, также нельзя менять количества. цены менять можно.&lt;br /&gt;
**GoodiesCannotDeleteDesc=причина - при попытке удалить товаоные строки, будет возникать ошибка: причина&lt;br /&gt;
**GoodiesPriceReadOnly=1 - запретить изменение цен.&lt;br /&gt;
**ReadOnlyDiffs=номер_закладки - запретить изменение закладок связей.&lt;br /&gt;
*'''&amp;quot;IDXXX&amp;quot;''' - выполнить команду с кодом XXX (см. [[:Категория:Справочник команд ГБ]]).&lt;br /&gt;
**Если XXX - код отчета, то возможны параметры:&lt;br /&gt;
***Param:Поле=Значение - изменить параметр.&lt;br /&gt;
***Immediate=Y - сразу вывести результаты.&lt;br /&gt;
***ParamsSettings=X - код предустановки параметров.&lt;br /&gt;
***GridSettings=X - код предустановки результатов.&lt;br /&gt;
*&amp;quot;OPENREPORT&amp;quot; - позволяет запустить команду (см. [[Типы объектов ГБ]]).	&lt;br /&gt;
}}&lt;br /&gt;
|Пример=PROCESSCOMMAND(11, 'Id=-1,SubType=17', 'properties') создать новый заказ&amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND('CURRENT', 'CmdParams=1007', 'print') напечатать выделенные объекты&amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND(11, ['Id': :CurrentIds, 'SetState': 100], 'SETFLAG') изменить состояние документа&amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND(11, ['Id': :CurrentIds, 'SET:Flag': 100], 'SETFLAG') изменить состояние документа, для которого не создан класс&amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND('11:19713613;19708614;19712711;19707700;', ``, 'SETFLAG') вызвать окно Состояние документа на список документов&amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND(14,'Id=1000','OPENREPORT') запустить команду с Id = 1000&amp;lt;br/&amp;gt;&lt;br /&gt;
ProcessCommand(1, [`Id`:100661, `Node`:114, `Category`:1], `EXPLORE`) открыть справочник товаров, позиционироваться на товар 100661 в папке 114, альтернативного дерева 1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=QUERYPARAMS&amp;diff=3304</id>
		<title>QUERYPARAMS</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=QUERYPARAMS&amp;diff=3304"/>
				<updated>2025-06-24T06:51:51Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=QUERYPARAMS&lt;br /&gt;
|Описание=Предлагает пользователю форму для ввода параметров. Возвращает &amp;quot;истина&amp;quot;, если пользователь нажал в предложенной форме кнопку &amp;quot;Принять&amp;quot;, и &amp;quot;ложь&amp;quot; в противном случае. Введенные пользователем параметры сохраняются в переменных.&lt;br /&gt;
|Синтаксис=QUERYPARAMS ('''Строка описания параметров''',Заголовок окна)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Строка описания параметров&lt;br /&gt;
 |Пояснение=Строка, описывающая требуемые параметры. Формат тот же, что для описания параметров отчетов.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Заголовок окна&lt;br /&gt;
 |Пояснение=Строка, заголовок окна для ввода параметров.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Логическое значение.&lt;br /&gt;
|Пример=Если пользователь ввел требуемые параметры и нажал &amp;quot;Принять&amp;quot;, то в переменных :MyStock и :MyString сохранятся введенные параметры:&lt;br /&gt;
 QueryParams(&amp;quot;Stock['Склад']=MyStock,String['Строка']=MyString&amp;quot;)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ввод пароля, который отображается &amp;quot;звёздочками&amp;quot;:&lt;br /&gt;
 QueryParams(`String['Пароль']=pwd{Constraints='password=*'}`,`Ввод пароля`)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Зависимое поле&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QueryParams(`File['Файл']=FileName{Constraints='Ext=*.xlsx'},PriceList.ByNode(219)['Тип тарифа']=utType,PriceList['Опция тарифа']:Folder=utSubType{Constraints='Src=OpenDataSet( &amp;quot;PRICELISTS_LIST&amp;quot;,[ &amp;quot;Node,I&amp;quot; : ifempty(?utType,-1) ],&amp;quot;dsR&amp;quot; ),dsR.$data;KeyField=Id;ListField=Id.Name;DependsOn=?utType'}`),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Отображение таблиц ==&lt;br /&gt;
Специальный режим работы функции QUERYPARAMS - это отображение одного из датасетов текущей формы в виде таблицы.&lt;br /&gt;
Синтаксис:&lt;br /&gt;
 QueryParams(`Grid=MyDs`)&lt;br /&gt;
&lt;br /&gt;
Замечания:&lt;br /&gt;
# поскольку таблица лежит в форме ввода параметров команды, а датасет в родительской, нельзя делать правила (изменять одни поля при изменении других, запрещать вставку и удаление)&lt;br /&gt;
# поскольку форма ввода параметров создается с одним и тем же именем, настройка таблицы в реестре хранится всего одна. Поэтому в случае использования QUERYPARAMS для отображения разных датасетов может потребоваться задавать настройку таблицы прямо в функции:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
`Grid=MyDs,String['aaa']=aaa,GridParams:__AutoGridMyDs='&amp;quot;RequiredLayout=|&amp;quot;&amp;quot;reason&amp;quot;&amp;quot;,&amp;quot;&amp;quot;-100&amp;quot;&amp;quot;,&amp;quot;&amp;quot;Причина&amp;quot;&amp;quot;|;|&amp;quot;&amp;quot;NewField1[Тест,]=1+2&amp;quot;&amp;quot;,&amp;quot;&amp;quot;-40&amp;quot;&amp;quot;,&amp;quot;&amp;quot;Тест!&amp;quot;&amp;quot;|&amp;quot;'`, `Заголовок` &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CreateDataSet( `dsUID`,[`UID,S` : 1/0] ),&lt;br /&gt;
QueryParams(&lt;br /&gt;
  `Grid=dsUID`&lt;br /&gt;
  + `,GridParams:__AutoGriddsUID='&amp;quot;RequiredColumns=|&amp;quot;&amp;quot;UID&amp;quot;&amp;quot;,&amp;quot;&amp;quot;-240&amp;quot;&amp;quot;,&amp;quot;&amp;quot;UID документа&amp;quot;&amp;quot;|;|&amp;quot;&amp;quot;GB$Ordering&amp;quot;&amp;quot;,&amp;quot;&amp;quot;0&amp;quot;&amp;quot;|&amp;quot;'`,&lt;br /&gt;
  `Список UID для импорта`&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что двойные кавычки в настройке таблицы удваиваются.&lt;br /&gt;
Для разбивки заголовка колонок на несколько строк следует использовать управляющую комбинацию #13#10&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=GB_FINDOBJECT&amp;diff=3303</id>
		<title>GB FINDOBJECT</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=GB_FINDOBJECT&amp;diff=3303"/>
				<updated>2025-06-05T10:11:38Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Underscore}}&lt;br /&gt;
{{Функция ГБ&lt;br /&gt;
|Название=GB_FINDOBJECT&lt;br /&gt;
|Описание=Осуществляет поиск объекта по имени. Если существует ровно один объект заданного типа, имя которого точно совпадает с заданным, возвращает его код. Если такого объекта не существует, или их несколько  - возвращает NULL&amp;lt;br/&amp;gt;&lt;br /&gt;
Для партнеров поиск производится не только по названию, но и по ИНН.&lt;br /&gt;
|Синтаксис=GB_FINDOBJECT('''Тип объекта''', '''Название объекта''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Тип объекта&lt;br /&gt;
 |Пояснение=Целое число, являющееся кодом типа объекта ГБ (описание типов см. Объектная модель данных ГБ).&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Название объекта&lt;br /&gt;
 |Пояснение=Строка, являющаяся именем объекта. Для партнеров поиск производится не только по имени, но и по ИНН.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Целое число, являющееся кодом объекта.&lt;br /&gt;
|Пример=Gb_FindObject( 0,`ООО Рога и Копыта` ) &amp;amp;ndash; ищем партнёра по всем папкам&amp;lt;br&amp;gt;&lt;br /&gt;
Gb_FindObject( 0,`TSD.SP.3`,`Node`,100 ) &amp;amp;ndash; ищем партнёра в папке с Id=100&amp;lt;br&amp;gt;&lt;br /&gt;
Gb_FindObject( 17,`номер_серии`,`Articul`,ид_товара ) &amp;amp;ndash; ищем серию с номером &amp;quot;номер_серии&amp;quot; для товара &amp;quot;ид_товара&amp;quot;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=GB_FINDOBJECT&amp;diff=3302</id>
		<title>GB FINDOBJECT</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=GB_FINDOBJECT&amp;diff=3302"/>
				<updated>2025-06-05T10:11:26Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Underscore}}&lt;br /&gt;
{{Функция ГБ&lt;br /&gt;
|Название=GB_FINDOBJECT&lt;br /&gt;
|Описание=Осуществляет поиск объекта по имени. Если существует ровно один объект заданного типа, имя которого точно совпадает с заданным, возвращает его код. Если такого объекта не существует, или их несколько  - возвращает NULL&amp;lt;br/&amp;gt;&lt;br /&gt;
Для партнеров поиск производится не только по названию, но и по ИНН.&lt;br /&gt;
|Синтаксис=GB_FINDOBJECT('''Тип объекта''', '''Название объекта''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Тип объекта&lt;br /&gt;
 |Пояснение=Целое число, являющееся кодом типа объекта ГБ (описание типов см. Объектная модель данных ГБ).&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Название объекта&lt;br /&gt;
 |Пояснение=Строка, являющаяся именем объекта. Для партнеров поиск производится не только по имени, но и по ИНН.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Целое число, являющееся кодом объекта.&lt;br /&gt;
|Пример=Gb_FindObject( 0,`ООО Рога и Копыта` ) &amp;amp;ndash; ищем партнёра по всем папкам&amp;lt;br&amp;gt;&lt;br /&gt;
Gb_FindObject( 0,`TSD.SP.3`,`Node`,100 ) &amp;amp;ndash; ищем партнёра в папке с Id=100&lt;br /&gt;
Gb_FindObject( 17,`номер_серии`,`Articul`,ид_товара ) &amp;amp;ndash; ищем серию с номером &amp;quot;номер_серии&amp;quot; для товара &amp;quot;ид_товара&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=GB_FINDOBJECT&amp;diff=3301</id>
		<title>GB FINDOBJECT</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=GB_FINDOBJECT&amp;diff=3301"/>
				<updated>2025-06-05T10:10:08Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Underscore}}&lt;br /&gt;
{{Функция ГБ&lt;br /&gt;
|Название=GB_FINDOBJECT&lt;br /&gt;
|Описание=Осуществляет поиск объекта по имени. Если существует ровно один объект заданного типа, имя которого точно совпадает с заданным, возвращает его код. Если такого объекта не существует, или их несколько  - возвращает NULL&amp;lt;br/&amp;gt;&lt;br /&gt;
Для партнеров поиск производится не только по названию, но и по ИНН.&lt;br /&gt;
|Синтаксис=GB_FINDOBJECT('''Тип объекта''', '''Название объекта''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Тип объекта&lt;br /&gt;
 |Пояснение=Целое число, являющееся кодом типа объекта ГБ (описание типов см. Объектная модель данных ГБ).&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Название объекта&lt;br /&gt;
 |Пояснение=Строка, являющаяся именем объекта. Для партнеров поиск производится не только по имени, но и по ИНН.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Целое число, являющееся кодом объекта.&lt;br /&gt;
|Пример=Gb_FindObject( 0,`ООО Рога и Копыта` ) &amp;amp;ndash; ищем фирму&amp;lt;br&amp;gt;&lt;br /&gt;
Gb_FindObject( 17,`номер_серии`,`Articul`,ид_товара ) &amp;amp;ndash; ищем серии с номером &amp;quot;номер_серии&amp;quot; для товара &amp;quot;ид_товара&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Gb_FindObject( 0,`TSD.SP.3`,`Node`,100 ) &amp;amp;ndash; ищем партнёра в папке с Id=100&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=GB_FINDOBJECT&amp;diff=3300</id>
		<title>GB FINDOBJECT</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=GB_FINDOBJECT&amp;diff=3300"/>
				<updated>2025-06-05T10:09:54Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Underscore}}&lt;br /&gt;
{{Функция ГБ&lt;br /&gt;
|Название=GB_FINDOBJECT&lt;br /&gt;
|Описание=Осуществляет поиск объекта по имени. Если существует ровно один объект заданного типа, имя которого точно совпадает с заданным, возвращает его код. Если такого объекта не существует, или их несколько  - возвращает NULL&amp;lt;br/&amp;gt;&lt;br /&gt;
Для партнеров поиск производится не только по названию, но и по ИНН.&lt;br /&gt;
|Синтаксис=GB_FINDOBJECT('''Тип объекта''', '''Название объекта''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Тип объекта&lt;br /&gt;
 |Пояснение=Целое число, являющееся кодом типа объекта ГБ (описание типов см. Объектная модель данных ГБ).&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Название объекта&lt;br /&gt;
 |Пояснение=Строка, являющаяся именем объекта. Для партнеров поиск производится не только по имени, но и по ИНН.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Целое число, являющееся кодом объекта.&lt;br /&gt;
|Пример=Gb_FindObject( 0,`ООО Рога и Копыта` )&amp;lt;br&amp;gt; &amp;amp;ndash; ищем фирму&lt;br /&gt;
Gb_FindObject( 17,`номер_серии`,`Articul`,ид_товара ) &amp;amp;ndash; ищем серии с номером &amp;quot;номер_серии&amp;quot; для товара &amp;quot;ид_товара&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Gb_FindObject( 0,`TSD.SP.3`,`Node`,100 ) &amp;amp;ndash; ищем партнёра в папке с Id=100&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3299</id>
		<title>ASSIGN</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3299"/>
				<updated>2025-02-27T10:18:44Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=ASSIGN&lt;br /&gt;
|Описание=Изменяет одно поле текущей записи [[Датасет|датасета]]. &lt;br /&gt;
|Синтаксис=ASSIGN ('''Датасет и поле''', '''Значение''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Датасет и поле&lt;br /&gt;
 |Пояснение=строка, которая состоит из имени одного из датасетов электронной или печатной формы и имени поля этого датасета, разделенных точкой.&amp;lt;br&amp;gt;Можно указать через &amp;quot;;&amp;quot; сразу несколько полей данного датасета: ''датасет.поле1;поле2;поле3;...''&lt;br /&gt;
Особыe режимы:&lt;br /&gt;
*Если перед именем датасета указан символ &amp;quot;*&amp;quot;, то поле изменяется во всех записях датасета. В этом случае второй аргумент - всегда выражение, потому записывается в кавычках.&lt;br /&gt;
*Если вместо имени поля указан символ &amp;quot;*&amp;quot;, то изменятся все данные датасета. В этом случае значением должны быть данные другого датасета, либо 1/0 (тогда датасет будет закрыт).&lt;br /&gt;
*Имя поля может иметь вид Heap.XXX, в этом случае модифицируется одна строка поля Heap&lt;br /&gt;
*Префикс EMBEDDED:Имя_контейнера: означает, что датасет нужно искать в форме, [[Внедрение форм|внедренной]] в указанный контейнер&lt;br /&gt;
*Префикс EMBEDDING: означает, что датасет нужно искать в форме, в которую [[Внедрение форм|внедрена]] текущая форма&lt;br /&gt;
*Префикс LAUNCHFORM: означает, что датасет нужно искать в форме, с которой запущена текущая форма&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Значение&lt;br /&gt;
 |Пояснение=значение произвольного типа данных для записи в поле. Если изменяется сразу несколько полей датасета, то их значения перечисляются через &amp;quot;,&amp;quot;.&amp;lt;br&amp;gt;В режиме изменения всех записей датасета &amp;amp;ndash; строка с формулой.&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Assign( `Goodies.Price`, 1 ) &amp;amp;ndash; изменит текущую запись&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `Dataset.Document;Articul;Certificate;BarCode`, :Id, :Art, :Cert, :BC ) &amp;amp;ndash; изменит сразу несколько полей&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*Goodies.Price`, `Price*2` ) &amp;amp;ndash; изменит все записи (удвоит цену)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsGds.Qty;New`, `1,0` ) &amp;amp;ndash; инициализация двух полей во всех записях датасета (в данном случае значения полей - это выражение, поэтому записываются в кавычках)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsLines.Name;Note`, `'Имя','Комментарий'` ) &amp;amp;ndash; то же самое с текстовыми значениями&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*ds.f1;f2;f3`, `IIF( f1=11,f1*5,f1),0,IIF( f1=55,'b',f3 )` ) &amp;amp;ndash; то же самое с выражениями для каждого поля (вычисление значений полей производится в порядке их следования)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `DataSet.Heap.xxx`, 1 ) &amp;amp;ndash; изменит хиповое поле&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `launchform:HeapSet.@FullName`, HeapSet.FullName ) &amp;amp;ndash; изменит поле родительской формы&lt;br /&gt;
&lt;br /&gt;
В целях оптимизации перед записью нового значения оно вначале сравнивается с прежним, а запись производится только при их неравенстве. При этой проверке старое значение приводится к типу нового значения.&lt;br /&gt;
&amp;lt;br/&amp;gt;Пример. Нужно преобразовать значения &amp;quot;01&amp;quot;, &amp;quot;02&amp;quot; и т.п. в строковом поле Type в значения без ведущих нулей. Если использовать функцию так:&lt;br /&gt;
 Assign( `*dsDocs.Type`, `StrToFloat( Type )` )&lt;br /&gt;
то запись изменённых значений не произойдёт, поскольку при проверке старое значение будет приведено к типу нового значения, т.е. &amp;quot;01&amp;quot; -&amp;gt; 1, после чего будет сравнение с новым значением (1=1) и, поскольку равенство выполнится, записи не будет.&lt;br /&gt;
&amp;lt;br/&amp;gt;Чтобы произвести запись, нужно для нового значения принудительно указать тип старого значения, тогда будет сравнение значений с одинаковым типом, т.е. в примере строки со строкой &amp;quot;01&amp;quot;&amp;lt;&amp;gt;&amp;quot;1&amp;quot;:&lt;br /&gt;
 Assign( `*dsDocs.Type`, `&amp;quot;&amp;quot;+StrToFloat( Type )` )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=EXECCONSOLEAPP&amp;diff=3298</id>
		<title>EXECCONSOLEAPP</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=EXECCONSOLEAPP&amp;diff=3298"/>
				<updated>2024-12-17T03:06:26Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=EXECCONSOLEAPP&lt;br /&gt;
|Описание=Выполняет внешнее приложение. Возвращает код завершения приложения, помещает его текстовый вывод в переменную :AppStdOut&lt;br /&gt;
|Синтаксис=Вариант 1 &amp;amp;ndash; выполнение операции над указанным файлом, используя приложение по умолчанию&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP(`shellexecute`, '''Операция''', '''Файл''', '''Параметры''', '''Путь к файлу''', Вид окна)&amp;lt;br/&amp;gt;&lt;br /&gt;
либо (упрощенный вариант)&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP(`start`, '''Файл''', Режим)&amp;lt;br/&amp;gt;&lt;br /&gt;
Вариант 2 &amp;amp;ndash; запуск консольного приложения&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP('''Командная строка''', Режим ожидания, Флаги)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Операция&lt;br /&gt;
 |Пояснение=Одна из операций Windows, варианты:&lt;br /&gt;
*`find` &amp;amp;ndash; стандартный поиск Windows (файлов, папок, компьютеров и т.д.). Файл - путь к папке, начиная с которой выполняется поиск, остальные параметры не используются.&lt;br /&gt;
*`explore` &amp;amp;ndash; стандартный проводник Windows. Файл - путь к папке, на которой открывается проводник, остальные параметры не используются.&lt;br /&gt;
*`edit` &amp;amp;ndash; редактирование файла в приложении по умолчанию&lt;br /&gt;
*`open` &amp;amp;ndash; открытие файла в приложении по умолчанию&lt;br /&gt;
*`print`,`printto` &amp;amp;ndash; печать файла из приложения по умолчанию&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Файл&lt;br /&gt;
 |Пояснение=Имя файла, с которым следует выполнить операцию.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Параметры&lt;br /&gt;
 |Пояснение=Список параметров, передаваемых загружаемому приложению. Например, для операции printto параметром может быть имя принтера&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Путь к файлу&lt;br /&gt;
 |Пояснение=Путь к файлу, указанному в параметре Файл. Если Файл уже содержит путь, то Путь=пустая строка&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Вид окна&lt;br /&gt;
 |Пояснение=Вид окна приложения (необязательный параметр):&lt;br /&gt;
*0 (`SW_HIDE`) &amp;amp;ndash; скрывает окно загружаемого приложения и активизирует другое окно;&lt;br /&gt;
*1 (`SW_SHOWNORMAL`) &amp;amp;ndash; отображает главное окно приложения и делает его активным. Если окно приложения минимизировано или максимизировано, Windows восстанавливает его первоначальный размер и позицию;&lt;br /&gt;
*2 (`SW_SHOWMINIMIZED`) &amp;amp;ndash; окно загружаемого приложения минимизировано;&lt;br /&gt;
*3 (`SW_MAXIMIZE`) &amp;amp;ndash; раскрывает окно приложения на весь экран и делает его активным;&lt;br /&gt;
*4 (`SW_SHOWNOACTIVATE`) &amp;amp;ndash; отображает окно приложения в его последних сохранённых размерах, но не делает его активным.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Командная строка&lt;br /&gt;
 |Пояснение=строка, полный или относительный путь к исполняемому файлу, а также аргументы командной строки (ключи).&lt;br /&gt;
:Для вызова команд ОС нужно использовать синтаксис '''«cmd /c &amp;lt;команда&amp;gt;»'''.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Режим&lt;br /&gt;
 |Пояснение=строка, режим запуска Windows-приложения для функции ShellExecute:&lt;br /&gt;
*`open` &amp;amp;ndash; открытие документа&lt;br /&gt;
*`print` &amp;amp;ndash; печать документа.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Режим ожидания&lt;br /&gt;
 |Пояснение=целое число:&lt;br /&gt;
*0 &amp;amp;ndash; с ожиданием. Никакие формы ГБ недоступны до окончания работы внешней программы;&lt;br /&gt;
*1 &amp;amp;ndash; условное ожидание. Форма, с которой произведен вызов, становится недоступной, но можно работать в других. По окончании работы внешней программы недоступная форма становится вновь доступной;&lt;br /&gt;
*2 &amp;amp;ndash; без ожидания.&lt;br /&gt;
При значениях режима ожидания 0 и 1 результат вызова - это exitcode процесса.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Флаги&lt;br /&gt;
 |Пояснение=целое число (битовая маска):&lt;br /&gt;
*бит #0=1 &amp;amp;ndash; скрыть окно консоли;&lt;br /&gt;
*бит #1=1 &amp;amp;ndash; НЕ перехватывать стандартный вывод (stdout).&lt;br /&gt;
&lt;br /&gt;
Стандартный вывод консольных приложений, запущенных через ExecConsoleApp в режиме с ожиданием (0 и 1) и флагом со сброшенным битом #1 (бит #1=0), перехватывается и записывается в переменную ''':AppStdOut'''. Не всегда работает надёжно, поэтому можно перенаправить вывод в файл, а затем читать из него.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Целое число&lt;br /&gt;
|Пример=Запустит &amp;quot;Блокнот&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`start`, `notepad`)&lt;br /&gt;
Удалит из папки c:\temp все файлы:&lt;br /&gt;
 ExecConsoleApp(`cmd /c del c:\temp\*.txt`, 2)&lt;br /&gt;
Запустит проводник Windows и отобразит в нём папку &amp;quot;e:\1\&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`shellexecute`, `explore`, `e:\1\`, ``, ``, `SW_SHOWNORMAL`)&lt;br /&gt;
Запустит winrar.exe, который создаст архив C:\myarchive.rar и заархивирует файл &amp;quot;C:\Program Files\WinRAR\WinRAR.chm&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`shellexecute`,&lt;br /&gt;
                `open`,&lt;br /&gt;
                `&amp;quot;C:\Program Files\WinRAR\WinRAR.exe&amp;quot;`,&lt;br /&gt;
                `a C:\myarchive.rar &amp;quot;C:\Program Files\WinRAR\WinRAR.chm&amp;quot;`,&lt;br /&gt;
                ``&lt;br /&gt;
 )&lt;br /&gt;
Печать на выбранный принтер (работает не со всеми типами документов, вопросы - к Microsoft). Путь и имя файла, а также имя принтера, если они содержат пробелы, нужно передавать в кавычках:&lt;br /&gt;
 ExecConsoleApp(&lt;br /&gt;
   `shellexecute`,&lt;br /&gt;
   `printto`,&lt;br /&gt;
   `&amp;quot;D:\Файлы для печати\1.doc&amp;quot;`,&lt;br /&gt;
   `&amp;quot;\\AGENT007\hpLJ1010HB&amp;quot;`,&lt;br /&gt;
   0,&lt;br /&gt;
   `SW_HIDE`&lt;br /&gt;
 )&lt;br /&gt;
Пример скрипта для пакетной печатной формы (печатает файл, путь и имя которого хранится в документе, на принтер, выбранный в стандартной форме печати):&lt;br /&gt;
 IfEmpty(&lt;br /&gt;
   DataSet.Heap.FileToPrint,&lt;br /&gt;
   0,&lt;br /&gt;
   (&lt;br /&gt;
     ExecConsoleApp(&lt;br /&gt;
       `shellexecute`,&lt;br /&gt;
       `printto`,&lt;br /&gt;
       `&amp;quot;`+DataSet.Heap.FileToPrint+`&amp;quot;`,&lt;br /&gt;
       `&amp;quot;`+:PrinterName+`&amp;quot;`,&lt;br /&gt;
       0,&lt;br /&gt;
       `SW_HIDE`&lt;br /&gt;
     ),&lt;br /&gt;
     0&lt;br /&gt;
   )&lt;br /&gt;
 )&lt;br /&gt;
Печать на принтер &amp;quot;по умолчанию&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(&lt;br /&gt;
   `shellexecute`,&lt;br /&gt;
   `print`,&lt;br /&gt;
   `d:\aaa.pdf`,&lt;br /&gt;
   ``,&lt;br /&gt;
   0,&lt;br /&gt;
   `SW_HIDE`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=EXECCONSOLEAPP&amp;diff=3297</id>
		<title>EXECCONSOLEAPP</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=EXECCONSOLEAPP&amp;diff=3297"/>
				<updated>2024-12-12T07:10:19Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=EXECCONSOLEAPP&lt;br /&gt;
|Описание=Выполняет внешнее приложение. Возвращает код завершения приложения, помещает его текстовый вывод в переменную :AppStdOut&lt;br /&gt;
|Синтаксис=Вариант 1 &amp;amp;ndash; выполнение операции над указанным файлом, используя приложение по умолчанию&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP(`shellexecute`, '''Операция''', '''Файл''', '''Параметры''', '''Путь к файлу''', Вид окна)&amp;lt;br/&amp;gt;&lt;br /&gt;
либо (упрощенный вариант)&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP(`start`, '''Файл''', Режим)&amp;lt;br/&amp;gt;&lt;br /&gt;
Вариант 2 &amp;amp;ndash; запуск консольного приложения&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP('''Командная строка''', Режим ожидания, Флаги)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Операция&lt;br /&gt;
 |Пояснение=Одна из операций Windows, варианты:&lt;br /&gt;
*`find` &amp;amp;ndash; стандартный поиск Windows (файлов, папок, компьютеров и т.д.). Файл - путь к папке, начиная с которой выполняется поиск, остальные параметры не используются.&lt;br /&gt;
*`explore` &amp;amp;ndash; стандартный проводник Windows. Файл - путь к папке, на которой открывается проводник, остальные параметры не используются.&lt;br /&gt;
*`edit` &amp;amp;ndash; редактирование файла в приложении по умолчанию&lt;br /&gt;
*`open` &amp;amp;ndash; открытие файла в приложении по умолчанию&lt;br /&gt;
*`print`,`printto` &amp;amp;ndash; печать файла из приложения по умолчанию&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Файл&lt;br /&gt;
 |Пояснение=Имя файла, с которым следует выполнить операцию.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Параметры&lt;br /&gt;
 |Пояснение=Список параметров, передаваемых загружаемому приложению. Например, для операции printto параметром может быть имя принтера&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Путь к файлу&lt;br /&gt;
 |Пояснение=Путь к файлу, указанному в параметре Файл. Если Файл уже содержит путь, то Путь=пустая строка&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Вид окна&lt;br /&gt;
 |Пояснение=Вид окна приложения (необязательный параметр):&lt;br /&gt;
*0 (`SW_HIDE`) &amp;amp;ndash; скрывает окно загружаемого приложения и активизирует другое окно;&lt;br /&gt;
*1 (`SW_SHOWNORMAL`) &amp;amp;ndash; отображает главное окно приложения и делает его активным. Если окно приложения минимизировано или максимизировано, Windows восстанавливает его первоначальный размер и позицию;&lt;br /&gt;
*2 (`SW_SHOWMINIMIZED`) &amp;amp;ndash; окно загружаемого приложения минимизировано;&lt;br /&gt;
*3 (`SW_MAXIMIZE`) &amp;amp;ndash; раскрывает окно приложения на весь экран и делает его активным;&lt;br /&gt;
*4 (`SW_SHOWNOACTIVATE`) &amp;amp;ndash; отображает окно приложения в его последних сохранённых размерах, но не делает его активным.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Командная строка&lt;br /&gt;
 |Пояснение=строка, полный или относительный путь к исполняемому файлу, а также аргументы командной строки (ключи).&lt;br /&gt;
:Для вызова команд ОС нужно использовать синтаксис '''«cmd /c &amp;lt;команда&amp;gt;»'''.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Режим&lt;br /&gt;
 |Пояснение=строка, режим запуска Windows-приложения для функции ShellExecute:&lt;br /&gt;
*`open` &amp;amp;ndash; открытие документа&lt;br /&gt;
*`print` &amp;amp;ndash; печать документа.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Режим ожидания&lt;br /&gt;
 |Пояснение=целое число:&lt;br /&gt;
*0 &amp;amp;ndash; с ожиданием. Никакие формы ГБ недоступны до окончания работы внешней программы;&lt;br /&gt;
*1 &amp;amp;ndash; условное ожидание. Форма, с которой произведен вызов, становится недоступной, но можно работать в других. По окончании работы внешней программы недоступная форма становится вновь доступной;&lt;br /&gt;
*2 &amp;amp;ndash; без ожидания.&lt;br /&gt;
При значениях режима ожидания 0 и 1 результат вызова - это exitcode процесса.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Флаги&lt;br /&gt;
 |Пояснение=целое число (битовая маска):&lt;br /&gt;
*бит #0=1 &amp;amp;ndash; скрыть окно консоли;&lt;br /&gt;
*бит #1=1 &amp;amp;ndash; НЕ перехватывать стандартный вывод (stdout).&lt;br /&gt;
&lt;br /&gt;
Стандартный вывод консольных приложений, запущенных через ExecConsoleApp в режиме с ожиданием (0 и 1) и флагом со сброшенным битом #1 (бит #1=0), перехватывается и записывается в переменную ''':AppStdOut'''. Не всегда работает надёжно, поэтому можно перенаправить вывод в файл, а затем читать из него.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Целое число&lt;br /&gt;
|Пример=Запустит &amp;quot;Блокнот&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`start`, `notepad`)&lt;br /&gt;
Удалит из папки c:\temp все файлы:&lt;br /&gt;
 ExecConsoleApp(`cmd /c del c:\temp\*.txt`, 2)&lt;br /&gt;
Запустит проводник Windows и отобразит в нём папку &amp;quot;e:\1\&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`shellexecute`, `explore`, `e:\1\`, ``, ``, `SW_SHOWNORMAL`)&lt;br /&gt;
Запустит winrar.exe, который создаст архив C:\myarchive.rar и заархивирует файл &amp;quot;C:\Program Files\WinRAR\WinRAR.chm&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`shellexecute`,&lt;br /&gt;
                `open`,&lt;br /&gt;
                `&amp;quot;C:\Program Files\WinRAR\WinRAR.exe&amp;quot;`,&lt;br /&gt;
                `a C:\myarchive.rar &amp;quot;C:\Program Files\WinRAR\WinRAR.chm&amp;quot;`,&lt;br /&gt;
                ``&lt;br /&gt;
 )&lt;br /&gt;
Печать на выбранный принтер, работает не со всеми типами документов, вопросы - к Microsoft (если имя принтера содержит пробелы - передавать его в кавычках):&lt;br /&gt;
 ExecConsoleApp(&lt;br /&gt;
   `shellexecute`,&lt;br /&gt;
   `printto`,&lt;br /&gt;
   `E:\Temp\1.doc`,&lt;br /&gt;
   `&amp;quot;\\AGENT007\hpLJ1010HB&amp;quot;`,&lt;br /&gt;
   0,&lt;br /&gt;
   `SW_HIDE`&lt;br /&gt;
 )&lt;br /&gt;
Печать на принтер &amp;quot;по умолчанию&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(&lt;br /&gt;
   `shellexecute`,&lt;br /&gt;
   `print`,&lt;br /&gt;
   `d:\aaa.pdf`,&lt;br /&gt;
   ``,&lt;br /&gt;
   0,&lt;br /&gt;
   `SW_HIDE`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=SWITCHTEXT&amp;diff=3296</id>
		<title>SWITCHTEXT</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=SWITCHTEXT&amp;diff=3296"/>
				<updated>2024-12-09T04:42:36Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=SWITCHTEXT&lt;br /&gt;
|Описание=Переключает неправильно введенный текст в указанную раскладку. QWERTY&amp;lt;-&amp;gt;ЙЦУКЕН&lt;br /&gt;
|Синтаксис=SWITCHTEXT ('''Строка''','''Направление''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Строка&lt;br /&gt;
 |Пояснение=строка произвольного текста.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Направление&lt;br /&gt;
 |Пояснение=строка, возможные значения:&lt;br /&gt;
:`R` &amp;amp;ndash; лат-&amp;gt;рус&lt;br /&gt;
:`E` &amp;amp;ndash; рус-&amp;gt;лат&lt;br /&gt;
:`WIN-&amp;gt;UTF8` &amp;amp;ndash; очевидно Win1251-&amp;gt;UTF-8&lt;br /&gt;
:`REVERSECASE` &amp;amp;ndash; инвертировать регистр символов (&amp;quot;Привет&amp;quot; &amp;amp;ndash; &amp;quot;пРИВЕТ&amp;quot;)&lt;br /&gt;
:`ENCODEBASE64` &amp;amp;ndash; кодировать по BASE64&lt;br /&gt;
:`DECODEBASE64` &amp;amp;ndash; декодировать по BASE64&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Строка&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=EXECCONSOLEAPP&amp;diff=3295</id>
		<title>EXECCONSOLEAPP</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=EXECCONSOLEAPP&amp;diff=3295"/>
				<updated>2024-09-24T04:29:43Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=EXECCONSOLEAPP&lt;br /&gt;
|Описание=Выполняет внешнее приложение. Возвращает код завершения приложения, помещает его текстовый вывод в переменную :AppStdOut&lt;br /&gt;
|Синтаксис=Вариант 1 - выполнение операции над указанным файлом, используя приложение по умолчанию&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP(`shellexecute`, '''Операция''', '''Файл''', '''Параметры''', '''Путь к файлу''', Вид окна)&amp;lt;br/&amp;gt;&lt;br /&gt;
либо (упрощенный вариант)&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP(`start`, '''Файл''', Режим)&amp;lt;br/&amp;gt;&lt;br /&gt;
Вариант 2 – запуск консольного приложения&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP('''Командная строка''', Режим ожидания, Флаги)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Операция&lt;br /&gt;
 |Пояснение=Одна из операций Windows, варианты:&lt;br /&gt;
*`find` – стандартный поиск Windows (файлов, папок, компьютеров и т.д.). Файл - путь к папке, начиная с которой выполняется поиск, остальные параметры не используются.&lt;br /&gt;
*`explore` – стандартный проводник Windows. Файл - путь к папке, на которой открывается проводник, остальные параметры не используются.&lt;br /&gt;
*`edit` – редактирование файла в приложении по умолчанию&lt;br /&gt;
*`open` – открытие файла в приложении по умолчанию&lt;br /&gt;
*`print`,`printto` – печать файла из приложения по умолчанию&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Файл&lt;br /&gt;
 |Пояснение=Имя файла, с которым следует выполнить операцию.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Параметры&lt;br /&gt;
 |Пояснение=Список параметров, передаваемых загружаемому приложению. Например, для операции printto параметром может быть имя принтера&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Путь к файлу&lt;br /&gt;
 |Пояснение=Путь к файлу, указанному в параметре Файл. Если Файл уже содержит путь, то Путь=пустая строка&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Вид окна&lt;br /&gt;
 |Пояснение=Вид окна приложения (необязательный параметр):&lt;br /&gt;
*0 (`SW_HIDE`) - скрывает окно загружаемого приложения и активизирует другое окно;&lt;br /&gt;
*1 (`SW_SHOWNORMAL`) - отображает главное окно приложения и делает его активным. Если окно приложения минимизировано или максимизировано, Windows восстанавливает его первоначальный размер и позицию;&lt;br /&gt;
*2 (`SW_SHOWMINIMIZED`) - окно загружаемого приложения минимизировано;&lt;br /&gt;
*3 (`SW_MAXIMIZE`) - раскрывает окно приложения на весь экран и делает его активным;&lt;br /&gt;
*4 (`SW_SHOWNOACTIVATE`) - отображает окно приложения в его последних сохранённых размерах, но не делает его активным.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Командная строка&lt;br /&gt;
 |Пояснение=строка, полный или относительный путь к исполняемому файлу, а также аргументы командной строки (ключи).&lt;br /&gt;
:Для вызова команд ОС нужно использовать синтаксис '''«cmd /c &amp;lt;команда&amp;gt;»'''.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Режим&lt;br /&gt;
 |Пояснение=строка, режим запуска Windows-приложения для функции ShellExecute:&lt;br /&gt;
*`open` – открытие документа&lt;br /&gt;
*`print` – печать документа.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Режим ожидания&lt;br /&gt;
 |Пояснение=целое число:&lt;br /&gt;
*0 – с ожиданием. Никакие формы ГБ недоступны до окончания работы внешней программы;&lt;br /&gt;
*1 – условное ожидание. Форма, с которой произведен вызов, становится недоступной, но можно работать в других. По окончании работы внешней программы недоступная форма становится вновь доступной;&lt;br /&gt;
*2 – без ожидания.&lt;br /&gt;
При значениях режима ожидания 0 и 1 результат вызова - это exitcode процесса.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Флаги&lt;br /&gt;
 |Пояснение=целое число (битовая маска):&lt;br /&gt;
*Bin(0 or 1) – скрыть окно консоли;&lt;br /&gt;
*Bin(0 or 2) – вернуть стандартный вывод (stdout). Не всегда работает надёжно, поэтому можно перенаправить вывод в файл, а затем читать из него.&lt;br /&gt;
&lt;br /&gt;
Стандартный вывод консольных приложений, запущенных через ExecConsoleApp в режиме с ожиданием (0 и 1) и флагом Bin(0 or 2), перехватывается и записывается в переменную ''':AppStdOut'''&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Целое число&lt;br /&gt;
|Пример=Запустит &amp;quot;Блокнот&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`start`, `notepad`)&lt;br /&gt;
Удалит из папки c:\temp все файлы:&lt;br /&gt;
 ExecConsoleApp(`cmd /c del c:\temp\*.txt`, 2)&lt;br /&gt;
Запустит проводник Windows и отобразит в нём папку &amp;quot;e:\1\&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`shellexecute`, `explore`, `e:\1\`, ``, ``, `SW_SHOWNORMAL`)&lt;br /&gt;
Запустит winrar.exe, который создаст архив C:\myarchive.rar и заархивирует файл &amp;quot;C:\Program Files\WinRAR\WinRAR.chm&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`shellexecute`,&lt;br /&gt;
                `open`,&lt;br /&gt;
                `&amp;quot;C:\Program Files\WinRAR\WinRAR.exe&amp;quot;`,&lt;br /&gt;
                `a C:\myarchive.rar &amp;quot;C:\Program Files\WinRAR\WinRAR.chm&amp;quot;`,&lt;br /&gt;
                ``&lt;br /&gt;
 )&lt;br /&gt;
Печать на выбранный принтер, работает не со всеми типами документов, вопросы - к Microsoft (если имя принтера содержит пробелы - передавать его в кавычках):&lt;br /&gt;
 ExecConsoleApp(&lt;br /&gt;
   `shellexecute`,&lt;br /&gt;
   `printto`,&lt;br /&gt;
   `E:\Temp\1.doc`,&lt;br /&gt;
   `&amp;quot;\\AGENT007\hpLJ1010HB&amp;quot;`,&lt;br /&gt;
   0,&lt;br /&gt;
   `SW_HIDE`&lt;br /&gt;
 )&lt;br /&gt;
Печать на принтер &amp;quot;по умолчанию&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(&lt;br /&gt;
   `shellexecute`,&lt;br /&gt;
   `print`,&lt;br /&gt;
   `d:\aaa.pdf`,&lt;br /&gt;
   ``,&lt;br /&gt;
   0,&lt;br /&gt;
   `SW_HIDE`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=EXECCONSOLEAPP&amp;diff=3294</id>
		<title>EXECCONSOLEAPP</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=EXECCONSOLEAPP&amp;diff=3294"/>
				<updated>2024-08-19T03:29:45Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=EXECCONSOLEAPP&lt;br /&gt;
|Описание=Выполняет внешнее приложение. Возвращает код завершения приложения, помещает его текстовый вывод в переменную :AppStdOut&lt;br /&gt;
|Синтаксис=Вариант 1 - выполнение операции над указанным файлом, используя приложение по умолчанию&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP(`shellexecute`, '''Операция''', '''Файл''', '''Параметры''', '''Путь к файлу''', Вид окна)&amp;lt;br/&amp;gt;&lt;br /&gt;
либо (упрощенный вариант)&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP(`start`, '''Файл''', Режим)&amp;lt;br/&amp;gt;&lt;br /&gt;
Вариант 2 – запуск консольного приложения&amp;lt;br/&amp;gt;&lt;br /&gt;
EXECCONSOLEAPP('''Командная строка''', Режим ожидания, Флаги)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Операция&lt;br /&gt;
 |Пояснение=Одна из операций Windows, варианты:&lt;br /&gt;
*`find` – стандартный поиск Windows (файлов, папок, компьютеров и т.д.). Файл - путь к папке, начиная с которой выполняется поиск, остальные параметры не используются.&lt;br /&gt;
*`explore` – стандартный проводник Windows. Файл - путь к папке, на которой открывается проводник, остальные параметры не используются.&lt;br /&gt;
*`edit` – редактирование файла в приложении по умолчанию&lt;br /&gt;
*`open` – открытие файла в приложении по умолчанию&lt;br /&gt;
*`print`,`printto` – печать файла из приложения по умолчанию&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Файл&lt;br /&gt;
 |Пояснение=Имя файла, с которым следует выполнить операцию.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Параметры&lt;br /&gt;
 |Пояснение=Список параметров, передаваемых загружаемому приложению. Например, для операции printto параметром может быть имя принтера&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Путь к файлу&lt;br /&gt;
 |Пояснение=Путь к файлу, указанному в параметре Файл. Если Файл уже содержит путь, то Путь=пустая строка&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Вид окна&lt;br /&gt;
 |Пояснение=Вид окна приложения (необязательный параметр):&lt;br /&gt;
*0 (`SW_HIDE`) - скрывает окно загружаемого приложения и активизирует другое окно;&lt;br /&gt;
*1 (`SW_SHOWNORMAL`) - отображает главное окно приложения и делает его активным. Если окно приложения минимизировано или максимизировано, Windows восстанавливает его первоначальный размер и позицию;&lt;br /&gt;
*2 (`SW_SHOWMINIMIZED`) - окно загружаемого приложения минимизировано;&lt;br /&gt;
*3 (`SW_MAXIMIZE`) - раскрывает окно приложения на весь экран и делает его активным;&lt;br /&gt;
*4 (`SW_SHOWNOACTIVATE`) - отображает окно приложения в его последних сохранённых размерах, но не делает его активным.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Командная строка&lt;br /&gt;
 |Пояснение=строка, полный или относительный путь к исполняемому файлу, а также аргументы командной строки (ключи).&lt;br /&gt;
:Для вызова команд ОС нужно использовать синтаксис '''«cmd /c &amp;lt;команда&amp;gt;»'''.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Режим&lt;br /&gt;
 |Пояснение=строка, режим запуска Windows-приложения для функции ShellExecute:&lt;br /&gt;
*`open` – открытие документа&lt;br /&gt;
*`print` – печать документа.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Режим ожидания&lt;br /&gt;
 |Пояснение=целое число:&lt;br /&gt;
*0 – с ожиданием. Никакие формы ГБ недоступны до окончания работы внешней программы;&lt;br /&gt;
*1 – условное ожидание. Форма, с которой произведен вызов, становится недоступной, но можно работать в других. По окончании работы внешней программы недоступная форма становится вновь доступной;&lt;br /&gt;
*2 – без ожидания.&lt;br /&gt;
При значениях режима ожидания 0 и 1 результат вызова - это exitcode процесса.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Флаги&lt;br /&gt;
 |Пояснение=целое число (битовая маска):&lt;br /&gt;
*Bin(0 or 1) – скрыть окно консоли;&lt;br /&gt;
*Bin(0 or 2) – вернуть стандартный вывод (stdout). Не всегда работает надёжно, поэтому можно перенаправить вывод в файл, а затем читать из него.&lt;br /&gt;
&lt;br /&gt;
Стандартный вывод консольных приложений, запущенных через ExecConsoleApp в режиме с ожиданием (0 и 1) и флагом Bin(0 or 2), перехватывается и записывается в переменную ''':AppStdOut'''&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Целое число&lt;br /&gt;
|Пример=Запустит &amp;quot;Блокнот&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`start`, `notepad`)&lt;br /&gt;
Удалит из папки c:\temp все файлы:&lt;br /&gt;
 ExecConsoleApp(`cmd /c del c:\temp\*.txt`, 2)&lt;br /&gt;
Запустит проводник Windows и отобразит в нём папку &amp;quot;e:\1\&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`shellexecute`, `explore`, `e:\1\`, ``, ``, `SW_SHOWNORMAL`)&lt;br /&gt;
Запустит winrar.exe, который создаст архив C:\myarchive.rar и заархивирует файл &amp;quot;C:\Program Files\WinRAR\WinRAR.chm&amp;quot;:&lt;br /&gt;
 ExecConsoleApp(`shellexecute`,&lt;br /&gt;
                `open`,&lt;br /&gt;
                `&amp;quot;C:\Program Files\WinRAR\WinRAR.exe&amp;quot;`,&lt;br /&gt;
                `a C:\myarchive.rar &amp;quot;C:\Program Files\WinRAR\WinRAR.chm&amp;quot;`,&lt;br /&gt;
                ``&lt;br /&gt;
 )&lt;br /&gt;
Печать на выбранный принтер, работает не со всеми типами документов, вопросы - к Microsoft (если имя принтера содержит пробелы - передавать его в кавычках):&lt;br /&gt;
 ExecConsoleApp(&lt;br /&gt;
   `shellexecute`,&lt;br /&gt;
   `printto`,&lt;br /&gt;
   `E:\Temp\1.doc`,&lt;br /&gt;
   `&amp;quot;\\AGENT007\hpLJ1010HB&amp;quot;`,&lt;br /&gt;
   0,&lt;br /&gt;
   `SW_HIDE`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=EVAL&amp;diff=3293</id>
		<title>EVAL</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=EVAL&amp;diff=3293"/>
				<updated>2024-07-15T04:29:55Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=EVAL&lt;br /&gt;
|Описание=Функция позволяет вычислить значение выражения, которое находится в строке. Отличается от EVALUATE_EXPRESSION только тем, что вычисление производится на чистом датасете.&lt;br /&gt;
|Синтаксис=EVAL ('''Выражение''', '''json''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Выражение&lt;br /&gt;
 |Пояснение=Строка, в которой содержится вычисляемое выражение.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=json&lt;br /&gt;
 |Пояснение=Строка, можно задать значение &amp;quot;json&amp;quot; для парсинга JSON (начиная с версии 1.9.0.31)&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Значение произвольного типа.&lt;br /&gt;
|Пример=&lt;br /&gt;
Получить значение переменной, имя которой находится в другой переменной:&lt;br /&gt;
 Eval( `:`+:varname )&lt;br /&gt;
&lt;br /&gt;
Добываем данные из JSON:&lt;br /&gt;
 :data:=Eval( :data,`json` ),&lt;br /&gt;
 Info(&lt;br /&gt;
   :data[`providerName`]&lt;br /&gt;
 ),&lt;br /&gt;
 IterateList(&lt;br /&gt;
   :data[`items`],&lt;br /&gt;
   :row,&lt;br /&gt;
   Info(&lt;br /&gt;
     :row[`code`]&lt;br /&gt;
   )&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Преобразовать дату из формата ISO:&lt;br /&gt;
 :date:=`2024-04-12T15:31:13+07:00`,&lt;br /&gt;
 :Res:=Eval( `['`+:date+`']`,`json` ),&lt;br /&gt;
 Info( :Res[0] )&lt;br /&gt;
результат (тип &amp;amp;ndash; Date): 12.04.2024 15:31:13&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=EVAL&amp;diff=3292</id>
		<title>EVAL</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=EVAL&amp;diff=3292"/>
				<updated>2024-07-15T04:26:23Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=EVAL&lt;br /&gt;
|Описание=Функция позволяет вычислить значение выражения, которое находится в строке. Отличается от EVALUATE_EXPRESSION только тем, что вычисление производится на чистом датасете.&lt;br /&gt;
|Синтаксис=EVAL ('''Выражение''', '''json''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Выражение&lt;br /&gt;
 |Пояснение=Строка, в которой содержится вычисляемое выражение.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=json&lt;br /&gt;
 |Пояснение=Строка, можно задать значение &amp;quot;json&amp;quot; для парсинга JSON (начиная с версии 1.9.0.31)&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Значение произвольного типа.&lt;br /&gt;
|Пример=&lt;br /&gt;
Получить значение переменной, имя которой находится в другой переменной:&lt;br /&gt;
 Eval( `:`+:varname )&lt;br /&gt;
&lt;br /&gt;
Добываем данные из JSON:&lt;br /&gt;
 :data:=Eval( :data,`json` ),&lt;br /&gt;
 Info(&lt;br /&gt;
   :data[`providerName`]&lt;br /&gt;
 ),&lt;br /&gt;
 IterateList(&lt;br /&gt;
   :data[`items`],&lt;br /&gt;
   :row,&lt;br /&gt;
   Info(&lt;br /&gt;
     :row[`code`]&lt;br /&gt;
   )&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Преобразовать дату из формата ISO:&lt;br /&gt;
 :date:=`2024-04-12T10:11:12+07:00`,&lt;br /&gt;
 Eval( `['`+:date+`']`,`json` )&lt;br /&gt;
результат (тип &amp;amp;ndash; Date): 12.04.2024 10:11:12&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=EVAL&amp;diff=3291</id>
		<title>EVAL</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=EVAL&amp;diff=3291"/>
				<updated>2024-07-15T04:24:51Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=EVAL&lt;br /&gt;
|Описание=Функция позволяет вычислить значение выражения, которое находится в строке. Отличается от EVALUATE_EXPRESSION только тем, что вычисление производится на чистом датасете.&lt;br /&gt;
|Синтаксис=EVAL ('''Выражение''', '''json''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Выражение&lt;br /&gt;
 |Пояснение=Строка, в которой содержится вычисляемое выражение.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=json&lt;br /&gt;
 |Пояснение=Строка, можно задать значение &amp;quot;json&amp;quot; для парсинга JSON (начиная с версии 1.9.0.31)&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Значение произвольного типа.&lt;br /&gt;
|Пример=&lt;br /&gt;
Получить значение переменной, имя которой находится в другой переменной:&lt;br /&gt;
 Eval(&amp;quot;:&amp;quot;+:varname)&lt;br /&gt;
&lt;br /&gt;
Добываем данные из JSON:&lt;br /&gt;
 :data:=Eval(:data,`json` ),&lt;br /&gt;
 Info(&lt;br /&gt;
   :data['providerName']&lt;br /&gt;
 ),&lt;br /&gt;
 IterateList(&lt;br /&gt;
   :data[`items`],&lt;br /&gt;
   :row,&lt;br /&gt;
   Info(&lt;br /&gt;
     :row[`code`]&lt;br /&gt;
   )&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Преобразовать дату из формата ISO:&lt;br /&gt;
 :date:=`2024-04-12T15:31:13+07:00`,&lt;br /&gt;
 Eval( `['`+:date+`']`,`json` )&lt;br /&gt;
результат (тип &amp;amp;ndash; Date): 12.04.2024 15:31:13&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3288</id>
		<title>ASSIGN</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3288"/>
				<updated>2024-01-22T07:22:44Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=ASSIGN&lt;br /&gt;
|Описание=Изменяет одно поле текущей записи [[Датасет|датасета]]. &lt;br /&gt;
|Синтаксис=ASSIGN ('''Датасет и поле''', '''Значение''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Датасет и поле&lt;br /&gt;
 |Пояснение=строка, которая состоит из имени одного из датасетов электронной или печатной формы и имени поля этого датасета, разделенных точкой.&amp;lt;br&amp;gt;Можно указать через &amp;quot;;&amp;quot; сразу несколько полей данного датасета: ''датасет.поле1;поле2;поле3;...''&lt;br /&gt;
Особыe режимы:&lt;br /&gt;
*Если перед именем датасета указан символ &amp;quot;*&amp;quot;, то поле изменяется во всех записях датасета. В этом случае второй аргумент - всегда выражение, потому записывается в кавычках.&lt;br /&gt;
*Если вместо имени поля указан символ &amp;quot;*&amp;quot;, то изменятся все данные датасета. В этом случае значением должны быть данные другого датасета, либо 1/0 (тогда датасет будет закрыт).&lt;br /&gt;
*Имя поля может иметь вид Heap.XXX, в этом случае модифицируется одна строка поля Heap&lt;br /&gt;
*Префикс EMBEDDED:Имя_контейнера: означает, что датасет нужно искать в форме, [[Внедрение форм|внедренной]] в указанный контейнер&lt;br /&gt;
*Префикс EMBEDDING: означает, что датасет нужно искать в форме, в которую [[Внедрение форм|внедрена]] текущая форма&lt;br /&gt;
*Префикс LAUNCHFORM: означает, что датасет нужно искать в форме, с которой запущена текущая форма&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Значение&lt;br /&gt;
 |Пояснение=значение произвольного типа данных для записи в поле. Если изменяется сразу несколько полей датасета, то их значения перечисляются через &amp;quot;,&amp;quot;.&amp;lt;br&amp;gt;В режиме изменения всех записей датасета &amp;amp;ndash; строка с формулой.&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Assign( `Goodies.Price`, 1 ) &amp;amp;ndash; изменит текущую запись&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `Dataset.Document;Articul;Certificate;BarCode`, :Id, :Art, :Cert, :BC ) &amp;amp;ndash; изменит сразу несколько полей&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*Goodies.Price`, `Price*2` ) &amp;amp;ndash; изменит все записи (удвоит цену)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsGds.Qty;New`, `1,0` ) &amp;amp;ndash; инициализация двух полей во всех записях датасета (в данном случае значения полей - это выражение, поэтому записываются в кавычках)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsLines.Name;Note`, `'Имя','Комментарий'` ) &amp;amp;ndash; то же самое с текстовыми значениями&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*ds.f1;f2;f3`, `IIF( f1=11,f1*5,f1),0,IIF( f1=55,'b',f3 )` ) &amp;amp;ndash; то же самое с выражениями для каждого поля (вычисление значений полей производится в порядке их следования)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `DataSet.Heap.xxx`, 1 ) &amp;amp;ndash; изменит хиповое поле&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `launchform:HeapSet.@FullName`, HeapSet.FullName ) &amp;amp;ndash; изменит поле родительской формы&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3287</id>
		<title>ASSIGN</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3287"/>
				<updated>2024-01-22T07:13:11Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=ASSIGN&lt;br /&gt;
|Описание=Изменяет одно поле текущей записи [[Датасет|датасета]]. &lt;br /&gt;
|Синтаксис=ASSIGN ('''Датасет и поле''', '''Значение''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Датасет и поле&lt;br /&gt;
 |Пояснение=строка, которая состоит из имени одного из датасетов электронной или печатной формы и имени поля этого датасета, разделенных точкой.&amp;lt;br&amp;gt;Можно указать через &amp;quot;;&amp;quot; сразу несколько полей данного датасета: ''датасет.поле1;поле2;поле3;...''&lt;br /&gt;
Особыe режимы:&lt;br /&gt;
*Если перед именем датасета указан символ &amp;quot;*&amp;quot;, то поле изменяется во всех записях датасета. В этом случае второй аргумент - всегда выражение, потому записывается в кавычках.&lt;br /&gt;
*Если вместо имени поля указан символ &amp;quot;*&amp;quot;, то изменятся все данные датасета. В этом случае значением должны быть данные другого датасета, либо 1/0 (тогда датасет будет закрыт).&lt;br /&gt;
*Имя поля может иметь вид Heap.XXX, в этом случае модифицируется одна строка поля Heap&lt;br /&gt;
*Префикс EMBEDDED:Имя_контейнера: означает, что датасет нужно искать в форме, [[Внедрение форм|внедренной]] в указанный контейнер&lt;br /&gt;
*Префикс EMBEDDING: означает, что датасет нужно искать в форме, в которую [[Внедрение форм|внедрена]] текущая форма&lt;br /&gt;
*Префикс LAUNCHFORM: означает, что датасет нужно искать в форме, с которой запущена текущая форма&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Значение&lt;br /&gt;
 |Пояснение=значение произвольного типа данных для записи в поле. Если изменяется сразу несколько полей датасета, то их значения перечисляются через &amp;quot;,&amp;quot;.&amp;lt;br&amp;gt;В режиме изменения всех записей датасета &amp;amp;ndash; строка с формулой.&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Assign( `Goodies.Price`, 1 ) &amp;amp;ndash; изменит текущую запись&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `Dataset.Document;Articul;Certificate;BarCode`, :Id, :Art, :Cert, :BC ) &amp;amp;ndash; изменит сразу несколько полей&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*Goodies.Price`, `Price*2` ) &amp;amp;ndash; изменит все записи (удвоит цену)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsGds.Qty;New`, `1,0` ) &amp;amp;ndash; инициализация двух полей во всех записях датасета (в данном случае значения полей - это выражение, поэтому записываются в кавычках)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsLines.Name;Note`, `'Имя','Комментарий'` ) &amp;amp;ndash; то же самое с текстовыми значениями&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*ds.f1;f2;f3`, `IIF( f1=11,f1*5,f1),0,IIF( f1=1,'b',f3 )` ) &amp;amp;ndash; то же самое с выражениями для каждого поля&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `DataSet.Heap.xxx`, 1 ) &amp;amp;ndash; изменит хиповое поле&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `launchform:HeapSet.@FullName`, HeapSet.FullName ) &amp;amp;ndash; изменит поле родительской формы&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3286</id>
		<title>OPENDATASET</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3286"/>
				<updated>2023-11-15T03:44:51Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
 |Название=OPENDATASET&lt;br /&gt;
 |Описание=Открывает датасет при помощи вызова процедуры, либо путем импорта данных из файла (текстового, DBF, Excel, CDS)&lt;br /&gt;
 |Синтаксис=OPENDATASET('''Имя процедуры''', '''Датасет параметров''', '''Датасет результатов''')&lt;br /&gt;
 |Аргументы={{Аргумент&lt;br /&gt;
  |Название=Имя процедуры&lt;br /&gt;
  |Пояснение=Строка, содержащая одно из значений:&lt;br /&gt;
* имя процедуры в БД. Имя процедуры может иметь вид ''`GBDB://База/Процедура`'' для осуществления [[Распределенные вызовы|распределенных вызовов]] либо ''`GBTCP://Адрес:Порт/Процедура`'' для вызова метода [[Бизнес-сервер|бизнес-сервера]];&lt;br /&gt;
* константа '''`file:`''' для импорта данных из файла;&lt;br /&gt;
* константа '''`copy:`''' для создания копии датасета;&lt;br /&gt;
* константа '''`array:`''' для создания датасета на основе данных из ассоциативного массива.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет параметров&lt;br /&gt;
  |Пояснение=Строка с именем или непосредственно описанием датасета, содержащего входные параметры процедуры либо '''параметры импорта файла'''.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет результатов&lt;br /&gt;
  |Пояснение=Строка, определяющая имя создаваемого датасета. Если задана пустая строка ``, то датасет не будет создан (используется, если нам не интересно, что вернула процедура).&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Нет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Параметры импорта файла&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h6&amp;gt;Общие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''UseOpenOffice''' &amp;amp;ndash; если передано значение &amp;quot;1&amp;quot;, для импорта будет принудительно использован OpenOffice (LibreOffice), в противном случае OO (LO) используется только в случае, если не установлен Microsoft Office (версии ГБ после 14.11.2023);&lt;br /&gt;
* '''FileType''' &amp;amp;ndash; строка, тип файла (TXT, CSV, DBF, XLS, CDS);&lt;br /&gt;
* '''FileName''' &amp;amp;ndash; строка, имя файла;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление кодировкой&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''CharSet''' &amp;amp;ndash; строка, тип кодировки файла. Возможны следующие значения:&lt;br /&gt;
**`CP866` &amp;amp;ndash; включает кодировку DOS;&lt;br /&gt;
**`UTF-8` &amp;amp;ndash; включает кодировку UTF-8;&lt;br /&gt;
**`WIN1251` &amp;amp;ndash; включает кодировку WIN1251;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''CP866''' &amp;amp;ndash; строка, любое непустое значение означает, что текстовый файл в кодировке DOS (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''WIN1251''' &amp;amp;ndash; строка, любое непустое значение означает, что DBF файл в кодировке Windows (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Настройка полей&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''FieldCount''' &amp;amp;ndash; число, количество полей в строке файла (по умолчанию количество полей определяется по первой импортируемой строке);&lt;br /&gt;
* '''FieldsMap''' &amp;amp;ndash; строка, содержит описание полей создаваемого датасета.&amp;lt;br&amp;gt;Представляет собой список формул вида имя,тип=выражение через «;», определяющих поля создаваемого датасета и их вычисление через поля исходного файла. Возможные значения для типа поля: I, F, D, S, B.&amp;lt;br&amp;gt;При задании константы '''`auto`''' для файла типа DBF, структура '''Датасета результатов''' повторит структуру импортируемого файла DBF.&lt;br /&gt;
:Если FieldsMap не задан, структура датасета формируется автоматически, а поля именуются как: fld0, fld1, ..., fldN (где N &amp;amp;ndash; количество полей, определённое по первой строке файла, либо заданное в параметре FieldCount). Тип таких полей &amp;amp;ndash; S, размер поля &amp;amp;ndash; 250 (см. также FieldSize).&lt;br /&gt;
* '''Separator''' &amp;amp;ndash; строка, разделитель полей в текстовом файле;&lt;br /&gt;
* '''Tabs''' &amp;amp;ndash; строка, список (через символ &amp;quot;;&amp;quot;) отступов полей в текстовом файле, отсчет начинается с 0;&lt;br /&gt;
* '''FieldSize''' &amp;amp;ndash; размер строковых полей. Если FieldSize не задан, а количество полей более 200, то размер строковых полей будет принудительно установлен равным 40 символам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление строками&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''StartLine''' &amp;amp;ndash; число, номер строки с которой начинается импорт (отсчет начинается с 0);&lt;br /&gt;
* '''EndLine''' &amp;amp;ndash; число, номер строки, на которой заканчивается импорт (отсчет начинается с 0). Отрицательное значение означает, что не нужно импортировать соответствующее число последних строк;&lt;br /&gt;
* '''StopIfEmpty''' &amp;amp;ndash; строка, любое непустое значение означает, что нужно остановить импорт, встретив пустую строку (для файлов Excel проверяется первая ячейка в строке);&lt;br /&gt;
* '''Filter''' &amp;amp;ndash; выражение для фильтрации строк исходного файла;&lt;br /&gt;
:''Из-за бага в dbclient (и не только) в старых версиях ГБ (до 04.10.2017) при задании фильтра результирующий датасет содержал в логе изменений &amp;quot;мусор&amp;quot;, т.е. записи, отсеянные фильтром. Эти записи воспринимались udf'кой как не удалённые, из-за чего при передаче датасета в процедуру, она получала неотфильтрованный набор записей.''&lt;br /&gt;
:''Обойти это можно путём задания параметра '''LogChanges=1''', что позволит обойти баг dbclient, но резко увеличит объём расходуемой памяти и снизит скорость загрузки. Вариант, когда при загрузке не используется Filter, а ненужные записи удаляются позже (с помощью функции Delete), также потребует задание параметра '''LogChanges=1'''.''&lt;br /&gt;
* '''Comment''' &amp;amp;ndash; строка, символ комментария в текстовом файле. При встрече данного символа в начале строки, эта строка игнорируется и не попадает в '''Датасет результатов''';&lt;br /&gt;
* '''ProcessCR''' &amp;amp;ndash; строка, любое непустое значение включает режим импорта XLS-файлов, при котором ячейка, содержащая символы перевода строки (ячейка содержит несколько строк, введённых через Alt+Enter), импортируется как одно поле. При этом такие строки объединяются в одну через пробел.&amp;lt;br&amp;gt;При импорте по-умолчанию (значение ProcessCR не задано), такие ячейки импортируются, как несколько записей;&lt;br /&gt;
* '''ProcessCRFrom''' &amp;amp;ndash; число, номер строки XLS-файла, начиная с которой применяется алгоритм импорта, включенный параметром ProcessCR (отсчет начинается с 0);&lt;br /&gt;
* '''QuoteChar''' &amp;amp;ndash; строка, если задан символ кавычек (обычно - `&amp;quot;`), то алгоритм импорта, включенный параметром ProcessCR, объединяет строки в одну не через пробел, а через перевод строки (#13#10);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Прочие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''Sheet''' &amp;amp;ndash; строка, название листа для импорта из Excel.&lt;br /&gt;
&lt;br /&gt;
 |Пример=Вызов отчёта &amp;quot;Реестр документов&amp;quot; (в датасете dsDoc - входные параметры процедуры):&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `Documents_PeriodRegistry`,&lt;br /&gt;
   `dsDoc`,&lt;br /&gt;
   `dsRes`&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Некоторые процедуры могут возвращать сообщения о результатах своей работы, например ''&amp;quot;Обработано 1234 строк. Найдено и отмечено 110 товаров&amp;quot;''. Такое сообщение в процедурах принято передавать в выходном датасете в поле Message:&lt;br /&gt;
&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `MZ_ArticulsImport`,&lt;br /&gt;
   `dsTXT`,&lt;br /&gt;
   `dsRes`&lt;br /&gt;
 ),&lt;br /&gt;
 IfEmpty(&lt;br /&gt;
   dsRes.Message,&lt;br /&gt;
   0,&lt;br /&gt;
   Info( dsRes.Message )&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Создание датасета из массива:&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `array:`,&lt;br /&gt;
   [&lt;br /&gt;
     [&lt;br /&gt;
       `a` : 1,&lt;br /&gt;
       `b` : 2&lt;br /&gt;
     ]&lt;br /&gt;
   ],&lt;br /&gt;
   `ds`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3285</id>
		<title>OPENDATASET</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3285"/>
				<updated>2023-11-15T03:43:55Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
 |Название=OPENDATASET&lt;br /&gt;
 |Описание=Открывает датасет при помощи вызова процедуры, либо путем импорта данных из файла (текстового, DBF, Excel, CDS)&lt;br /&gt;
 |Синтаксис=OPENDATASET('''Имя процедуры''', '''Датасет параметров''', '''Датасет результатов''')&lt;br /&gt;
 |Аргументы={{Аргумент&lt;br /&gt;
  |Название=Имя процедуры&lt;br /&gt;
  |Пояснение=Строка, содержащая одно из значений:&lt;br /&gt;
* имя процедуры в БД. Имя процедуры может иметь вид ''`GBDB://База/Процедура`'' для осуществления [[Распределенные вызовы|распределенных вызовов]] либо ''`GBTCP://Адрес:Порт/Процедура`'' для вызова метода [[Бизнес-сервер|бизнес-сервера]];&lt;br /&gt;
* константа '''`file:`''' для импорта данных из файла;&lt;br /&gt;
* константа '''`copy:`''' для создания копии датасета;&lt;br /&gt;
* константа '''`array:`''' для создания датасета на основе данных из ассоциативного массива.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет параметров&lt;br /&gt;
  |Пояснение=Строка с именем или непосредственно описанием датасета, содержащего входные параметры процедуры либо '''параметры импорта файла'''.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет результатов&lt;br /&gt;
  |Пояснение=Строка, определяющая имя создаваемого датасета. Если задана пустая строка ``, то датасет не будет создан (используется, если нам не интересно, что вернула процедура).&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Нет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Параметры импорта файла&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h6&amp;gt;Общие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''UseOpenOffice''' &amp;amp;ndash; если передано значение &amp;quot;1&amp;quot;, для импорта будет принудительно использован OpenOffice (LibreOffice), в противном случае OO (LO) используется только в случае, если не установлен Microsoft Office&lt;br /&gt;
* '''FileType''' &amp;amp;ndash; строка, тип файла (TXT, CSV, DBF, XLS, CDS);&lt;br /&gt;
* '''FileName''' &amp;amp;ndash; строка, имя файла;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление кодировкой&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''CharSet''' &amp;amp;ndash; строка, тип кодировки файла. Возможны следующие значения:&lt;br /&gt;
**`CP866` &amp;amp;ndash; включает кодировку DOS;&lt;br /&gt;
**`UTF-8` &amp;amp;ndash; включает кодировку UTF-8;&lt;br /&gt;
**`WIN1251` &amp;amp;ndash; включает кодировку WIN1251;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''CP866''' &amp;amp;ndash; строка, любое непустое значение означает, что текстовый файл в кодировке DOS (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''WIN1251''' &amp;amp;ndash; строка, любое непустое значение означает, что DBF файл в кодировке Windows (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Настройка полей&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''FieldCount''' &amp;amp;ndash; число, количество полей в строке файла (по умолчанию количество полей определяется по первой импортируемой строке);&lt;br /&gt;
* '''FieldsMap''' &amp;amp;ndash; строка, содержит описание полей создаваемого датасета.&amp;lt;br&amp;gt;Представляет собой список формул вида имя,тип=выражение через «;», определяющих поля создаваемого датасета и их вычисление через поля исходного файла. Возможные значения для типа поля: I, F, D, S, B.&amp;lt;br&amp;gt;При задании константы '''`auto`''' для файла типа DBF, структура '''Датасета результатов''' повторит структуру импортируемого файла DBF.&lt;br /&gt;
:Если FieldsMap не задан, структура датасета формируется автоматически, а поля именуются как: fld0, fld1, ..., fldN (где N &amp;amp;ndash; количество полей, определённое по первой строке файла, либо заданное в параметре FieldCount). Тип таких полей &amp;amp;ndash; S, размер поля &amp;amp;ndash; 250 (см. также FieldSize).&lt;br /&gt;
* '''Separator''' &amp;amp;ndash; строка, разделитель полей в текстовом файле;&lt;br /&gt;
* '''Tabs''' &amp;amp;ndash; строка, список (через символ &amp;quot;;&amp;quot;) отступов полей в текстовом файле, отсчет начинается с 0;&lt;br /&gt;
* '''FieldSize''' &amp;amp;ndash; размер строковых полей. Если FieldSize не задан, а количество полей более 200, то размер строковых полей будет принудительно установлен равным 40 символам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление строками&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''StartLine''' &amp;amp;ndash; число, номер строки с которой начинается импорт (отсчет начинается с 0);&lt;br /&gt;
* '''EndLine''' &amp;amp;ndash; число, номер строки, на которой заканчивается импорт (отсчет начинается с 0). Отрицательное значение означает, что не нужно импортировать соответствующее число последних строк;&lt;br /&gt;
* '''StopIfEmpty''' &amp;amp;ndash; строка, любое непустое значение означает, что нужно остановить импорт, встретив пустую строку (для файлов Excel проверяется первая ячейка в строке);&lt;br /&gt;
* '''Filter''' &amp;amp;ndash; выражение для фильтрации строк исходного файла;&lt;br /&gt;
:''Из-за бага в dbclient (и не только) в старых версиях ГБ (до 04.10.2017) при задании фильтра результирующий датасет содержал в логе изменений &amp;quot;мусор&amp;quot;, т.е. записи, отсеянные фильтром. Эти записи воспринимались udf'кой как не удалённые, из-за чего при передаче датасета в процедуру, она получала неотфильтрованный набор записей.''&lt;br /&gt;
:''Обойти это можно путём задания параметра '''LogChanges=1''', что позволит обойти баг dbclient, но резко увеличит объём расходуемой памяти и снизит скорость загрузки. Вариант, когда при загрузке не используется Filter, а ненужные записи удаляются позже (с помощью функции Delete), также потребует задание параметра '''LogChanges=1'''.''&lt;br /&gt;
* '''Comment''' &amp;amp;ndash; строка, символ комментария в текстовом файле. При встрече данного символа в начале строки, эта строка игнорируется и не попадает в '''Датасет результатов''';&lt;br /&gt;
* '''ProcessCR''' &amp;amp;ndash; строка, любое непустое значение включает режим импорта XLS-файлов, при котором ячейка, содержащая символы перевода строки (ячейка содержит несколько строк, введённых через Alt+Enter), импортируется как одно поле. При этом такие строки объединяются в одну через пробел.&amp;lt;br&amp;gt;При импорте по-умолчанию (значение ProcessCR не задано), такие ячейки импортируются, как несколько записей;&lt;br /&gt;
* '''ProcessCRFrom''' &amp;amp;ndash; число, номер строки XLS-файла, начиная с которой применяется алгоритм импорта, включенный параметром ProcessCR (отсчет начинается с 0);&lt;br /&gt;
* '''QuoteChar''' &amp;amp;ndash; строка, если задан символ кавычек (обычно - `&amp;quot;`), то алгоритм импорта, включенный параметром ProcessCR, объединяет строки в одну не через пробел, а через перевод строки (#13#10);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Прочие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''Sheet''' &amp;amp;ndash; строка, название листа для импорта из Excel.&lt;br /&gt;
&lt;br /&gt;
 |Пример=Вызов отчёта &amp;quot;Реестр документов&amp;quot; (в датасете dsDoc - входные параметры процедуры):&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `Documents_PeriodRegistry`,&lt;br /&gt;
   `dsDoc`,&lt;br /&gt;
   `dsRes`&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Некоторые процедуры могут возвращать сообщения о результатах своей работы, например ''&amp;quot;Обработано 1234 строк. Найдено и отмечено 110 товаров&amp;quot;''. Такое сообщение в процедурах принято передавать в выходном датасете в поле Message:&lt;br /&gt;
&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `MZ_ArticulsImport`,&lt;br /&gt;
   `dsTXT`,&lt;br /&gt;
   `dsRes`&lt;br /&gt;
 ),&lt;br /&gt;
 IfEmpty(&lt;br /&gt;
   dsRes.Message,&lt;br /&gt;
   0,&lt;br /&gt;
   Info( dsRes.Message )&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Создание датасета из массива:&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `array:`,&lt;br /&gt;
   [&lt;br /&gt;
     [&lt;br /&gt;
       `a` : 1,&lt;br /&gt;
       `b` : 2&lt;br /&gt;
     ]&lt;br /&gt;
   ],&lt;br /&gt;
   `ds`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3284</id>
		<title>ASSIGN</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=ASSIGN&amp;diff=3284"/>
				<updated>2023-11-02T03:32:00Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=ASSIGN&lt;br /&gt;
|Описание=Изменяет одно поле текущей записи [[Датасет|датасета]]. &lt;br /&gt;
|Синтаксис=ASSIGN ('''Датасет и поле''', '''Значение''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Датасет и поле&lt;br /&gt;
 |Пояснение=строка, которая состоит из имени одного из датасетов электронной или печатной формы и имени поля этого датасета, разделенных точкой.&amp;lt;br&amp;gt;Можно указать через &amp;quot;;&amp;quot; сразу несколько полей данного датасета: ''датасет.поле1;поле2;поле3;...''&lt;br /&gt;
Особыe режимы:&lt;br /&gt;
*Если перед именем датасета указан символ &amp;quot;*&amp;quot;, то поле изменяется во всех записях датасета. В этом случае второй аргумент - всегда выражение, потому записывается в кавычках.&lt;br /&gt;
*Если вместо имени поля указан символ &amp;quot;*&amp;quot;, то изменятся все данные датасета. В этом случае значением должны быть данные другого датасета, либо 1/0 (тогда датасет будет закрыт).&lt;br /&gt;
*Имя поля может иметь вид Heap.XXX, в этом случае модифицируется одна строка поля Heap&lt;br /&gt;
*Префикс EMBEDDED:Имя_контейнера: означает, что датасет нужно искать в форме, [[Внедрение форм|внедренной]] в указанный контейнер&lt;br /&gt;
*Префикс EMBEDDING: означает, что датасет нужно искать в форме, в которую [[Внедрение форм|внедрена]] текущая форма&lt;br /&gt;
*Префикс LAUNCHFORM: означает, что датасет нужно искать в форме, с которой запущена текущая форма&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Значение&lt;br /&gt;
 |Пояснение=значение произвольного типа данных для записи в поле. Если изменяется сразу несколько полей датасета, то их значения перечисляются через &amp;quot;,&amp;quot;.&amp;lt;br&amp;gt;В режиме изменения всех записей датасета &amp;amp;ndash; строка с формулой.&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Assign( `Goodies.Price`, 1 ) &amp;amp;ndash; изменит текущую запись&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `Dataset.Document;Articul;Certificate;BarCode`, :Id, :Art, :Cert, :BC ) &amp;amp;ndash; изменит сразу несколько полей&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*Goodies.Price`, `Price*2` ) &amp;amp;ndash; изменит все записи (удвоит цену)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsGds.Qty;New`, `1,0` ) &amp;amp;ndash; инициализация двух полей во всех записях датасета (в данном случае значения полей - это выражение, поэтому записываются в кавычках)&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `*dsLines.Name;Note`, `'Имя','Комментарий'` ) &amp;amp;ndash; то же самое с текстовыми значениями&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `DataSet.Heap.xxx`, 1 ) &amp;amp;ndash; изменит хиповое поле&lt;br /&gt;
&amp;lt;br/&amp;gt;Assign( `launchform:HeapSet.@FullName`, HeapSet.FullName ) &amp;amp;ndash; изменит поле родительской формы&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3283</id>
		<title>OPENDATASET</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3283"/>
				<updated>2023-10-19T03:00:42Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
 |Название=OPENDATASET&lt;br /&gt;
 |Описание=Открывает датасет при помощи вызова процедуры, либо путем импорта данных из файла (текстового, DBF, Excel, CDS)&lt;br /&gt;
 |Синтаксис=OPENDATASET('''Имя процедуры''', '''Датасет параметров''', '''Датасет результатов''')&lt;br /&gt;
 |Аргументы={{Аргумент&lt;br /&gt;
  |Название=Имя процедуры&lt;br /&gt;
  |Пояснение=Строка, содержащая одно из значений:&lt;br /&gt;
* имя процедуры в БД. Имя процедуры может иметь вид ''`GBDB://База/Процедура`'' для осуществления [[Распределенные вызовы|распределенных вызовов]] либо ''`GBTCP://Адрес:Порт/Процедура`'' для вызова метода [[Бизнес-сервер|бизнес-сервера]];&lt;br /&gt;
* константа '''`file:`''' для импорта данных из файла;&lt;br /&gt;
* константа '''`copy:`''' для создания копии датасета;&lt;br /&gt;
* константа '''`array:`''' для создания датасета на основе данных из ассоциативного массива.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет параметров&lt;br /&gt;
  |Пояснение=Строка с именем или непосредственно описанием датасета, содержащего входные параметры процедуры либо '''параметры импорта файла'''.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет результатов&lt;br /&gt;
  |Пояснение=Строка, определяющая имя создаваемого датасета. Если задана пустая строка ``, то датасет не будет создан (используется, если нам не интересно, что вернула процедура).&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Нет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Параметры импорта файла&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h6&amp;gt;Общие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''FileType''' &amp;amp;ndash; строка, тип файла (TXT, CSV, DBF, XLS, CDS);&lt;br /&gt;
* '''FileName''' &amp;amp;ndash; строка, имя файла;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление кодировкой&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''CharSet''' &amp;amp;ndash; строка, тип кодировки файла. Возможны следующие значения:&lt;br /&gt;
**`CP866` &amp;amp;ndash; включает кодировку DOS;&lt;br /&gt;
**`UTF-8` &amp;amp;ndash; включает кодировку UTF-8;&lt;br /&gt;
**`WIN1251` &amp;amp;ndash; включает кодировку WIN1251;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''CP866''' – строка, любое непустое значение означает, что текстовый файл в кодировке DOS (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''WIN1251''' – строка, любое непустое значение означает, что DBF файл в кодировке Windows (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Настройка полей&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''FieldCount''' &amp;amp;ndash; число, количество полей в строке файла (по умолчанию количество полей определяется по первой импортируемой строке);&lt;br /&gt;
* '''FieldsMap''' &amp;amp;ndash; строка, содержит описание полей создаваемого датасета.&amp;lt;br&amp;gt;Представляет собой список формул вида имя,тип=выражение через «;», определяющих поля создаваемого датасета и их вычисление через поля исходного файла. Возможные значения для типа поля: I, F, D, S, B.&amp;lt;br&amp;gt;При задании константы '''`auto`''' для файла типа DBF, структура '''Датасета результатов''' повторит структуру импортируемого файла DBF.&lt;br /&gt;
:Если FieldsMap не задан, структура датасета формируется автоматически, а поля именуются как: fld0, fld1, ..., fldN (где N &amp;amp;ndash; количество полей, определённое по первой строке файла, либо заданное в параметре FieldCount). Тип таких полей &amp;amp;ndash; S, размер поля &amp;amp;ndash; 250 (см. также FieldSize).&lt;br /&gt;
* '''Separator''' &amp;amp;ndash; строка, разделитель полей в текстовом файле;&lt;br /&gt;
* '''Tabs''' &amp;amp;ndash; строка, список (через символ &amp;quot;;&amp;quot;) отступов полей в текстовом файле, отсчет начинается с 0;&lt;br /&gt;
* '''FieldSize''' &amp;amp;ndash; размер строковых полей. Если FieldSize не задан, а количество полей более 200, то размер строковых полей будет принудительно установлен равным 40 символам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление строками&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''StartLine''' &amp;amp;ndash; число, номер строки с которой начинается импорт (отсчет начинается с 0);&lt;br /&gt;
* '''EndLine''' &amp;amp;ndash; число, номер строки, на которой заканчивается импорт (отсчет начинается с 0). Отрицательное значение означает, что не нужно импортировать соответствующее число последних строк;&lt;br /&gt;
* '''StopIfEmpty''' &amp;amp;ndash; строка, любое непустое значение означает, что нужно остановить импорт, встретив пустую строку (для файлов Excel проверяется первая ячейка в строке);&lt;br /&gt;
* '''Filter''' &amp;amp;ndash; выражение для фильтрации строк исходного файла;&lt;br /&gt;
:''Из-за бага в dbclient (и не только) в старых версиях ГБ (до 04.10.2017) при задании фильтра результирующий датасет содержал в логе изменений &amp;quot;мусор&amp;quot;, т.е. записи, отсеянные фильтром. Эти записи воспринимались udf'кой как не удалённые, из-за чего при передаче датасета в процедуру, она получала неотфильтрованный набор записей.''&lt;br /&gt;
:''Обойти это можно путём задания параметра '''LogChanges=1''', что позволит обойти баг dbclient, но резко увеличит объём расходуемой памяти и снизит скорость загрузки. Вариант, когда при загрузке не используется Filter, а ненужные записи удаляются позже (с помощью функции Delete), также потребует задание параметра '''LogChanges=1'''.''&lt;br /&gt;
* '''Comment''' &amp;amp;ndash; строка, символ комментария в текстовом файле. При встрече данного символа в начале строки, эта строка игнорируется и не попадает в '''Датасет результатов''';&lt;br /&gt;
* '''ProcessCR''' &amp;amp;ndash; строка, любое непустое значение включает режим импорта XLS-файлов, при котором ячейка, содержащая символы перевода строки (ячейка содержит несколько строк, введённых через Alt+Enter), импортируется как одно поле. При этом такие строки объединяются в одну через пробел.&amp;lt;br&amp;gt;При импорте по-умолчанию (значение ProcessCR не задано), такие ячейки импортируются, как несколько записей;&lt;br /&gt;
* '''ProcessCRFrom''' &amp;amp;ndash; число, номер строки XLS-файла, начиная с которой применяется алгоритм импорта, включенный параметром ProcessCR (отсчет начинается с 0);&lt;br /&gt;
* '''QuoteChar''' &amp;amp;ndash; строка, если задан символ кавычек (обычно - `&amp;quot;`), то алгоритм импорта, включенный параметром ProcessCR, объединяет строки в одну не через пробел, а через перевод строки (#13#10);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Прочие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''Sheet''' &amp;amp;ndash; строка, название листа для импорта из Excel.&lt;br /&gt;
&lt;br /&gt;
 |Пример=Вызов отчёта &amp;quot;Реестр документов&amp;quot; (в датасете dsDoc - входные параметры процедуры):&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `Documents_PeriodRegistry`,&lt;br /&gt;
   `dsDoc`,&lt;br /&gt;
   `dsRes`&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Некоторые процедуры могут возвращать сообщения о результатах своей работы, например ''&amp;quot;Обработано 1234 строк. Найдено и отмечено 110 товаров&amp;quot;''. Такое сообщение в процедурах принято передавать в выходном датасете в поле Message:&lt;br /&gt;
&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `MZ_ArticulsImport`,&lt;br /&gt;
   `dsTXT`,&lt;br /&gt;
   `dsRes`&lt;br /&gt;
 ),&lt;br /&gt;
 IfEmpty(&lt;br /&gt;
   dsRes.Message,&lt;br /&gt;
   0,&lt;br /&gt;
   Info( dsRes.Message )&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Создание датасета из массива:&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `array:`,&lt;br /&gt;
   [&lt;br /&gt;
     [&lt;br /&gt;
       `a` : 1,&lt;br /&gt;
       `b` : 2&lt;br /&gt;
     ]&lt;br /&gt;
   ],&lt;br /&gt;
   `ds`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3282</id>
		<title>OPENDATASET</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3282"/>
				<updated>2023-10-19T02:57:08Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
 |Название=OPENDATASET&lt;br /&gt;
 |Описание=Открывает датасет при помощи вызова процедуры, либо путем импорта данных из файла (текстового, DBF, Excel, CDS)&lt;br /&gt;
 |Синтаксис=OPENDATASET('''Имя процедуры''', '''Датасет параметров''', '''Датасет результатов''')&lt;br /&gt;
 |Аргументы={{Аргумент&lt;br /&gt;
  |Название=Имя процедуры&lt;br /&gt;
  |Пояснение=Строка, содержащая одно из значений:&lt;br /&gt;
* имя процедуры в БД. Имя процедуры может иметь вид ''`GBDB://База/Процедура`'' для осуществления [[Распределенные вызовы|распределенных вызовов]] либо ''`GBTCP://Адрес:Порт/Процедура`'' для вызова метода [[Бизнес-сервер|бизнес-сервера]];&lt;br /&gt;
* константа '''`file:`''' для импорта данных из файла;&lt;br /&gt;
* константа '''`copy:`''' для создания копии датасета;&lt;br /&gt;
* константа '''`array:`''' для создания датасета на основе данных из ассоциативного массива.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет параметров&lt;br /&gt;
  |Пояснение=Строка с именем или непосредственно описанием датасета, содержащего входные параметры процедуры либо '''параметры импорта файла'''.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет результатов&lt;br /&gt;
  |Пояснение=Строка, определяющая имя создаваемого датасета. Если задана пустая строка ``, то датасет не будет создан (используется, если нам не интересно, что вернула процедура).&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Нет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Параметры импорта файла&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h6&amp;gt;Общие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''FileType''' &amp;amp;ndash; строка, тип файла (TXT, CSV, DBF, XLS, CDS);&lt;br /&gt;
* '''FileName''' &amp;amp;ndash; строка, имя файла;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление кодировкой&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''CharSet''' &amp;amp;ndash; строка, тип кодировки файла. Возможны следующие значения:&lt;br /&gt;
**`CP866` &amp;amp;ndash; включает кодировку DOS;&lt;br /&gt;
**`UTF-8` &amp;amp;ndash; включает кодировку UTF-8;&lt;br /&gt;
**`WIN1251` &amp;amp;ndash; включает кодировку WIN1251;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''CP866''' – строка, любое непустое значение означает, что текстовый файл в кодировке DOS (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''WIN1251''' – строка, любое непустое значение означает, что DBF файл в кодировке Windows (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Настройка полей&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''FieldCount''' &amp;amp;ndash; число, количество полей в строке файла (по умолчанию количество полей определяется по первой импортируемой строке);&lt;br /&gt;
* '''FieldsMap''' &amp;amp;ndash; строка, содержит описание полей создаваемого датасета.&amp;lt;br&amp;gt;Представляет собой список формул вида имя,тип=выражение через «;», определяющих поля создаваемого датасета и их вычисление через поля исходного файла. Возможные значения для типа поля: I, F, D, S, B.&amp;lt;br&amp;gt;При задании константы '''`auto`''' для файла типа DBF, структура '''Датасета результатов''' повторит структуру импортируемого файла DBF.&lt;br /&gt;
:Если FieldsMap не задан, структура датасета формируется автоматически, а поля именуются как: fld0, fld1, ..., fldN (где N &amp;amp;ndash; количество полей, определённое по первой строке файла, либо заданное в параметре FieldCount). Тип таких полей &amp;amp;ndash; S, размер поля &amp;amp;ndash; 250 (см. также FieldSize).&lt;br /&gt;
* '''Separator''' &amp;amp;ndash; строка, разделитель полей в текстовом файле;&lt;br /&gt;
* '''Tabs''' &amp;amp;ndash; строка, список (через символ &amp;quot;;&amp;quot;) отступов полей в текстовом файле, отсчет начинается с 0;&lt;br /&gt;
* '''FieldSize''' &amp;amp;ndash; размер строковых полей. Если FieldSize не задан, а количество полей более 200, то размер строковых полей будет принудительно установлен равным 40 символам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление строками&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''StartLine''' &amp;amp;ndash; число, номер строки с которой начинается импорт (отсчет начинается с 0);&lt;br /&gt;
* '''EndLine''' &amp;amp;ndash; число, номер строки, на которой заканчивается импорт (отсчет начинается с 0). Отрицательное значение означает, что не нужно импортировать соответствующее число последних строк;&lt;br /&gt;
* '''StopIfEmpty''' &amp;amp;ndash; строка, любое непустое значение означает, что нужно остановить импорт, встретив пустую строку (для файлов Excel проверяется первая ячейка в строке);&lt;br /&gt;
* '''Filter''' &amp;amp;ndash; выражение для фильтрации строк исходного файла;&lt;br /&gt;
:''Из-за бага в dbclient (и не только) в старых версиях ГБ (до 04.10.2017) при задании фильтра результирующий датасет содержал в логе изменений &amp;quot;мусор&amp;quot;, т.е. записи, отсеянные фильтром. Эти записи воспринимались udf'кой как не удалённые, из-за чего при передаче датасета в процедуру, она получала неотфильтрованный набор записей.''&lt;br /&gt;
:''Обойти это можно путём задания параметра '''LogChanges=1''', что позволит обойти баг dbclient, но резко увеличит объём расходуемой памяти и снизит скорость загрузки. Вариант, когда при загрузке не используется Filter, а ненужные записи удаляются позже (с помощью функции Delete), также потребует задание параметра '''LogChanges=1'''.''&lt;br /&gt;
* '''Comment''' &amp;amp;ndash; строка, символ комментария в текстовом файле. При встрече данного символа в начале строки, эта строка игнорируется и не попадает в '''Датасет результатов''';&lt;br /&gt;
* '''ProcessCR''' &amp;amp;ndash; строка, любое непустое значение включает режим импорта XLS-файлов, при котором ячейка, содержащая символы перевода строки (ячейка содержит несколько строк, введённых через Alt+Enter), импортируется как одно поле. При этом такие строки объединяются в одну через пробел.&amp;lt;br&amp;gt;При импорте по-умолчанию (значение ProcessCR не задано), такие ячейки импортируются, как несколько записей;&lt;br /&gt;
* '''ProcessCRFrom''' &amp;amp;ndash; число, номер строки XLS-файла, начиная с которой применяется алгоритм импорта, включенный параметром ProcessCR (отсчет начинается с 0);&lt;br /&gt;
* '''QuoteChar''' &amp;amp;ndash; строка, если задан символ кавычек (обычно - `&amp;quot;`), то алгоритм импорта, включенный параметром ProcessCR, объединяет строки в одну не через пробел, а через перевод строки (#13#10);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Прочие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''Sheet''' &amp;amp;ndash; строка, название листа для импорта из Excel.&lt;br /&gt;
&lt;br /&gt;
 |Пример=Вызов отчёта &amp;quot;Реестр документов&amp;quot; (в датасете dsDoc - входные параметры процедуры):&lt;br /&gt;
 OPENDATASET(&lt;br /&gt;
   `Documents_PeriodRegistry`,&lt;br /&gt;
   `dsDoc`,&lt;br /&gt;
   `dsRes`&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Не все процедуры возвращают массивы с данными. Но при этом некоторые процедуры могут возвращать различные сообщения о результатах своей работы, например ''&amp;quot;Обработано 1234 строк. Найдено и отмечено 110 товаров&amp;quot;''. Такое сообщение в процедурах принято передавать в выходном датасете в поле Message, а вывести его можно так:&lt;br /&gt;
&lt;br /&gt;
 OpenDataSet(`MZ_ArticulsImport`, `dsTXT`, `dsRes`),&lt;br /&gt;
 IfEmpty(dsRes.Message, 0, Info(dsRes.Message))&lt;br /&gt;
&lt;br /&gt;
Создание датасета из массива:&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `array:`,&lt;br /&gt;
   [&lt;br /&gt;
     [&lt;br /&gt;
       `a` : 1,&lt;br /&gt;
       `b` : 2&lt;br /&gt;
     ]&lt;br /&gt;
   ],&lt;br /&gt;
   `ds`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3281</id>
		<title>OPENDATASET</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3281"/>
				<updated>2023-10-19T02:56:08Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
 |Название=OPENDATASET&lt;br /&gt;
 |Описание=Открывает датасет при помощи вызова процедуры, либо путем импорта данных из файла (текстового, DBF, Excel, CDS)&lt;br /&gt;
 |Синтаксис=OPENDATASET('''Имя процедуры''', '''Датасет параметров''', '''Датасет результатов''')&lt;br /&gt;
 |Аргументы={{Аргумент&lt;br /&gt;
  |Название=Имя процедуры&lt;br /&gt;
  |Пояснение=Строка, содержащая одно из значений:&lt;br /&gt;
* имя процедуры в БД. Имя процедуры может иметь вид ''`GBDB://База/Процедура`'' для осуществления [[Распределенные вызовы|распределенных вызовов]] либо ''`GBTCP://Адрес:Порт/Процедура`'' для вызова метода [[Бизнес-сервер|бизнес-сервера]];&lt;br /&gt;
* константа '''`file:`''' для импорта данных из файла;&lt;br /&gt;
* константа '''`copy:`''' для создания копии датасета;&lt;br /&gt;
* константа '''`array:`''' для создания датасета на основе данных из ассоциативного массива.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет параметров&lt;br /&gt;
  |Пояснение=Строка с именем или непосредственно описанием датасета, содержащего входные параметры процедуры либо '''параметры импорта файла'''.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет результатов&lt;br /&gt;
  |Пояснение=Строка, определяющая имя создаваемого датасета. Если задана пустая строка ``, то датасет не будет создан (используется, если нам не интересно, что вернула процедура).&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Нет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Параметры импорта файла&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h6&amp;gt;Общие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''FileType''' &amp;amp;ndash; строка, тип файла (TXT, CSV, DBF, XLS, CDS);&lt;br /&gt;
* '''FileName''' &amp;amp;ndash; строка, имя файла;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление кодировкой&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''CharSet''' &amp;amp;ndash; строка, тип кодировки файла. Возможны следующие значения:&lt;br /&gt;
**`CP866` &amp;amp;ndash; включает кодировку DOS;&lt;br /&gt;
**`UTF-8` &amp;amp;ndash; включает кодировку UTF-8;&lt;br /&gt;
**`WIN1251` &amp;amp;ndash; включает кодировку WIN1251;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''CP866''' – строка, любое непустое значение означает, что текстовый файл в кодировке DOS (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;'''WIN1251''' – строка, любое непустое значение означает, что DBF файл в кодировке Windows (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Настройка полей&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''FieldCount''' &amp;amp;ndash; число, количество полей в строке файла (по умолчанию количество полей определяется по первой импортируемой строке);&lt;br /&gt;
* '''FieldsMap''' &amp;amp;ndash; строка, содержит описание полей создаваемого датасета.&amp;lt;br&amp;gt;Представляет собой список формул вида имя,тип=выражение через «;», определяющих поля создаваемого датасета и их вычисление через поля исходного файла. Возможные значения для типа поля: I, F, D, S, B.&amp;lt;br&amp;gt;При задании константы '''`auto`''' для файла типа DBF, структура '''Датасета результатов''' повторит структуру импортируемого файла DBF.&lt;br /&gt;
:Если FieldsMap не задан, структура датасета формируется автоматически, а поля именуются как: fld0, fld1, ..., fldN (где N &amp;amp;ndash; количество полей, определённое по первой строке файла, либо заданное в параметре FieldCount). Тип таких полей &amp;amp;ndash; S, размер поля &amp;amp;ndash; 250 (см. также FieldSize).&lt;br /&gt;
* '''Separator''' &amp;amp;ndash; строка, разделитель полей в текстовом файле;&lt;br /&gt;
* '''Tabs''' &amp;amp;ndash; строка, список (через символ &amp;quot;;&amp;quot;) отступов полей в текстовом файле, отсчет начинается с 0;&lt;br /&gt;
* '''FieldSize''' &amp;amp;ndash; размер строковых полей. Если FieldSize не задан, а количество полей более 200, то размер строковых полей будет принудительно установлен равным 40 символов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Управление строками&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''StartLine''' &amp;amp;ndash; число, номер строки с которой начинается импорт (отсчет начинается с 0);&lt;br /&gt;
* '''EndLine''' &amp;amp;ndash; число, номер строки, на которой заканчивается импорт (отсчет начинается с 0). Отрицательное значение означает, что не нужно импортировать соответствующее число последних строк;&lt;br /&gt;
* '''StopIfEmpty''' &amp;amp;ndash; строка, любое непустое значение означает, что нужно остановить импорт, встретив пустую строку (для файлов Excel проверяется первая ячейка в строке);&lt;br /&gt;
* '''Filter''' &amp;amp;ndash; выражение для фильтрации строк исходного файла;&lt;br /&gt;
:''Из-за бага в dbclient (и не только) в старых версиях ГБ (до 04.10.2017) при задании фильтра результирующий датасет содержал в логе изменений &amp;quot;мусор&amp;quot;, т.е. записи, отсеянные фильтром. Эти записи воспринимались udf'кой как не удалённые, из-за чего при передаче датасета в процедуру, она получала неотфильтрованный набор записей.''&lt;br /&gt;
:''Обойти это можно путём задания параметра '''LogChanges=1''', что позволит обойти баг dbclient, но резко увеличит объём расходуемой памяти и снизит скорость загрузки. Вариант, когда при загрузке не используется Filter, а ненужные записи удаляются позже (с помощью функции Delete), также потребует задание параметра '''LogChanges=1'''.''&lt;br /&gt;
* '''Comment''' &amp;amp;ndash; строка, символ комментария в текстовом файле. При встрече данного символа в начале строки, эта строка игнорируется и не попадает в '''Датасет результатов''';&lt;br /&gt;
* '''ProcessCR''' &amp;amp;ndash; строка, любое непустое значение включает режим импорта XLS-файлов, при котором ячейка, содержащая символы перевода строки (ячейка содержит несколько строк, введённых через Alt+Enter), импортируется как одно поле. При этом такие строки объединяются в одну через пробел.&amp;lt;br&amp;gt;При импорте по-умолчанию (значение ProcessCR не задано), такие ячейки импортируются, как несколько записей;&lt;br /&gt;
* '''ProcessCRFrom''' &amp;amp;ndash; число, номер строки XLS-файла, начиная с которой применяется алгоритм импорта, включенный параметром ProcessCR (отсчет начинается с 0);&lt;br /&gt;
* '''QuoteChar''' &amp;amp;ndash; строка, если задан символ кавычек (обычно - `&amp;quot;`), то алгоритм импорта, включенный параметром ProcessCR, объединяет строки в одну не через пробел, а через перевод строки (#13#10);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h6&amp;gt;Прочие параметры&amp;lt;/h6&amp;gt;&lt;br /&gt;
* '''Sheet''' &amp;amp;ndash; строка, название листа для импорта из Excel.&lt;br /&gt;
&lt;br /&gt;
 |Пример=Вызов отчёта &amp;quot;Реестр документов&amp;quot; (в датасете dsDoc - входные параметры процедуры):&lt;br /&gt;
 OPENDATASET(&lt;br /&gt;
   `Documents_PeriodRegistry`,&lt;br /&gt;
   `dsDoc`,&lt;br /&gt;
   `dsRes`&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Не все процедуры возвращают массивы с данными. Но при этом некоторые процедуры могут возвращать различные сообщения о результатах своей работы, например ''&amp;quot;Обработано 1234 строк. Найдено и отмечено 110 товаров&amp;quot;''. Такое сообщение в процедурах принято передавать в выходном датасете в поле Message, а вывести его можно так:&lt;br /&gt;
&lt;br /&gt;
 OpenDataSet(`MZ_ArticulsImport`, `dsTXT`, `dsRes`),&lt;br /&gt;
 IfEmpty(dsRes.Message, 0, Info(dsRes.Message))&lt;br /&gt;
&lt;br /&gt;
Создание датасета из массива:&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `array:`,&lt;br /&gt;
   [&lt;br /&gt;
     [&lt;br /&gt;
       `a` : 1,&lt;br /&gt;
       `b` : 2&lt;br /&gt;
     ]&lt;br /&gt;
   ],&lt;br /&gt;
   `ds`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%A0%D0%B0%D1%81%D1%87%D0%B5%D1%82_%D0%B2%D0%B5%D1%81%D0%B0_%D0%B8_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BC%D0%B0_%D0%B2_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%85&amp;diff=3280</id>
		<title>Расчет веса и объема в документах</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%A0%D0%B0%D1%81%D1%87%D0%B5%D1%82_%D0%B2%D0%B5%D1%81%D0%B0_%D0%B8_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BC%D0%B0_%D0%B2_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%85&amp;diff=3280"/>
				<updated>2023-10-11T07:05:23Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: /* Автоматический расчёт веса и объёма в документах */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Стандартные решения в ГБ]]&lt;br /&gt;
==== Автоматический расчёт веса и объёма в документах ====&lt;br /&gt;
&lt;br /&gt;
Если в карточке товара заполнены поля '''Heap.BoxWeight''' и '''Heap.BoxVolume''', а в типе данного документа '''Heap.@CalcWV=1''', то при любых изменениях количества в форме документа, при импорте, разбиении заказа и смене флага общий вес и объём, посчитанный исходя из Ceil(Quantity/Articul.RatioSale) (где Ceil() &amp;amp;ndash; округление вверх), будут записаны в документ в поля '''Heap.@DocWeight''' и '''Heap.@DocVolume''' соответственно.&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=CASE&amp;diff=3276</id>
		<title>CASE</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=CASE&amp;diff=3276"/>
				<updated>2023-07-19T09:23:03Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=CASE&lt;br /&gt;
|Описание=Условная функция.&lt;br /&gt;
|Синтаксис=CASE('''Значение для проверки''','''Значение для сравнения(1): Значение(1)''','''Значение для сравнения(2): Значение(2)''',''':''','''$default: Значение по умолчаниию''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Значение для проверки&lt;br /&gt;
 |Пояснение=значение произвольного типа, которое сравнивается со значениями для сравнения.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Значение для сравнения(N)&lt;br /&gt;
 |Пояснение=значение произвольного типа, с которым сравнивается со значениями для проверки.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Значение(N)&lt;br /&gt;
 |Пояснение=значение произвольного типа, которое вернет функция CASE, если значение для проверки совпало с значением для сравнения(N).&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Значение по умолчанию&lt;br /&gt;
 |Пояснение=значение произвольного типа, которое вернет функция CASE, если значение для проверки не совпало ни с одним из значений для сравнения.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Значение произвольного типа.&lt;br /&gt;
|Пример=Здесь 1/0 служит для проверки на NULL:&lt;br /&gt;
 Case(&lt;br /&gt;
   Articul.RootFolder,&lt;br /&gt;
   100 : `папка 100`,&lt;br /&gt;
   200 : `папка 200`,&lt;br /&gt;
   (1/0) : `где делась папка?`,&lt;br /&gt;
   $default : `другая папка`&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
А можно и так (будет выполнено выражение из первого подходящего условия):&lt;br /&gt;
 Case(&lt;br /&gt;
   -1,&lt;br /&gt;
   Flag&amp;gt;=1000 : `Обработан`,&lt;br /&gt;
   Flag=300 and Str=Places : `ГРР завершены`,&lt;br /&gt;
   Flag=300 and Placed&amp;gt;0 : `В работе`,&lt;br /&gt;
   Flag=300 and Placed=0 : `Готов к приёмке`,&lt;br /&gt;
   $default : `Новый`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3275</id>
		<title>OPENDATASET</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=OPENDATASET&amp;diff=3275"/>
				<updated>2023-06-22T09:02:06Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
 |Название=OPENDATASET&lt;br /&gt;
 |Описание=Открывает датасет при помощи вызова процедуры, либо путем импорта данных из файла (текстового, DBF, Excel, CDS)&lt;br /&gt;
 |Синтаксис=OPENDATASET('''Имя процедуры''', '''Датасет параметров''', '''Датасет результатов''')&lt;br /&gt;
 |Аргументы={{Аргумент&lt;br /&gt;
  |Название=Имя процедуры&lt;br /&gt;
  |Пояснение=Строка, содержащая одно из значений:&lt;br /&gt;
* имя процедуры в БД. Имя процедуры может иметь вид ''`GBDB://База/Процедура`'' для осуществления [[Распределенные вызовы|распределенных вызовов]] либо ''`GBTCP://Адрес:Порт/Процедура`'' для вызова метода [[Бизнес-сервер|бизнес-сервера]];&lt;br /&gt;
* константа '''`file:`''' для импорта данных из файла;&lt;br /&gt;
* константа '''`copy:`''' для создания копии датасета;&lt;br /&gt;
* константа '''`array:`''' для создания датасета на основе данных из ассоциативного массива.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет параметров&lt;br /&gt;
  |Пояснение=Строка с именем или непосредственно описанием датасета, содержащего входные параметры процедуры либо '''параметры импорта файла'''. Вместо строки с описанием можно использовать ассоциативный массив.&lt;br /&gt;
&lt;br /&gt;
Ниже перечислены '''параметры импорта файла'''.&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
* FileType – строка, тип файла (TXT, CSV, DBF, XLS, CDS);&lt;br /&gt;
* FileName – строка, имя файла;&lt;br /&gt;
&lt;br /&gt;
Управление кодировкой:&lt;br /&gt;
* CharSet – строка, тип кодировки файла. Возможны следующие значения:&lt;br /&gt;
**`CP866` – включает кодировку DOS;&lt;br /&gt;
**`UTF-8` – включает кодировку UTF-8;&lt;br /&gt;
**`WIN1251` – включает кодировку WIN1251;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;CP866 – строка, любое непустое значение означает, что текстовый файл в кодировке DOS (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:gray;&amp;quot;&amp;gt;WIN1251 – строка, любое непустое значение означает, что DBF файл в кодировке Windows (было в старых версиях ГБ, оставлено для совместимости);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Настройка полей:&lt;br /&gt;
* FieldCount – число, количество полей в строке файла (по умолчанию количество полей определяется по первой импортируемой строке);&lt;br /&gt;
* FieldsMap – строка, содержит описание полей создаваемого датасета.&amp;lt;br&amp;gt;Представляет собой список формул вида имя,тип=выражение через «;», определяющих поля создаваемого датасета и их вычисление через поля исходного файла. Возможные значения для типа поля: I, F, D, S, B.&amp;lt;br&amp;gt;При задании константы '''`auto`''' для файла типа DBF, структура '''Датасета результатов''' повторит структуру импортируемого файла DBF;&lt;br /&gt;
* Separator – строка, разделитель полей в текстовом файле;&lt;br /&gt;
* Tabs – строка, список (через символ &amp;quot;;&amp;quot;) отступов полей в текстовом файле, отсчет начинается с 0;&lt;br /&gt;
&lt;br /&gt;
Управление строками:&lt;br /&gt;
* StartLine – число, номер строки с которой начинается импорт (отсчет начинается с 0);&lt;br /&gt;
* EndLine – число, номер строки, на которой заканчивается импорт (отсчет начинается с 0). Отрицательное значение означает, что не нужно импортировать соответствующее число последних строк;&lt;br /&gt;
* StopIfEmpty – строка, любое непустое значение означает, что нужно остановить импорт, встретив пустую строку (для файлов Excel проверяется первая ячейка в строке);&lt;br /&gt;
* Filter – выражение для фильтрации строк исходного файла;&lt;br /&gt;
:''Из-за бага в dbclient (и не только) в старых версиях ГБ (до 04.10.2017) при задании фильтра результирующий датасет содержал в логе изменений &amp;quot;мусор&amp;quot;, т.е. записи, отсеянные фильтром. Эти записи воспринимались udf'кой как не удалённые, из-за чего при передаче датасета в процедуру, она получала неотфильтрованный набор записей.''&lt;br /&gt;
:''Обойти это можно путём задания параметра '''LogChanges=1''', что позволит обойти баг dbclient, но резко увеличит объём расходуемой памяти и снизит скорость загрузки. Вариант, когда при загрузке не используется Filter, а ненужные записи удаляются позже (с помощью функции Delete), также потребует задание параметра '''LogChanges=1'''.''&lt;br /&gt;
* Comment – строка, символ комментария в текстовом файле. При встрече данного символа в начале строки, эта строка игнорируется и не попадает в '''Датасет результатов''';&lt;br /&gt;
* ProcessCR – строка, любое непустое значение включает режим импорта XLS-файлов, при котором ячейка, содержащая символы перевода строки (ячейка содержит несколько строк, введённых через Alt+Enter), импортируется как одно поле. При этом такие строки объединяются в одну через пробел.&amp;lt;br&amp;gt;При импорте по-умолчанию (значение ProcessCR не задано), такие ячейки импортируются, как несколько записей;&lt;br /&gt;
* ProcessCRFrom – число, номер строки XLS-файла, начиная с которой применяется алгоритм импорта, включенный параметром ProcessCR (отсчет начинается с 0);&lt;br /&gt;
* QuoteChar – строка, если задан символ кавычек (обычно - `&amp;quot;`), то алгоритм импорта, включенный параметром ProcessCR, объединяет строки в одну не через пробел, а через перевод строки (#13#10);&lt;br /&gt;
&lt;br /&gt;
Прочие параметры:&lt;br /&gt;
* Sheet – строка, название листа для импорта из Excel.&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
  |Название=Датасет результатов&lt;br /&gt;
  |Пояснение=Строка, определяющая имя создаваемого датасета. Если задана пустая строка ``, то датасет не будет создан (используется, если нам не интересно, что вернула процедура).&lt;br /&gt;
}}&lt;br /&gt;
 |Пример=Вызов отчёта &amp;quot;Реестр документов&amp;quot; (в датасете dsDoc - входные параметры процедуры):&lt;br /&gt;
 OPENDATASET(&lt;br /&gt;
   `Documents_PeriodRegistry`,&lt;br /&gt;
   `dsDoc`,&lt;br /&gt;
   `dsRes`&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Не все процедуры возвращают массивы с данными. Но при этом некоторые процедуры могут возвращать различные сообщения о результатах своей работы, например ''&amp;quot;Обработано 1234 строк. Найдено и отмечено 110 товаров&amp;quot;''. Такое сообщение в процедурах принято передавать в выходном датасете в поле Message, а вывести его можно так:&lt;br /&gt;
&lt;br /&gt;
 OpenDataSet(`MZ_ArticulsImport`, `dsTXT`, `dsRes`),&lt;br /&gt;
 IfEmpty(dsRes.Message, 0, Info(dsRes.Message))&lt;br /&gt;
&lt;br /&gt;
Создание датасета из массива:&lt;br /&gt;
 OpenDataSet(&lt;br /&gt;
   `array:`,&lt;br /&gt;
   [&lt;br /&gt;
     [&lt;br /&gt;
       `a` : 1,&lt;br /&gt;
       `b` : 2&lt;br /&gt;
     ]&lt;br /&gt;
   ],&lt;br /&gt;
   `ds`&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_ID115&amp;diff=3274</id>
		<title>Импорт данных ID115</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_ID115&amp;diff=3274"/>
				<updated>2023-06-21T02:22:03Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: /* Пример импорта с последующим расчётом */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Справочник команд ГБ]]&lt;br /&gt;
===Назначение команды===&lt;br /&gt;
Команда '''ID115''' (синоним &amp;amp;ndash; '''IMPORT''') предназначена для импорта данных, для изменения значения полей в нескольких объектах и т.п.&lt;br /&gt;
&lt;br /&gt;
===Описание команды===&lt;br /&gt;
=====Сопоставление с внешним справочником=====&lt;br /&gt;
Команда может задавать соответствие между импортируемым объектом ГБ и объектом внешнего справочника.&lt;br /&gt;
Поля, используемые для автоматического создания сопоставления с внешним справочником:&lt;br /&gt;
* ExtType - тип объекта во внешнем справочнике;&lt;br /&gt;
* ExtId - код объекта во внешнем справочнике;&lt;br /&gt;
* Depot - код удаленного отдела (т.е. владельца внешнего справочника).&lt;br /&gt;
&lt;br /&gt;
=====Создание нового объекта=====&lt;br /&gt;
Для создания нового объекта в команду импорта данных нужно передавать &amp;quot;пустой&amp;quot; (null) код объекта, т.е.&lt;br /&gt;
 Id = 1/0&lt;br /&gt;
&lt;br /&gt;
=====Изменение значения полей после импорта=====&lt;br /&gt;
Можно импортировать данные и изменять значения полей после импорта в одной команде.&amp;lt;br/&amp;gt;&lt;br /&gt;
Например, нужно импортировать из файла поле &amp;quot;Вес коробки&amp;quot; (BoxWeight), после чего рассчитать значение поля &amp;quot;Вес штуки&amp;quot; (@MinBoxWeight), используя значение поля &amp;quot;Вместимость коробки&amp;quot; (RatioStock).&lt;br /&gt;
&lt;br /&gt;
Импорт происходит поэтапно:&lt;br /&gt;
* вначале импортируются данные из датасета, при этом в поля, которые нужно изменить, записывается значение null;&lt;br /&gt;
* затем с помощью конструкции &amp;quot;ImportDefValue:имя_поля&amp;quot; записываются выражения, которые изменят значения полей (см. примеры).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Примеры===&lt;br /&gt;
=====Пример записи значения поля ''Heap.@Upakovshik'' в группу документов=====&lt;br /&gt;
 '''CreateDataSet'''(&lt;br /&gt;
   `dsImp`,&lt;br /&gt;
   [&lt;br /&gt;
     `DocId,I` : ``,&lt;br /&gt;
     `Up,I` : ``&lt;br /&gt;
   ]&lt;br /&gt;
 ),&lt;br /&gt;
 ''&amp;lt;тут заполняем датасет dsImp кодами документов&amp;gt;,''&lt;br /&gt;
 '''ProcessCommand'''(&lt;br /&gt;
   11,&lt;br /&gt;
   [&lt;br /&gt;
     `SaveImmediate` : `Y`,&lt;br /&gt;
     `ImportDs` : `dsImp`,&lt;br /&gt;
     `ImportDsMap` : [&lt;br /&gt;
                       `Id` : `DocId`,&lt;br /&gt;
                       `Heap.@Upakovshik` : `Up`&lt;br /&gt;
                     ]&lt;br /&gt;
   ],&lt;br /&gt;
   `IMPORT`&lt;br /&gt;
 ),&lt;br /&gt;
 '''WaitForChildForms()'''&lt;br /&gt;
&lt;br /&gt;
=====Пример импорта справочника партнёров=====&lt;br /&gt;
В примере партнёры импортируются в одну папку.&lt;br /&gt;
 '''ProcessCommand'''(&lt;br /&gt;
   0,&lt;br /&gt;
   [&lt;br /&gt;
     `SaveImmediate` : `Y`,&lt;br /&gt;
     `ImportDs` : `dsTXT`,&lt;br /&gt;
     `ImportDsMap` : [&lt;br /&gt;
                       `Id` : `Id`,&lt;br /&gt;
                       `Node` : `IfEmpty(Id,11,Id.Node)`, ''&amp;lt;--для новых карточек папка 11, для существующих папку не меняем''&lt;br /&gt;
                       `SubType` : 11,&lt;br /&gt;
                       `Name` : `fld3`,&lt;br /&gt;
                       `FullName` : `fld13`,&lt;br /&gt;
                       `Heap.@INN` : `fld1`,&lt;br /&gt;
                       `Heap.@Phone` : `fld5`,&lt;br /&gt;
                       `Heap.@Address` : `fld6`,&lt;br /&gt;
                       `ExtType` : `0`,&lt;br /&gt;
                       `ExtId` : `fld2`,&lt;br /&gt;
                       `Depot` : 209&lt;br /&gt;
                     ]&lt;br /&gt;
   ],&lt;br /&gt;
   `ID115`&lt;br /&gt;
 ),&lt;br /&gt;
 '''WaitForChildForms()'''&lt;br /&gt;
&lt;br /&gt;
=====Пример импорта справочника товаров=====&lt;br /&gt;
В примере товары импортируются в разные папки.&lt;br /&gt;
 '''ProcessCommand'''(&lt;br /&gt;
   1,&lt;br /&gt;
   [&lt;br /&gt;
     `ParentForm` : `launch`,&lt;br /&gt;
     `SaveImmediate` : `Y`,&lt;br /&gt;
     `ImportDs` : `dsTXT`,&lt;br /&gt;
     `ImportDsMap` : [&lt;br /&gt;
                       `Id` : `ArtId`,&lt;br /&gt;
                       `ItemType` : `ItemType`,&lt;br /&gt;
                       `Node` : `IfEmpty(fld13,1,IfEmpty(MapGbId(10001,fld13,209,1),1))`,&lt;br /&gt;
                       `Name` : `fld3`,&lt;br /&gt;
                       `FullName` : `fld14`,&lt;br /&gt;
                       `NUMBER` : `fld1`,&lt;br /&gt;
                       `PackMin` : 101,&lt;br /&gt;
                       `PackSale` : 102,&lt;br /&gt;
                       `PackStock` : 102,&lt;br /&gt;
                       `RatioSale` : `Ratio`,&lt;br /&gt;
                       `RatioStock` : `Ratio`,&lt;br /&gt;
                       `AddBarCode0` : `BC`,&lt;br /&gt;
                       `Heap.@Weight` : `IfEmpty(StrToFloat(StrReplace(fld9,&amp;quot;.&amp;quot;,&amp;quot;,&amp;quot;)),0)`,&lt;br /&gt;
                       `Heap.@PackType` : `IfEmpty(fld8,&amp;quot;&amp;quot;)`,&lt;br /&gt;
                       `ExtType` : `ExtType`,&lt;br /&gt;
                       `ExtId` : `fld2`,&lt;br /&gt;
                       `Depot` : 209&lt;br /&gt;
                     ]&lt;br /&gt;
   ],&lt;br /&gt;
   `ID115`&lt;br /&gt;
 ),&lt;br /&gt;
 '''WaitForChildForms()'''&lt;br /&gt;
&lt;br /&gt;
=====Пример импорта с последующим расчётом=====&lt;br /&gt;
Нужно импортировать поле &amp;quot;Вес коробки&amp;quot; (Heap.BoxWeight), после чего рассчитать значение поля &amp;quot;Вес штуки&amp;quot; (Heap.@MinBoxWeight),&amp;lt;br/&amp;gt;используя значение поля &amp;quot;Вместимость коробки&amp;quot; (RatioStock)&lt;br /&gt;
 '''CreateDataSet'''(&lt;br /&gt;
   `ArticulsDs`,&lt;br /&gt;
   [&lt;br /&gt;
     `Articul,I` : ``,&lt;br /&gt;
     `Weight` : ``&lt;br /&gt;
   ]&lt;br /&gt;
 ),&lt;br /&gt;
 ''&amp;lt;тут заполняем датасет ArticulsDs данными&amp;gt;,''&lt;br /&gt;
 '''ProcessCommand'''(&lt;br /&gt;
   1,&lt;br /&gt;
   [&lt;br /&gt;
     `SaveImmediate` : `Y`,&lt;br /&gt;
     `ImportDs` : `ArticulsDs`,&lt;br /&gt;
     `ImportDsMap` : [&lt;br /&gt;
                       `Id` : `Articul`,&lt;br /&gt;
                       `Heap.@MinBoxWeight` : `1/0`, /*либо '''Expr'''(1/0) - '''обязательно''' инициализируем поле для срабатывания ImportDefValue*/&lt;br /&gt;
                       `Heap.BoxWeight` : `Weight`&lt;br /&gt;
                     ],&lt;br /&gt;
     `ImportDefValue:Heap@MinBoxWeight`: `FormatFloat('0.######',StrToFloat(Heap.BoxWeight)/RatioStock)`&lt;br /&gt;
   ],&lt;br /&gt;
   `IMPORT`&lt;br /&gt;
 ),&lt;br /&gt;
 '''WaitForChildForms()'''&lt;br /&gt;
&lt;br /&gt;
 то же самое без использования ассоциативного массива:&lt;br /&gt;
 '''ProcessCommand'''(&lt;br /&gt;
   1,&lt;br /&gt;
   `SaveImmediate=Y,ImportDs=ArticulsDs,`&lt;br /&gt;
   + `&amp;quot;ImportDsMap=Id=Articul||Heap.@MinBoxWeight=1/0||Heap.BoxWeight=Weight||&amp;quot;,`&lt;br /&gt;
   + `&amp;quot;ImportDefValue:Heap@MinBoxWeight=FormatFloat('0.######',StrToFloat(Heap.BoxWeight)/RatioStock)&amp;quot;`,&lt;br /&gt;
   `IMPORT`&lt;br /&gt;
 )&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=CREATETIMER&amp;diff=3273</id>
		<title>CREATETIMER</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=CREATETIMER&amp;diff=3273"/>
				<updated>2023-02-10T04:40:59Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=CREATETIMER&lt;br /&gt;
|Описание=Создает таймер, который сработает через заданное первым параметром число секунд, и выполнит заданный вторым параметром скрипт. Третьим параметром можно задать имя для таймера.&lt;br /&gt;
|Синтаксис=CREATETIMER('''Интервал''', '''Выражение''', ''Имя таймера'')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Интервал&lt;br /&gt;
 |Пояснение=действительное число, определяющее интервал времени (в секундах), через который срабатывает таймер&lt;br /&gt;
}}&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Выражение&lt;br /&gt;
 |Пояснение=строка с выражением, которое будет выполнено по истечении интервала&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Имя таймера&lt;br /&gt;
 |Пояснение=необязательный параметр, определяющий имя таймера.&amp;lt;br/&amp;gt;Если использовать имя с префиксом '''persist''' (например `persistTick`), то будет создан повторяющийся таймер.&amp;lt;br/&amp;gt;По имени можно остановить таймер, указав его имя и '''Интервал'''=0&lt;br /&gt;
}}&lt;br /&gt;
|Пример=1. Через 1 секунду откроется информационное окно:&lt;br /&gt;
 CREATETIMER(1, &amp;quot;INFO(`прошла секунда`)&amp;quot;)&lt;br /&gt;
2. Запуск таймера с ежесекундным отсчётом:&lt;br /&gt;
 :Tick:=0, CREATETIMER(1, Expr(:Tick:=:Tick+1, Assign(`HeapSet.CountDown`, :Tick)), `persistTick`)&lt;br /&gt;
и его остановка (например, по нажатию кнопки):&lt;br /&gt;
 CREATETIMER(0, ``, `persistTick`)&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=QUERYPARAMS&amp;diff=3272</id>
		<title>QUERYPARAMS</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=QUERYPARAMS&amp;diff=3272"/>
				<updated>2022-10-26T06:42:21Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=QUERYPARAMS&lt;br /&gt;
|Описание=Предлагает пользователю форму для ввода параметров. Возвращает &amp;quot;истина&amp;quot;, если пользователь нажал в предложенной форме кнопку &amp;quot;Принять&amp;quot;, и &amp;quot;ложь&amp;quot; в противном случае. Введенные пользователем параметры сохраняются в переменных.&lt;br /&gt;
|Синтаксис=QUERYPARAMS ('''Строка описания параметров''',Заголовок окна)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Строка описания параметров&lt;br /&gt;
 |Пояснение=Строка, описывающая требуемые параметры. Формат тот же, что для описания параметров отчетов.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Заголовок окна&lt;br /&gt;
 |Пояснение=Строка, заголовок окна для ввода параметров.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Логическое значение.&lt;br /&gt;
|Пример=Если пользователь ввел требуемые параметры и нажал &amp;quot;Принять&amp;quot;, то в переменных :MyStock и :MyString сохранятся введенные параметры:&lt;br /&gt;
 QueryParams(&amp;quot;Stock['Склад']=MyStock,String['Строка']=MyString&amp;quot;)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ввод пароля, который отображается &amp;quot;звёздочками&amp;quot;:&lt;br /&gt;
 QueryParams(`String['Пароль']=pwd{Constraints='password=*'}`,`Ввод пароля`)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Отображение таблиц ==&lt;br /&gt;
Специальный режим работы функции QUERYPARAMS - это отображение одного из датасетов текущей формы в виде таблицы.&lt;br /&gt;
Синтаксис:&lt;br /&gt;
 QueryParams(`Grid=MyDs`)&lt;br /&gt;
&lt;br /&gt;
Замечания:&lt;br /&gt;
# поскольку таблица лежит в форме ввода параметров команды, а датасет в родительской, нельзя делать правила (изменять одни поля при изменении других, запрещать вставку и удаление)&lt;br /&gt;
# поскольку форма ввода параметров создается с одним и тем же именем, настройка таблицы в реестре хранится всего одна. Поэтому в случае использования QUERYPARAMS для отображения разных датасетов может потребоваться задавать настройку таблицы прямо в функции:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QUERYPARAMS(&lt;br /&gt;
  `Grid=MyDs,String['aaa']=aaa,GridParams:__AutoGridMyDs='&amp;quot;RequiredLayout=|&amp;quot;&amp;quot;reason&amp;quot;&amp;quot;,&amp;quot;&amp;quot;-100&amp;quot;&amp;quot;,&amp;quot;&amp;quot;Причина&amp;quot;&amp;quot;|;|&amp;quot;&amp;quot;NewField1[Тест,]=1+2&amp;quot;&amp;quot;,&amp;quot;&amp;quot;-40&amp;quot;&amp;quot;,&amp;quot;&amp;quot;Тест!&amp;quot;&amp;quot;|&amp;quot;'`, `Заголовок` &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что двойные кавычки в настройке таблицы удваиваются.&lt;br /&gt;
Для разбивки заголовка колонок на несколько строк следует использовать управляющую комбинацию #13#10&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=INVALIDATECACHE&amp;diff=3271</id>
		<title>INVALIDATECACHE</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=INVALIDATECACHE&amp;diff=3271"/>
				<updated>2022-10-13T06:33:48Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=INVALIDATECACHE&lt;br /&gt;
|Описание=Инвалидирует кэш&lt;br /&gt;
|Синтаксис=INVALIDATECACHE('''Тип объекта''', Код объекта)&amp;lt;br&amp;gt;&lt;br /&gt;
или&amp;lt;br&amp;gt;&lt;br /&gt;
INVALIDATECACHE('''&amp;quot;IDMAP&amp;quot;''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Тип объекта&lt;br /&gt;
 |Пояснение=Код [[Типы объектов ГБ|типа объекта ГБ]], для которого требуется обновить кэш.&amp;lt;br&amp;gt;&lt;br /&gt;
Специальные значения:&lt;br /&gt;
* '''&amp;quot;IDMAP&amp;quot;''' &amp;amp;ndash; обновление кэша для сопоставлений (objectsmap)&lt;br /&gt;
* '''&amp;quot;CONFIGS&amp;quot;''' &amp;amp;ndash; обновление кэша для конфигурации ГБ&lt;br /&gt;
* '''&amp;quot;ACTIVECONTRACTS&amp;quot;''' &amp;amp;ndash; обновление кэша кэша действующих договоров (ActiveContracts)&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Код объекта&lt;br /&gt;
 |Пояснение=Код объекта, необязательный параметр. Если не задан, то кэш инвалидируется для всех объектов заданного типа&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Нет&lt;br /&gt;
|Пример=Обновить кэш для всех объектов с типом &amp;quot;товар&amp;quot; (тип &amp;quot;1&amp;quot;) перед обновлением отчёта:&lt;br /&gt;
 InvalidateCache(1),&lt;br /&gt;
 ProcessCommand(&lt;br /&gt;
   `CURRENT`,&lt;br /&gt;
   ``,&lt;br /&gt;
   'REFRESH'&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
Обновить кэш для сопоставлений:&lt;br /&gt;
 InvalidateCache(`IDMAP`),&lt;br /&gt;
 IfEmpty(&lt;br /&gt;
   MapGbId(0, :var.HPart60, 50, 1),&lt;br /&gt;
   Info(`Нет сопоставления с внешним справочником`)&lt;br /&gt;
 )&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=STRFROMLIST&amp;diff=3270</id>
		<title>STRFROMLIST</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=STRFROMLIST&amp;diff=3270"/>
				<updated>2022-10-13T02:38:10Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=STRFROMLIST&lt;br /&gt;
|Описание=Получает элемент списка с заданным номером.&lt;br /&gt;
|Синтаксис=STRFROMLIST('''Список''', '''Номер''', Разделитель)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Список&lt;br /&gt;
 |Пояснение=строка, являющаяся списком значений с разделителем.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Номер&lt;br /&gt;
 |Пояснение=целое число, номер элемента в списке который нужно получить, начиная с 0. Если в списке нет элемента с таким номером, функция вернет пустую строку&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Разделитель&lt;br /&gt;
 |Пояснение=строка, определяющая разделитель в списке, по умолчанию &amp;quot;;&amp;quot;.&amp;lt;br&amp;gt;Специальные значения:&lt;br /&gt;
*`EXTRACT WORD N` - найти в строке слово длиной не меньшей чем N&lt;br /&gt;
*`EXTRACT INT N` - найти в строке целое число длиной не меньшей чем N&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Строка.&lt;br /&gt;
|Пример=STRFROMLIST(`1;2;3`,0)&amp;lt;br/&amp;gt;&lt;br /&gt;
STRFROMLIST(Articul.Name,0,`EXTRACT WORD 4`)&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=TRY_FINALLY_EXCEPT&amp;diff=3269</id>
		<title>TRY FINALLY EXCEPT</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=TRY_FINALLY_EXCEPT&amp;diff=3269"/>
				<updated>2022-05-20T09:20:19Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Функции_ГБ]]&lt;br /&gt;
{{Функция ГБ&lt;br /&gt;
|Название=TRY...FINALLY...EXCEPT&lt;br /&gt;
|Описание=Функции для обработки исключений (доступны с версии 1.9.0.9).&lt;br /&gt;
|Синтаксис='''TRY'''(''выражение, выражение, ...'', '''FINALLY'''(''выражение, выражение, ...'') )&lt;br /&gt;
&amp;lt;br/&amp;gt;или&lt;br /&gt;
&amp;lt;br/&amp;gt;'''TRY'''(''выражение, выражение, ...'', '''EXCEPT'''(''выражение, выражение, ...'') )&lt;br /&gt;
&amp;lt;br/&amp;gt;или&lt;br /&gt;
&amp;lt;br/&amp;gt;'''TRY'''(''выражение, выражение, ...'', '''EXCEPT'''(''выражение, выражение, ...'', '''RAISE'''() ) )&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=блок TRY&lt;br /&gt;
 |Пояснение=в блоке TRY находятся выражения, выполнение которых нужно проконтролировать&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=блок FINALLY&lt;br /&gt;
 |Пояснение=в блоке FINALLY находятся выражения, которые нужно выполнить независимо от того, возникло или нет исключение при выполнении блока TRY. Обычно используется для гарантированного освобождения ресурсов, выделенных в блоке TRY.&amp;lt;br&amp;gt;Фактически FINALLY не обрабатывает исключение, т.е. скрипт будет прерван, если нет никаких обработчиков EXCEPT. Чтобы всё-таки обработать исключение, нужно использовать вложенные конструкции TRY:&lt;br /&gt;
 TRY(&lt;br /&gt;
   TRY(&lt;br /&gt;
     ...,&lt;br /&gt;
     EXCEPT(&lt;br /&gt;
       ...&lt;br /&gt;
     )&lt;br /&gt;
   ),&lt;br /&gt;
   FINALLY(&lt;br /&gt;
     ...&lt;br /&gt;
   )&lt;br /&gt;
 )&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=блок EXCEPT&lt;br /&gt;
 |Пояснение=в блоке EXCEPT находятся выражения, которые будут выполнены только в том случае, если в блоке TRY возникнет исключение. При этом исключение считается обработанным и выполнение скрипта не прерывается стандартным сообщением об ошибке&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=RAISE()&lt;br /&gt;
 |Пояснение=функция RAISE(), помещённая в блок EXCEPT, возобновляет исключение, проталкивая его во внешний обработчик или, если такового нет - в стандартный обработчик исключений&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Объект E&lt;br /&gt;
 |Пояснение=E - объект для работы с ошибками. Например: E.ClassName(), E.Message(), E.DbMessage().&amp;lt;br&amp;gt;E.DbMessage() содержит оригинальное сообщение из процедуры, если ошибка была при вызове процедуры, либо то же самое что E.Message() во всех остальных случаях&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Пример 1.&lt;br /&gt;
 :SDt:=`aaa`,&lt;br /&gt;
 '''TRY'''(STRTODATE(:SDt),&lt;br /&gt;
     '''EXCEPT'''(&lt;br /&gt;
         INFO(`Ошибка преобразования даты`)&lt;br /&gt;
     )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* &amp;quot;Ошибка преобразования даты&amp;quot;&lt;br /&gt;
* &amp;quot;Продолжаем выполнение...&amp;quot;&lt;br /&gt;
и выполнение скрипта будет продолжено.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 2.&lt;br /&gt;
 :SDt:=`aaa`,&lt;br /&gt;
 '''TRY'''(STRTODATE(:SDt),&lt;br /&gt;
   '''EXCEPT'''(&lt;br /&gt;
     INFO(`Ошибка преобразования даты`),&lt;br /&gt;
     '''RAISE'''()&lt;br /&gt;
   )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* &amp;quot;Ошибка преобразования даты&amp;quot;&lt;br /&gt;
* &amp;quot;'aaa' is not a valid date and time&amp;quot;&lt;br /&gt;
и выполнение скрипта будет прервано.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 3.&lt;br /&gt;
 '''TRY'''(&lt;br /&gt;
   /*распределяем ресурсы*/&lt;br /&gt;
   :var.str:=TStringList.Create(),&lt;br /&gt;
   /*попытка прочитать несуществующий файл*/&lt;br /&gt;
   :var.str.LoadFromFile(`C:\0.txt`),&lt;br /&gt;
   '''FINALLY'''(&lt;br /&gt;
     /*ВСЕГДА освобождаем ресурсы*/&lt;br /&gt;
     :var.str.Free(),&lt;br /&gt;
     INFO(`Освободили ресурсы`)&lt;br /&gt;
   )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* &amp;quot;Освободили ресурсы&amp;quot;&lt;br /&gt;
* &amp;quot;Не удалось открыть файл C:\0.txt&amp;quot;&lt;br /&gt;
и выполнение скрипта будет прервано.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 3.1.&amp;lt;br&amp;gt;Аналогично предыдущему, но с обработкой исключения во вложенном блоке TRY..EXCEPT и, соответственно, продолжением выполнения скрипта.&lt;br /&gt;
 '''TRY'''(&lt;br /&gt;
   '''TRY'''(&lt;br /&gt;
     /*распределяем ресурсы*/&lt;br /&gt;
     :var.str:=TStringList.Create(),&lt;br /&gt;
     /*попытка прочитать несуществующий файл*/&lt;br /&gt;
     :var.str.LoadFromFile(`C:\0.txt`),&lt;br /&gt;
     '''EXCEPT'''(&lt;br /&gt;
       /*обрабатываем исключение*/&lt;br /&gt;
       INFO(`Не удалось прочитать файл`)&lt;br /&gt;
     )&lt;br /&gt;
   ),&lt;br /&gt;
   '''FINALLY'''(&lt;br /&gt;
     /*ВСЕГДА освобождаем ресурсы*/&lt;br /&gt;
     :var.str.Free(),&lt;br /&gt;
     INFO(`Освободили ресурсы`)&lt;br /&gt;
   )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* &amp;quot;Не удалось прочитать файл&amp;quot;&lt;br /&gt;
* &amp;quot;Освободили ресурсы&amp;quot;&lt;br /&gt;
* &amp;quot;Продолжаем выполнение...&amp;quot;&lt;br /&gt;
и выполнение скрипта будет продолжено.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 4.&lt;br /&gt;
&lt;br /&gt;
Можно использовать объект '''E''' для работы с ошибками:&lt;br /&gt;
&lt;br /&gt;
 :SDt:=`aaa`,&lt;br /&gt;
 '''TRY'''(&lt;br /&gt;
   STRTODATE(:SDt),&lt;br /&gt;
   '''EXCEPT'''(&lt;br /&gt;
     INFO(&lt;br /&gt;
       `Произошла какая-то ошибка... Определим её тип.`&lt;br /&gt;
       + \&lt;br /&gt;
       + `Класс ошибки: `&lt;br /&gt;
       + '''E.ClassName()'''&lt;br /&gt;
       + \&lt;br /&gt;
       + `Текст ошибки: `&lt;br /&gt;
       + '''E.Message()'''&lt;br /&gt;
     )&lt;br /&gt;
   )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* Произошла какая-то ошибка... Определим её тип.&lt;br /&gt;
:Класс ошибки: EConvertError&lt;br /&gt;
:Текст ошибки: 'aaa' is not a valid date and time&lt;br /&gt;
:в выражении&lt;br /&gt;
:STRTODATE(:SDt)&lt;br /&gt;
* Продолжаем выполнение...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 5.&lt;br /&gt;
Использование Exit в блоке Finally:&lt;br /&gt;
 :var.Res:=&lt;br /&gt;
 '''Try'''(&lt;br /&gt;
   aaa,&lt;br /&gt;
 '''Finally'''(&lt;br /&gt;
   '''Exit'''(`Выходим из Finally, а ошибки нет!`)&lt;br /&gt;
  )&lt;br /&gt;
 ),&lt;br /&gt;
 '''Info'''(:var.Res)&lt;br /&gt;
&lt;br /&gt;
Вместо ошибки при обращении к неопределённому полю &amp;quot;aaa&amp;quot;, будет выведено сообщение:&lt;br /&gt;
* Выходим из Finally, а ошибки нет!&lt;br /&gt;
Связано это с тем, что функция Exit() в ГБ реализована также через исключения, потому ошибка при обращении к полю теряется. Следует избегать использования конструкций, аналогичных  вышеприведённой.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=TRY_FINALLY_EXCEPT&amp;diff=3268</id>
		<title>TRY FINALLY EXCEPT</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=TRY_FINALLY_EXCEPT&amp;diff=3268"/>
				<updated>2022-05-20T09:19:57Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Функции_ГБ]]&lt;br /&gt;
{{Функция ГБ&lt;br /&gt;
|Название=TRY...FINALLY...EXCEPT&lt;br /&gt;
|Описание=Функции для обработки исключений (доступны с версии 1.9.0.9).&lt;br /&gt;
|Синтаксис='''TRY'''(''выражение, выражение, ...'', '''FINALLY'''(''выражение, выражение, ...'') )&lt;br /&gt;
&amp;lt;br/&amp;gt;или&lt;br /&gt;
&amp;lt;br/&amp;gt;'''TRY'''(''выражение, выражение, ...'', '''EXCEPT'''(''выражение, выражение, ...'') )&lt;br /&gt;
&amp;lt;br/&amp;gt;или&lt;br /&gt;
&amp;lt;br/&amp;gt;'''TRY'''(''выражение, выражение, ...'', '''EXCEPT'''(''выражение, выражение, ...'', '''RAISE'''() ) )&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=блок TRY&lt;br /&gt;
 |Пояснение=в блоке TRY находятся выражения, выполнение которых нужно проконтролировать&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=блок FINALLY&lt;br /&gt;
 |Пояснение=в блоке FINALLY находятся выражения, которые нужно выполнить независимо от того, возникло или нет исключение при выполнении блока TRY. Обычно используется для гарантированного освобождения ресурсов, выделенных в блоке TRY.&amp;lt;br&amp;gt;Фактически FINALLY не обрабатывает исключение, т.е. скрипт будет прерван, если нет никаких обработчиков EXCEPT. Чтобы всё-таки обработать исключение, нужно использовать вложенные конструкции TRY:&lt;br /&gt;
 TRY(&lt;br /&gt;
   TRY(&lt;br /&gt;
     ...,&lt;br /&gt;
     EXCEPT(&lt;br /&gt;
       ...&lt;br /&gt;
     )&lt;br /&gt;
   ),&lt;br /&gt;
   FINALLY(&lt;br /&gt;
     ...&lt;br /&gt;
   )&lt;br /&gt;
 )&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=блок EXCEPT&lt;br /&gt;
 |Пояснение=в блоке EXCEPT находятся выражения, которые будут выполнены только в том случае, если в блоке TRY возникнет исключение. При этом исключение считается обработанным и выполнение скрипта не прерывается стандартным сообщением об ошибке&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=RAISE()&lt;br /&gt;
 |Пояснение=функция RAISE(), помещённая в блок EXCEPT, возобновляет исключение, проталкивая его во внешний обработчик или, если такового нет - в стандартный обработчик исключений&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Объект E&lt;br /&gt;
 |Пояснение=E - объект для работы с ошибками. Например: E.ClassName(), E.Message(), E.DbMessage().&amp;lt;br&amp;gt;E.DbMessage() содержит оригинальное сообщение из процедуры, если ошибка была при вызове процедуры, либо то же самое что E.Message() во всех остальных случаях&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Пример 1.&lt;br /&gt;
 :SDt:=`aaa`,&lt;br /&gt;
 '''TRY'''(STRTODATE(:SDt),&lt;br /&gt;
     '''EXCEPT'''(&lt;br /&gt;
         INFO(`Ошибка преобразования даты`)&lt;br /&gt;
     )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* &amp;quot;Ошибка преобразования даты&amp;quot;&lt;br /&gt;
* &amp;quot;Продолжаем выполнение...&amp;quot;&lt;br /&gt;
и выполнение скрипта будет продолжено.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 2.&lt;br /&gt;
 :SDt:=`aaa`,&lt;br /&gt;
 '''TRY'''(STRTODATE(:SDt),&lt;br /&gt;
   '''EXCEPT'''(&lt;br /&gt;
     INFO(`Ошибка преобразования даты`),&lt;br /&gt;
     '''RAISE'''()&lt;br /&gt;
   )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* &amp;quot;Ошибка преобразования даты&amp;quot;&lt;br /&gt;
* &amp;quot;'aaa' is not a valid date and time&amp;quot;&lt;br /&gt;
и выполнение скрипта будет прервано.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 3.&lt;br /&gt;
 '''TRY'''(&lt;br /&gt;
   /*распределяем ресурсы*/&lt;br /&gt;
   :var.str:=TStringList.Create(),&lt;br /&gt;
   /*попытка прочитать несуществующий файл*/&lt;br /&gt;
   :var.str.LoadFromFile(`C:\0.txt`),&lt;br /&gt;
   '''FINALLY'''(&lt;br /&gt;
     /*ВСЕГДА освобождаем ресурсы*/&lt;br /&gt;
     :var.str.Free(),&lt;br /&gt;
     INFO(`Освободили ресурсы`)&lt;br /&gt;
   )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* &amp;quot;Освободили ресурсы&amp;quot;&lt;br /&gt;
* &amp;quot;Не удалось открыть файл C:\0.txt&amp;quot;&lt;br /&gt;
и выполнение скрипта будет прервано.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 3.1.&amp;lt;br&amp;gt;Аналогично предыдущему, но с обработкой исключения во вложенном блоке TRY..EXCEPT и, соответственно, продолжением выполнения скрипта.&lt;br /&gt;
 '''TRY'''(&lt;br /&gt;
   '''TRY'''(&lt;br /&gt;
     /*распределяем ресурсы*/&lt;br /&gt;
     :var.str:=TStringList.Create(),&lt;br /&gt;
     /*попытка прочитать несуществующий файл*/&lt;br /&gt;
     :var.str.LoadFromFile(`C:\0.txt`),&lt;br /&gt;
     '''EXCEPT'''(&lt;br /&gt;
       /*обрабатываем исключение*/&lt;br /&gt;
       INFO(`Не удалось прочитать файл`)&lt;br /&gt;
     )&lt;br /&gt;
   ),&lt;br /&gt;
   '''FINALLY'''(&lt;br /&gt;
     /*ВСЕГДА освобождаем ресурсы*/&lt;br /&gt;
     :var.str.Free(),&lt;br /&gt;
     INFO(`Освободили ресурсы`)&lt;br /&gt;
   )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* &amp;quot;Не удалось прочитать файл&amp;quot;&lt;br /&gt;
* &amp;quot;Освободили ресурсы&amp;quot;&lt;br /&gt;
* &amp;quot;Продолжаем выполнение...&amp;quot;&lt;br /&gt;
и выполнение скрипта будет продолжено.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 4.&lt;br /&gt;
&lt;br /&gt;
Можно использовать объект '''E''' для работы с ошибками:&lt;br /&gt;
&lt;br /&gt;
 :SDt:=`aaa`,&lt;br /&gt;
 '''TRY'''(&lt;br /&gt;
   STRTODATE(:SDt),&lt;br /&gt;
   '''EXCEPT'''(&lt;br /&gt;
     INFO(&lt;br /&gt;
       `Произошла какая-то ошибка... Определим её тип.`&lt;br /&gt;
       + \&lt;br /&gt;
       + `Класс ошибки: `&lt;br /&gt;
       + '''E.ClassName()'''&lt;br /&gt;
       + \&lt;br /&gt;
       + `Текст ошибки: `&lt;br /&gt;
       + '''E.Message()'''&lt;br /&gt;
     )&lt;br /&gt;
   )&lt;br /&gt;
 ),&lt;br /&gt;
 INFO(`Продолжаем выполнение...`)&lt;br /&gt;
&lt;br /&gt;
Будут выведены следующие сообщения:&lt;br /&gt;
* Произошла какая-то ошибка... Определим её тип.&lt;br /&gt;
:Класс ошибки: EConvertError&lt;br /&gt;
:Текст ошибки: 'aaa' is not a valid date and time&lt;br /&gt;
:в выражении&lt;br /&gt;
:STRTODATE(:SDt)&lt;br /&gt;
* Продолжаем выполнение...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Пример 5.&lt;br /&gt;
Использование Exit в блоке Finally:&lt;br /&gt;
 :var.Res:=&lt;br /&gt;
 '''Try'''(&lt;br /&gt;
   aaa,&lt;br /&gt;
 '''Finally'''(&lt;br /&gt;
   '''Exit'''(`Выходим из Finally, а ошибки нет!`)&lt;br /&gt;
  )&lt;br /&gt;
 ),&lt;br /&gt;
 Info(:var.Res)&lt;br /&gt;
&lt;br /&gt;
Вместо ошибки при обращении к неопределённому полю &amp;quot;aaa&amp;quot;, будет выведено сообщение:&lt;br /&gt;
* Выходим из Finally, а ошибки нет!&lt;br /&gt;
Связано это с тем, что функция Exit() в ГБ реализована также через исключения, потому ошибка при обращении к полю теряется. Следует избегать использования конструкций, аналогичных  вышеприведённой.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3267</id>
		<title>Печать в MSWord и Open Office Writer</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3267"/>
				<updated>2022-03-24T05:27:42Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: /* Печать в MSWord из ГБ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Печатные формы]]&lt;br /&gt;
&lt;br /&gt;
== Печать в MSWord из ГБ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ MS Word необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона и, если нужно, имя файла-результата. Если отмечен чекбокс «Внедрить», файл-шаблон будет внедрён в печатную форму.&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Word (поля, уже имеющиеся в датасете бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата MS Word. Документ-шаблон &amp;amp;ndash; это обычный документ Word (doc), содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Word-поля»'' типа «Формула» (в Word &amp;amp;ndash; пункт меню «Вставка» → «Поле…» → «Формула…» или Ctrl+F9).&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом, в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляются «Формулы», содержащие имена соответствующих датасетов и полей в ГБ.&lt;br /&gt;
&lt;br /&gt;
Границы бэндов в шаблоне обозначаются полями с ключевыми словами:&lt;br /&gt;
 $GBDataSetBegin.XXX (начало бэнда)&lt;br /&gt;
 $GBDataSetEnd.XXX (конец бэнда)&lt;br /&gt;
где XXX &amp;amp;ndash; имя датасета данного бэнда в ГБ.&lt;br /&gt;
&lt;br /&gt;
Внутри бэнда располагаются поля, принадлежащие ему. Поля обозначаются ключевым словом $GBField.XXX.YYY, где XXX &amp;amp;ndash; имя датасета данного бэнда, YYY &amp;amp;ndash; имя поля в данном датасете, например:&lt;br /&gt;
 $GBField.DataSet.DocNumber&lt;br /&gt;
Кроме имён полей можно использовать функции ГБ, например:&lt;br /&gt;
  $GBField.DataSet.FormatDate(`YYYY-MM-DD`,DocDate)&lt;br /&gt;
&lt;br /&gt;
Необходимо соблюдать вложенность бэндов в шаблоне. Например, внешний бэнд для основных полей документа (DataSet) и вложенный в него источник товарных строчек документа (Goodies):&lt;br /&gt;
&lt;br /&gt;
 $GBDataSetBegin.DataSet&lt;br /&gt;
  $GBField.DataSet.DocNumber&lt;br /&gt;
   $GBDataSetBegin.Goodies&lt;br /&gt;
    $GBField.Goodies.Articul.Name&lt;br /&gt;
   $GBDataSetEnd.Goodies&lt;br /&gt;
 $GBDataSetEnd.DataSet&lt;br /&gt;
&lt;br /&gt;
В документах-шаблонах Word «поля-формулы» используются для вывода значений из ГБ как в обычном тексте, так и в ячейках таблиц.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Печать в LibreOffice Writer из ГБ ==&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ Writer необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона (тип odt) и, если нужно, имя файла-результата. Если отмечен чекбокс «Как файл», файл-шаблон будет внедрён в печатную форму (чекбокс «Внедрить» для печатных форм Writer неприменим из-за особенностей реализации LibreOffice).&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Writer (поля, уже имеющиеся в датасеnе бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата Writer (odt). Документ-шаблон &amp;amp;ndash; это обычный документ Writer (odt), содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Writer-поля»'' типа «Поле пользователя». Для вставки такого поля нужно во Writer открыть пункт меню «Вставка» → «Поле…» → «Ещё поля…» (или Ctrl+F2) и переключиться на вкладку «Переменные».&lt;br /&gt;
&amp;lt;br&amp;gt;Затем добавляются поля. Для каждого такого поля нужно выбрать тип ''«Поле пользователя»'', формат ''«Текст»'', задать ''«Имя»'' (произвольное, не связано с именами в ГБ) и ''«Значение»'', содержащее имена датасета и поля в ГБ.&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом, в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляются «Поля пользователя», содержащие имена соответствующих датасетов и полей в ГБ.&lt;br /&gt;
&lt;br /&gt;
Ключевые слова для границ бэндов и полей, правила вложенности бэндов, возможность использования функций ГБ для полей и т.п. аналогичны таковым для печатных форм MS Word (см. выше).&lt;br /&gt;
&lt;br /&gt;
Примечание.&lt;br /&gt;
В отличие от шаблонов Word, в документах-шаблонах Writer «Поля пользователя» используются только в обычном тексте, а ячейках таблиц нужно использовать текстовое описание поля (т.е. вместо вставки «Writer-поля» со значением $GBField.DataSet.DocNumber в ячейки таблиц нужно вставлять само это значение в виде обычного текста).&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Наименование товара&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Артикул&lt;br /&gt;
|-&lt;br /&gt;
|$GBField.Goodies.Articul.Name&lt;br /&gt;
|$GBField.Goodies.Articul.Number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[:File:Пример шаблона MsWord.doc|Пример файла-шаблона для MS Word]]&lt;br /&gt;
&amp;lt;br&amp;gt;[[:File:Пример_ПФ_для_Writer.txt|Пример печатной формы для Writer]]&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%9F%D0%A4_%D0%B4%D0%BB%D1%8F_Writer.txt&amp;diff=3266</id>
		<title>Файл:Пример ПФ для Writer.txt</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%9F%D0%A4_%D0%B4%D0%BB%D1%8F_Writer.txt&amp;diff=3266"/>
				<updated>2022-03-10T08:45:34Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3264</id>
		<title>Печать в MSWord и Open Office Writer</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3264"/>
				<updated>2022-03-10T07:24:09Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: /* Печать в LibreOffice Writer из ГБ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Печатные формы]]&lt;br /&gt;
&lt;br /&gt;
== Печать в MSWord из ГБ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ MS Word необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона и, если нужно, имя файла-результата. Если отмечен чекбокс «Внедрить», файл-шаблон будет внедрён в печатную форму.&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Word (поля, уже имеющиеся в датасете бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата MS Word. Документ-шаблон &amp;amp;ndash; это обычный документ Word (doc), содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Word-поля»'' типа «Формула» (в Word &amp;amp;ndash; пункт меню «Вставка» → «Поле…» → «Формула…»).&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом, в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляются «Формулы», содержащие имена соответствующих датасетов и полей в ГБ.&lt;br /&gt;
&lt;br /&gt;
Границы бэндов в шаблоне обозначаются полями с ключевыми словами:&lt;br /&gt;
 $GBDataSetBegin.XXX (начало бэнда)&lt;br /&gt;
 $GBDataSetEnd.XXX (конец бэнда)&lt;br /&gt;
где XXX &amp;amp;ndash; имя датасета данного бэнда в ГБ.&lt;br /&gt;
&lt;br /&gt;
Внутри бэнда располагаются поля, принадлежащие ему. Поля обозначаются ключевым словом $GBField.XXX.YYY, где XXX &amp;amp;ndash; имя датасета данного бэнда, YYY &amp;amp;ndash; имя поля в данном датасете, например:&lt;br /&gt;
 $GBField.DataSet.DocNumber&lt;br /&gt;
Кроме имён полей можно использовать функции ГБ, например:&lt;br /&gt;
  $GBField.DataSet.FormatDate(`YYYY-MM-DD`,DocDate)&lt;br /&gt;
&lt;br /&gt;
Необходимо соблюдать вложенность бэндов в шаблоне. Например, внешний бэнд для основных полей документа (DataSet) и вложенный в него источник товарных строчек документа (Goodies):&lt;br /&gt;
&lt;br /&gt;
 $GBDataSetBegin.DataSet&lt;br /&gt;
  $GBField.DataSet.DocNumber&lt;br /&gt;
   $GBDataSetBegin.Goodies&lt;br /&gt;
    $GBField.Goodies.Articul.Name&lt;br /&gt;
   $GBDataSetEnd.Goodies&lt;br /&gt;
 $GBDataSetEnd.DataSet&lt;br /&gt;
&lt;br /&gt;
В документах-шаблонах Word «поля-формулы» используются для вывода значений из ГБ как в обычном тексте, так и в ячейках таблиц.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Печать в LibreOffice Writer из ГБ ==&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ Writer необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона (тип odt) и, если нужно, имя файла-результата. Если отмечен чекбокс «Как файл», файл-шаблон будет внедрён в печатную форму (чекбокс «Внедрить» для печатных форм Writer неприменим из-за особенностей реализации LibreOffice).&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Writer (поля, уже имеющиеся в датасеnе бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата Writer (odt). Документ-шаблон &amp;amp;ndash; это обычный документ Writer (odt), содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Writer-поля»'' типа «Поле пользователя». Для вставки такого поля нужно во Writer открыть пункт меню «Вставка» → «Поле…» → «Ещё поля…» (или Ctrl+F2) и переключиться на вкладку «Переменные».&lt;br /&gt;
&amp;lt;br&amp;gt;Затем добавляются поля. Для каждого такого поля нужно выбрать тип ''«Поле пользователя»'', формат ''«Текст»'', задать ''«Имя»'' (произвольное, не связано с именами в ГБ) и ''«Значение»'', содержащее имена датасета и поля в ГБ.&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом, в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляются «Поля пользователя», содержащие имена соответствующих датасетов и полей в ГБ.&lt;br /&gt;
&lt;br /&gt;
Ключевые слова для границ бэндов и полей, правила вложенности бэндов, возможность использования функций ГБ для полей и т.п. аналогичны таковым для печатных форм MS Word (см. выше).&lt;br /&gt;
&lt;br /&gt;
Примечание.&lt;br /&gt;
В отличие от шаблонов Word, в документах-шаблонах Writer «Поля пользователя» используются только в обычном тексте, а ячейках таблиц нужно использовать текстовое описание поля (т.е. вместо вставки «Writer-поля» со значением $GBField.DataSet.DocNumber в ячейки таблиц нужно вставлять само это значение в виде обычного текста).&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Наименование товара&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Артикул&lt;br /&gt;
|-&lt;br /&gt;
|$GBField.Goodies.Articul.Name&lt;br /&gt;
|$GBField.Goodies.Articul.Number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[:File:Пример шаблона MsWord.doc|Пример файла-шаблона для MS Word]]&lt;br /&gt;
&amp;lt;br&amp;gt;[[:File:Пример_ПФ_для_Writer.txt|Пример печатной формы для Writer]]&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3263</id>
		<title>Печать в MSWord и Open Office Writer</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3263"/>
				<updated>2022-03-10T07:23:38Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Печатные формы]]&lt;br /&gt;
&lt;br /&gt;
== Печать в MSWord из ГБ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ MS Word необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона и, если нужно, имя файла-результата. Если отмечен чекбокс «Внедрить», файл-шаблон будет внедрён в печатную форму.&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Word (поля, уже имеющиеся в датасете бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата MS Word. Документ-шаблон &amp;amp;ndash; это обычный документ Word (doc), содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Word-поля»'' типа «Формула» (в Word &amp;amp;ndash; пункт меню «Вставка» → «Поле…» → «Формула…»).&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом, в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляются «Формулы», содержащие имена соответствующих датасетов и полей в ГБ.&lt;br /&gt;
&lt;br /&gt;
Границы бэндов в шаблоне обозначаются полями с ключевыми словами:&lt;br /&gt;
 $GBDataSetBegin.XXX (начало бэнда)&lt;br /&gt;
 $GBDataSetEnd.XXX (конец бэнда)&lt;br /&gt;
где XXX &amp;amp;ndash; имя датасета данного бэнда в ГБ.&lt;br /&gt;
&lt;br /&gt;
Внутри бэнда располагаются поля, принадлежащие ему. Поля обозначаются ключевым словом $GBField.XXX.YYY, где XXX &amp;amp;ndash; имя датасета данного бэнда, YYY &amp;amp;ndash; имя поля в данном датасете, например:&lt;br /&gt;
 $GBField.DataSet.DocNumber&lt;br /&gt;
Кроме имён полей можно использовать функции ГБ, например:&lt;br /&gt;
  $GBField.DataSet.FormatDate(`YYYY-MM-DD`,DocDate)&lt;br /&gt;
&lt;br /&gt;
Необходимо соблюдать вложенность бэндов в шаблоне. Например, внешний бэнд для основных полей документа (DataSet) и вложенный в него источник товарных строчек документа (Goodies):&lt;br /&gt;
&lt;br /&gt;
 $GBDataSetBegin.DataSet&lt;br /&gt;
  $GBField.DataSet.DocNumber&lt;br /&gt;
   $GBDataSetBegin.Goodies&lt;br /&gt;
    $GBField.Goodies.Articul.Name&lt;br /&gt;
   $GBDataSetEnd.Goodies&lt;br /&gt;
 $GBDataSetEnd.DataSet&lt;br /&gt;
&lt;br /&gt;
В документах-шаблонах Word «поля-формулы» используются для вывода значений из ГБ как в обычном тексте, так и в ячейках таблиц.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Печать в LibreOffice Writer из ГБ ==&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ Writer необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона (тип odt) и, если нужно, имя файла-результата. Если отмечен чекбокс «Как файл», файл-шаблон будет внедрён в печатную форму (чекбокс «Внедрить» для печатных форм Writer неприменим из-за особенностей реализации LibreOffice).&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Writer (поля, уже имеющиеся в датасеnе бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата Writer (odt). Документ-шаблон &amp;amp;ndash; это обычный документ Writer (odt), содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Writer-поля»'' типа «Поле пользователя». Для вставки такого поля нужно во Writer открыть пункт меню «Вставка» → «Поле…» → «Ещё поля…» (или Ctrl+F2) и переключиться на вкладку «Переменные».&lt;br /&gt;
&amp;lt;br&amp;gt;Затем добавляются поля. Для каждого такого поля нужно выбрать тип ''«Поле пользователя»'', формат ''«Текст»'', задать ''«Имя»'' (произвольное, не связано с именами в ГБ) и ''«Значение»'', содержащее имена датасета и поля в ГБ.&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом, в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляются «Поля пользователя», содержащие имена соответствующих датасетов и полей в ГБ.&lt;br /&gt;
&lt;br /&gt;
Ключевые слова для границ бэндов и полей, правила вложенности бэндов, возможность использования функций ГБ для полей и т.п. аналогичны таковым для печатных форм MS Word (см. выше).&lt;br /&gt;
&lt;br /&gt;
Примечание.&lt;br /&gt;
В отличие от шаблонов Word, в документах-шаблонах Writer «Поля пользователя» используются только в обычном тексте, а ячейках таблиц нужно использовать текстовое описание поля (т.е. вместо вставки «Writer-поля» со значением $GBField.DataSet.DocNumber в ячейку таблицы нужно вставлять само это значение в виде обычного текста).&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Наименование товара&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Артикул&lt;br /&gt;
|-&lt;br /&gt;
|$GBField.Goodies.Articul.Name&lt;br /&gt;
|$GBField.Goodies.Articul.Number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[:File:Пример шаблона MsWord.doc|Пример файла-шаблона для MS Word]]&lt;br /&gt;
&amp;lt;br&amp;gt;[[:File:Пример_ПФ_для_Writer.txt|Пример печатной формы для Writer]]&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3262</id>
		<title>Печать в MSWord и Open Office Writer</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3262"/>
				<updated>2022-03-10T07:14:00Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: /* Печать в MSWord из ГБ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Печатные формы]]&lt;br /&gt;
&lt;br /&gt;
== Печать в MSWord из ГБ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ MS Word необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона и, если нужно, имя файла-результата. Если отмечен чекбокс «Внедрить», файл-шаблон будет внедрён в печатную форму.&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Word (поля, уже имеющиеся в датасете бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата MS Word. Документ-шаблон &amp;amp;ndash; это обычный документ Word (doc), содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Word-поля»'' типа «Формула» (в Word &amp;amp;ndash; пункт меню «Вставка» → «Поле…» → «Формула…»).&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляется «Формула», содержащая имена соответствующих датасета и поля в ГБ.&lt;br /&gt;
&lt;br /&gt;
Границы бэндов в шаблоне обозначаются полями с ключевыми словами:&lt;br /&gt;
 $GBDataSetBegin.XXX (начало бэнда)&lt;br /&gt;
 $GBDataSetEnd.XXX (конец бэнда)&lt;br /&gt;
где XXX &amp;amp;ndash; имя датасета данного бэнда в ГБ.&lt;br /&gt;
&lt;br /&gt;
Внутри бэнда располагаются поля, принадлежащие ему. Поля обозначаются ключевым словом $GBField.XXX.YYY, где XXX &amp;amp;ndash; имя датасета данного бэнда, YYY &amp;amp;ndash; имя поля в данном датасете, например:&lt;br /&gt;
 $GBField.DataSet.DocNumber&lt;br /&gt;
Кроме имён полей можно использовать функции ГБ, например:&lt;br /&gt;
  $GBField.DataSet.FormatDate(`YYYY-MM-DD`,DocDate)&lt;br /&gt;
&lt;br /&gt;
Необходимо соблюдать вложенность бэндов в шаблоне. Например, внешний бэнд для основных полей документа (DataSet) и вложенный в него источник товарных строчек документа (Goodies):&lt;br /&gt;
&lt;br /&gt;
 $GBDataSetBegin.DataSet&lt;br /&gt;
  $GBField.DataSet.DocNumber&lt;br /&gt;
   $GBDataSetBegin.Goodies&lt;br /&gt;
    $GBField.Goodies.Articul.Name&lt;br /&gt;
   $GBDataSetEnd.Goodies&lt;br /&gt;
 $GBDataSetEnd.DataSet&lt;br /&gt;
&lt;br /&gt;
В документах-шаблонах MSWord для вывода значений из ГБ «поля-формулы» используются как в обычном тексте, так и в ячейках таблиц.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Печать в LibreOffice Writer из ГБ ==&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ Writer необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона (тип odt) и, если нужно, имя файла-результата. Если отмечен чекбокс «Как файл», файл-шаблон будет внедрён в печатную форму (чекбокс «Внедрить» для печатных форм Writer неприменим из-за особенностей реализации LibreOffice).&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Writer (поля, уже имеющиеся в датаседе бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата Writer (odt). Документ-шаблон &amp;amp;ndash; это обычный документ Writer (odt), содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Writer-поля»'' типа «Поле пользователя». Для вставки такого поля нужно во Writer открыть пункт меню «Вставка» - «Поле…» - «Ещё поля…» (или Ctrl+F2) и переключиться на вкладку «Переменные».&lt;br /&gt;
&amp;lt;br&amp;gt;Затем добавляются поля. Для каждого такого поля нужно выбрать тип «Поля пользователя», формат «Текст», задать «Имя» (произвольное, не связано с именами в ГБ) и «Значение», содержащее имена датасета и поля в ГБ.&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляется «Поле пользователя», содержащее имена соответствующих датасета и поля в ГБ.&lt;br /&gt;
&lt;br /&gt;
Ключевые слова для границ бэндов и полей, правила вложенности бэндов, возможность использования функций ГБ для полей и т.п. аналогичны таковым для печатных форм MS Word (см. выше).&lt;br /&gt;
&lt;br /&gt;
Примечание.&lt;br /&gt;
В отличие от шаблонов Word, в документах-шаблонах Writer «Поля пользователя» используются только в обычном тексте, а ячейках таблиц нужно использовать текстовое описание поля (т.е. вместо вставки «Writer-поля» со значением $GBField.DataSet.DocNumber&amp;quot; нужно вставить само это значение в виде обычного текста.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Наименование товара&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Артикул&lt;br /&gt;
|-&lt;br /&gt;
|$GBField.Goodies.SArtName&lt;br /&gt;
|$GBField.Goodies.SNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[:File:Пример шаблона MsWord.doc|Пример файла-шаблона для MS Word]]&lt;br /&gt;
&amp;lt;br&amp;gt;[[:File:Пример_ПФ_для_Writer.txt|Пример печатной формы для Writer]]&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3261</id>
		<title>Печать в MSWord и Open Office Writer</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3261"/>
				<updated>2022-03-10T07:10:48Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Печатные формы]]&lt;br /&gt;
&lt;br /&gt;
== Печать в MSWord из ГБ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ MS Word необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона и, если нужно, имя файла-результата. Если отмечена галочка «Внедрить», файл-шаблон будет внедрён в печатную форму.&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Word (поля, уже имеющиеся в датаседе бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата MSWord. Документ-шаблон &amp;amp;ndash; это обычный документ MSWord, содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Word-поля»'' типа «Формула» (в Word &amp;amp;ndash; пункт меню «Вставка» - «Поле…» - «Формула…»).&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляется «Формула», содержащая имена соответствующих датасета и поля в ГБ.&lt;br /&gt;
&lt;br /&gt;
Границы бэндов в шаблоне обозначаются полями с ключевыми словами:&lt;br /&gt;
 $GBDataSetBegin.XXX (начало бэнда)&lt;br /&gt;
 $GBDataSetEnd.XXX (конец бэнда)&lt;br /&gt;
где XXX &amp;amp;ndash; имя датасета данного бэнда в ГБ.&lt;br /&gt;
&lt;br /&gt;
Внутри бэнда располагаются поля, принадлежащие ему. Поля обозначаются ключевым словом $GBField.XXX.YYY, где XXX &amp;amp;ndash; имя датасета данного бэнда, YYY &amp;amp;ndash; имя поля в данном датасете, например:&lt;br /&gt;
 $GBField.DataSet.DocNumber&lt;br /&gt;
Кроме имён полей можно использовать функции ГБ, например:&lt;br /&gt;
  $GBField.DataSet.FormatDate(`YYYY-MM-DD`,DocDate)&lt;br /&gt;
&lt;br /&gt;
Необходимо соблюдать вложенность бэндов в шаблоне. Например, внешний бэнд для основных полей документа (DataSet) и вложенный в него источник товарных строчек документа (Goodies):&lt;br /&gt;
&lt;br /&gt;
 $GBDataSetBegin.DataSet&lt;br /&gt;
  $GBField.DataSet.DocNumber&lt;br /&gt;
   $GBDataSetBegin.Goodies&lt;br /&gt;
    $GBField.Goodies.Articul.Name&lt;br /&gt;
   $GBDataSetEnd.Goodies&lt;br /&gt;
 $GBDataSetEnd.DataSet&lt;br /&gt;
&lt;br /&gt;
В документах-шаблонах MSWord для вывода значений из ГБ «поля-формулы» используются как в обычном тексте, так и в ячейках таблиц.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Печать в LibreOffice Writer из ГБ ==&lt;br /&gt;
&lt;br /&gt;
'''''Для экспорта данных из ПФ в документ Writer необходимо'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую печатную форму, выбрав вид формы «Word-овая».&lt;br /&gt;
# В редакторе печатных форм в свойствах формы задать имя файла-шаблона (тип odt) и, если нужно, имя файла-результата. Если отмечен чекбокс «Как файл», файл-шаблон будет внедрён в печатную форму (чекбокс «Внедрить» для печатных форм Writer неприменим из-за особенностей реализации LibreOffice).&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
'''''Структура печатной формы'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов &amp;amp;ndash; «Custom».&lt;br /&gt;
# В каждом бэнде определяются поля, необходимые для передачи в документ Writer (поля, уже имеющиеся в датаседе бэнда переопределять не нужно).&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата Writer (odt). Документ-шаблон &amp;amp;ndash; это обычный документ Writer (odt), содержащий текст, таблицы, рисунки и пр., в котором для указания границ бэндов и последующего вывода данных из ГБ используются ''«Writer-поля»'' типа «Поле пользователя». Для вставки такого поля нужно во Writer открыть пункт меню «Вставка» - «Поле…» - «Ещё поля…» (или Ctrl+F2) и переключиться на вкладку «Переменные».&lt;br /&gt;
&amp;lt;br&amp;gt;Затем добавляются поля. Для каждого такого поля нужно выбрать тип «Поля пользователя», формат «Текст», задать «Имя» (произвольное, не связано с именами в ГБ) и «Значение», содержащее имена датасета и поля в ГБ.&lt;br /&gt;
&amp;lt;br&amp;gt;Таким образом в том месте документа, в котором нужно обозначить границу бэнда или вывести значение какого-то поля из ГБ, вставляется «Поле пользователя», содержащее имена соответствующих датасета и поля в ГБ.&lt;br /&gt;
&lt;br /&gt;
Ключевые слова для границ бэндов и полей, правила вложенности бэндов, возможность использования функций ГБ для полей и т.п. аналогичны таковым для печатных форм MS Word (см. выше).&lt;br /&gt;
&lt;br /&gt;
Примечание.&lt;br /&gt;
В отличие от шаблонов Word, в документах-шаблонах Writer «Поля пользователя» используются только в обычном тексте, а ячейках таблиц нужно использовать текстовое описание поля (т.е. вместо вставки «Writer-поля» со значением $GBField.DataSet.DocNumber&amp;quot; нужно вставить само это значение в виде обычного текста.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Наименование товара&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Артикул&lt;br /&gt;
|-&lt;br /&gt;
|$GBField.Goodies.SArtName&lt;br /&gt;
|$GBField.Goodies.SNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[:File:Пример шаблона MsWord.doc|Пример файла-шаблона для MS Word]]&lt;br /&gt;
&amp;lt;br&amp;gt;[[:File:Пример_ПФ_для_Writer.txt|Пример печатной формы для Writer]]&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3260</id>
		<title>Печать в MSWord и Open Office Writer</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3260"/>
				<updated>2022-03-05T09:33:11Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Печатные формы]]&lt;br /&gt;
&lt;br /&gt;
== Печать в MSWord из ГБ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Для создания Word-ой формы необходимо:'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую форму, выбрать вид формы Word-овая.&lt;br /&gt;
# В редакторе печатных форм в свойствах формы (свойства элемента: TGBWordReport) задать имя файла-шаблона, имя файла-результата. Если отмечена галочка «Внедрить», содержимое файла-шаблона сохранится в печатной форме.&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Для формирования печатной формы:'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов – Custom.&lt;br /&gt;
# В каждом бэнде определяем поля, необходимые для передачи в документ Word.&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон:'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата MSWord. В документе часть данных – константы, то есть текст, а часть – динамически изменяющиеся значения. В тех местах, где должны выводиться эти значения, вставляются поля (пункт меню «Вставка» - «Поле…» - «Формула…»).&lt;br /&gt;
&lt;br /&gt;
Поле должно иметь следующий вид:&lt;br /&gt;
* Для описания начала датасета – $GBDataSetBegin.DataSet.&lt;br /&gt;
* Для описания поля (хранящего переданное из ГБ значение) – $GBField.DataSet.SName.&lt;br /&gt;
* Для описания конца датасета - $GBDataSetEnd.DataSet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Необходимо соблюдать вложенность бэндов в шаблоне. Например источник товарных строчек документа должен быть «вложен» в границы описания источника полей документа.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
$GBDataSetBegin.DataSet&lt;br /&gt;
:$GBField.DataSet.SDocNum&lt;br /&gt;
::$GBDataSetBegin.Goodies&lt;br /&gt;
:::$GBField.Goodies.SArt&lt;br /&gt;
::$GBDataSetEnd.Goodies&lt;br /&gt;
$GBDataSetEnd.DataSet&lt;br /&gt;
&lt;br /&gt;
В данном примере поля SDocNum, SArt определены в соответствующих бэндах печатной формы. Отступы приведены для наглядности, поля могут располагаться в любом месте строки.&lt;br /&gt;
&lt;br /&gt;
== Печать в LibreOffice Writer из ГБ ==&lt;br /&gt;
&lt;br /&gt;
'''''Для осуществления экспорта данных из ПФ в документ Writer необходимо:'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую форму, выбрать вид формы Word-овая.&lt;br /&gt;
# Настройка печатной формы в ГБ аналогична настройки формы для экспорта в MSWord.&lt;br /&gt;
&lt;br /&gt;
Файл-шаблон:&lt;br /&gt;
&lt;br /&gt;
# В поле «Имя файла-шаблона» указать файл с расширением «odt». &lt;br /&gt;
# Создается документ-шаблон в Writer. &lt;br /&gt;
&lt;br /&gt;
Для передачи полей из ПФ используются поля двух типов: &lt;br /&gt;
* Поле пользователя&lt;br /&gt;
* Поле подстановки&lt;br /&gt;
&lt;br /&gt;
Формат для обоих типов полей «текст». Значения полей аналогичнs значениям полей в шаблоне формата MSWord.&lt;br /&gt;
&lt;br /&gt;
Пример: $GBDataSetBegin.DataSet&lt;br /&gt;
&lt;br /&gt;
Так же необходимо сохранять вложенность бэндов.&lt;br /&gt;
&lt;br /&gt;
ПРИМЕЧАНИЕ:&lt;br /&gt;
&lt;br /&gt;
Для вывода данных из ГБ в созданную в шаблоне таблицу поля вставлять не нужно, а описывать передаваемые из ГБ поля текстом.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Наименование товара&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Артикул&lt;br /&gt;
|-&lt;br /&gt;
|$GBDataSet.Goodies.SArtName&lt;br /&gt;
|$GBDataSet.Goodies.SNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Пример шаблона MsWord.doc]]&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3259</id>
		<title>Печать в MSWord и Open Office Writer</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9F%D0%B5%D1%87%D0%B0%D1%82%D1%8C_%D0%B2_MSWord_%D0%B8_Open_Office_Writer&amp;diff=3259"/>
				<updated>2022-03-05T07:18:29Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: /* Печать в MSWord из ГБ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Печатные формы]]&lt;br /&gt;
&lt;br /&gt;
== Печать в MSWord из ГБ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Для создания Word-ой формы необходимо:'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую форму, выбрать вид формы Word-овая.&lt;br /&gt;
# В редакторе печатных форм в свойствах формы (свойства элемента: TGBWordReport) задать имя файла-шаблона, имя файла-результата. Если отмечена галочка «Внедрить», содержимое файла-шаблона сохранится в печатной форме.&lt;br /&gt;
Остальные параметры установить как для основной печатной формы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Для формирования печатной формы:'''''&lt;br /&gt;
&lt;br /&gt;
# В ПФ должны располагаться все необходимые [[Бэнд|бэнды]] для вывода нужной информации. Тип бэндов – Custom.&lt;br /&gt;
# В каждом бэнде определяем поля, необходимые для передачи в документ Word.&lt;br /&gt;
&lt;br /&gt;
'''''Файл-шаблон:'''''&lt;br /&gt;
&lt;br /&gt;
Создается документ-шаблон формата MSWord. В документе часть данных – константы, то есть текст, а часть – динамически изменяющиеся значения. В тех местах, где должны выводиться эти значения, вставляются поля (пункт меню «Вставка» - «Поле…» - «Формула…»).&lt;br /&gt;
&lt;br /&gt;
Поле должно иметь следующий вид:&lt;br /&gt;
* Для описания начала датасета – $GBDataSetBegin.DataSet.&lt;br /&gt;
* Для описания поля (хранящего переданное из ГБ значение) – $GBField.DataSet.SName.&lt;br /&gt;
* Для описания конца датасета - $GBDataSetEnd.DataSet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Необходимо соблюдать вложенность бэндов в шаблоне. Например источник товарных строчек документа должен быть «вложен» в границы описания источника полей документа.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
$GBDataSetBegin.DataSet&lt;br /&gt;
:$GBField.DataSet.SDocNum&lt;br /&gt;
::$GBDataSetBegin.Goodies&lt;br /&gt;
:::$GBField.Goodies.SArt&lt;br /&gt;
::$GBDataSetEnd.Goodies&lt;br /&gt;
$GBDataSetEnd.DataSet&lt;br /&gt;
&lt;br /&gt;
В данном примере поля SDocNum, SArt определены в соответствующих бэндах печатной формы. Отступы приведены для наглядности, поля могут располагаться в любом месте строки.&lt;br /&gt;
&lt;br /&gt;
== Печать в OpenOffice.org Writer из ГБ ==&lt;br /&gt;
&lt;br /&gt;
'''''Для осуществления экспорта данных из ПФ в документ Writer необходимо:'''''&lt;br /&gt;
&lt;br /&gt;
# Создать новую форму, выбрать вид формы Word-овая.&lt;br /&gt;
# Настройка печатной формы в ГБ аналогична настройки формы для экспорта в MSWord.&lt;br /&gt;
&lt;br /&gt;
Файл-шаблон:&lt;br /&gt;
&lt;br /&gt;
# В поле «Имя файла-шаблона» указать файл с расширением «odt». &lt;br /&gt;
# Создается документ-шаблон в Writer. &lt;br /&gt;
&lt;br /&gt;
Для передачи полей из ПФ используются поля двух типов: &lt;br /&gt;
* Поле пользователя&lt;br /&gt;
* Поле подстановки&lt;br /&gt;
&lt;br /&gt;
Формат для обоих типов полей «текст». Значения полей аналогичнs значениям полей в шаблоне формата MSWord.&lt;br /&gt;
&lt;br /&gt;
Пример: $GBDataSetBegin.DataSet&lt;br /&gt;
&lt;br /&gt;
Так же необходимо сохранять вложенность бэндов.&lt;br /&gt;
&lt;br /&gt;
ПРИМЕЧАНИЕ:&lt;br /&gt;
&lt;br /&gt;
Для вывода данных из ГБ в созданную в шаблоне таблицу поля вставлять не нужно, а описывать передаваемые из ГБ поля текстом.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Наименование товара&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Артикул&lt;br /&gt;
|-&lt;br /&gt;
|$GBDataSet.Goodies.SArtName&lt;br /&gt;
|$GBDataSet.Goodies.SNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Пример шаблона MsWord.doc]]&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=JSON&amp;diff=3258</id>
		<title>JSON</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=JSON&amp;diff=3258"/>
				<updated>2022-02-22T07:16:06Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=JSON&lt;br /&gt;
|Описание=Формирование JSON из датасета или массива. Смотри также [[EVAL|парсинг JSON в массив]].&lt;br /&gt;
|Синтаксис=JSON('''Источник данных''', `nulls`)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Источник данных&lt;br /&gt;
 |Пояснение=датасет или ассоциативный массив, который требуется преобразовать в JSON&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=nulls&lt;br /&gt;
 |Пояснение=необязательный параметр. Если указана строка &amp;quot;nulls&amp;quot;, то поля датасета (или элементы массива), имеющие значение ''null'', попадают в получаемый текст JSON. Если параметр не передан, поля со значением ''null'' в получаемом тексте JSON отсутствуют.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Текст JSON&lt;br /&gt;
|Пример=&lt;br /&gt;
Формирование JSON из массива, в котором элементы со значением ''null'' присутствуют&lt;br /&gt;
 '''JSON'''( [ `a` : 1, `b` : `текст`, `c` : 1/0 ], `nulls` )&lt;br /&gt;
Результат:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&amp;quot;a&amp;quot;:1,&amp;quot;b&amp;quot;:&amp;quot;текст&amp;quot;,&amp;quot;c&amp;quot;:null}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формирование JSON из датасета, в котором элементы со значением ''null'' отсутствуют&lt;br /&gt;
 '''JSON'''( CreateDataSet(`ds`, [`a` : 1, `b` : `текст`, `c` : 1/0]) )&lt;br /&gt;
Результат:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&amp;quot;a&amp;quot;:1,&amp;quot;b&amp;quot;:&amp;quot;текст&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=JSON&amp;diff=3257</id>
		<title>JSON</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=JSON&amp;diff=3257"/>
				<updated>2022-02-22T07:15:22Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=JSON&lt;br /&gt;
|Описание=Формирование JSON из датасета или массива. Смотри также [[EVAL|парсинг JSON в массив]].&lt;br /&gt;
|Синтаксис=JSON('''Источник данных''', `nulls`)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Источник данных&lt;br /&gt;
 |Пояснение=датасет или ассоциативный массив, который требуется преобразовать в JSON&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=nulls&lt;br /&gt;
 |Пояснение=необязательный параметр. Если указана строка &amp;quot;nulls&amp;quot;, то поля датасета (или элементы массива), имеющие значение ''null'', попадают в получаемый текст JSON. Если параметр не передан, поля со значением ''null'' в получаемом тексте JSON отсутствуют.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Текст JSON&lt;br /&gt;
|Пример=&lt;br /&gt;
Формирование JSON из массива, в котором элементы со значением ''null'' присутствуют&lt;br /&gt;
 '''JSON'''( [ `a` : 1,`b` : `текст`,`c`:1/0 ],`nulls` )&lt;br /&gt;
Результат:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&amp;quot;a&amp;quot;:1,&amp;quot;b&amp;quot;:&amp;quot;текст&amp;quot;,&amp;quot;c&amp;quot;:null}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формирование JSON из датасета, в котором элементы со значением ''null'' отсутствуют&lt;br /&gt;
 '''JSON'''( CreateDataSet(`ds`, [`a` : 1, `b` : `текст`, `c` : 1/0]) )&lt;br /&gt;
Результат:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&amp;quot;a&amp;quot;:1,&amp;quot;b&amp;quot;:&amp;quot;текст&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=JSON&amp;diff=3256</id>
		<title>JSON</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=JSON&amp;diff=3256"/>
				<updated>2022-02-22T07:14:03Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: Новая страница: «{{Функция ГБ |Название=JSON |Описание=Формирование JSON из датасета или массива. |Синтаксис=JSON…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=JSON&lt;br /&gt;
|Описание=Формирование JSON из датасета или массива.&lt;br /&gt;
|Синтаксис=JSON('''Источник данных''', `nulls`)&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Источник данных&lt;br /&gt;
 |Пояснение=датасет или ассоциативный массив, который требуется преобразовать в JSON&lt;br /&gt;
}}&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=nulls&lt;br /&gt;
 |Пояснение=необязательный параметр. Если указана строка &amp;quot;nulls&amp;quot;, то поля датасета (или элементы массива), имеющие значение ''null'', попадают в получаемый текст JSON. Если параметр не передан, поля со значением ''null'' в получаемом тексте JSON отсутствуют.&lt;br /&gt;
}}&lt;br /&gt;
|Результат=Текст JSON&lt;br /&gt;
Смотрите также [[EVAL|парсинг JSON в массив]]&lt;br /&gt;
|Пример=&lt;br /&gt;
Формирование JSON из массива, в котором элементы со значением ''null'' присутствуют&lt;br /&gt;
 '''JSON'''( [ `a` : 1,`b` : `текст`,`c`:1/0 ],`nulls` )&lt;br /&gt;
Результат:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&amp;quot;a&amp;quot;:1,&amp;quot;b&amp;quot;:&amp;quot;текст&amp;quot;,&amp;quot;c&amp;quot;:null}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формирование JSON из датасета, в котором элементы со значением ''null'' отсутствуют&lt;br /&gt;
 '''JSON'''( CreateDataSet(`ds`, [`a` : 1, `b` : `текст`, `c` : 1/0]) )&lt;br /&gt;
Результат:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&amp;quot;a&amp;quot;:1,&amp;quot;b&amp;quot;:&amp;quot;текст&amp;quot;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=CREATEDATASET&amp;diff=3255</id>
		<title>CREATEDATASET</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=CREATEDATASET&amp;diff=3255"/>
				<updated>2022-01-13T07:07:23Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=CREATEDATASET&lt;br /&gt;
|Описание=Создает датасет заданной структуры. Созданный датасет состоит из одной записи, поля и их значения определяются параметрами процедуры. Обычно используется для создания датасета параметров для функций AttachDataSet, OpenDataSet.&lt;br /&gt;
|Синтаксис=CREATEDATASET('''Имя датасета''','''Описание структуры и значений''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Имя датасета&lt;br /&gt;
 |Пояснение=строка, определяющая имя создаваемого датасета.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Описание структуры и значений&lt;br /&gt;
 |Пояснение=строка, определяющая структуру датасета и значения его полей. Каждое поле описывается в виде: Имя поля,Тип,сущность,подпись=&amp;quot;Значение&amp;quot;.  Описания полей между собой разделяются символом &amp;quot;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;quot;. Типы полей обозначаются буквами: I,F,D,S,B&amp;lt;BR&amp;gt;Начиная с версии ГБ 1.7.1.12 описание полей и значений можно передавать в виде ассоциативного массива:['Имя поля,Тип':'Значение','Имя поля,Тип':'Значение'].&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;Если в данном параметре указать имя другого датасета, то его данные будут скопированы в датасет, заданный в первом параметре, причём вычисляемые поля станут обычными (пригодится для передачи полей в процедуры)&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Копирование датасета dsFrom в dsTo с преобразованием вычисляемых полей в обычные:&lt;br /&gt;
 CreateDataSet(`dsTo`,`dsFrom`)&lt;br /&gt;
Создание датасета с описанием структуры в виде строки:&lt;br /&gt;
 CREATEDATASET('PParams','Node,I=&amp;quot;0&amp;quot;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;IStocks,S=&amp;quot;4353;6659&amp;quot;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;IOnDate,D=&amp;quot;01.01.2001&amp;quot;')&lt;br /&gt;
Создание датасета с описанием в виде ассоциативного массива:&lt;br /&gt;
 CREATEDATASET('PParams',['Node,I':'0','IStocks,S':'4353;6659','IOnDate,D':'01.01.2001'])&lt;br /&gt;
}}&lt;br /&gt;
'''Замечания''' &lt;br /&gt;
*Если эта функция используется в добавленной колонке, то вместо символа &amp;quot;;&amp;quot; нужно использовать функцию Char(59). &lt;br /&gt;
*Замечание: Строку, описывающую датасет, можно легко получить, запустив ГБ с ключом –packetlog (-packetlogfile) и выполнив нужный отчет. Параметры процедуры пишутся в лог в таком же формате.&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=CREATEDATASET&amp;diff=3254</id>
		<title>CREATEDATASET</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=CREATEDATASET&amp;diff=3254"/>
				<updated>2022-01-13T07:06:43Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=CREATEDATASET&lt;br /&gt;
|Описание=Создает датасет заданной структуры. Созданный датасет состоит из одной записи, поля и их значения определяются параметрами процедуры. Обычно используется для создания датасета параметров для функций AttachDataSet, OpenDataSet.&lt;br /&gt;
|Синтаксис=CREATEDATASET('''Имя датасета''','''Описание структуры и значений''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Имя датасета&lt;br /&gt;
 |Пояснение=строка, определяющая имя создаваемого датасета.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Описание структуры и значений&lt;br /&gt;
 |Пояснение=строка, определяющая структуру датасета и значения его полей. Каждое поле описывается в виде: Имя поля,Тип,сущность,подпись=&amp;quot;Значение&amp;quot;.  Описания полей между собой разделяются символом &amp;quot;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;quot;. Типы полей обозначаются буквами: I,F,D,S,B&amp;lt;BR&amp;gt;Начиная с версии ГБ 1.7.1.12 описание полей и значений можно передавать в виде ассоциативного массива:['Имя поля,Тип':'Значение','Имя поля,Тип':'Значение'].&lt;br /&gt;
&amp;lt;BR&amp;gt;Если в данном параметре указать имя другого датасета, то его данные будут скопированы в датасет, заданный в первом параметре, причём вычисляемые поля станут обычными (пригодится для передачи полей в процедуры)&lt;br /&gt;
}}&lt;br /&gt;
|Пример=Копирование датасета dsFrom в dsTo с преобразованием вычисляемых полей в обычные:&lt;br /&gt;
 CreateDataSet(`dsTo`,`dsFrom`)&lt;br /&gt;
Создание датасета с описанием структуры в виде строки:&lt;br /&gt;
 CREATEDATASET('PParams','Node,I=&amp;quot;0&amp;quot;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;IStocks,S=&amp;quot;4353;6659&amp;quot;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;IOnDate,D=&amp;quot;01.01.2001&amp;quot;')&lt;br /&gt;
Создание датасета с описанием в виде ассоциативного массива:&lt;br /&gt;
 CREATEDATASET('PParams',['Node,I':'0','IStocks,S':'4353;6659','IOnDate,D':'01.01.2001'])&lt;br /&gt;
}}&lt;br /&gt;
'''Замечания''' &lt;br /&gt;
*Если эта функция используется в добавленной колонке, то вместо символа &amp;quot;;&amp;quot; нужно использовать функцию Char(59). &lt;br /&gt;
*Замечание: Строку, описывающую датасет, можно легко получить, запустив ГБ с ключом –packetlog (-packetlogfile) и выполнив нужный отчет. Параметры процедуры пишутся в лог в таком же формате.&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8&amp;diff=3253</id>
		<title>Автообновление версии</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8&amp;diff=3253"/>
				<updated>2021-12-22T07:36:27Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: /* Описание */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Касса]]&lt;br /&gt;
&lt;br /&gt;
Имеется возможность автоматического обновления приложения &amp;quot;ГБ Касса&amp;quot;, файла настроек GbReg.ini, а также файла с настройками таблиц gbRegGrids.ini.&lt;br /&gt;
&lt;br /&gt;
Автообновление приложения осуществляется с HTTP сервера. Для настройки функции автообновления нужно в файл GbReg.ini добавить секцию [AutoUpdate] и настроить ряд параметров.&lt;br /&gt;
&lt;br /&gt;
==== Секция AutoUpdate ====&lt;br /&gt;
 [AutoUpdate]&lt;br /&gt;
 Enabled=1&lt;br /&gt;
 Version_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/update/version.txt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 EXE_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/update/GbReg.zip&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 INI_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/update/ini.txt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 GRIDS_INI_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/update/gridsini.txt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 REPORT_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/post.php&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 iniversion=1.2&lt;br /&gt;
 Downloaded=2.1.1.10&lt;br /&gt;
&lt;br /&gt;
===== Описание параметров =====&lt;br /&gt;
* '''Enabled'''&amp;lt;br&amp;gt;1 - разрешает автообновление; 0 - запрещает автообновление&lt;br /&gt;
* '''Version_URL'''&amp;lt;br&amp;gt;Адрес, путь к файлу [[#Пример файла version.txt|version.txt]]. В этом файле содержится информация о версии GbReg.exe, версии файла настроек GbReg.ini, а так же список складов, для которых разрешено выполнить данное обновление.&lt;br /&gt;
* '''EXE_URL'''&amp;lt;br&amp;gt;Адрес, путь к файлу GbReg.zip. Архив файла GbReg.exe. Формат архива - только ZIP.&lt;br /&gt;
* '''INI_URL'''&amp;lt;br&amp;gt;Адрес, путь к файлу [[#Пример файла ini.txt|ini.txt]]. Файл ini.txt не является полной версией файла GbReg.ini, а содержит только те секции и параметры с их значениями, которые нужно изменить.&lt;br /&gt;
* '''GRIDS_INI_URL'''&amp;lt;br&amp;gt;Адрес, путь к файлу gridsini.txt. Файл gridsini.txt является '''полной версией''' файла gbRegGrids.ini и при обновлении заменяется полностью.&lt;br /&gt;
* '''REPORT_URL'''&amp;lt;br&amp;gt;Адрес, путь к скрипту post.php. После завершения процесса обновления на сервер посылается [[#Формат сообщения|сообщение]] об этом.&lt;br /&gt;
* '''iniversion'''&amp;lt;br&amp;gt;Номер версии обновлений, применённых для файла GbReg.ini. Значение этого параметра устанавливается автоматически.&lt;br /&gt;
* '''Downloaded'''&amp;lt;br&amp;gt;Номер версии файла GbReg.exe после последнего обновления. Значение этого параметра устанавливается автоматически.&lt;br /&gt;
&lt;br /&gt;
==== Пример файла version.txt ====&lt;br /&gt;
 version=2.1.1.11&lt;br /&gt;
 iniversion=1.3&lt;br /&gt;
 gridsiniversion=1.1&lt;br /&gt;
 stocks=10;11;12&lt;br /&gt;
&lt;br /&gt;
===== Описание =====&lt;br /&gt;
* '''version'''&amp;lt;br&amp;gt;Номер версии файла GbReg.exe, который заархивирован и расположен на сервере.&lt;br /&gt;
* '''iniversion'''&amp;lt;br&amp;gt;Номер версии изменений для GbReg.ini, которые расположены на сервере в файле ini.txt.&lt;br /&gt;
* '''gridsiniversion'''&amp;lt;br&amp;gt;Номер версии для gbRegGrids.ini, которая расположена на сервере в файле gridsini.txt.&lt;br /&gt;
* '''stocks'''&amp;lt;br&amp;gt;Список кодов складов (через &amp;quot;;&amp;quot;), для которых разрешено применить данное обновление. Вместо списка допустимо указать символ звёздочки &amp;quot;*&amp;quot; или оставить пустое значение. В этом случае обновления разрешены для всех складов.&lt;br /&gt;
&lt;br /&gt;
==== Пример файла ini.txt ====&lt;br /&gt;
 [DocParams]&lt;br /&gt;
 Firm=12345&lt;br /&gt;
 Stock=123&lt;br /&gt;
&lt;br /&gt;
===== Описание =====&lt;br /&gt;
В этом примере при обновлении в файле GbReg.ini в секции [DocParams] будут изменены значения параметров Firm и Stock.&lt;br /&gt;
&lt;br /&gt;
==== Формат сообщения ====&lt;br /&gt;
После завершения процесса обновления на сервер посылается сообщение, содержащее значения следующих полей:&lt;br /&gt;
 version=&lt;br /&gt;
 iniversion=&lt;br /&gt;
 stock=&lt;br /&gt;
 depot=&lt;br /&gt;
 ecrnum=&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8&amp;diff=3252</id>
		<title>Автообновление версии</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8&amp;diff=3252"/>
				<updated>2021-12-22T07:34:59Z</updated>
		
		<summary type="html">&lt;p&gt;Alexey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Касса]]&lt;br /&gt;
&lt;br /&gt;
Имеется возможность автоматического обновления приложения &amp;quot;ГБ Касса&amp;quot;, файла настроек GbReg.ini, а также файла с настройками таблиц gbRegGrids.ini.&lt;br /&gt;
&lt;br /&gt;
Автообновление приложения осуществляется с HTTP сервера. Для настройки функции автообновления нужно в файл GbReg.ini добавить секцию [AutoUpdate] и настроить ряд параметров.&lt;br /&gt;
&lt;br /&gt;
==== Секция AutoUpdate ====&lt;br /&gt;
 [AutoUpdate]&lt;br /&gt;
 Enabled=1&lt;br /&gt;
 Version_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/update/version.txt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 EXE_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/update/GbReg.zip&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 INI_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/update/ini.txt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 GRIDS_INI_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/update/gridsini.txt&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 REPORT_URL=&amp;lt;nowiki&amp;gt;http://192.168.100.1/gbreg/post.php&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 iniversion=1.2&lt;br /&gt;
 Downloaded=2.1.1.10&lt;br /&gt;
&lt;br /&gt;
===== Описание параметров =====&lt;br /&gt;
* '''Enabled'''&amp;lt;br&amp;gt;1 - разрешает автообновление; 0 - запрещает автообновление&lt;br /&gt;
* '''Version_URL'''&amp;lt;br&amp;gt;Адрес, путь к файлу [[#Пример файла version.txt|version.txt]]. В этом файле содержится информация о версии GbReg.exe, версии файла настроек GbReg.ini, а так же список складов, для которых разрешено выполнить данное обновление.&lt;br /&gt;
* '''EXE_URL'''&amp;lt;br&amp;gt;Адрес, путь к файлу GbReg.zip. Архив файла GbReg.exe. Формат архива - только ZIP.&lt;br /&gt;
* '''INI_URL'''&amp;lt;br&amp;gt;Адрес, путь к файлу [[#Пример файла ini.txt|ini.txt]]. Файл ini.txt не является полной версией файла GbReg.ini, а содержит только те секции и параметры с их значениями, которые нужно изменить.&lt;br /&gt;
* '''GRIDS_INI_URL'''&amp;lt;br&amp;gt;Адрес, путь к файлу gridsini.txt. Файл gridsini.txt является '''полной версией''' файла gbRegGrids.ini и при обновлении заменяется полностью.&lt;br /&gt;
* '''REPORT_URL'''&amp;lt;br&amp;gt;Адрес, путь к скрипту post.php. После завершения процесса обновления на сервер посылается [[#Формат сообщения|сообщение]] об этом.&lt;br /&gt;
* '''iniversion'''&amp;lt;br&amp;gt;Номер версии обновлений, применённых для файла GbReg.ini. Значение этого параметра устанавливается автоматически.&lt;br /&gt;
* '''Downloaded'''&amp;lt;br&amp;gt;Номер версии файла GbReg.exe после последнего обновления. Значение этого параметра устанавливается автоматически.&lt;br /&gt;
&lt;br /&gt;
==== Пример файла version.txt ====&lt;br /&gt;
 version=2.1.1.11&lt;br /&gt;
 iniversion=1.3&lt;br /&gt;
 gridsiniversion=1.1&lt;br /&gt;
 stocks=10;11;12&lt;br /&gt;
&lt;br /&gt;
===== Описание =====&lt;br /&gt;
* '''version'''&amp;lt;br&amp;gt;Номер версии файла GbReg.exe, который заархивирован и расположен на сервере.&lt;br /&gt;
* '''iniversion'''&amp;lt;br&amp;gt;Номер версии изменений для GbReg.ini, которые расположены на сервере в файле ini.txt.&lt;br /&gt;
* '''gridsiniversion'''&amp;lt;br&amp;gt;Номер версии изменений для gbRegGrids.ini, которые расположены на сервере в файле gridsini.txt.&lt;br /&gt;
* '''stocks'''&amp;lt;br&amp;gt;Список кодов складов (через &amp;quot;;&amp;quot;), для которых разрешено применить данное обновление. Вместо списка допустимо указать символ звёздочки &amp;quot;*&amp;quot; или оставить пустое значение. В этом случае обновления разрешены для всех складов.&lt;br /&gt;
&lt;br /&gt;
==== Пример файла ini.txt ====&lt;br /&gt;
 [DocParams]&lt;br /&gt;
 Firm=12345&lt;br /&gt;
 Stock=123&lt;br /&gt;
&lt;br /&gt;
===== Описание =====&lt;br /&gt;
В этом примере при обновлении в файле GbReg.ini в секции [DocParams] будут изменены значения параметров Firm и Stock.&lt;br /&gt;
&lt;br /&gt;
==== Формат сообщения ====&lt;br /&gt;
После завершения процесса обновления на сервер посылается сообщение, содержащее значения следующих полей:&lt;br /&gt;
 version=&lt;br /&gt;
 iniversion=&lt;br /&gt;
 stock=&lt;br /&gt;
 depot=&lt;br /&gt;
 ecrnum=&lt;/div&gt;</summary>
		<author><name>Alexey</name></author>	</entry>

	</feed>