Задачи две:
1. Так как у каждого контграгента можно выставлять по несколько платежных реквизитов, то хорошо бы для поставщика и клиента в карточке редактирования счета иметь возможность выбора платежных реквизитов.
2. Для каждого типа платежных реквизитов поставщика использовать свою нумерацию счета с префиксом. Например, для компании ООО "Контакт-Центр" счета будут именоваться "СКЦ-15", а для компании ООО "Цифровая Страна" - "СЦС-51". Соответственно логично, что при выборе платежных реквизитов поставщика сразу формировать номер счета с учетом порядка.

Как я собираюсь это делать:
1. В таблицу и карточку редактирования платежных реквизитов внести поле префикса для счета. Соответсвенно префиксы "СКЦ-" и "СЦС-"
2. Добавить в карточку редактирования счета список выбора платежных реквизитов.
3. Добавить в таблицу счета целочисленное поле СчетчикНомера
4. Создать скрипт на изменение значениея поля списка реквизитов поставщика. Этот скрипт для соответствующего типа платежных реквизитов через SQL запрос формирует номер счета и записывает его в поле СчетчикНомера (естественно чтобы не считался текущий счет при выборе максимального номера СчетчикНомера, то в SQL запросе исключаем текущую запись). В номер счета подставляется текст префикс+СчетчикНомера.

Если есть другие реализации, буду рад услышать.

Нравится

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

Здравствуйте, Илья.

Есть одно маленькое замечание: в базовой версии продукта, существует системная настройка InvoiceNumber, которая хранит текущий номер счета. Соответственно есть вариант реализации автоматической нумерации счета, используя эту настройку. Т.е при изменении значения поля платежные реквизиты в карточке счета, считываем эту настройку, считываем префикс счета, формируем номер счета и записываем его в поле "Номер". После чего системную настройку увеличиваем на 1.

Если у Вас возникнут дополнительные вопросы в рамках реализации описанного Вами функционала - обращайтесь.

"Олейник Дмитрий" написал:

Здравствуйте, Илья.

Есть одно маленькое замечание: в базовой версии продукта, существует системная настройка InvoiceNumber, которая хранит текущий номер счета. Соответственно есть вариант реализации автоматической нумерации счета, используя эту настройку. Т.е при изменении значения поля платежные реквизиты в карточке счета, считываем эту настройку, считываем префикс счета, формируем номер счета и записываем его в поле "Номер". После чего системную настройку увеличиваем на 1.

Если у Вас возникнут дополнительные вопросы в рамках реализации описанного Вами функционала - обращайтесь.

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки

Да так проще, спасибо.

Подскажите, реализовали ли вы 2-й пункт своего плана (2. Добавить в карточку редактирования счета список выбора платежных реквизитов.)
Если да то поделитесь реализацией.
С Уважением Дмитрий

"Анищенко Дмитрий" написал:

Подскажите, реализовали ли вы 2-й пункт своего плана (2. Добавить в карточку редактирования счета список выбора платежных реквизитов.)

Если да то поделитесь реализацией.

С Уважением Дмитрий

Да делали.

Илья, поделитесь реализацией?)

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

1. Запустить TSAdmin.exe

2. В дереве сервисов найти сервис таблицы Счета (tbl_Invoice), открыть (\Invoices\General\Main Grid\tbl_Invoice).
3. В Indexes, с помощью контекстного меню добавить индекс, указать ему название, как показано на скриншоте ниже.

4. Установите для поля галочку «Уникальное»

5. Затем добавьте индексное поле

6. И свяжите его с номером счета:

7. Сохраните таблицу:

В результате при дублировании номера счета программа будет уведомлять оператора:

и запрещать сохранять запись:

Нравится

Поделиться

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

Анна, сообщения об ошибке нервируют пользователей. Я бы даже сказала "пугает".
Нельзя ли как-то сделать это предупреждением?

Согласен с Алёной. Такая ошибка слишком жестка для пользователя.
Выходом может быть автоматическое формирования уникального поля и закрытие его редактирования пользователем.

Как вариант, можно в scr_BaseDBEditUtils в функции SaveChangesWithCheck отлавливать сообщение об ошибке и анализировать его (благо имя индекса уникально):

...
catch (e) {
		var Message = e.message;
		if (Message.indexOf('IInvoiceNumber') != -1) {
			Message = "Номер не уникальный!"+'\n'+
				"невозможно сохранить запись";
			System.MessageDialog(Message, mdtInformation, mdbOK, 0);
		} else {
			System.MessageDialog(Message, mdtError, mdbOK, 0);
		}
		Result = false;
	}
...

Здорово :) Пока я думала над решением, Максим меня опередил :)

В принципе, хотела предложить то же самое:

в скрипте scr_BaseDBEditUtils в функции function SaveChangesWithCheck в блоке catch добавить проверку:

if (e.number == -2147418113){
			MessageBox("Невозможно сохранить счет, так как счет с таким номером уже существует! Введите другой номер.");
			Result = false;
		} else

Скрипт в итоге будет выглядеть так:

А программа будет выдавать то сообщение, которое Вы введете в MessageBox:

В любом случае, реализация Максима лучше, поэтому рекомендую использовать ее.

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