Skip to content

Commit

Permalink
feat: работа конструктора движений на клиенте
Browse files Browse the repository at this point in the history
  • Loading branch information
alkoleft committed Sep 23, 2024
1 parent da69d7f commit bb4cc59
Show file tree
Hide file tree
Showing 13 changed files with 407 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -211,31 +211,23 @@
// Контекст - см. НовыйКонтекстКонструктораДвижений
Процедура ЗаписатьДвиженияДокумента(Контекст) Экспорт

Документ = Контекст.Документ;

ЭтоСсылка = ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗнч(Документ));

Если ЭтоСсылка Тогда
НаборЗаписей = ЮТОбщий.Менеджер(Контекст.Метаданные).СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Документ);
Если ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗнч(Контекст.Документ)) Тогда
СсылкаНаДокумент = Контекст.Документ;
ИначеЕсли ЗначениеЗаполнено(Контекст.Документ.Ссылка) Тогда
СсылкаНаДокумент = Контекст.Документ.Ссылка;
Иначе
НаборЗаписей = Документ.Движения[Контекст.Метаданные.Имя];
ВызватьИсключение "Документ не записан";
КонецЕсли;

Для Каждого Строка Из Контекст.Данные Цикл

Запись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(Запись, Строка);
Если НЕ ЗначениеЗаполнено(Запись.Период) Тогда
Запись.Период = Документ.Дата;
КонецЕсли;

КонецЦикла;

Если ЭтоСсылка Тогда
НаборЗаписей.Записать();
Если НЕ ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
ВызватьИсключение "Не установлена ссылка на документ, владелец движений";
КонецЕсли;

ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;

ЮТТестовыеДанныеСлужебный.ЗаписатьДвиженияРегистратора(СсылкаНаДокумент, Контекст.Данные, Контекст.Метаданные, ПараметрыЗаписи);

КонецПроцедуры

#КонецОбласти
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,16 @@

КонецФункции

Процедура ЗаписатьДвиженияРегистратора(Регистратор, Данные, Менеджер, ПараметрыЗаписи) Экспорт

#Если Сервер Тогда
ЮТТестовыеДанныеСлужебныйСервер.ЗаписатьДвиженияРегистратора(Регистратор, Данные, Менеджер, ПараметрыЗаписи);
#Иначе
ЮТТестовыеДанныеСлужебныйВызовСервера.ЗаписатьДвиженияРегистратора(Регистратор, Данные, Менеджер, ПараметрыЗаписи);
#КонецЕсли

КонецПроцедуры

// Создает новый объект и заполняет его данными
//
// Параметры:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@

КонецФункции

Процедура ЗаписатьДвиженияРегистратора(Знач Регистратор, Знач Данные, Знач Менеджер, Знач ПараметрыЗаписи) Экспорт

ЮТТестовыеДанныеСлужебныйСервер.ЗаписатьДвиженияРегистратора(Регистратор, Данные, Менеджер, ПараметрыЗаписи);

КонецПроцедуры

Функция НовыйОбъект(Знач Менеджер, Знач Данные, Знач ДополнительныеСвойства, Знач УникальныйИдентификаторСсылки) Экспорт

Возврат ЮТТестовыеДанныеСлужебныйСервер.НовыйОбъект(Менеджер, Данные, ДополнительныеСвойства, УникальныйИдентификаторСсылки);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,28 @@

КонецФункции

Процедура ЗаписатьДвиженияРегистратора(Регистратор, Данные, МетаданныеРегистра, ПараметрыЗаписи) Экспорт

Менеджер = ЮТОбщий.Менеджер(МетаданныеРегистра);
НаборЗаписей = Менеджер.СоздатьНаборЗаписей();

ДатаРегистратора = ЮТЗапросы.ЗначениеРеквизита(Регистратор, "Дата");
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);

Для Каждого Строка Из Данные Цикл

Запись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(Запись, Строка);
Если НЕ ЗначениеЗаполнено(Запись.Период) Тогда
Запись.Период = ДатаРегистратора;
КонецЕсли;

КонецЦикла;

НаборЗаписей.Записать();

КонецПроцедуры

Функция НовыйОбъект(Знач Менеджер, Данные, ДополнительныеСвойства, УникальныйИдентификаторСсылки) Экспорт

ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?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">
<commandBarLocation>None</commandBarLocation>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>false</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Объект</name>
<id>1</id>
<valueType>
<types>DataProcessorObject.ЮТКонструкторДвижений</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ObjectFormExtInfo"/>
</form:Form>
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//

// BSLLS:NonStandardRegion-off
#Область ОписаниеПеременных

// см. ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктора
&НаКлиенте
Перем Контекст;

#КонецОбласти

//@skip-check module-structure-top-region
#Область ПрограммныйИнтерфейс

#Область УстановкаЗначение

// Добавляет новую запись в набор движений.
// При необходимости можно выполнить установку реквизитов новой записи.
//
// Параметры:
// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов новой записи.
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция ДобавитьСтроку(ЗначенияРеквизитов = Неопределено) Экспорт

Контекст.Данные.Добавить(Новый Структура);
Возврат ЭтотОбъект;

КонецФункции

// Устанавливает значение реквизита текущей записи набора.
//
// Параметры:
// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
// Значение - Произвольный - Значение реквизита объекта или табличной части
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция Установить(ИмяРеквизита, Значение) Экспорт

ЮТКонструкторТестовыхДанныхСлужебный.Установить(Контекст, ИмяРеквизита, Значение);
Возврат ЭтотОбъект;

КонецФункции

// Устанавливает значения реквизитов текущей записи набора.
//
// Параметры:
// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Установить реквизиты
&НаКлиенте
Функция УстановитьРеквизиты(ЗначенияРеквизитов) Экспорт

ЮТКонструкторТестовыхДанныхСлужебный.УстановитьРеквизиты(Контекст, ЗначенияРеквизитов);
Возврат ЭтотОбъект;

КонецФункции

// Устанавливает фиктивное значение реквизита текущей записи набора.
//
// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение.
//
// * Для примитивных значение генерируется случайное значение
// * Для ссылочных типов создается новый объект
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
//
// Параметры:
// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
// РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы
// - Неопределено
// ОграничениеТипа - Тип, ОписаниеТипов - Испольуется для ограничения типа составного реквизита, будет сгерерировано значение указанного типа
// - Неопределено - Будет сгенерировано значение, на основании типа реквизита,
// если реквизит составной, то будет использован случайный тип
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт

ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, ОграничениеТипа);
Возврат ЭтотОбъект;

КонецФункции

// Устанавливает фиктивные значения реквизитов текущей записи набора.
//
// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение.
//
// * Для примитивных значение генерируется случайное значение
// * Для ссылочных типов создается новый объект
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
//
// Параметры:
// ИменаРеквизитов - Строка - Имена реквизитов объекта или табличной части разделенные запятыми
// - Массив из Строка - Имена реквизитов объекта или табличной части
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция ФикцияРеквизитов(ИменаРеквизитов) Экспорт

ЮТКонструкторТестовыхДанныхСлужебный.ФикцияРеквизитов(Контекст, ИменаРеквизитов);
Возврат ЭтотОбъект;

КонецФункции

// Заполняет обязательные поля записи набора фиктивными значениями
//
// На основании метаданных определяются обязательные поля (Проверка заполнения = Выдавать ошибку),
// для них генерируются и устанавливаются фиктивные значение.
//
// * Для примитивных значение генерируется случайное значение
// * Для ссылочных типов создается новый объект
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция ФикцияОбязательныхПолей() Экспорт

ЮТКонструкторТестовыхДанныхСлужебный.ФикцияОбязательныхПолей(Контекст);
Возврат ЭтотОбъект;

КонецФункции

// Устанавливает дополнительное свойство набора записей.
//
// Параметры:
// ИмяСвойства - Строка - Имя дополнительного свойства
// Значение - Произвольный - Значение дополнительного свойства
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор
&НаКлиенте
Функция УстановитьДополнительноеСвойство(ИмяСвойства, Значение = Неопределено) Экспорт

ЮТКонструкторТестовыхДанныхСлужебный.УстановитьДополнительноеСвойство(Контекст, ИмяСвойства, Значение);
Возврат ЭтотОбъект;

КонецФункции

#КонецОбласти

#Область ПолучениеДанных

// Возвращает данные текущей записи набора.
//
// Возвращаемое значение:
// - Структура - Данные записи
&НаКлиенте
Функция ДанныеСтроки() Экспорт

Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеСтрокиКоллекции(Контекст);

КонецФункции

// Возвращает данные набора записей.
//
// Возвращаемое значение:
// Массив из Структура - Данные набора записей.
&НаКлиенте
Функция Данные() Экспорт

Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеОбъекта(Контекст);

КонецФункции

#КонецОбласти

// Записывает движения документа.
//
// Параметры:
// ОбменДаннымиЗагрузка - Булево - Записать с признаком `ОбменДанными.Загрузка = Истина`
&НаКлиенте
Процедура Записать(ОбменДаннымиЗагрузка = Ложь) Экспорт

ЮТКонструкторТестовыхДанныхСлужебный.ЗаписатьДвиженияДокумента(Контекст);

КонецПроцедуры

#КонецОбласти

//@skip-check module-structure-top-region
#Область СлужебныйПрограммныйИнтерфейс

&НаКлиенте
Процедура Инициализировать(Документ, ИмяРегистра) Экспорт

Контекст = ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктораДвижений(Документ, ИмяРегистра);

КонецПроцедуры

#КонецОбласти
// BSLLS:NonStandardRegion-on
Loading

0 comments on commit bb4cc59

Please sign in to comment.