Есть раздел, в нем деталь. Как запретить добавление детали в зависимости от значения поля раздела? Вот здесь описано как сделать на клиенте а здесь как на сервере, но не могу понять как достучаться до конкретного элемента раздела где отображается деталь и надо сделать запрет, как получить значения поля в контексте BaseGridDetailV2 или во встроенном БП процеса?

Нравится

0 комментариев
Показать все комментарии

Согласно описанию тут:

https://community.terrasoft.ru/articles/nastroika-znacenii-polei-detali…

Можно установить значения по умолчанию для новых записей, заимствуя их из текущей карточки:

        "defaultValues": {
            "UsrContract": {//колонка детали
                "masterColumn": "Id"//колонка основной записи (Важно! добавление id тоже нужно прописать (если связь не по id, а иначе - ориентироваться на блок "filter":))
            },
            "Account": {//колонка детали
                "masterColumn": "Account"//колонка основной записи
            },
            "UsrProject": {//колонка детали
                "masterColumn": "UsrProject"//колонка основной записи
            }
        }

Можно ли передать здесь другие значения? какие можно? Прошу пример синтаксиса.

Если же нет, то подскажите пожалуйста как передать доп. значения полей при нажатии кнопки создания в детали(примеры).

 

Нравится

3 комментария
Лучший ответ

Мерещук Сергей,

'masterColumn' - это название атрибута.

Таким образом можно передать любые значения из таблицы основной карточки в деталь.

Если Вы подробно опишите, что подразумеваете под доп. значениями полей и пример, какие значения Вам нужно передавать, тогда можно будет более предметно ответить на Ваш вопрос.

Также передавать данные можно через sandbox. Подробнее посмотрите в статье на Академии.

У вас пример уже полноценный. Хотите добавить например связь с Продуктом (при наличии), То пишите
 

"defaultValues": {
            "Product": {//колонка на вашей детали (в объекте)
                "masterColumn": "Product"//колонка из основной записи 
            }
        }

Литвинко Павел,

мой вопрос в том, можно ли передать подобным образом иные значения? что-то кроме значений "masterColumn"

Мерещук Сергей,

'masterColumn' - это название атрибута.

Таким образом можно передать любые значения из таблицы основной карточки в деталь.

Если Вы подробно опишите, что подразумеваете под доп. значениями полей и пример, какие значения Вам нужно передавать, тогда можно будет более предметно ответить на Ваш вопрос.

Также передавать данные можно через sandbox. Подробнее посмотрите в статье на Академии.

Показать все комментарии

Всем привет, подскажите как правильно добавить деталь Активности для нового раздела?

Нравится

6 комментариев

в активности создать справочное поле нового раздела. и по стандартному добавить активность указав связь id нового раздела - справочное поле нового раздела из активности

Dima Avdoshin,

Дмитрий спасибо!
Можно редактировать имеющуюся активность или нужно замещающий объект создавать?

Ещё один легкий способ. Если в новом разделе нужна ActionsDashboard и кейсы, то добавляя кейс, сразу же добавляются нужные поля в активности

Сергей Рогов,

замещающий, потому что вам же нужно как то связь указать с активностью

Dima Avdoshin,

Спасибо!

Владимир Соколов,

Спасибо за такой вариант, на нём и остановился

Показать все комментарии

При выведении в Итоги виджета "список" данных объекта, созданного на основе View, в Списке  иногда отображаются дублирующиеся записи. Но при экспорте в excel такие дубли отсутствуют. Есть подозрение, что такое поведение связано как-то с пагинацией.  Такая же ситуация происходит если делать на основе такого объекта деталь.

Кто-нибудь сталкивался с подобным?

Ниже пример схемы View используемый для объекта

CREATE VIEW [dbo].[VwTest] AS
SELECT
    NEWID() as Id
    ,GETDATE() as CreatedOn
    ,(SELECT Id FROM Contact WHERE Id='BE80A149-0089-4311-A775-CA6CD8937E2B') as CreatedById
    ,GETDATE() as ModifiedOn
    ,(SELECT Id FROM Contact WHERE Id='BE80A149-0089-4311-A775-CA6CD8937E2B') as ModifiedById
    ,0 as ProcessListeners
    ,Id as ContactId
    ,Age
FROM Contact
WHERE Age>30

 

 

 

Нравится

7 комментариев

Добрый день!
Прошу уточнить следующую информацию:
1. Полную версию приложения
2. Данное поведение наблюдается с одним объектом, или воспроизводится вне зависимости от объекта?
3. Также просим Вас уточнить детальный пошаговый кейс воспроизведения, начиная с создания объекта.

 

Спасибо!

Роман Казекин,

 1. Версия Sale Ent 7.16.3

2. Данное поведение характерно для всех объектов созданных на основе view.

3.

- Создал View ( как описано выше)

-  в управление конфигурацией создал объект с названием View

- включил checkbox Поведение - Представление в базе данных

4. Вывод объекта в Итогах в виде Списка

Евгений Кобзарь,

 

Уточните, пожалуйста, по какому полю Вы определяете записи, как дубли?

Также прошу посмотреть Select, который приходит детали. Есть ли там одинаковые записи?

Роман Казекин,

По полю Контакт. Select с View выбирает только 1 запись. Но в таблице/списке показывает несколько. Как правило происходит такое когда нажимаешь кнопку Показать больше. См. скриншот

Евгений Кобзарь,

 

Проверьте значение колонки ContactId, если там разные значения для записей, которые дублируются, то это значит что у Вас есть дубли в контактах. То есть это разные записи с одинаковыми данными.

Также можете напрямую в таблице контактов поискать контакты по имени, которое дублируется. Если таких записей несколько можете использовать механизм слияния дублей.

 

https://academy.terrasoft.ru/docs/user/bazis_platformy/dannye/dubli/poi…

Роман Казекин,

 

Дублей нет. На скриншоте видно, что ссылки на эти записи формируются идентичные (на основе одного Id). Мне кажется что проблема все же в offsetе и order by (по Id).  При нажатии показать больше идет повторный запрос к View у которого НЕ статический  ID (newid()). Если это так? То каким образом можно и как правильно во view создать этот ID.

Добрый день

Евгений, это абсолютно объяснимое поведение View при использовании Fetch next. Вы же получаете записи пачками, а каждая пачка имеет свои Id и сортировка может вам выдать "дубль"

Как правильно? Просто используейте Id из основного объекта. Вы же выбираете из Contact, так берите его Id вместо генерации newid()

 

Показать все комментарии

Всем доброго дня, можно ли изменить базовое количество отображаемых строк в детали? По умолчанию при загрузке отображается 10 штук. Хотим поставить побольше.

Нравится

2 комментария
Лучший ответ

В схеме детали прописать метод:

            initDetailOptions: function() {
                this.set("RowCount", 1000);
                this.callParent(arguments);
            },

В схеме детали прописать метод:

            initDetailOptions: function() {
                this.set("RowCount", 1000);
                this.callParent(arguments);
            },

спасибо, работает!

Показать все комментарии

Добрый день!
Подскажите пожалуйста, как можно сделать подобную кастомную деталь с разным типом полей, которые можно добавлять в зависимости от параметра?

Спасибо!

Нравится

1 комментарий

Добрый день.

Вряд ли вам кто-то подскажет по одному скриншоту как реализовать такую деталь, тем более она и так кастомная. Я рекомендую посмотреть исходный код этой детали и сделать по её примеру.

Показать все комментарии

Доброго дня!

 

Из-за нестандартной логики по заполнению полей по умолчанию при добавлении записей в деталь приходится вызывать мини-форму вручную. При этом не происходит обновление грида -- запись появляется на детали только после обновления страницы. 

 

Есть предположение, что нужно как-то грамотно организовать колбэки с this.reloadGridData(), но никак не выходит. Может кто сталкивался с подобным кейсом

 

Исходный код прилагаю.

addRecord: function(typeColumnValue) {
    var config = {
	    recordId: Terrasoft.GUID_EMPTY,
		operation: Terrasoft.ConfigurationEnums.CardOperation.ADD,
		entitySchemaName: "Account",
		valuePairs: this.getAddMiniPageDefaultValues(),
		miniPageSchemaName: "AccountMiniPage",
	};
    this.openMiniPage(config);
},
 
getAddMiniPageDefaultValues: function() {
    var defaultValues = [];
    defaultValues.push({
        name: "Parent", 
        value: this.get("MasterRecordId")
    });
	defaultValues.push({
	    name: "Category",
		value: "dc199b6d-e948-4598-8a12-c38ca90428d8"
	});
	return defaultValues;
}

Благодарю за ваши ответы

Нравится

3 комментария
Лучший ответ

Вадим, добрый день

У вас деталь - это один модуль, а миникарточка - другой. Единственный вариант общения между модулями - это сообщения. И да, при  работе с этой миникарточкой вы всегда будете отправлять сообщение, а вот реагировать на него будет деталь только в том случае, если этот модуль сейчас загружен в системе (фактически, если он отображается на экране)

Вадим, добрый день.

 

Попробуйте реализовать нужный Вам функционал через обмен сообщениями песочницы. Более подробно об этом можно почитать в статье на Академии.

Алла Савельева,

Спасибо за ответ! Однако реализация не совсем очевидна. Неужели для реализации этого кейса придется постоянно публиковать сообщение со стороны добавляемого объекта для обновления детали? Учитывая то, что добавляемый объект, помимо детали, может создаваться и из других мест

Вадим, добрый день

У вас деталь - это один модуль, а миникарточка - другой. Единственный вариант общения между модулями - это сообщения. И да, при  работе с этой миникарточкой вы всегда будете отправлять сообщение, а вот реагировать на него будет деталь только в том случае, если этот модуль сейчас загружен в системе (фактически, если он отображается на экране)

Показать все комментарии

Доброго времени суток коллеги, я сделал все как описано тут , но при добавлении контактов не сохраняется значение в детали просидел уже все выходные. Пожалуйста помогите. 
Создал объект: UsrCaseTest

  1. В этом объекте создал справочное поле UsrContact( родительский объект "Contact")
  2. Через мастера все добавил, настроил. Деталь работает справочное поле все показывает,
  3. После добавления значения не сохраняются. 
  4. Код схемы детали: 
     

    // Определение схемы и установка ее зависимостей от других модулей.
    define("UsrCaseTestDetail", ["ConfigurationEnums"],
        function(configurationEnums) {
            return {
                // Название схемы объекта детали.
                entitySchemaName: "UsrCaseTest",
                // Методы схемы детали.
                methods: { 
                    //Возвращает колонки, которые выбираются запросом.
                    getGridDataColumns: function() {
                        return {
                            "Id": {path: "Id"},
                            "UsrContact": {path: "UsrContact"},
                            "UsrContact.Name": {path: "UsrContact.Name"}
                        };
                    },
                    openContactLookup: function() {
                        var config = {
                            entitySchemaName: "Contact",
                            multiSelect: true,
                            columns: ["Name"]
                        };
                        // Экземпляр класса [EntitySchemaQuery].
                        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                            // Установка корневой схемы.
                            rootSchemaName: this.entitySchemaName
                        });
                        // Добавление колонки [Id].
                        esq.addColumn("Id");
                        // Добавление колонки [Id] из схемы [Document].
                        esq.addColumn("UsrContact.Id", "UsrContactId");
                        esq.getEntityCollection(function(result) {
                            var existsContactsCollection = [];
                            if (result.success) {
                                result.collection.each(function(item) {
                                    existsContactsCollection.push(item.get("UsrContactId"));
                                });
                            }
                            // Добавление фильтра в конфигурационный объект.
                            if (existsContactsCollection.length > 0) {
                                var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
                                existsContactsCollection);
                                existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL;
                                existsFilter.Name = "existsFilter";
                                config.filters = existsFilter;
                            }
                            // Вызов модального окна справочника
                            this.openLookup(config, this.addCallBack, this);
                        }, this);
                    },

                    // Обработчик события сохранения страницы редактирования.
                    onCardSaved: function() {
                        this.openContactLookup();
                    },

                    //Открывает справочник документов в случае если страница редактирования заказа была ранее сохранена.
                    addRecord: function() {
                        var masterCardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]);
                        var isNewRecord = (masterCardState.state === configurationEnums.CardStateV2.ADD ||
                        masterCardState.state === configurationEnums.CardStateV2.COPY);
                        if (isNewRecord === true) {
                            var args = {
                                isSilent: true,
                                messageTags: [this.sandbox.id]
                            };
                            this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);
                            return;
                        }
                        this.openContactLookup();
                    },

                    // Добавление выбранных продуктов.
                    addCallBack: function(args) {
                        // Экземпляр класса пакетного запроса BatchQuery.
                        var bq = this.Ext.create("Terrasoft.BatchQuery");
                        // Коллекция выбранных в справочнике документов.
                        this.selectedRows = args.selectedRows.getItems();
                        // Коллекция, передаваемая в запрос.
                        this.selectedItems = [];
                        // Копирование необходимых данных.
                        this.selectedRows.forEach(function(item) {
                            item.UsrContactId = item.value;
                            bq.add(this.getDocumentInsertQuery(item));
                            this.selectedItems.push(item.value);
                        }, this);
                        // Выполнение пакетного запроса, если он не пустой.
                        if (bq.queries.length) {
                            this.showBodyMask.call(this);
                            bq.execute(this.onContactInsert, this);
                        }
                    },

                    //Возвращает запрос на добавление текущего объекта.
                    getDocumentInsertQuery: function(item) {
                        var insert = Ext.create("Terrasoft.InsertQuery", {
                            rootSchemaName: this.entitySchemaName
                        });
                        insert.setParameterValue("UsrContact", item.UsrContactId, this.Terrasoft.DataValueType.GUID);
                        return insert;
                    },

                    // Метод, вызываемый при добавлении записей в реестр детали.
                    onContactInsert: function(response) {
                        this.hideBodyMask.call(this);
                        this.beforeLoadGridData();
                        var filterCollection = [];
                        response.queryResults.forEach(function(item) {
                            filterCollection.push(item.id);
                        });
                        var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
                            rootSchemaName: this.entitySchemaName
                        });
                        this.initQueryColumns(esq);
                        esq.filters.add("recordId", Terrasoft.createColumnInFilterWithParameters("Id", filterCollection));
                        esq.on("createviewmodel", this.createViewModel, this);
                        esq.getEntityCollection(function(response) {
                            this.afterLoadGridData();
                            if (response.success) {
                                var responseCollection = response.collection;
                                this.prepareResponseCollection(responseCollection);
                                this.getGridData().loadAll(responseCollection);
                            }
                        }, this);
                    },

                    // Метод, вызываемый при удалении выбранных записей детали.
                    deleteRecords: function() {
                        var selectedRows = this.getSelectedItems();
                        if (selectedRows.length > 0) {
                            this.set("SelectedRows", selectedRows);
                            this.callParent(arguments);
                        }
                    },

                    // Скрыть пункт меню [Копировать].
                    getCopyRecordMenuItem: Terrasoft.emptyFn,
                     // Скрыть пункт меню [Изменить].
                    getEditRecordMenuItem: Terrasoft.emptyFn,
                    // Возвращает имя колонки по умолчанию для фильтра.
                    getFilterDefaultColumnName: function() {
                        return "UsrContact";
                    }
                },
                // Массив модификаций.
                diff: /**SCHEMA_DIFF*/[
                    {
                        // Тип операции — слияние.
                        "operation": "merge",
                        // Название элемента схемы, над которым производится действие.
                        "name": "DataGrid",
                        // Объект, свойства которого будут объединены со свойствами элемента схемы.
                        "values": {
                            "rowDataItemMarkerColumnName": "UsrContact"
                        }
                    },
                    {
                        // Тип операции — слияние.
                        "operation": "merge",
                        // Название элемента схемы, над которым производится действие.
                        "name": "AddRecordButton",
                        // Объект, свойства которого будут объединены со свойствами элемента схемы.
                        "values": {
                            "visible": {"bindTo": "getToolsVisible"}
                        }
                    }
                ]/**SCHEMA_DIFF*/
            };
        }
    );

  5. Код карточки контакта: define("ContactPageV2", [], function() {
        return {
            entitySchemaName: "Contact",
            attributes: {},
            modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
            details: /**SCHEMA_DETAILS*/{
                "UsrCaseDetail": {
                    "schemaName": "UsrCaseTestDetail",
                    "entitySchemaName": "UsrCaseTest",
                    "filter": {
                        "detailColumn": "UsrContact",
                        "masterColumn": "Id"
                    }
                }
            }/**SCHEMA_DETAILS*/,
            businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
            methods: {},
            dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
            diff: /**SCHEMA_DIFF*/[****]/**SCHEMA_DIFF*/};

Нравится

4 комментария
Лучший ответ

Ислам Ибрагимжанов,

У вас деталь (UsrCaseTest) привязана к карточке Контактов (Contact) по полю UsrContact.

Допустим, вы находитесь в карточке ИвановИван

Выбирая в вашем справочнике значения - вы в базу пишете в ту же колонку UsrContact значения, которые выбрали, допустим вы выбрали 2 значения ПетровПетр и СидоровСидр.

Итого у вас в табличке UsrCaseTest запишутся значения:

ПетровПетр и СидоровСидр

 

Как вы хотите чтобы они отобразились в вашей карточке ИвановИван? У вас на детали стоит фильтр - отображать из таблицы UsrCaseTest те записи, в поле UsrContact лежит Id текущей записи - ИвановИван. Добавленные же записи вы сможете увидеть в карточке ПетровПетр или СидоровСидр (в соответствии с фильтром).

 

Чтобы все работало верно - посмотрите еще раз пример на академии.

Вам нужно 2 поля. Первое - связь с карточкой - по нему у вас привязана деталь UsrContact. Второе - в которое должны складываться выбранные значения. Пусть будет UsrSelectedContact. Исправляете в коде методы которые я говорил - и должно работать

Судя по коду, вы забываете заполнять колонку связи с вашим объектом (основной карточкой). Обратите внимание на функцию getDocumentInsertQuery в примере. Там заполняются 2 поля:

UsrOrder //связь с карточкой
UsrDocument // документ (то что выбираем из справочника)

 

Также обратите внимание на функцию addCallBack. В ней как раз и прокидывают поле связи с карточкой. Вы этот код также вырезали.

 

 

 

 

Fast traslate

 

Icon translate

 

 

 

Дмитрий Антохин,

Я их вырезал, потому что не смог понять зачем мне второй справочник. И после вашего ответа, так же мне не стало понятней, о какой связи идет речь? Можете пожалуйста более понятно описать, что я делаю не так или пропускаю.

Ислам Ибрагимжанов,

У вас деталь (UsrCaseTest) привязана к карточке Контактов (Contact) по полю UsrContact.

Допустим, вы находитесь в карточке ИвановИван

Выбирая в вашем справочнике значения - вы в базу пишете в ту же колонку UsrContact значения, которые выбрали, допустим вы выбрали 2 значения ПетровПетр и СидоровСидр.

Итого у вас в табличке UsrCaseTest запишутся значения:

ПетровПетр и СидоровСидр

 

Как вы хотите чтобы они отобразились в вашей карточке ИвановИван? У вас на детали стоит фильтр - отображать из таблицы UsrCaseTest те записи, в поле UsrContact лежит Id текущей записи - ИвановИван. Добавленные же записи вы сможете увидеть в карточке ПетровПетр или СидоровСидр (в соответствии с фильтром).

 

Чтобы все работало верно - посмотрите еще раз пример на академии.

Вам нужно 2 поля. Первое - связь с карточкой - по нему у вас привязана деталь UsrContact. Второе - в которое должны складываться выбранные значения. Пусть будет UsrSelectedContact. Исправляете в коде методы которые я говорил - и должно работать

Дмитрий Антохин,

Вот теперь я четко понял, что не так. Благодарю за уделенное время. Все сработало с первого раза.

Показать все комментарии

Приветствую, коллеги!
Помогите разобраться с вопросом, пожалуйста. 

Есть раздел "Номенклатура материалов" (рис.1). На основе этого раздела создал деталь с редактируемым реестром, по методике (https://academy.terrasoft.ru/docs/7-16/developer/elements_and_component…). Эту деталь вывел на раздел "Обращение" (рис.2). В деталь элементы добавляются и создаются сразу в разделе.

А как сделать так, чтобы при добавлении в делать в поле "Название" была возможность выбрать уже существующие материалы из раздела "Номенклатура материалов"?

 

Прикрепленные файлы

Нравится

1 комментарий

Артур, добрый день!

 

Для реализации подобной задачи Вы можете взять за пример базовую деталь, которая находится на странице раздела "Заказы".

Показать все комментарии

Всем доброго дня.

Подскажите пожалуйста, как проще всего добавить номер по порядку при создании новой записи в детали через "+"? 

Ранее сделала заполнение номера по бп с тригером на добавление записи, хотелось бы переделать кодом или через установку значения по умолчанию.

Нравится

2 комментария
Лучший ответ

Я делал автонумерацию через процесс на объекте. Триггер на срабатываение кода - после добавления записи или после удаления.

 

Код следующий, на сколько тут все хорошо не знаю, но вроде работает. Ручное переименование можно запретить, либо добавить "стрелочки" с перетаскиванием позиции вверх-вниз на клиенте.

 

using System.Linq;
 
public virtual void RunNumeration()
        {
            string parentEnityName = "UsrParent"; //Колонка с родителем, например Invoice для объекта InvoiceProduct
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, Entity.Schema.Name);
            var positionNumberColumn = esq.AddColumn("UsrPositionNumber").Name; //колонка с номером по порядку
            esq.AddAllSchemaColumns();
            if (parentEnityName.IsNotNullOrEmpty())
            {
                Guid parentEnityId = Entity.GetTypedColumnValue<Guid>(parentEnityName+"Id");
                if (parentEnityId != Guid.Empty)
                {
                    esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, parentEnityName, parentEnityId));
                    var entityProductsCollection = esq.GetEntityCollection(UserConnection)
		            .OrderBy(x => x.GetTypedColumnValue<int>(positionNumberColumn) == 0)
		            .ThenBy(x => x.GetTypedColumnValue<int>(positionNumberColumn));
		            int newNumber = 0;
		            foreach (var item in entityProductsCollection)
		            {
		                int number = item.GetTypedColumnValue<int>(positionNumberColumn);
		                newNumber++;
		                if (number != newNumber)
		                {
		                    item.SetColumnValue("UsrPositionNumber", newNumber);
		                    item.Save();
		                }
		            }
                }
            }
        }

 

Я делал автонумерацию через процесс на объекте. Триггер на срабатываение кода - после добавления записи или после удаления.

 

Код следующий, на сколько тут все хорошо не знаю, но вроде работает. Ручное переименование можно запретить, либо добавить "стрелочки" с перетаскиванием позиции вверх-вниз на клиенте.

 

using System.Linq;
 
public virtual void RunNumeration()
        {
            string parentEnityName = "UsrParent"; //Колонка с родителем, например Invoice для объекта InvoiceProduct
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, Entity.Schema.Name);
            var positionNumberColumn = esq.AddColumn("UsrPositionNumber").Name; //колонка с номером по порядку
            esq.AddAllSchemaColumns();
            if (parentEnityName.IsNotNullOrEmpty())
            {
                Guid parentEnityId = Entity.GetTypedColumnValue<Guid>(parentEnityName+"Id");
                if (parentEnityId != Guid.Empty)
                {
                    esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, parentEnityName, parentEnityId));
                    var entityProductsCollection = esq.GetEntityCollection(UserConnection)
		            .OrderBy(x => x.GetTypedColumnValue<int>(positionNumberColumn) == 0)
		            .ThenBy(x => x.GetTypedColumnValue<int>(positionNumberColumn));
		            int newNumber = 0;
		            foreach (var item in entityProductsCollection)
		            {
		                int number = item.GetTypedColumnValue<int>(positionNumberColumn);
		                newNumber++;
		                if (number != newNumber)
		                {
		                    item.SetColumnValue("UsrPositionNumber", newNumber);
		                    item.Save();
		                }
		            }
                }
            }
        }

 

Трефилов Павел Сергеевич, 

 

спасибо, отлично работает с вашим кодом)

Показать все комментарии