У нас реализована раздельная автоматическая нумерация счетов и документов для разных юр.лиц нашей компании. То есть, если юр. лицо Xxx, то по маске для Xxx документам и счетам присваивается присваиваются соответствующие номера с префиксом X. Если Yyy - то с префиксом Y.
Для счетов в src_InvoiceEditScript по событию OKClick обрабатываем функцию btnOKOnClick(), где в зависимости от значения поля 'SupplierID' (поставщик) вызываем SetItemSystemNumber() с разными значениями.

function btnOKOnClick(Control) {
        var Dataset = dlData.Dataset;
        var DefaultValues = GetAttribute(Self, 'DefaultValues');
        var WorkflowItemID = Dataset.ValAsStr('WorkflowItemID');
        if (Dataset.State != dstInsert) {
                if (!ClearVises('InvoiceVises', 'InvoiceID', Dataset('ID'))) {
                        return;
                }
        }
    var oDate = new Date();
    var DYear = oDate.getYear();
    DYear = DYear - 2000;
    var SYear = DYear.toString();
        if (Dataset.Values('InvoiceNumber') == null) {         
                if (Dataset.Values('SupplierID') == '{7F8B1E5C-C450-47C6-B770-1AF0CBCAF591}') {
                //ShowConfirmationDialog(Dataset.Values('SupplierID'));
            SetItemSystemNumber('InvoicePro', Dataset, 'InvoiceNumber');
            } else
                if (Dataset.Values('SupplierID') == '{933958B9-E358-4A98-8A02-5BAD9AC869A8}') {
            SetItemSystemNumber('InvoiceIp', Dataset, 'InvoiceNumber');
            } else
            if (Dataset.Values('SupplierID') == '{61773DB2-980C-49F2-881D-8BD59EC1A0AA}') {
            SetItemSystemNumber('InvoiceTch', Dataset, 'InvoiceNumber');
            } else
            if (Dataset.Values('SupplierID') == '{006B2B81-D597-40E9-A4EC-73171D224F5C}') {
            SetItemSystemNumber('InvoiceBLD', Dataset, 'InvoiceNumber');
            } else
                if (Dataset.Values('SupplierID') == '{084FA6BB-4421-4E23-9641-1E8D11D407C8}') {
                SetItemSystemNumber('InvoiceGms', Dataset, 'InvoiceNumber');
            } else {
            SetItemSystemNumber('Invoice', Dataset, 'InvoiceNumber');
            }
            var GeneratedNumber = Dataset.Values('InvoiceNumber') + '/' + SYear;
                  Dataset.Values('InvoiceNumber') = GeneratedNumber;
        }      
        InvoiceEdit.IsCompleting = true;
        if (CheckItemNumberDuplicate('Invoice', Dataset, 'InvoiceNumber',
                "Счет")){
                if (!scr_BaseDBEdit.btnOKOnClick(Control)) {
                        return;
                }
        }
        var IsCreatedByDocumentID = Self.Attributes('IsCreatedByDocumentID');
        if (IsCreatedByDocumentID) {
                if (ShowConfirmationDialog("Перейти к созданному счету?") == wmrYes) {
                        GotoWorkspace('wnd_InvoicesWorkspace', BaseDBEdit.RecordID);
                }
        }
        if (Self.IsVisible) {
                return;
        }
        ProcessWorkflowItem(WorkflowItemID);
}

Аналогичным реализована работа с названиями для документов в src_DocumentEditScript:

function dlDataOnDatasetBeforePost(Dataset, DoPost) {
    var oDate = new Date();
    var DYear = oDate.getYear();
    var DMonth = oDate.getMonth()+1;
    var DDate = oDate.getDate();
    DYear = DYear - 2000;    
    var SYear = DYear.toString();
    if (DMonth10)
     {
      var SMonth = '0' + DMonth.toString();
     }
    else {
          var SMonth = DMonth.toString();
         }
        if (DDate10)
         {
          var SDate = '0' + DDate.toString();
         }
        else {
          var SDate = DDate.toString();
         }  
    var DocumentTypeID = Dataset('DocumentTypeID');    
        if (Dataset.Values('DocumentNumber') == null) {
            if (DocumentTypeID == '{D8525E18-F8FE-4583-9E54-CA43A7129C45}' || DocumentTypeID == '{DE983B1A-6CF3-4A79-AF34-DCB6A2D0DB76}') /* Акт и Торг12 */
             {
                  var InvoiceID = Dataset.Values('InvoiceID');
              if (InvoiceID != null) {
                        var InvoiceDataset = Services.GetNewItemByUSI('ds_Invoice');
                    ApplyDatasetFilter(InvoiceDataset, 'ID', InvoiceID, true);
                    InvoiceDataset.Open();
                    var InvoiceSupplierID = InvoiceDataset('SupplierID');
                    InvoiceDataset.Close();
                  }
                  else {
                        MessageBox("Нет привязанного счета!");
                  }
                  if (InvoiceSupplierID == '{7F8B1E5C-C450-47C6-B770-1AF0CBCAF591}') {
                SetItemSystemNumber('DocumentPro', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
                  if (InvoiceSupplierID == '{006B2B81-D597-40E9-A4EC-73171D224F5C}') {
                SetItemSystemNumber('DocumentBLD', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
                  if (InvoiceSupplierID == '{933958B9-E358-4A98-8A02-5BAD9AC869A8}') {
                SetItemSystemNumber('DocumentIp', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
              if (InvoiceSupplierID == '{61773DB2-980C-49F2-881D-8BD59EC1A0AA}') {
                SetItemSystemNumber('DocumentTch', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else
              if (InvoiceSupplierID == '{084FA6BB-4421-4E23-9641-1E8D11D407C8}') {
                SetItemSystemNumber('DocumentBgm', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              } else {
                SetItemSystemNumber('Document', Dataset, 'DocumentNumber');
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              }
             }    
            else if (DocumentTypeID == '{584720AE-7F93-461B-BE79-AFA15A4D85D4}') /* Входящий */
             {
              SetItemSystemNumber('DocumentVI', Dataset, 'DocumentNumber');
              var ii = 0;
              var array = Dataset.Values('DocumentNumber').split("");
              for(var i = 0; i array.length; i++)
               {
                if (array[i] == '№')
                 {
                  var ii = 1;
                 }
                   }
              if (ii != 1)
               {
                var GeneratedNumber = 'ВХ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;    
               }
             }
            else if (DocumentTypeID == '{EFFB172C-B755-4E77-BFC8-3B121140C74F}') /* Исходящий */
             {
              SetItemSystemNumber('DocumentVI', Dataset, 'DocumentNumber');
              var ii = 0;
              var array = Dataset.Values('DocumentNumber').split("");
              for(var i = 0; i array.length; i++)
               {
                if (array[i] == '№')
                 {
                  var ii = 1;
                 }
                   }
              if (ii != 1)
               {
                var GeneratedNumber = 'ИСХ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;    
               }
             }
            else if (DocumentTypeID == '{DD6B6F0E-FD7B-42EF-95D0-486A2EFC02B3}') /* Счет-фактура */
             {
                  var InvoiceID = Dataset.Values('InvoiceID');
              if (InvoiceID != null) {
                        var InvoiceDataset = Services.GetNewItemByUSI('ds_Invoice');
                    ApplyDatasetFilter(InvoiceDataset, 'ID', InvoiceID, true);
                    InvoiceDataset.Open();
                    var InvoiceSupplierID = InvoiceDataset('SupplierID');
                    InvoiceDataset.Close();
                  }
                  else {
                        MessageBox("Нет привязанного счета!");
                  }
                  if (InvoiceSupplierID == '{7F8B1E5C-C450-47C6-B770-1AF0CBCAF591}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-БПР-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              } else
                  if (InvoiceSupplierID == '{933958B9-E358-4A98-8A02-5BAD9AC869A8}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-ДНБ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              } else                                                                      
                  if (InvoiceSupplierID == '{006B2B81-D597-40E9-A4EC-73171D224F5C}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-БЛД-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              } else                                                                      
              if (InvoiceSupplierID == '{61773DB2-980C-49F2-881D-8BD59EC1A0AA}') {
                        SetItemSystemNumber('DocumentIF', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-ТЧК-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              }                                                                          
              if (InvoiceSupplierID == '{084FA6BB-4421-4E23-9641-1E8D11D407C8}') {
                    SetItemSystemNumber('DocumentIfBgm', Dataset, 'DocumentNumber');
                var GeneratedNumber = 'СФ-' + Dataset.Values('DocumentNumber');
                Dataset.Values('DocumentNumber') = GeneratedNumber;
              }                                                                          
              else {
                var GeneratedNumber = Dataset.Values('DocumentNumber');
              }    
             }
            else {
              SetItemSystemNumber('Document', Dataset, 'DocumentNumber');
              var GeneratedNumber = Dataset.Values('DocumentNumber');
             }
             var GeneratedNumber = Dataset.Values('DocumentNumber') + '/' + SYear;
             Dataset.Values('DocumentNumber') = GeneratedNumber;
     }
}

Так было заведено несколько юр. лиц и для них всё замечательно работало. Сейчас я добавил ещё одно юр. лицо. Раздельная автоматическая нумерация с нужным префиксом по маске работает замечательно, но в отчётах по документам и счетам (ТОРГ-12, счет-фактуры, счтеа и др.) выводится только футер (там только одно статическое поле memo не связанное не получающие никаких данных ни из каких датасетов).

Есть подозрение, что нужно было поправить ещё где-то. но я совершенно не помню где ещё.
Подскажите, что я забыл?

Нравится

2 комментария

что-то я не уловил связи между нумерацией и отчетами


но в отчётах по документам и счетам выводится только футер

И? Тоже не понял в чем проблема. В отчетах номер не выводится вообще или как?

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

Добрый день,
Подскажите как можно реализовать ввод телефона по маске +7 (ххх) ххххххх?
Версия 7.4

Нравится

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

Здравствуйте, Олег!

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Олег, во вложении документик, посмотрите.

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

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

Дмитрий, как раз фиксированная и нужна, спасибо, буду ждать

Дмитрий?

Да, я тут, извиняюсь.

Во вложении контрол позволяющий вводить текст по массиву масок.

Чтобы его использовать необходимо добавить этот модуль в dependency страницы и в секцию define, а в diff поля указать, что необходимо использовать класс MultiMaskEdit и его маску:

{
                    "operation": "merge",
                    "name": "MobilePhone",
                    "values": {
                                         "controlConfig": {
                                                             className: "Terrasoft.controls.MultiMaskEdit",
                                                             mask: {
                                                                                 formats: ["+7(999)999-99-99", "+380(99)999-99-99"]
                                                             },
                                                             onBeforePasteFormatValue: TSCCommon.getDigitsFromString
                                         }
                    }
}

Метод onBeforePasteFormatValue указываете, если хотите обработать значения перед вставкой из буфера обмена в контрол. Этот метод необязательный – контрол вставит только допустимые значения, но, например, если предварительно обработать вставляемую строку и оставить только цифры - то для маски выше телефон вставиться полностью, независимо от того какие символы использовались дополнительно.
По умолчанию в качестве символов подстановки в шаблонах маски используются:

{
                    //цифры
                    "9": {
                                         re: "[0-9]"
                    },
                    //кириллица
                    "к": {
                                         re: "[а-яА-ЯёЁ]"
                    },
                    //латинские
                    "l": {
                                         re: "[a-zA-Z]"
                    },
                    //любая буква
                    "c": {
                                         re: "[а-яА-ЯёЁa-zA-Z]"
                    },
                    //любая буква или цифра
                    "#": {
                                         re: "[а-яА-ЯёЁA-Za-z0-9]"
                    }
}

Вы можете задать собственный символ для шаблон ввода с помощью maskConfig, например, если вам нужна 9-ка как обычный символ, то можно указать что для подстановки цифр использовать «0». В re мы указываем регулярное выражение для проверки. Также необходимо указать символ заменяющие пустые значение в параметре placeHolderChar.
Например, так можно задать маску позволяющая вводить книжные коды (ISBN), где 978 это просто цифры, а «0» - подстановочный символ:

{
                    className: 'Terrasoft.controls.MultiMaskEdit',
                    value: {
                                         bindTo: 'ISBN'
                    },
                    mask: {
                                         formats: ["978-0-000-00000-0"]
                    },
                    maskConfig: {
                                         definitions: {
                                                             //цифры
                                                             "0": {
                                                                                 re: "[0-9]"
                                                             },
                                                             placeHolderChar: "_"
                                         }
                    }
}

Известная проблема – валидация контрола не передается в модель карточки, т.е. хотя контрол показывает что значение не верно, карточка все равно сохраняется. Пока что надо делать дополнительные проверки в карточке руками.

Спасибо

Дмитрий подскажите, не смог разобраться, как подключить Terrasoft.controls.MultiMaskEdit во вложении, чтобы его можно было добавить в dependencies и define?
Пробовал создать модуль, в него перенести код из вложения, подключил его в dependencies, объявил в define, но получаю следующую ошибку

GET http://*********/0/Nui/Terrasoft/controls/MultiMaskEdit.js?_dc=1416552545493 404 (Not Found)

Олег, к сожалению, не я автор данного контрола и сам не пробовал его реализовать (однако видел уже готовый пример по инструкции выше). Может быть проблема в пакете, в который вы добавили данный модуль? Прописаны ли в нём все зависимости?
Проверьте, пожалуйста, если не поможет - вынужден попросить Вас подождать с ответом, задам ваш вопрос автору, как только он вернется из заслуженного отпуска :)

Разобрался, объявил вложенный контрол как MultiMaskEdit вместо Terrasoft.controls.MultiMaskEdit и использовал уже короткое название, отлично работает. Спасибо

Добрый день!
Подскажите как использовать маску для телефона в зависимости от значения другого поля (например от страны)?

Самый простой вариант - использовать несколько контроллов с разными масками, и показывать в определенный момент нужный, а остальные скрывать. Иначе - нужно экспериментировать, переписывать исходный код - на это времени, к сожалению, в данный момент нет.

Спасибо, Дмитрий, большое!
Подсказали в каком направлении двигаться.

Контрол обновлен. В приложении описание и исходники.
maski_vvoda.rar

Добрый день!
Подскажите, пожалуйста как изменить контрол, так чтобы можно было вводить только латинские символы, но без их фиксированного количества, т.е. как в TextEdit.
Заранее спасибо.

Александр, вместо

//цифры
                                                             "0": {
                                                                                 re: "[0-9]"
                                                             },

прописываете:

"l": {
                                         re: "[a-zA-Z]"
 },

Андрей Каспаревич пишет:

Контрол обновлен. В приложении описание и исходники.

maski_vvoda.rar

Андрей, а посвежее версии нет случаем?

Основное что тут не очень хорошо смотрится, это когда для редактирования еще пустого поля с маской кликаем в середину поля и попадаем для редактирования некрасиво в середину пустого шаблона...

 Сылки на вложения не работают

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

Периодически возникает необходимость создавать маски номеров не стандартного типа (%1), а с использованием нулей в начале (например, 000000%1).

При таком использовании нули будут каждый раз добавляться в левой части не зависимо от количества символов, поэтому вместо маски:

00000010

получиться следующая:

000000010

Есть некоторые варианты решения вопроса, но мы «выкрутились» простым кодом JavaScript:

1. Создали для примера следующую маску:

/system/files/invoicemask_1.png

2. Добавили следующий код для счетов:

         var CurrentNumber = Dataset.Values('InvoiceNumber');
         var CurrentNumberLength = CurrentNumber.length;
         if (CurrentNumberLength > 8) {
                   var NewNumber = CurrentNumber.substring(CurrentNumberLength - 8);
                   Dataset.Values('InvoiceNumber') = NewNumber;
         }

/system/files/invoice_2.png

В результате мы получили нумерацию такого типа:

/system/files/invoicenumber_3.png

Нравится

Поделиться

4 комментария

Доброго времени суток всем!
Недавно вот придумал такой еще универсальный вариант:

В сервисе Common\Library\scr_CommonActions приведите функцию
function GenerateSystemNumber(ItemName) к виду:

function GenerateSystemNumber(ItemName) {
	var GeneratedNumber;
	var SystemParameterName = FormatStr('%1Number', ItemName);
	var MaskName = FormatStr('%1Mask', ItemName);
	var SystemNumber =
		GetSystemParameterValueEx(SystemParameterName, true) + 1;		
 
	try {
        var MaskLength = System.GetSystemSettingValue(FormatStr('%1Length', MaskName), false);
 
    	while (SystemNumber.toString().length < MaskLength) {
           SystemNumber = '0'.concat(SystemNumber);
        }
 
    } catch (e) {
    	Log.Write(0, e.message);
	} finally {
        //var MaskLength = null;
    }
 
	SetSystemParameterValue(SystemParameterName, SystemNumber);
	var Mask = GetSystemParameterValueEx(MaskName, false);
	if ((Mask != EmptyStr) && (Mask != undefined) && (Mask != null)) {
		GeneratedNumber = FormatStr(Mask, SystemNumber.toString());
	} else {
		GeneratedNumber = SystemNumber.toString();
	}
	return GeneratedNumber;
}

Теперь, для автоматического заполнения номера записи нулями слева, нужно ввести дополнительный системный параметр под каждый раздел, где это нужно:

<Имя Разделя><Mask>Length

.

Например:
раздел Счета - Invoice
маска счета: InvoiceMask
количество символов номера в номере счета: InvoiceMaskLength

Здравствуйте, Павел!

Есть вопрос: что будет, если в момент времени между выполнением строк

var SystemNumber =
                GetSystemParameterValueEx(SystemParameterName, true) + 1;

и

SetSystemParameterValue(SystemParameterName, SystemNumber);

то же самое проделает скрипт другого пользователя?

Например, если у нас в системе не 10-20 пользователей работают, а 200-500?

Здравствуйте!

Если такая ситуация в жизни возможна - приведет только к тому, что в системе появится 2 счета с одинаковыми номерами. Но к ошибке это точно не приведет. Т.к. GetSystemParameterValueEx и SetSystemParameterValue приводят к обращению в СУБД, а она уже управляет очередью запросов.

Поэтому, теориетически, если рассматривать "чистую модель" ситуации, получение одного и того же параметра SystemParameterName возможно. Когда второй пользователь его уже получает пока первый еще не изменил. Но, фактически ситуация настолько маловероятна, если учесть что проме этих двух запросов в БД будет еще с десяток других идти, и все они будут в очередь попадать...

В целом, можно не беспокоиться.

Позволю себе не согласиться...

У нас регулярно происходят подобные ситуации, правда применительно к шагам процесса, а не генерации уникальных номеров. Когда-нибудь думаю дойдут руки поправить.

Этот код не обеспечивает самого главного: последовательной и уникальной генерации номеров.
Принцип "ситуация настолько маловероятна" когда пользователей достаточно много, и сервер БД все таки сервер, а не настольный компьютер, к сожалению, не работает.

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

Добрый день, уважаемые пользователи интернет сообщества Terrasoft!

Как вы знаете, в системе BPMonline в таких сущностях как счет, документ и пр., существует поле "Номер", которое автоматически (если другой не указан) проставляется как номер предыдущей сущности плюс один. Иногда возникает необходимость добавить префиксы к нумерации, т.е к примеру счета нумеровать как С-1, С-2 и т.д., документы - Д-1, Д-2 и т.д.
Предлагаю Вам простой способ реализации автоматического проставления префиксов к номерам:
для этого Вам необходимо перейти в раздел «Системные настройки» меню [Инструменты] и открыть группу «Автонумерация записей». В этой группе откройте системную настройку «Маска номера инцидента» (документа, счета и т. д.)

1

и измените значение следующим образом:

I: {0} (для инцидента, другие префиксы - для других сущностей).

2

Приятной работы с BPMonline!

Нравится

Поделиться

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

Добрый день!
А как например добавить текущую дату к номеру документа?
Какие-то еще маски кроме {0} целочисленных допускаются?
Или это уже на уровне базы данных нужно делать?
Спасибо

На уровне конфигурации.

Чтобы произвольным образом изменить маску, нужно доработать в схеме «Сгенерировать номер по порядку» функцию «GenerateNumberForSchemaName». Там на вход подаётся название раздела, можно для какого-то одного или для любого раздела заменять определённый макрос на текущую дату.

Если возникают вопросы о конретной реализации, напишите пример формата номера, который хотите получить.

Спасибо, Александр.
Нашел метод GenerateSequenseNumber в схеме «Сгенерировать номер по порядку» в пакете Base 7.5.0
Подскажите еще, как мне его переопределить в своем пакете? Создать свой бизнес-процесс?
Хочу формировать номер заказа в формате YYYY/MM-###

Ниже генерация номера договора (OrderPageV2) в формате Город: кодГорода + Знач.Сис.Настройки + НомерПопорядку(6 знаков) + Знач.Сис.Настройки + КодПродуктаВДоговоре.
Может поможет:

onEntityInitialized: function() {
				this.callParent(arguments);
				if (this.isAddMode() || this.isCopyMode() || this.get("NumberEx") === ""
                        || this.get("NumberEx") === undefined || this.get("NumberEx") === null) {
                    if (this.get("Number") === "") {
                        this.getIncrementCode(function (responce) {
                            this.set("Number", responce);
                        });
                    }
					var owner = this.get("Owner");
					if (!this.Ext.isEmpty(owner)) {
						this.getContactCityCode(owner, function(cityCode) {
							if (this.Ext.isEmpty(cityCode) || this.Ext.isEmpty(cityCode.city)) {
								this.set("Number", "");
								this.set("NumberEx", "");
								this.showMessage("Номер договора не сгенерирован. В карточке ответственного не указан город!");
								return;
							}
							else if (this.Ext.isEmpty(cityCode.code)) {
								this.set("Number", "");
								this.set("NumberEx", "");
								this.showMessage("Номер договора не сгенерирован. Для города ответственного не указан код!");
							} else {
								this.getProductCode(function(productCode) {
									if (this.Ext.isEmpty(productCode) || this.Ext.isEmpty(productCode.product)) {
										this.set("Number", "");
										this.set("NumberEx", "");
										this.showMessage("Номер договора не сгенерирован. В заявке нет продуктов!");
										return;
									} else if (this.Ext.isEmpty(productCode.code)) {
										this.set("Number", "");
										this.set("NumberEx", "");
										this.showMessage("Номер договора не сгенерирован. В продукте заявки не указан код!");
									} else {
										var OrderNumber = this.get("Number");
										while(OrderNumber.length < 6) {
											OrderNumber = "0" + OrderNumber;
										}
										var parentThis = this;
										Terrasoft.SysSettings.querySysSettingsItem("OrderNumberSeparator", function(value) {
											parentThis.set("NumberEx", cityCode.city + ": " + cityCode.code + value +
												OrderNumber + value + productCode.code);
											parentThis.set("Number", cityCode.city + ": " + cityCode.code + value +
												OrderNumber + value + productCode.code);
										});
									}
								});
							}
						});
					}
				}
			}

Спасибо большое!

Каким образом решить проблему с сортировкой по полю номер с использованием маски, т.к. поле "Номер" является текстовым и в следствии этого возникает следующая ситуация:

Вопрос с сортировкой продолжили обсуждать здесь.

Здравствуйте. Подскажите пожалуйста, а как настроить маску, чтобы нумерация была типа цифры-год. Чтобы каждый год естественно концовка менялась. К примеру, 1885-15
Благодарю

Какая версия используется?

"Зверев Александр" написал:

Какая версия используется?

Здравствуйте, Александр. Используется версия 7.6

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

Иногда возникает необходимость "нумеровать" контрагентов (по аналогии с "масками" в других разделах). Для реализации можно рассмотреть следующий вариант.

Перед изменениями сделайте резервную копию базы.

Для такой возможности следует:

1. Зайти в системные настройки:

/system/files/1_55.png

2. Добавить новую настройку:

/system/files/2_38.png

3. Ввести следующие параметры:

/system/files/3_21.png

4. Создать еще одну настройку с такими параметрами:

/system/files/4_14.png

5. Далее открыть функцию ds_AccountOnDatasetBeforePost в скрипте scr_Account и добавить в ней строку:

SetAccountNumber(Dataset);

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

function SetAccountNumber(Dataset) {
var AccountNumber = Dataset.Values('AccountCode');
if (IsEmptyValue(AccountNumber)) {
SetItemSystemNumber('Account', Dataset, 'AccountCode');
}
}

Где – 'AccountCode' название поля «Код» в конфигурации.

Сохраните изменения и проверьте работоспособность.

/system/files/6_1_0.png

Поле «Код» после сохранения будет заполняться автоматически.

/system/files/6_2_0.png

Нравится

Поделиться

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

Здраствуйте, в системных настройках есть параметр CFMask, который принимает строковое значение CF%1(Маска номера операции). В результате когда я создаю какие-либо Операции, у меня автоматически ставиться нумерация CF1,CF11,CF111,CF1111... и т.д. Всвязи с этим у меня возникает 2 вопроса: как можно сделать так чтоб нумерация шла как CF1,CF2,CF3,CF4...(т.е как мне записать эту маску CF%1) и возможно ли как-нибудь в настройках задать, чтобы я вводил номер сам(иными словами чтобы поле Номер Операции было редактируемо.).

Нравится

2 комментария

проверьте для системного параметра CFNumber (Текущий номер операции) какой тип данных используется. Должен быть "целое число". И текущее значение какое

По редактируемости. Уберите галку "только для чтения" с поля CFNumber в сервисе ds_Cashflow.
Если генерацию номеров надо отключить вовсе, см. функцию SetItemSystemNumber('CF', Dataset, 'CFNumber') в ds_CashflowScript

Здравствуйте, Сахиб.
Для того, чтобы нумерация операций имела вид CF1,CF2,CF3.... проверьте свойства системных настроек CFMask и CFNumber.
Свойства системной настройки CFMask:

Свойства системной настройки CFNumber:

Как отметил Александр, сделать поле "Номер" редактируемым в карточке [Операции] можно сняв признак "Толь для чтения" для поля CFNumber в сервисе ds_Cashflow:
[URL=http://imageshack.us/photo/my-images/828/pic3ap.png/][IMG]http://img828…]

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