1
0
mirror of https://github.com/ilko-os/1c-additional-data-processor-template.git synced 2026-04-25 01:01:35 +02:00

first commit

This commit is contained in:
Ilya Konchakov
2026-01-16 11:37:23 +03:00
commit 4c378ceb82
23 changed files with 10404 additions and 0 deletions
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>ШаблонДополнительнойОбработки</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ExternalObjectsNature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,2 @@
com._1c.g5.v8.dt.platform.services.core.PREF_AUTO_EXT_OBJECT_DUMP_GENERATION=true
eclipse.preferences.version=1
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
topObjects=true
@@ -0,0 +1,3 @@
addModuleStrictTypesAnnotation=false
createModuleStructure=false
eclipse.preferences.version=1
@@ -0,0 +1,3 @@
commonChecks=true
eclipse.preferences.version=1
standardChecks=true
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8
@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Runtime-Version: 8.5.1
Base-Project: БСПШаблонДополнительнойОбработки
@@ -0,0 +1,606 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:Table">
<name>СписокЭлементов</name>
<id>1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СписокЭлементов</segments>
</dataPath>
<titleLocation>None</titleLocation>
<items xsi:type="form:FormField">
<name>СписокЭлементовЗначение</name>
<id>14</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СписокЭлементов.Value</segments>
</dataPath>
<extendedTooltip>
<name>СписокЭлементовЗначениеРасширеннаяПодсказка</name>
<id>16</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокЭлементовЗначениеКонтекстноеМеню</name>
<id>15</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>EnterOnInput</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<handlers>
<event>StartChoice</event>
<name>СписокЭлементовЗначениеНачалоВыбора</name>
</handlers>
<handlers>
<event>ChoiceProcessing</event>
<name>СписокЭлементовЗначениеОбработкаВыбора</name>
</handlers>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<choiceButton>true</choiceButton>
<clearButton>false</clearButton>
<choiceFoldersAndItems>FoldersAndItems</choiceFoldersAndItems>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<autoCommandBar>
<name>СписокЭлементовКоманднаяПанель</name>
<id>3</id>
<items xsi:type="form:Button">
<name>СписокЭлементовДобавить</name>
<id>17</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СписокЭлементовДобавитьРасширеннаяПодсказка</name>
<id>18</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.СписокЭлементов.StandardCommand.Add</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>PictureAndText</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>СписокЭлементовПодбор</name>
<id>19</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СписокЭлементовПодборРасширеннаяПодсказка</name>
<id>20</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.СписокЭлементов.StandardCommand.Pickup</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>СписокЭлементовСкопировать</name>
<id>27</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СписокЭлементовСкопироватьРасширеннаяПодсказка</name>
<id>28</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.СписокЭлементов.StandardCommand.Copy</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Picture</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>СписокЭлементовУдалить</name>
<id>21</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СписокЭлементовУдалитьРасширеннаяПодсказка</name>
<id>22</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.СписокЭлементов.StandardCommand.Delete</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Picture</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>СписокЭлементовПереместитьВверх</name>
<id>23</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СписокЭлементовПереместитьВверхРасширеннаяПодсказка</name>
<id>24</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.СписокЭлементов.StandardCommand.MoveUp</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>СписокЭлементовПереместитьВниз</name>
<id>25</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СписокЭлементовПереместитьВнизРасширеннаяПодсказка</name>
<id>26</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.СписокЭлементов.StandardCommand.MoveDown</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>СписокЭлементовКомандаОчистить</name>
<id>41</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СписокЭлементовКомандаОчиститьРасширеннаяПодсказка</name>
<id>42</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.КомандаОчистить</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<searchStringAddition>
<name>СписокЭлементовСтрокаПоиска</name>
<id>5</id>
<extendedTooltip>
<name>СписокЭлементовСтрокаПоискаРасширеннаяПодсказка</name>
<id>7</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокЭлементовСтрокаПоискаКонтекстноеМеню</name>
<id>6</id>
<autoFill>true</autoFill>
</contextMenu>
<source>СписокЭлементов</source>
<extInfo xsi:type="form:SearchStringAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchStringAddition>
<viewStatusAddition>
<name>СписокЭлементовСостояниеПросмотра</name>
<id>8</id>
<extendedTooltip>
<name>СписокЭлементовСостояниеПросмотраРасширеннаяПодсказка</name>
<id>10</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокЭлементовСостояниеПросмотраКонтекстноеМеню</name>
<id>9</id>
<autoFill>true</autoFill>
</contextMenu>
<type>ViewStatusAddition</type>
<source>СписокЭлементов</source>
<extInfo xsi:type="form:ViewStatusAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</viewStatusAddition>
<searchControlAddition>
<name>СписокЭлементовУправлениеПоиском</name>
<id>11</id>
<extendedTooltip>
<name>СписокЭлементовУправлениеПоискомРасширеннаяПодсказка</name>
<id>13</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокЭлементовУправлениеПоискомКонтекстноеМеню</name>
<id>12</id>
<autoFill>true</autoFill>
</contextMenu>
<type>SearchControlAddition</type>
<source>СписокЭлементов</source>
<extInfo xsi:type="form:SearchControlAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchControlAddition>
<extendedTooltip>
<name>СписокЭлементовРасширеннаяПодсказка</name>
<id>4</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокЭлементовКонтекстноеМеню</name>
<id>2</id>
<autoFill>true</autoFill>
</contextMenu>
<changeRowSet>true</changeRowSet>
<changeRowOrder>true</changeRowOrder>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<selectionMode>MultiRow</selectionMode>
<rowSelectionMode>Auto</rowSelectionMode>
<headerHeight>1</headerHeight>
<footerHeight>1</footerHeight>
<horizontalScrollBar>AutoUse</horizontalScrollBar>
<verticalScrollBar>AutoUse</verticalScrollBar>
<horizontalLines>true</horizontalLines>
<verticalLines>true</verticalLines>
<searchOnInput>Auto</searchOnInput>
<initialListView>Auto</initialListView>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<rowPictureDataPath xsi:type="form:DataPath">
<segments>СписокЭлементов.Picture</segments>
</rowPictureDataPath>
<autoMaxCardHeight>true</autoMaxCardHeight>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКоманднаяПанельНижняя</name>
<id>33</id>
<items xsi:type="form:Button">
<name>КнопкаОК</name>
<id>39</id>
<title>
<key>ru</key>
<value>ОК</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<defaultItem>true</defaultItem>
<extendedTooltip>
<name>КнопкаОКРасширеннаяПодсказка</name>
<id>40</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.КомандаОК</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<defaultButton>true</defaultButton>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>КомандаОтмена</name>
<id>37</id>
<title>
<key>ru</key>
<value>Отмена</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>КомандаОтменаРасширеннаяПодсказка</name>
<id>38</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Close</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа командная панель нижняя</value>
</title>
<toolTip>
<key>ru</key>
<value>Группа командная панель нижняя</value>
</toolTip>
<extendedTooltip>
<name>ГруппаКоманднаяПанельНижняяРасширеннаяПодсказка</name>
<id>34</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<horizontalAlign>Right</horizontalAlign>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<handlers>
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
</handlers>
<excludedCommands>Abort</excludedCommands>
<excludedCommands>Cancel</excludedCommands>
<excludedCommands>CustomizeForm</excludedCommands>
<excludedCommands>Help</excludedCommands>
<excludedCommands>Ignore</excludedCommands>
<excludedCommands>No</excludedCommands>
<excludedCommands>OK</excludedCommands>
<excludedCommands>RestoreValues</excludedCommands>
<excludedCommands>Retry</excludedCommands>
<excludedCommands>SaveValues</excludedCommands>
<excludedCommands>Yes</excludedCommands>
<width>50</width>
<saveWindowSettings>true</saveWindowSettings>
<autoUrl>true</autoUrl>
<group>Auto</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>auto</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Объект</name>
<id>1</id>
<valueType>
<types>ExternalDataProcessor.ШаблонДополнительнойОбработки</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<attributes>
<name>СписокЭлементов</name>
<title>
<key>ru</key>
<value>Список элементов</value>
</title>
<id>2</id>
<valueType>
<types>ValueList</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<extInfo xsi:type="form:ValueListExtInfo">
<itemValueType/>
</extInfo>
</attributes>
<attributes>
<name>ТипКонтейнера</name>
<title>
<key>ru</key>
<value>Тип контейнера</value>
</title>
<id>5</id>
<valueType>
<types>Number</types>
<numberQualifiers>
<precision>10</precision>
</numberQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПутьМетаданных</name>
<title>
<key>ru</key>
<value>Путь метаданных</value>
</title>
<id>3</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>КомандаОК</name>
<title>
<key>ru</key>
<value>Команда ОК</value>
</title>
<id>1</id>
<toolTip>
<key>ru</key>
<value>Команда ОК</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>КомандаОК</name>
</handler>
</action>
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>КомандаОчистить</name>
<title>
<key>ru</key>
<value>Очистить</value>
</title>
<id>2</id>
<toolTip>
<key>ru</key>
<value>Команда очистить</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>КомандаОчистить</name>
</handler>
</action>
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ObjectFormExtInfo"/>
</form:Form>
@@ -0,0 +1,170 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// КопироватьДанныеФормы(Параметры.Объект, Объект);
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
МетаданныеОбработки = ОбработкаОбъект.Метаданные();
// Получаем ссылку на обработку/отчет по имени.
ИмяОбработки = МетаданныеОбработки.Имя;
ПутьМетаданных = "ВнешняяОбработка." + ИмяОбработки;
ПереданныйСписокЭлементов = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(Параметры.Значение);
ТипКонтейнера = Параметры.ТипКонтейнера;
Если ТипКонтейнера = 2 Тогда
Заголовок = Параметры.Заголовок + " (массив)";
СписокЭлементов.ЗагрузитьЗначения(ПереданныйСписокЭлементов);
Иначе
Заголовок = Параметры.Заголовок + " (список значений)";
СписокЭлементов = ПереданныйСписокЭлементов;
КонецЕсли;
СписокЭлементов.ТипЗначения = Параметры.ТипЗначения;
маТипыБезПодбора = Новый Массив;
маТипыБезПодбора.Добавить(Тип("Число"));
маТипыБезПодбора.Добавить(Тип("Строка"));
маТипыБезПодбора.Добавить(Тип("Дата"));
маТипыБезПодбора.Добавить(Тип("Неопределено"));
маТипыБезПодбора.Добавить(Тип("Тип"));
маТипыБезПодбора.Добавить(Тип("ВидДвиженияНакопления"));
маТипыБезПодбора.Добавить(Тип("ВидДвиженияБухгалтерии"));
маТипыБезПодбора.Добавить(Тип("ВидСчета"));
маТипыБезПодбора.Добавить(Тип("УникальныйИдентификатор"));
маТипыБезПодбора.Добавить(Тип("NULL"));
ТипыБезПодбора = Новый ОписаниеТипов(маТипыБезПодбора);
маТипы = Параметры.ТипЗначения.Типы();
Элементы.СписокЭлементовПодбор.Видимость = Истина;
Для Каждого Тип Из маТипы Цикл
Если ТипыБезПодбора.СодержитТип(Тип) Тогда
Элементы.СписокЭлементовПодбор.Видимость = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция ПолноеИмяФормы(ИмяФормы)
Возврат СтрШаблон("%1.Форма.%2", Объект.ПутьМетаданных, ИмяФормы);
КонецФункции
&НаСервере
Функция ПолучитьВозвращаемоеЗначение()
Если ТипКонтейнера = 2 Тогда
Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(СписокЭлементов.ВыгрузитьЗначения());
КонецЕсли;
Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(СписокЭлементов);
КонецФункции
&НаКлиенте
Процедура КомандаОК(Команда)
ВозвращаемоеЗначение = Новый Структура("Значение", ПолучитьВозвращаемоеЗначение());
Закрыть(ВозвращаемоеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура КомандаОчистить(Команда)
СписокЭлементов.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьЗначение()
Значение = Элементы.СписокЭлементов.ТекущиеДанные.Значение;
Если ТипЗнч(Значение) = Тип("Тип") Тогда
ПараметрыОповещения = Новый Структура("Строка", Элементы.СписокЭлементов.ТекущаяСтрока);
//@skip-warning
ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияТипа", ЭтаФорма, ПараметрыОповещения);
Если ТипЗнч(Значение) <> Тип("Тип") Тогда
Значение = Тип("Неопределено");
КонецЕсли;
ПараметрыОткрытия = Новый Структура("Объект, ТипЗначения", Объект, Значение);
ОткрытьФорму(ПолноеИмяФормы("РедактированиеТипа"), ПараметрыОткрытия, ЭтаФорма, Истина, , , ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ИначеЕсли ТипЗнч(Значение) = Тип("УникальныйИдентификатор") Тогда
ПараметрыОповещения = Новый Структура("Строка", Элементы.СписокЭлементов.ТекущаяСтрока);
//@skip-warning
ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияТипа", ЭтаФорма, ПараметрыОповещения);
ПараметрыОткрытия = Новый Структура("Объект, Значение", Объект, Значение);
ОткрытьФорму(ПолноеИмяФормы("РедактированиеУникальногоИдентификатора"), ПараметрыОткрытия, ЭтаФорма, Истина, , , ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокЭлементовЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Значение = Элементы.СписокЭлементов.ТекущиеДанные.Значение;
ТипРедактируемогоЗначения = ТипЗнч(Значение);
Если ТипРедактируемогоЗначения = Тип("Тип") ИЛИ ТипРедактируемогоЗначения = Тип("УникальныйИдентификатор") Тогда
РедактироватьЗначение();
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокЭлементовЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ВыбранноеЗначение = Тип("Тип") Тогда
СписокЭлементов.НайтиПоИдентификатору(Элементы.СписокЭлементов.ТекущаяСтрока).Значение = Тип("Неопределено");
РедактироватьЗначение();
ИначеЕсли ВыбранноеЗначение = Тип("УникальныйИдентификатор") Тогда
СписокЭлементов.НайтиПоИдентификатору(Элементы.СписокЭлементов.ТекущаяСтрока).Значение = Новый УникальныйИдентификатор;
РедактироватьЗначение();
КонецЕсли;
КонецПроцедуры
Процедура ОкончаниеРедактированияТипа(Результат, ПараметрыОповещения) Экспорт
Перем Значение;
Если Результат <> Неопределено Тогда
Если Результат.Свойство("Значение", Значение) Тогда
СписокЭлементов.НайтиПоИдентификатору(ПараметрыОповещения.Строка).Значение = Значение;
Иначе
СписокЭлементов.НайтиПоИдентификатору(ПараметрыОповещения.Строка).Значение = Тип(Результат.ОписаниеКонтейнера.ИмяТипа);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
@@ -0,0 +1,545 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:Table">
<name>ТаблицаЗначений</name>
<id>1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ТаблицаЗначений</segments>
</dataPath>
<titleLocation>None</titleLocation>
<autoCommandBar>
<name>ТаблицаЗначенийКоманднаяПанель</name>
<id>3</id>
<items xsi:type="form:Button">
<name>ТаблицаКнопкаДобавить</name>
<id>31</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ТаблицаКнопкаДобавитьРасширеннаяПодсказка</name>
<id>32</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.ТаблицаЗначений.StandardCommand.Add</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>PictureAndText</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ТаблицаКнопкаСкопировать</name>
<id>33</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ТаблицаКнопкаСкопироватьРасширеннаяПодсказка</name>
<id>34</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.ТаблицаЗначений.StandardCommand.Copy</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Picture</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ТаблицаКнопкаУдалить</name>
<id>29</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ТаблицаКнопкаУдалитьРасширеннаяПодсказка</name>
<id>30</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.ТаблицаЗначений.StandardCommand.Delete</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Picture</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ТаблицаКнопкаПереместитьВниз</name>
<id>25</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ТаблицаКнопкаПереместитьВнизРасширеннаяПодсказка</name>
<id>26</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.ТаблицаЗначений.StandardCommand.MoveDown</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ТаблицаКнопкаПереместитьВверх</name>
<id>27</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ТаблицаКнопкаПереместитьВверхРасширеннаяПодсказка</name>
<id>28</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.ТаблицаЗначений.StandardCommand.MoveUp</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ТаблицаЗначенийКомандаОчистить</name>
<id>35</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ТаблицаЗначенийКомандаОчиститьРасширеннаяПодсказка</name>
<id>36</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.КомандаОчистить</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<searchStringAddition>
<name>ТаблицаЗначенийСтрокаПоиска</name>
<id>5</id>
<extendedTooltip>
<name>ТаблицаЗначенийСтрокаПоискаРасширеннаяПодсказка</name>
<id>7</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаЗначенийСтрокаПоискаКонтекстноеМеню</name>
<id>6</id>
<autoFill>true</autoFill>
</contextMenu>
<source>ТаблицаЗначений</source>
<extInfo xsi:type="form:SearchStringAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchStringAddition>
<viewStatusAddition>
<name>ТаблицаЗначенийСостояниеПросмотра</name>
<id>8</id>
<extendedTooltip>
<name>ТаблицаЗначенийСостояниеПросмотраРасширеннаяПодсказка</name>
<id>10</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаЗначенийСостояниеПросмотраКонтекстноеМеню</name>
<id>9</id>
<autoFill>true</autoFill>
</contextMenu>
<type>ViewStatusAddition</type>
<source>ТаблицаЗначений</source>
<extInfo xsi:type="form:ViewStatusAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</viewStatusAddition>
<searchControlAddition>
<name>ТаблицаЗначенийУправлениеПоиском</name>
<id>11</id>
<extendedTooltip>
<name>ТаблицаЗначенийУправлениеПоискомРасширеннаяПодсказка</name>
<id>13</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаЗначенийУправлениеПоискомКонтекстноеМеню</name>
<id>12</id>
<autoFill>true</autoFill>
</contextMenu>
<type>SearchControlAddition</type>
<source>ТаблицаЗначений</source>
<extInfo xsi:type="form:SearchControlAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchControlAddition>
<extendedTooltip>
<name>ТаблицаЗначенийРасширеннаяПодсказка</name>
<id>4</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаЗначенийКонтекстноеМеню</name>
<id>2</id>
<autoFill>true</autoFill>
</contextMenu>
<changeRowSet>true</changeRowSet>
<changeRowOrder>true</changeRowOrder>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<selectionMode>MultiRow</selectionMode>
<rowSelectionMode>Auto</rowSelectionMode>
<header>true</header>
<headerHeight>1</headerHeight>
<footerHeight>1</footerHeight>
<horizontalScrollBar>AutoUse</horizontalScrollBar>
<verticalScrollBar>AutoUse</verticalScrollBar>
<horizontalLines>true</horizontalLines>
<verticalLines>true</verticalLines>
<autoInsertNewRow>true</autoInsertNewRow>
<searchOnInput>Auto</searchOnInput>
<initialListView>Auto</initialListView>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<enableStartDrag>true</enableStartDrag>
<enableDrag>true</enableDrag>
<autoMaxCardHeight>true</autoMaxCardHeight>
<rowFilter xsi:type="core:UndefinedValue"/>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКоманднаяПанельНижняя</name>
<id>19</id>
<items xsi:type="form:Button">
<name>КнопкаОК</name>
<id>21</id>
<title>
<key>ru</key>
<value>ОК</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<defaultItem>true</defaultItem>
<extendedTooltip>
<name>КнопкаОКРасширеннаяПодсказка</name>
<id>22</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.КомандаОК</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<defaultButton>true</defaultButton>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>КомандаОтмена</name>
<id>23</id>
<title>
<key>ru</key>
<value>Отмена</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>КомандаОтменаРасширеннаяПодсказка</name>
<id>24</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Close</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>PictureAndText</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа командная панель нижняя</value>
</title>
<toolTip>
<key>ru</key>
<value>Группа командная панель нижняя</value>
</toolTip>
<extendedTooltip>
<name>ГруппаКоманднаяПанельНижняяРасширеннаяПодсказка</name>
<id>20</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<horizontalAlign>Right</horizontalAlign>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<handlers>
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
</handlers>
<width>64</width>
<saveWindowSettings>true</saveWindowSettings>
<autoUrl>true</autoUrl>
<group>Auto</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>auto</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Объект</name>
<id>1</id>
<valueType>
<types>ExternalDataProcessor.ШаблонДополнительнойОбработки</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<attributes>
<name>ТаблицаЗначений</name>
<title>
<key>ru</key>
<value>Таблица значений</value>
</title>
<id>2</id>
<valueType>
<types>ValueTable</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ТаблицаЗначенийСоответствиеКолонок</name>
<title>
<key>ru</key>
<value>Таблица значений соответствие колонок</value>
</title>
<id>5</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ТаблицаЗначенийКолонкиКонтейнера</name>
<title>
<key>ru</key>
<value>Таблица значений колонки контейнера</value>
</title>
<id>6</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>СуффиксРеквизитаКонтейнера</name>
<title>
<key>ru</key>
<value>Суффикс реквизита контейнера</value>
</title>
<id>8</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПутьМетаданных</name>
<title>
<key>ru</key>
<value>Путь метаданных</value>
</title>
<id>3</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>КомандаОК</name>
<title>
<key>ru</key>
<value>Команда ОК</value>
</title>
<id>1</id>
<toolTip>
<key>ru</key>
<value>Команда ОК</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>КомандаОК</name>
</handler>
</action>
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>КомандаОчистить</name>
<title>
<key>ru</key>
<value>Очистить</value>
</title>
<id>2</id>
<toolTip>
<key>ru</key>
<value>Команда очистить</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>КомандаОчистить</name>
</handler>
</action>
<modifiesStoredData>true</modifiesStoredData>
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ObjectFormExtInfo"/>
</form:Form>
@@ -0,0 +1,402 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
МетаданныеОбработки = ОбработкаОбъект.Метаданные();
ИмяОбработки = МетаданныеОбработки.Имя;
ПутьМетаданных = "ВнешняяОбработка." + ИмяОбработки;
Заголовок = Параметры.Заголовок + " (таблица значений)";
Если Параметры.Значение = Неопределено Тогда
Таблица = Новый ТаблицаЗначений;
Иначе
Таблица = РеквизитФормыВЗначение("Объект").СтрокаВЗначение(Параметры.Значение.Значение);
КонецЕсли;
СоздатьРеквизитыТаблицыПоКолонкам(ЭтаФорма, "ТаблицаЗначений", "ТаблицаЗначенийСоответствиеКолонок",
"ТаблицаЗначенийКолонкиКонтейнера", Таблица.Колонки, Истина);
ТаблицаВРеквизитыФормы(Таблица, ТаблицаЗначений, ТаблицаЗначенийКолонкиКонтейнера);
фТолькоПросмотр = Ложь;
Если Параметры.Свойство("ТолькоПросмотр", фТолькоПросмотр) И фТолькоПросмотр = Истина Тогда
Элементы.ТаблицаЗначений.ТолькоПросмотр = Истина;
Элементы.КнопкаОК.Видимость = Ложь;
КонецЕсли;
СуффиксРеквизитаКонтейнера = РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера();
КонецПроцедуры
&НаСервере
Функция ПолучитьВозвращаемуюТаблицу()
тзВозвращаемаяТаблица = ТаблицаИзРеквизитовФормы(ТаблицаЗначений, ТаблицаЗначенийКолонкиКонтейнера);
Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(тзВозвращаемаяТаблица);
КонецФункции
&НаСервере
Процедура ИнициализироватьКонтейнерыСтрокиПоТипам(чСтрока, ТаблицаЗначенийКолонкиКонтейнера)
ТаблицаИнициализироватьКонтейнерыСтрокиПоТипам(ТаблицаЗначений.НайтиПоИдентификатору(чСтрока),
ТаблицаЗначенийКолонкиКонтейнера);
КонецПроцедуры
&НаКлиенте
Функция ПолноеИмяФормы(ИмяФормы)
Возврат СтрШаблон("%1.Форма.%2", ПутьМетаданных, ИмяФормы);
КонецФункции
//@skip-warning
&НаКлиенте
Процедура ПолеТаблицыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Перем Контейнер;
ИмяКолонки = ТаблицаЗначенийСоответствиеКолонок[Элемент.Имя];
ИмяКолонкиКонтейнера = ИмяКолонки + СуффиксРеквизитаКонтейнера;
Если ТаблицаЗначенийКолонкиКонтейнера.Свойство(ИмяКолонки) Тогда
СтрокаТаблицы = ТаблицаЗначений.НайтиПоИдентификатору(Элементы.ТаблицаЗначений.ТекущаяСтрока);
Контейнер = СтрокаТаблицы[ИмяКолонкиКонтейнера];
Если Не ЗначениеЗаполнено(Контейнер) Тогда
ИнициализироватьКонтейнерыСтрокиПоТипам(Элементы.ТаблицаЗначений.ТекущаяСтрока,
ТаблицаЗначенийКолонкиКонтейнера);
Контейнер = СтрокаТаблицы[ИмяКолонкиКонтейнера];
КонецЕсли;
Если ЗначениеЗаполнено(Контейнер.Тип) Тогда
Если Контейнер.Тип = "Тип" Тогда
СтандартнаяОбработка = Ложь;
ПараметрыОповещения = Новый Структура("Таблица, Строка, Поле", "ТаблицаЗначений",
Элементы.ТаблицаЗначений.ТекущаяСтрока, ИмяКолонки);
ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияСтроки",
ЭтотОбъект, ПараметрыОповещения);
ПараметрыОткрытия = Новый Структура("Объект, ТипЗначения", Объект, Контейнер);
ОткрытьФорму(ПолноеИмяФормы("РедактированиеТипа"), ПараметрыОткрытия, ЭтотОбъект, Истина, , ,
ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ИначеЕсли Контейнер.Тип = "МоментВремени" Тогда
СтандартнаяОбработка = Ложь;
ПараметрыОповещения = Новый Структура("Таблица, Строка, Поле", "ТаблицаЗначений",
Элементы.ТаблицаЗначений.ТекущаяСтрока, ИмяКолонки);
ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияСтроки",
ЭтотОбъект, ПараметрыОповещения);
ПараметрыОткрытия = Новый Структура("Объект, Значение", Объект, Контейнер);
ОткрытьФорму(ПолноеИмяФормы("РедактированиеГраницыМомента"), ПараметрыОткрытия, ЭтотОбъект, Ложь, , ,
ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОкончаниеРедактированияСтроки(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия <> Неопределено Тогда
чИдентификаторСтроки = ДополнительныеПараметры.Строка;
Значение = Неопределено;
Если РезультатЗакрытия.Свойство("Значение", Значение) Тогда
ТаблицаЗначений[чИдентификаторСтроки][ДополнительныеПараметры.Поле + СуффиксРеквизитаКонтейнера] = Значение;
ТаблицаЗначений[чИдентификаторСтроки][ДополнительныеПараметры.Поле] = Значение.Представление;
Иначе
ТаблицаЗначений[чИдентификаторСтроки][ДополнительныеПараметры.Поле
+ СуффиксРеквизитаКонтейнера] = РезультатЗакрытия.ОписаниеКонтейнера;
ТаблицаЗначений[чИдентификаторСтроки][ДополнительныеПараметры.Поле] = РезультатЗакрытия.ОписаниеКонтейнера.Представление;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КомандаОчистить(Команда)
ТаблицаЗначений.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура КомандаОК(Команда)
ВозвращаемоеЗначение = Новый Структура("Значение", ПолучитьВозвращаемуюТаблицу());
Закрыть(ВозвращаемоеЗначение);
КонецПроцедуры
#Область ИнтерфейсСТаблицейЗначений
//Описание типов внутри содержит больше, чем это можно увидеть средствами языка.
//Например, там есть какая-то информация, которая прилетает туда из "определяемых типов" полей в запросе.
//Это приводит к некорректному поведению. Колонка не воспринимала отрицательные числа, хотя в типе точно стаяло в квалификаторах числа знак "Любой".
//Эта функция пересоздает описание типов, что бы там внутри не было ничего лишнего.
Функция НормализоватьТип(НекоеОписаниеТипов)
Типы = НекоеОписаниеТипов.Типы();
НовоеОписаниеТипов = Новый ОписаниеТипов(Типы, НекоеОписаниеТипов.КвалификаторыЧисла,
НекоеОписаниеТипов.КвалификаторыСтроки, НекоеОписаниеТипов.КвалификаторыДаты);
Возврат НовоеОписаниеТипов;
КонецФункции
Процедура СоздатьРеквизитыТаблицыПоКолонкам(Форма, ИмяРеквизитаТаблицыФормы, ИмяРеквизитаСоответствияКолонок,
ИмяРеквизитаКолонкиКонтейнера, Колонки, фДляРедактирования = Ложь, стМакроколонки = Неопределено) Экспорт
маНеотображаемыеТипы = РеквизитФормыВЗначение("Объект").ПолучитьНеотображаемыеНаКлиентеТипы();
ИмяРеквизитаТаблицыФормыИтоги = ИмяРеквизитаТаблицыФормы + "Итоги";
ЕстьИтоги = Ложь;
Для Каждого Реквизит Из Форма.ПолучитьРеквизиты() Цикл
Если Реквизит.Имя = ИмяРеквизитаТаблицыФормыИтоги Тогда
ЕстьИтоги = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
маУдаляемыеРеквизиты = Новый Массив;
Если ТипЗнч(Форма[ИмяРеквизитаТаблицыФормы]) = Тип("ДанныеФормыКоллекция") Тогда
Форма[ИмяРеквизитаТаблицыФормы].Очистить();
КонецЕсли;
Для Каждого Реквизит Из Форма.ПолучитьРеквизиты(ИмяРеквизитаТаблицыФормы) Цикл
маУдаляемыеРеквизиты.Добавить(Реквизит.Путь + "." + Реквизит.Имя);
КонецЦикла;
Если ЕстьИтоги Тогда
Форма[ИмяРеквизитаТаблицыФормыИтоги].Очистить();
Для Каждого Реквизит Из Форма.ПолучитьРеквизиты(ИмяРеквизитаТаблицыФормыИтоги) Цикл
маУдаляемыеРеквизиты.Добавить(Реквизит.Путь + "." + Реквизит.Имя);
КонецЦикла;
КонецЕсли;
стКолонкиКонтейнера = Новый Структура;
маДобавляемыеРеквизиты = Новый Массив;
Если Колонки <> Неопределено Тогда
Для Каждого Колонка Из Колонки Цикл
стМакроколонка = Неопределено;
Если стМакроколонки <> Неопределено И стМакроколонки.Свойство(Колонка.Имя, стМакроколонка) Тогда
ТипКолонки = стМакроколонка.ТипЗначения;
Иначе
ТипКолонки = Колонка.ТипЗначения;
КонецЕсли;
ЕстьНеотображаемыеТипы = Ложь;
Для Каждого НеотображаемыйТип Из маНеотображаемыеТипы Цикл
Если ТипКолонки.СодержитТип(НеотображаемыйТип) Тогда
ЕстьНеотображаемыеТипы = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьНеотображаемыеТипы Тогда
ИмяКолонкиКонтейнера = Колонка.Имя + РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера();
Реквизит = Новый РеквизитФормы(ИмяКолонкиКонтейнера, Новый ОписаниеТипов, ИмяРеквизитаТаблицыФормы,
ИмяКолонкиКонтейнера);
маДобавляемыеРеквизиты.Добавить(Реквизит);
стКолонкиКонтейнера.Вставить(Колонка.Имя, ТипКолонки);
ТипКолонкиТаблицы = Новый ОписаниеТипов(ТипКолонки, "Строка", маНеотображаемыеТипы);
Иначе
ТипКолонкиТаблицы = НормализоватьТип(ТипКолонки);
КонецЕсли;
Если ТипКолонкиТаблицы.СодержитТип(Тип("Число")) Тогда
ТипКолонкиИтогов = Новый ОписаниеТипов("Число", ТипКолонкиТаблицы.КвалификаторыЧисла);
Иначе
ТипКолонкиИтогов = Новый ОписаниеТипов("Null");
КонецЕсли;
Реквизит = Новый РеквизитФормы(Колонка.Имя, ТипКолонкиТаблицы, ИмяРеквизитаТаблицыФормы, Колонка.Имя);
маДобавляемыеРеквизиты.Добавить(Реквизит);
Если ЕстьИтоги Тогда
Реквизит = Новый РеквизитФормы(Колонка.Имя, ТипКолонкиИтогов, ИмяРеквизитаТаблицыФормыИтоги,
Колонка.Имя);
маДобавляемыеРеквизиты.Добавить(Реквизит);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Форма.ИзменитьРеквизиты(маДобавляемыеРеквизиты, маУдаляемыеРеквизиты);
Если ЕстьИтоги Тогда
Форма[ИмяРеквизитаТаблицыФормыИтоги].Добавить();
КонецЕсли;
Пока Форма.Элементы[ИмяРеквизитаТаблицыФормы].ПодчиненныеЭлементы.Количество() > 0 Цикл
Форма.Элементы.Удалить(Форма.Элементы[ИмяРеквизитаТаблицыФормы].ПодчиненныеЭлементы[0]);
КонецЦикла;
стКолонкиРезультата = Новый Структура;
Если Колонки <> Неопределено Тогда
Для Каждого Колонка Из Колонки Цикл
ИмяКолонки = ИмяРеквизитаТаблицыФормы + Колонка.Имя;
стКолонкиРезультата.Вставить(ИмяКолонки, Колонка.Имя);
КолонкаТаблицы = Форма.Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"),
Форма.Элементы[ИмяРеквизитаТаблицыФормы]);
КолонкаТаблицы.ПутьКДанным = ИмяРеквизитаТаблицыФормы + "." + Колонка.Имя;
Если ЕстьИтоги Тогда
КолонкаТаблицы.ПутьКДаннымПодвала = ИмяРеквизитаТаблицыФормыИтоги + "[0]." + Колонка.Имя;
КонецЕсли;
Если фДляРедактирования Тогда
КолонкаТаблицы.Вид = ВидПоляФормы.ПолеВвода;
КолонкаТаблицы.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
КолонкаТаблицы.КнопкаОчистки = Истина;
Если стКолонкиКонтейнера.Свойство(Колонка.Имя) Тогда
КолонкаТаблицы.КнопкаВыбора = Истина;
КолонкаТаблицы.РедактированиеТекста = Ложь;
КолонкаТаблицы.УстановитьДействие("НачалоВыбора", "ПолеТаблицыНачалоВыбора");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Форма[ИмяРеквизитаСоответствияКолонок] = стКолонкиРезультата;
Форма[ИмяРеквизитаКолонкиКонтейнера] = стКолонкиКонтейнера;
КонецПроцедуры
Процедура ТаблицаИнициализироватьКонтейнерыСтрокиПоТипам(СтрокаТаблицы, ТаблицаЗначенийКолонкиКонтейнера) Экспорт
Для Каждого кз Из ТаблицаЗначенийКолонкиКонтейнера Цикл
ИмяКолонки = кз.Ключ;
ТипЗначения = кз.Значение;
маТипыЗначения = ТипЗначения.Типы();
Контейнер = Неопределено;
Если маТипыЗначения.Количество() = 1 Тогда
Если ТипЗначения.СодержитТип(Тип("Тип")) Тогда
Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Тип("Неопределено"));
ИначеЕсли ТипЗначения.СодержитТип(Тип("МоментВремени")) Тогда
Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(
Новый МоментВремени('00010101', Неопределено));
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Контейнер) Тогда
Контейнер = ПустойКонтейнер();
КонецЕсли;
СтрокаТаблицы[ИмяКолонки + РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера()] = Контейнер;
КонецЦикла;
КонецПроцедуры
Функция ПустойКонтейнер()
Возврат Новый Структура("Тип, Представление", , "???");
КонецФункции
//Контейнеры в таблице должны быть всегда.
//Если контейнер не нужен, и значение храниться в основном поле - добавляем пустой контейнер.
Процедура ДобавитьКонтейнеры(СтрокаТаблицыЗначенийРеквизита, СтрокаИсточник, КолонкиКонтейнера) Экспорт
Для Каждого кз Из КолонкиКонтейнера Цикл
ИмяКолонки = кз.Ключ;
ИмяКолонкиКонтейнера = ИмяКолонки + РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера();
Если ТипЗнч(СтрокаИсточник[ИмяКолонки]) = Тип("РезультатЗапроса") Тогда
Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(
СтрокаИсточник[кз.Ключ].Выгрузить());
Иначе
Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(СтрокаИсточник[кз.Ключ]);
КонецЕсли;
Если ТипЗнч(Контейнер) <> Тип("Структура") Тогда
Контейнер = ПустойКонтейнер();
Иначе
СтрокаТаблицыЗначенийРеквизита[ИмяКолонки] = Контейнер.Представление;
КонецЕсли;
СтрокаТаблицыЗначенийРеквизита[ИмяКолонкиКонтейнера] = Контейнер;
КонецЦикла;
КонецПроцедуры
Функция ТаблицаВРеквизитыФормы(ТаблицаЗначений, ТаблицаЗначенийРеквизит, ТаблицаЗначенийКолонкиКонтейнераРеквизит) Экспорт
фЕстьКонтейнеры = ТаблицаЗначенийКолонкиКонтейнераРеквизит.Количество() > 0;
Если Не фЕстьКонтейнеры Тогда
ТаблицаЗначенийРеквизит.Загрузить(ТаблицаЗначений);
Иначе
Для Каждого Строка Из ТаблицаЗначений Цикл
СтрокаТаблицыЗначенийРеквизита = ТаблицаЗначенийРеквизит.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицыЗначенийРеквизита, Строка);
Если фЕстьКонтейнеры Тогда
ДобавитьКонтейнеры(СтрокаТаблицыЗначенийРеквизита, Строка, ТаблицаЗначенийКолонкиКонтейнераРеквизит);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецФункции
Функция ТаблицаИзРеквизитовФормы(ТаблицаЗначенийРеквизит, ТаблицаЗначенийКолонкиКонтейнераРеквизит) Экспорт
тзДанные = ТаблицаЗначенийРеквизит.Выгрузить();
Если ТаблицаЗначенийКолонкиКонтейнераРеквизит.Количество() = 0 Тогда
Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(тзДанные);
КонецЕсли;
стИменаКолонокКонтейнеров = Новый Структура;
Для Каждого кз Из ТаблицаЗначенийКолонкиКонтейнераРеквизит Цикл
стИменаКолонокКонтейнеров.Вставить(кз.Ключ + РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера());
КонецЦикла;
тзВозвращаемаяТаблица = Новый ТаблицаЗначений;
Для Каждого Колонка Из тзДанные.Колонки Цикл
Если стИменаКолонокКонтейнеров.Свойство(Колонка.Имя) Тогда
Продолжить;
КонецЕсли;
ТипКолонки = Колонка.ТипЗначения;
ТаблицаЗначенийКолонкиКонтейнераРеквизит.Свойство(Колонка.Имя, ТипКолонки);
тзВозвращаемаяТаблица.Колонки.Добавить(Колонка.Имя, ТипКолонки);
КонецЦикла;
чКоличествоСтрок = тзДанные.Количество();
Для Каждого СтрокаТаблицыЗначенийРеквизита Из ТаблицаЗначенийРеквизит Цикл
Строка = тзВозвращаемаяТаблица.Добавить();
ЗаполнитьЗначенияСвойств(Строка, СтрокаТаблицыЗначенийРеквизита);
Для Каждого кз Из ТаблицаЗначенийКолонкиКонтейнераРеквизит Цикл
ИмяКолонки = кз.Ключ;
Строка[ИмяКолонки] = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(
СтрокаТаблицыЗначенийРеквизита[ИмяКолонки + РеквизитФормыВЗначение(
"Объект").СуффиксРеквизитаКонтейнера()]);
КонецЦикла;
КонецЦикла;
Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(тзВозвращаемаяТаблица);
КонецФункции
#КонецОбласти
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<ConditionalAppearance xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
<item>
<selection>
<item>
<field>СоставТипа</field>
</item>
</selection>
<filter>
<item xsi:type="FilterItemComparison">
<left xsi:type="dcscor:Field">СоставТипа.ВыбранПодч</left>
<comparisonType>Equal</comparisonType>
<right xsi:type="xs:boolean">true</right>
</item>
</filter>
<appearance>
<dcscor:item xsi:type="SettingsParameterValue">
<dcscor:parameter>ЦветФона</dcscor:parameter>
<dcscor:value xsi:type="v8ui:Color">win:ScrollBar</dcscor:value>
</dcscor:item>
</appearance>
</item>
</ConditionalAppearance>
@@ -0,0 +1,882 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
МетаданныеОбработки = ОбработкаОбъект.Метаданные();
// Получаем ссылку на обработку/отчет по имени.
ИмяОбработки = МетаданныеОбработки.Имя;
ПутьМетаданных = "ВнешняяОбработка." + ИмяОбработки;
дзДеревоТипов = Неопределено;
ТипЗначения = Параметры.ТипЗначения;
Параметры.Свойство("СписокРазрешенных", СписокРазрешенных);
Если Не Параметры.Свойство("ВПараметр", РежимВПараметр) Тогда
РежимВПараметр = Ложь;
КонецЕсли;
Если РежимВПараметр Тогда
РежимСтрокой = "В параметр";
Элементы.КомандаОК.Заголовок = РежимСтрокой;
Иначе
РежимСтрокой = "Редактирование типа";
КонецЕсли;
Если Параметры.Свойство("Имя", ИмяПараметра) Тогда
Заголовок = СтрШаблон("%1 (%2)", ИмяПараметра, НРег(РежимСтрокой));
Иначе
Заголовок = РежимСтрокой;
ИмяПараметра = "ТаблицаЗначений";
КонецЕсли;
Если ТипЗнч(ТипЗначения) = Тип("Структура") И ТипЗначения.Тип = "Тип" Тогда
Попытка
маТипы = Новый Массив;
маТипы.Добавить(РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(ТипЗначения));
ТипЗначения = Новый ОписаниеТипов(маТипы);
Исключение
ТипЗначения = Новый ОписаниеТипов;
КонецПопытки;
фПростойВид = Истина;
фРедактированиеТипа = Истина;
Элементы.СоставнойТип.Видимость = Ложь;
Элементы.Контейнер.Видимость = Ложь;
Элементы.ГруппаКвалификаторыДаты.Видимость = Ложь;
Элементы.ГруппаКвалификаторыЧисла.Видимость = Ложь;
Элементы.ГруппаКвалификаторыСтроки.Видимость = Ложь;
ИначеЕсли ТипЗнч(ТипЗначения) = Тип("Тип") Тогда
маТипы = Новый Массив;
маТипы.Добавить(ТипЗначения);
ТипЗначения = Новый ОписаниеТипов(маТипы);
фПростойВид = Истина;
фРедактированиеТипа = Истина;
Элементы.СоставнойТип.Видимость = Ложь;
Элементы.Контейнер.Видимость = Ложь;
Элементы.ГруппаКвалификаторыДаты.Видимость = Ложь;
Элементы.ГруппаКвалификаторыЧисла.Видимость = Ложь;
Элементы.ГруппаКвалификаторыСтроки.Видимость = Ложь;
Иначе
Если Не ЗначениеЗаполнено(ТипЗначения) Тогда
ТипЗначения = Новый ОписаниеТипов;
КонецЕсли;
ТипКонтейнера = Неопределено;
фПростойВид = Не Параметры.Свойство("ТипКонтейнера", ТипКонтейнера);
Если фПростойВид Тогда
ТипКонтейнера = 0;
Элементы.Контейнер.Видимость = Ложь;
КонецЕсли;
Если ТипКонтейнера = 3 Тогда
//Режим редактирования структуры таблицы. Таблицу можно передать с данными, они будут сохранены.
Таблица = РеквизитФормыВЗначение("Объект").СтрокаВЗначение(ТипЗначения.Значение);
//Сами данные на клиента не потащим.
АдресТаблицы = ПоместитьВоВременноеХранилище(Таблица, УникальныйИдентификатор);
ЗаполнитьСтруктуруТаблицы(Таблица);
ТипЗначения = Новый ОписаниеТипов;
КонецЕсли;
КонецЕсли;
СоставнойТип = ТипЗначения.Типы().Количество() > 1;
КвалификаторыДатыСостав = ТипЗначения.КвалификаторыДаты.ЧастиДаты;
КвалификаторыСтрокиДлина = ТипЗначения.КвалификаторыСтроки.Длина;
КвалификаторыСтрокиФиксированная = ТипЗначения.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Фиксированная;
КвалификаторыЧислаДлина = ТипЗначения.КвалификаторыЧисла.Разрядность;
КвалификаторыЧислаНеОтрицательный = ТипЗначения.КвалификаторыЧисла.ДопустимыйЗнак = ДопустимыйЗнак.Неотрицательный;
КвалификаторыЧислаТочность = ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти;
дзДеревоТипов = ПолучитьДеревоТипов(ТипЗначения, СписокРазрешенных);
//Если НЕ СоставнойТип И ТипКонтейнера = 0 Тогда
// ДобавитьМоментИГраницуВДерево(дзДеревоТипов, ТипЗначения);
//КонецЕсли;
ДеревоТипов = ПоместитьВоВременноеХранилище(дзДеревоТипов, УникальныйИдентификатор);
ОбновитьСоставТипаНаСервере();
УстановитьВидимостьЭлементов();
ТекущийЭлемент = Элементы.СтрокаПоиска;
КонецПроцедуры
&НаСервере
Процедура ДеревоТиповВДанныеФормы(Узел, УзелРеквизита, ТекущаяСтрока = Неопределено, ВыбранПодч = Ложь)
ЭлементыУзла = УзелРеквизита.ПолучитьЭлементы();
Для Каждого Строка Из Узел.Строки Цикл
Если Строка.Строки.Количество() > 0 Тогда
СтрокаРеквизита = ЭлементыУзла.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРеквизита, Строка);
СтрокаРеквизита.ВыбранПодч = Ложь;
ДеревоТиповВДанныеФормы(Строка, СтрокаРеквизита, ТекущаяСтрока, СтрокаРеквизита.ВыбранПодч);
Если СтрокаРеквизита.ПолучитьЭлементы().Количество() = 0 Тогда
ЭлементыУзла.Удалить(СтрокаРеквизита);
КонецЕсли;
Иначе
Если Не ЗначениеЗаполнено(СтрокаПоиска) Или Найти(ВРег(Строка.Представление), ВРег(СтрокаПоиска)) > 0
//ИЛИ Найти(ВРег(Строка.Имя), ВРег(СтрокаПоиска)) > 0
Тогда
СтрокаРеквизита = ЭлементыУзла.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРеквизита, Строка);
ВыбранПодч = ВыбранПодч Или Строка.Выбран;
КонецЕсли;
КонецЕсли;
Если ТекущаяСтрока = Неопределено И СтрокаРеквизита <> Неопределено И Строка.Выбран Тогда
ТекущаяСтрока = СтрокаРеквизита.ПолучитьИдентификатор();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьОтметкиДерева(УзелДерева, УзелСоставаТипа)
Перем ЭлементыУзла;
Если УзелСоставаТипа <> Неопределено Тогда
ЭлементыУзла = УзелСоставаТипа.ПолучитьЭлементы();
КонецЕсли;
й = 0;
Для Каждого СтрокаДерева Из УзелДерева.Строки Цикл
Если ЭлементыУзла = Неопределено Или ЭлементыУзла.Количество() <= й Тогда
Если ФлагСброшеныВсе Тогда
СтрокаДерева.Выбран = Ложь;
Если СтрокаДерева.Строки.Количество() > 0 Тогда
ОбновитьОтметкиДерева(СтрокаДерева, Неопределено);
КонецЕсли;
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
Если ФлагСброшеныВсе Тогда
СтрокаДерева.Выбран = Ложь;
КонецЕсли;
Если ЭлементыУзла[й].Имя = СтрокаДерева.Имя Тогда
СтрокаДерева.Выбран = ЭлементыУзла[й].Выбран;
Если СтрокаДерева.Строки.Количество() > 0 Тогда
ОбновитьОтметкиДерева(СтрокаДерева, ЭлементыУзла[й]);
КонецЕсли;
й = й + 1;
КонецЕсли;
КонецЦикла;
ФлагСброшеныВсе = Ложь;
КонецПроцедуры
&НаСервере
Процедура ОбновитьСоставТипаНаСервере()
дзДерево = ПолучитьИзВременногоХранилища(ДеревоТипов);
ОбновитьОтметкиДерева(дзДерево, СоставТипа);
ПоместитьВоВременноеХранилище(дзДерево, ДеревоТипов);
ТекущаяСтрока = Неопределено;
СоставТипа.ПолучитьЭлементы().Очистить();
ДеревоТиповВДанныеФормы(дзДерево, СоставТипа, ТекущаяСтрока);
Элементы.СоставТипа.ТекущаяСтрока = ТекущаяСтрока;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьСостояниеДереваТипов()
Если ЗначениеЗаполнено(СтрокаПоиска) Тогда
Для Каждого Элемент Из СоставТипа.ПолучитьЭлементы() Цикл
Элементы.СоставТипа.Развернуть(Элемент.ПолучитьИдентификатор(), Истина);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСоставТипа() Экспорт
ОбновитьСоставТипаНаСервере();
УстановитьСостояниеДереваТипов();
КонецПроцедуры
&НаСервере
Функция ПолучитьПредставлениеКвалификаторовТипа(ТипЗначения)
маКвалификаторы = Новый Массив;
Если ТипЗначения.СодержитТип(Тип("Строка")) Тогда
ПредставлениеКвалификаторовСтроки = "Длина " + ТипЗначения.КвалификаторыСтроки.Длина;
маКвалификаторы.Добавить(Новый Структура("Тип, Квалификаторы", "Строка", ПредставлениеКвалификаторовСтроки));
КонецЕсли;
Если ТипЗначения.СодержитТип(Тип("Дата")) Тогда
ПредставлениеКвалификаторовДаты = ТипЗначения.КвалификаторыДаты.ЧастиДаты;
маКвалификаторы.Добавить(Новый Структура("Тип, Квалификаторы", "Дата", ПредставлениеКвалификаторовДаты));
КонецЕсли;
Если ТипЗначения.СодержитТип(Тип("Число")) Тогда
ПредставлениеКвалификаторовЧисла = "Знак " + ТипЗначения.КвалификаторыЧисла.ДопустимыйЗнак + " "
+ ТипЗначения.КвалификаторыЧисла.Разрядность + "." + ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти;
маКвалификаторы.Добавить(Новый Структура("Тип, Квалификаторы", "Число", ПредставлениеКвалификаторовЧисла));
КонецЕсли;
ФлагНуженЗаголовок = маКвалификаторы.Количество() > 1;
ПредставлениеКвалификаторовТипа = "";
Для Каждого стКвалификаторы Из маКвалификаторы Цикл
ПредставлениеКвалификаторовТипа = ПредставлениеКвалификаторовТипа + ?(ФлагНуженЗаголовок, стКвалификаторы.Тип
+ ": ", "") + стКвалификаторы.Квалификаторы + "; ";
КонецЦикла;
Возврат ПредставлениеКвалификаторовТипа;
КонецФункции
&НаСервере
Процедура ЗаполнитьСтруктуруТаблицы(Таблица)
Для Каждого Колонка Из Таблица.Колонки Цикл
СтрокаСтруктуры = СтруктураТаблицы.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСтруктуры, Колонка, "Имя, ТипЗначения");
СтрокаСтруктуры.ИмяСтарое = Колонка.Имя;
СтрокаСтруктуры.Квалификаторы = ПолучитьПредставлениеКвалификаторовТипа(Колонка.ТипЗначения);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьПервыйВыбранный(СоставТипа)
Для Каждого СтрокаТипа Из СоставТипа.ПолучитьЭлементы() Цикл
Если СтрокаТипа.ЭтоГруппа Тогда
Результат = ПолучитьПервыйВыбранный(СтрокаТипа);
Если Результат <> Неопределено Тогда
Возврат Результат;
КонецЕсли;
Иначе
Если СтрокаТипа.Выбран Тогда
Возврат СтрокаТипа.Имя;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаСервере
Функция СобратьТипы(СоставТипа, маТипы = Неопределено)
Если маТипы = Неопределено Тогда
маТипы = Новый Массив;
КонецЕсли;
Для Каждого СтрокаТипа Из СоставТипа.Строки Цикл
Если СтрокаТипа.ЭтоГруппа Тогда
маТипы = СобратьТипы(СтрокаТипа, маТипы);
Иначе
Если СтрокаТипа.Выбран Тогда
маТипы.Добавить(Тип(СтрокаТипа.Имя));
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат маТипы;
КонецФункции
&НаСервере
Функция ПолучитьОписаниеТипов()
дзДерево = ПолучитьИзВременногоХранилища(ДеревоТипов);
ОбновитьОтметкиДерева(дзДерево, СоставТипа);
маТипы = СобратьТипы(дзДерево);
КвалификаторыЧисла = Новый КвалификаторыЧисла(КвалификаторыЧислаДлина, КвалификаторыЧислаТочность, ?(
КвалификаторыЧислаНеОтрицательный, ДопустимыйЗнак.Неотрицательный, ДопустимыйЗнак.Любой));
КвалификаторыСтроки = Новый КвалификаторыСтроки(КвалификаторыСтрокиДлина, ?(КвалификаторыСтрокиФиксированная,
ДопустимаяДлина.Фиксированная, ДопустимаяДлина.Переменная));
КвалификаторыДаты = Новый КвалификаторыДаты(?(КвалификаторыДатыСостав = "Дата и время", ЧастиДаты.ДатаВремя,
ЧастиДаты[КвалификаторыДатыСостав]));
Возврат Новый ОписаниеТипов(маТипы, КвалификаторыЧисла, КвалификаторыСтроки, КвалификаторыДаты);
КонецФункции
&НаСервере
Функция ПолучитьКонтейнерТипа(ОписаниеТипов)
Обработка = РеквизитФормыВЗначение("Объект");
ВозвращаемыйТип = Тип("Неопределено");
маТипы = ОписаниеТипов.Типы();
Если маТипы.Количество() > 0 Тогда
ВозвращаемыйТип = маТипы[0];
КонецЕсли;
Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(ВозвращаемыйТип);
КонецФункции
&НаСервере
Функция ПолучитьТаблицу(ТекстЗапроса = Неопределено)
Обработка = РеквизитФормыВЗначение("Объект");
фЕстьИзмененияКолонок = Ложь;
стСоответствиеКолонок = Новый Структура;
маВыраженияКолонок = Новый Массив;
Таблица = Новый ТаблицаЗначений;
Для Каждого СтрокаСтруктуры Из СтруктураТаблицы Цикл
Колонка = Таблица.Колонки.Добавить(СтрокаСтруктуры.Имя, СтрокаСтруктуры.ТипЗначения);
маВыраженияКолонок.Добавить(СтрШаблон(" %1.%2 КАК %2", ИмяПараметра, Колонка.Имя));
Если ЗначениеЗаполнено(СтрокаСтруктуры.ИмяСтарое) Тогда
стСоответствиеКолонок.Вставить(СтрокаСтруктуры.Имя, СтрокаСтруктуры.ИмяСтарое);
фЕстьИзмененияКолонок = фЕстьИзмененияКолонок Или СтрокаСтруктуры.ИмяСтарое <> СтрокаСтруктуры.Имя;
КонецЕсли;
КонецЦикла;
Если стСоответствиеКолонок.Количество() > 0 Тогда
СтараяТаблица = ПолучитьИзВременногоХранилища(АдресТаблицы);
Если фЕстьИзмененияКолонок Тогда
Для Каждого Строка Из СтараяТаблица Цикл
СтрокаНовая = Таблица.Добавить();
Для Каждого кз Из стСоответствиеКолонок Цикл
СтрокаНовая[кз.Ключ] = Строка[кз.Значение];
КонецЦикла;
КонецЦикла;
Иначе
Для Каждого Строка Из СтараяТаблица Цикл
ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Строка);
КонецЦикла;
КонецЕсли;
КонецЕсли;
ВыраженияКолонок = СтрСоединить(маВыраженияКолонок, ",
|");
ТекстЗапроса = СтрШаблон("
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| %1
|ПОМЕСТИТЬ %2
|ИЗ &%2 КАК %2;", ВыраженияКолонок, ИмяПараметра);
Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Таблица);
КонецФункции
&НаКлиенте
Функция ПолноеИмяФормы(ИмяФормы)
Возврат СтрШаблон("%1.Форма.%2", ПутьМетаданных, ИмяФормы);
КонецФункции
&НаКлиенте
Процедура КомандаОК(Команда)
ВозвращаемоеЗначение = Новый Структура("ИмяПараметра, ТипКонтейнера, ОписаниеКонтейнера", ИмяПараметра,
ТипКонтейнера, ПолучитьОписаниеТипов());
Если ТипКонтейнера < 3 Тогда
Если фРедактированиеТипа Тогда
ВозвращаемоеЗначение.ОписаниеКонтейнера = ПолучитьКонтейнерТипа(ВозвращаемоеЗначение.ОписаниеКонтейнера);
ИначеЕсли ВозвращаемоеЗначение.ОписаниеКонтейнера.СодержитТип(Тип("Граница"))
Или ВозвращаемоеЗначение.ОписаниеКонтейнера.СодержитТип(Тип("МоментВремени")) Тогда
ВозвращаемоеЗначение.ТипКонтейнера = 0;
КонецЕсли;
Иначе
ВозвращаемоеЗначение.ОписаниеКонтейнера = ПолучитьТаблицу();
КонецЕсли;
Закрыть(ВозвращаемоеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура КомандаВЗапрос(Команда)
Перем ТекстЗапроса;
ВозвращаемоеЗначение = Новый Структура("ИмяПараметра, ТипКонтейнера, ОписаниеКонтейнера, ТекстЗапроса",
ИмяПараметра, ТипКонтейнера, ПолучитьОписаниеТипов());
ВозвращаемоеЗначение.ОписаниеКонтейнера = ПолучитьТаблицу(ТекстЗапроса);
ВозвращаемоеЗначение.ТекстЗапроса = ТекстЗапроса;
Закрыть(ВозвращаемоеЗначение);
КонецПроцедуры
&НаСервере
Процедура ДобавитьМоментИГраницуВДерево(дзДерево, ТипЗначенияТекущий = Неопределено)
Перем Картинки;
Если ТипЗначенияТекущий = Неопределено Тогда
ТипЗначенияТекущий = Новый ОписаниеТипов;
КонецЕсли;
ДобавитьТип(дзДерево, ТипЗначенияТекущий, "Граница", Картинки, "Граница", 4);
ДобавитьТип(дзДерево, ТипЗначенияТекущий, "МоментВремени", Картинки, "Момент времени", 5);
фМоментГраница = Истина;
КонецПроцедуры
&НаСервере
Процедура ДобавитьМоментИГраницу()
дзДерево = ПолучитьИзВременногоХранилища(ДеревоТипов);
ДобавитьМоментИГраницуВДерево(дзДерево);
ПоместитьВоВременноеХранилище(дзДерево, ДеревоТипов);
ОбновитьСоставТипаНаСервере();
КонецПроцедуры
&НаСервере
Процедура УбратьМоментИГраницуИзДерева(дзДерево)
Если дзДерево.Строки[4].Имя = "Граница" Тогда
дзДерево.Строки.Удалить(дзДерево.Строки[4]);
КонецЕсли;
Если дзДерево.Строки[4].Имя = "МоментВремени" Тогда
дзДерево.Строки.Удалить(дзДерево.Строки[4]);
КонецЕсли;
фМоментГраница = Ложь;
КонецПроцедуры
&НаСервере
Процедура УбратьМоментИГраницу()
дзДерево = ПолучитьИзВременногоХранилища(ДеревоТипов);
ОбновитьОтметкиДерева(дзДерево, СоставТипа);
УбратьМоментИГраницуИзДерева(дзДерево);
ПоместитьВоВременноеХранилище(дзДерево, ДеревоТипов);
ТекущаяСтрока = Неопределено;
СоставТипа.ПолучитьЭлементы().Очистить();
ДеревоТиповВДанныеФормы(дзДерево, СоставТипа, ТекущаяСтрока);
Элементы.СоставТипа.ТекущаяСтрока = ТекущаяСтрока;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьМоментаИГраницы()
//Если ТипКонтейнера = 0 И НЕ СоставнойТип И (НЕ фПростойВид ИЛИ фРедактированиеТипа) Тогда
// Если НЕ фМоментГраница Тогда
// ДобавитьМоментИГраницу();
// КонецЕсли;
//Иначе
// Если фМоментГраница Тогда
// УбратьМоментИГраницу();
// КонецЕсли;
//КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьТип(дзДерево, ТипЗначенияТекущий, стрИмяТипа, Картинки, стрПредставлениеТипа = Неопределено,
чИндексВставки = Неопределено)
//Если Картинки = Неопределено Тогда
// Картинки = ПолучитьИзВременногоХранилища(Объект.Картинки);
//КонецЕсли;
Если чИндексВставки = Неопределено Тогда
Строка = дзДерево.Строки.Добавить();
Иначе
Строка = дзДерево.Строки.Вставить(чИндексВставки);
КонецЕсли;
Строка.Имя = стрИмяТипа;
Если ТипЗнч(Картинки) = Тип("Картинка") Тогда
Строка.Картинка = Картинки;
Иначе
//Картинка = Неопределено;
//Если Найти(стрИмяТипа, ".") = 0 Тогда
// Если Картинки.Свойство("Тип_" + стрИмяТипа, Картинка) Тогда
// Строка.Картинка = Картинка;
// КонецЕсли;
//КонецЕсли;
КонецЕсли;
Если стрПредставлениеТипа = Неопределено Тогда
Строка.Представление = стрИмяТипа;
Иначе
Строка.Представление = стрПредставлениеТипа;
КонецЕсли;
Если ТипЗначенияТекущий.СодержитТип(Тип(стрИмяТипа)) Тогда
Строка.Выбран = Истина;
Если Строка.Родитель <> Неопределено Тогда
Строка.Родитель.ВыбранПодч = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Менеджер, стрПрефиксИмени, КартинкаСсылок)
// Перем КартинкаСсылок;
// Картинки.Свойство("Тип_" + стрПрефиксИмени, КартинкаСсылок);
// маТипы = Менеджер.ТипВсеСсылки().Типы();
ВеткаТипов = Типы.Строки.Добавить();
ВеткаТипов.Имя = стрПрефиксИмени;
ВеткаТипов.Представление = стрПрефиксИмени + " (" + Формат(Менеджер.Количество(), "ЧГ=0") + ")";
ВеткаТипов.ЭтоГруппа = Истина;
ВеткаТипов.Картинка = КартинкаСсылок;
Для Каждого тТип Из Менеджер Цикл
стрИмяТипа = тТип.Имя;
стрТип = стрПрефиксИмени + "." + стрИмяТипа;
Ссылка = Новый (Тип(стрТип));
ДобавитьТип(ВеткаТипов, ТипЗначенияТекущий, стрТип, КартинкаСсылок, стрИмяТипа);
//ДобавитьТип(ВеткаТипов, ТипЗначенияТекущий, стрТип, КартинкаСсылок, Строка(тТип));
КонецЦикла;
ВеткаТипов.Строки.Сортировать("Представление");
КонецПроцедуры
&НаСервере
Функция ПолучитьДеревоТипов(ТипЗначенияТекущий, СписокРазрешенных)
Перем Картинки;
Типы = Новый ДеревоЗначений;
Типы.Колонки.Добавить("Выбран", Новый ОписаниеТипов("Булево"));
Типы.Колонки.Добавить("ВыбранПодч", Новый ОписаниеТипов("Булево"));
Типы.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
Типы.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка"));
Типы.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Типы.Колонки.Добавить("ЭтоГруппа", Новый ОписаниеТипов("Булево"));
ДобавитьТип(Типы, ТипЗначенияТекущий, "Булево", БиблиотекаКартинок.ТипБулево);
ДобавитьТип(Типы, ТипЗначенияТекущий, "Дата", БиблиотекаКартинок.ТипДата);
ДобавитьТип(Типы, ТипЗначенияТекущий, "Строка", БиблиотекаКартинок.ТипСтрока);
ДобавитьТип(Типы, ТипЗначенияТекущий, "Число", БиблиотекаКартинок.ТипЧисло);
//ДобавитьТип(Типы, ТипЗначенияТекущий, "Null", Картинки);
//ДобавитьТип(Типы, ТипЗначенияТекущий, "Неопределено", Картинки);
//ДобавитьТип(Типы, ТипЗначенияТекущий, "ВидДвиженияНакопления", Картинки, "Вид движения накопления");
//ДобавитьТип(Типы, ТипЗначенияТекущий, "ВидДвиженияБухгалтерии", Картинки, "Вид движения бухгалтерии");
//ДобавитьТип(Типы, ТипЗначенияТекущий, "ВидСчета", Картинки, "Вид счета");
//ДобавитьТип(Типы, ТипЗначенияТекущий, "Тип", Картинки);
//ДобавитьТип(Типы, ТипЗначенияТекущий, "УникальныйИдентификатор", БиблиотекаКартинок.ТипИдентификатор, "Уникальный идентификатор");
ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.Справочники, "СправочникСсылка",
БиблиотекаКартинок.Справочник);
ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.Документы, "ДокументСсылка", БиблиотекаКартинок.Документ);
ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.Перечисления, "ПеречислениеСсылка",
БиблиотекаКартинок.Перечисление);
ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.ПланыВидовХарактеристик, "ПланВидовХарактеристикСсылка",
БиблиотекаКартинок.ПланВидовХарактеристик);
ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.ПланыСчетов, "ПланСчетовСсылка",
БиблиотекаКартинок.ПланСчетов);
ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.ПланыВидовРасчета, "ПланВидовРасчетаСсылка",
БиблиотекаКартинок.ПланВидовРасчета);
ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.БизнесПроцессы, "БизнесПроцессСсылка",
БиблиотекаКартинок.БизнесПроцесс);
ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.Задачи, "ЗадачаСсылка", БиблиотекаКартинок.Задача);
ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.ПланыОбмена, "ПланОбменаСсылка",
БиблиотекаКартинок.ПланОбмена);
Возврат Типы;
КонецФункции
&НаКлиенте
Процедура СоставТипаСброситьВсеКроме(Узел, стрИмяКроме)
СтрокаКроме = Неопределено;
Для Каждого Строка Из Узел.ПолучитьЭлементы() Цикл
Если Строка.Имя <> стрИмяКроме Тогда
Строка.Выбран = Ложь;
Строка.ВыбранПодч = Ложь;
СоставТипаСброситьВсеКроме(Строка, стрИмяКроме);
Иначе
СтрокаКроме = Строка;
КонецЕсли;
КонецЦикла;
Если СтрокаКроме <> Неопределено И СтрокаКроме.Выбран Тогда
Родитель = Строка.ПолучитьРодителя();
Если Родитель <> Неопределено Тогда
Родитель.ВыбранПодч = Истина;
КонецЕсли;
КонецЕсли;
//Мы сбросили все в урезанном дереве на клиенте. В сеансовых данных остались пометки, они уже не действительны.
//Когда будем на сервере, сбросим их перед обновлением отметок. Для этого этот флаг.
ФлагСброшеныВсе = Истина;
КонецПроцедуры
&НаКлиенте
Процедура СоставТипаВыбранПриИзменении(Элемент)
Если Не СоставнойТип Тогда
СоставТипаСброситьВсеКроме(СоставТипа, Элементы.СоставТипа.ТекущиеДанные.Имя);
КонецЕсли;
Если Элементы.СоставТипа.ТекущиеДанные.Выбран Тогда
Родитель = Элементы.СоставТипа.ТекущиеДанные.ПолучитьРодителя();
Если Родитель <> Неопределено Тогда
Родитель.ВыбранПодч = Истина;
КонецЕсли;
КонецЕсли;
ОбновитьОтображениеКвалификаторов();
КонецПроцедуры
&НаСервере
Функция СоставнойТипПриИзмененииНаСервере()
стрТекущееИмя = Неопределено;
Если СоставнойТип Тогда
УстановитьВидимостьЭлементов();
Иначе
стрТекущееИмя = ПолучитьПервыйВыбранный(СоставТипа);
УстановитьВидимостьЭлементов();
КонецЕсли;
Возврат стрТекущееИмя;
КонецФункции
&НаКлиенте
Процедура СоставнойТипПриИзменении(Элемент)
стрТекущееИмя = СоставнойТипПриИзмененииНаСервере();
Если Не СоставнойТип Тогда
СоставТипаСброситьВсеКроме(СоставТипа, стрТекущееИмя);
КонецЕсли;
УстановитьСостояниеДереваТипов();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьОтображениеКвалификаторов() Экспорт
Если Не фРедактированиеТипа Тогда
фВидимостьКвалификаторовЧисла = Элементы.СоставТипа.ТекущиеДанные <> Неопределено
И Элементы.СоставТипа.ТекущиеДанные.Выбран И Элементы.СоставТипа.ТекущиеДанные.Имя = "Число";
фВидимостьКвалификаторовСтроки = Элементы.СоставТипа.ТекущиеДанные <> Неопределено
И Элементы.СоставТипа.ТекущиеДанные.Выбран И Элементы.СоставТипа.ТекущиеДанные.Имя = "Строка";
фВидимостьКвалификаторовДаты = Элементы.СоставТипа.ТекущиеДанные <> Неопределено
И Элементы.СоставТипа.ТекущиеДанные.Выбран И Элементы.СоставТипа.ТекущиеДанные.Имя = "Дата";
Элементы.ГруппаКвалификаторыЧисла.Видимость = фВидимостьКвалификаторовЧисла;
Элементы.ГруппаКвалификаторыСтроки.Видимость = фВидимостьКвалификаторовСтроки;
Элементы.ГруппаКвалификаторыДаты.Видимость = фВидимостьКвалификаторовДаты;
Если фВидимостьКвалификаторовСтроки Тогда
Если КвалификаторыСтрокиДлина = 0 Тогда
КвалификаторыСтрокиКомментарий = "(неограниченная)";
Элементы.КвалификаторыСтрокиФиксированная.Видимость = Ложь;
Иначе
КвалификаторыСтрокиКомментарий = "";
Элементы.КвалификаторыСтрокиФиксированная.Видимость = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоставТипаПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("ОбновитьОтображениеКвалификаторов", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура КвалификаторыСтрокиДлинаПриИзменении(Элемент)
ОбновитьОтображениеКвалификаторов();
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементов()
фТаблица = ТипКонтейнера = 3;
Элементы.ГруппаТипЗначения.Видимость = Не фТаблица;
Элементы.ГруппаРедактированиеТаблицы.Видимость = фТаблица;
Элементы.КомандаВЗапрос.Видимость = фТаблица И ВЗапросРазрешено;
Если Не фТаблица Тогда
УстановитьВидимостьМоментаИГраницы();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонтейнерПриИзменении(Элемент)
УстановитьВидимостьЭлементов();
УстановитьСостояниеДереваТипов();
КонецПроцедуры
&НаКлиенте
Процедура ОкончаниеРедактированияТипа(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия <> Неопределено Тогда
СтрокаСтруктуры = ДополнительныеПараметры.Таблица.НайтиПоИдентификатору(ДополнительныеПараметры.Строка);
СтрокаСтруктуры.ТипЗначения = РезультатЗакрытия.ОписаниеКонтейнера;
СтрокаСтруктуры.Квалификаторы = ПолучитьПредставлениеКвалификаторовТипа(РезультатЗакрытия.ОписаниеКонтейнера);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураТаблицыТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ТипЗначения = Элементы.СтруктураТаблицы.ТекущиеДанные.ТипЗначения;
ПараметрыОповещения = Новый Структура("Таблица, Строка, Поле", СтруктураТаблицы,
Элементы.СтруктураТаблицы.ТекущаяСтрока, "ТипЗначения");
ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияТипа", ЭтотОбъект,
ПараметрыОповещения);
ПараметрыОткрытия = Новый Структура("Объект, ТипЗначения", Объект, ТипЗначения);
ОткрытьФорму(ПолноеИмяФормы("РедактированиеТипа"), ПараметрыОткрытия, ЭтаФорма, Истина, , ,
ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура СоставТипаПриИзменении(Элемент)
Если Элементы.СоставТипа.ТекущиеДанные.ЭтоГруппа Тогда
Если СоставнойТип Тогда
ЭлементыГруппы = СоставТипа.НайтиПоИдентификатору(Элементы.СоставТипа.ТекущаяСтрока).ПолучитьЭлементы();
фВыбранРодитель = Элементы.СоставТипа.ТекущиеДанные.Выбран;
Для Каждого Элемент Из ЭлементыГруппы Цикл
Элемент.Выбран = фВыбранРодитель;
КонецЦикла;
Элементы.СоставТипа.ТекущиеДанные.ВыбранПодч = фВыбранРодитель;
Иначе
Элементы.СоставТипа.ТекущиеДанные.Выбран = Ложь;
Элементы.СоставТипа.Развернуть(Элементы.СоставТипа.ТекущаяСтрока);
КонецЕсли;
Иначе
Родитель = СоставТипа.НайтиПоИдентификатору(Элементы.СоставТипа.ТекущаяСтрока).ПолучитьРодителя();
Если Родитель <> Неопределено Тогда
Если Элементы.СоставТипа.ТекущиеДанные.Выбран Тогда
Родитель.ВыбранПодч = Истина;
Иначе
Родитель.ВыбранПодч = Ложь;
ЭлементыГруппы = Родитель.ПолучитьЭлементы();
Для Каждого Элемент Из ЭлементыГруппы Цикл
Если Элемент.Выбран Тогда
Родитель.ВыбранПодч = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтрокаПоискаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
СтрокаПоиска = Текст;
СтандартнаяОбработка = Ложь;
ОбновитьСоставТипа();
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьИзменениеИмениКолонки(НоваяСтрока, ОтменаРедактирования, Отказ)
стрИмяКолонки = Элементы.СтруктураТаблицы.ТекущиеДанные.Имя;
фИмяКорректно = Ложь;
Попытка
//@skip-warning
ст = Новый Структура(стрИмяКолонки);
фИмяКорректно = ЗначениеЗаполнено(стрИмяКолонки);
Исключение
КонецПопытки;
Если Не фИмяКорректно Тогда
ПоказатьПредупреждение( ,
"Неверное имя колонки! Имя должно состоять из одного слова, начинаться с буквы и не содержать специальных символов кроме ""_"".",
, Заголовок);
Отказ = Истина;
Возврат;
КонецЕсли;
маСтрокиИмени = СтруктураТаблицы.НайтиСтроки(Новый Структура("Имя", стрИмяКолонки));
Если маСтрокиИмени.Количество() > 1 Тогда
ПоказатьПредупреждение( , "Колонка с таким именем уже есть! Введите другое имя.", , Заголовок);
Отказ = Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураТаблицыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
ОбработатьИзменениеИмениКолонки(НоваяСтрока, ОтменаРедактирования, Отказ);
КонецПроцедуры
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ExternalDataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="91506ea2-c522-405a-b069-34f42a571875">
<producedTypes>
<objectType typeId="e2cd1e29-6038-425b-af8b-a6c8f37523c2" valueTypeId="6e11a9cc-161f-4e75-bf04-fc02cc8bf751"/>
</producedTypes>
<name>ШаблонДополнительнойОбработки</name>
<synonym>
<key>ru</key>
<value>Шаблон дополнительной обработки</value>
</synonym>
<synonym>
<key>en</key>
<value>Additional data processor template</value>
</synonym>
<containedObjects classId="c3831ec8-d8d5-4f93-8a22-f9bfae07327f" objectId="71edb984-525c-4e11-9896-de835c509a7b"/>
<defaultForm>ExternalDataProcessor.ШаблонДополнительнойОбработки.Form.ФормаНастроек</defaultForm>
<forms uuid="83da5579-9e73-499c-8845-19633426c1de">
<name>ФормаНастроек</name>
<synonym>
<key>ru</key>
<value>Форма настроек</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="5f4b2f24-10c8-4129-be50-2f682f073c6c">
<name>РедактированиеТипа</name>
<synonym>
<key>ru</key>
<value>Редактирование типа</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="b8437d93-a454-40b4-b8d5-835fb858ff78">
<name>ПодборВСписок</name>
<synonym>
<key>ru</key>
<value>Подбор в список</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="26aabf5f-ad22-4db3-974c-57f389b8a947">
<name>РедактированиеТаблицы</name>
<synonym>
<key>ru</key>
<value>Редактирование таблицы</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
</mdclass:ExternalDataProcessor>