Список форумов КЛУБ FileMaker.RU КЛУБ FileMaker.RU

 
new forum: www.fmforum.ru
FileMaker DevCon Rus 2017.IV коенференция российских разработчиков на платформе FileMaker.
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Наименование заказа

 
Начать новую тему   Ответить на тему    Список форумов КЛУБ FileMaker.RU -> Практика FM
Предыдущая тема :: Следующая тема  
Автор Сообщение
CS



Зарегистрирован: 02.08.2012
Сообщения: 20
Откуда: Переславль-Залесский

СообщениеДобавлено: Пт Ноя 30, 2012 10:22 am    Заголовок сообщения: Наименование заказа Ответить с цитатой

Добрый день. Подскажите, как лучше реализовать наименование заказов.
Формат должен быть такой: "имя торговой точки-порядковый номер".
Например: Интернет-00001
Нумерация для каждой торговой точки своя. Имя торговой точки должно браться из заказа (соответствующее поле).
Хотелось бы сделать алгоритм универсальный для любого количества торговых точек.
Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Шичко Игорь



Зарегистрирован: 20.09.2010
Сообщения: 202
Откуда: Подольск

СообщениеДобавлено: Пт Ноя 30, 2012 10:47 am    Заголовок сообщения: Ответить с цитатой

Нужно создать логическую копию таблицы заказов и связать с основной таблицей через имя торговой точки (или ее ID). Тогда можно брать из копии максимальное значение номера заказа для данной тогрговой точки.
Т.е.
основная таблица - orders
копия - orders_orders
поле номера - nomer
тогда присвоение поля номера через
Max(orders_orders::nomer) + 1

Как-то так
_________________
С уважением Шичко Игорь
Авторские статьи по FileMaker http://igorshichko.wordpress.com
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
CS



Зарегистрирован: 02.08.2012
Сообщения: 20
Откуда: Переславль-Залесский

СообщениеДобавлено: Пт Ноя 30, 2012 10:58 am    Заголовок сообщения: Ответить с цитатой

Таким образом нумерация будет сквозная для всех точек? или соя для каждой?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Шичко Игорь



Зарегистрирован: 20.09.2010
Сообщения: 202
Откуда: Подольск

СообщениеДобавлено: Пт Ноя 30, 2012 11:14 am    Заголовок сообщения: Ответить с цитатой

CS писал(а):
Таким образом нумерация будет сквозная для всех точек? или соя для каждой?


Таким образом нумерация будет своя для каждой точки. Т.к. находясь в заказе (в таблице orders) мы "видим" только заказы из таблицы orders_orders, относящиеся только к одной торговой точке (указанной в заказе).
_________________
С уважением Шичко Игорь
Авторские статьи по FileMaker http://igorshichko.wordpress.com
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Андрей



Зарегистрирован: 20.12.2005
Сообщения: 88
Откуда: Москва

СообщениеДобавлено: Вт Сен 22, 2015 5:57 pm    Заголовок сообщения: Ответить с цитатой

Шичко Игорь писал(а):
присвоение поля номера через
Max(orders_orders::nomer) + 1

Делая так, сталкивался с такими проблемами:
1. Функция Max(номер счетчика) работает медленно. Это заметно, когда уже есть >10 тыс. записей.
2. В связи с пунктом 1. и сетевыми задержками, например при работе через интернет из двух филиалов возникают дубликаты номеров, полученных таким образом, что не допустимо.
Быстро, безошибочно и без дубликатов работает родная возможность FM создавать serial автоэтером. Поэтому приходится создавать отдельную таблицу с номерами. Но там тоже есть свои проблемы при органицации работы разных филиалов со своей нумерацией. Давайте делится кто как делает это.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail AIM Address
Шичко Игорь



Зарегистрирован: 20.09.2010
Сообщения: 202
Откуда: Подольск

СообщениеДобавлено: Вт Сен 22, 2015 10:01 pm    Заголовок сообщения: Ответить с цитатой

Для таких случаев использую таблицу с наименованием к примеру Next.
В ней содержится одна запись и необходимое число полей-счетчиков.
Для получения к примеру нужного номера счета делаю функцию типа GetNextInvoice.
Она обращается к таблице Next, считывает из нужного поля номер счета, увеличивает счетчик номера счета на 1, возвращает номер счета в скрипт формирования счета.
Как-то так.
_________________
С уважением Шичко Игорь
Авторские статьи по FileMaker http://igorshichko.wordpress.com
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Andrey Volkov



Зарегистрирован: 26.10.2009
Сообщения: 1609
Откуда: Ярославль

СообщениеДобавлено: Ср Сен 23, 2015 8:14 am    Заголовок сообщения: Ответить с цитатой

Цитата:
1. Функция Max(номер счетчика) работает медленно. Это заметно, когда уже есть >10 тыс. записей.

функция Last в этом случае будет работать намного быстрее
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Ср Окт 21, 2015 12:10 pm    Заголовок сообщения: Ответить с цитатой

база более 90к записей, использую Max для получения последнего номера, порядка 20 клиентов онлайн, для ускорения ограничил выборку для Max реляцией (беру последний месяц), и после присвоения значения провожу проверку на дубликат.

Спасибо за мысль, попробую оптимизировать функцию, перепишу на Last
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей



Зарегистрирован: 20.12.2005
Сообщения: 88
Откуда: Москва

СообщениеДобавлено: Пн Окт 26, 2015 11:39 am    Заголовок сообщения: Ответить с цитатой

Функция max - расчетная. Несколько юзеров одновременно запросившие, получат одинаковый ответ и возможны дубликаты. Поэтому от такого варианта пришлось отказаться. Работают либо варианты с запиранием записи (Open Record + проверки) либо варианты с serial number. Стандартное создание новой записи с присвоением serial number работает безупречно и не возникает дубликатов при одновременной нагрузке.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail AIM Address
Денис Худыш



Зарегистрирован: 26.11.2009
Сообщения: 115
Откуда: Минск

СообщениеДобавлено: Вс Ноя 01, 2015 10:03 pm    Заголовок сообщения: Ответить с цитатой

А почему просто не создать
1 Идполе с автосерийником и поле
2 ЮникИД, которое является калькуляцией - берет поле ИДполе и преобразует его в нужный вид.

http://prntscr.com/8xvvkx
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
vadim



Зарегистрирован: 14.12.2007
Сообщения: 134

СообщениеДобавлено: Пн Ноя 02, 2015 6:40 pm    Заголовок сообщения: Ответить с цитатой

Бухгалтерия требует нумерацию по возрастанию без пропусков
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andrey Volkov



Зарегистрирован: 26.10.2009
Сообщения: 1609
Откуда: Ярославль

СообщениеДобавлено: Пн Ноя 02, 2015 6:49 pm    Заголовок сообщения: Ответить с цитатой

если нужен абсолютно надежный вариант, то сначала можно создать просто запись с пустым номером, а потом отправить запрос на сервер.

Скрипт на сервере будет искать записи с пустым номером и последовательно присваивать каждой записи очередной номер по подразделению.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andrey Volkov



Зарегистрирован: 26.10.2009
Сообщения: 1609
Откуда: Ярославль

СообщениеДобавлено: Чт Дек 03, 2015 3:54 pm    Заголовок сообщения: Ответить с цитатой

Андрей писал(а):
Функция max - расчетная. Несколько юзеров одновременно запросившие, получат одинаковый ответ и возможны дубликаты. Поэтому от такого варианта пришлось отказаться. Работают либо варианты с запиранием записи (Open Record + проверки) либо варианты с serial number. Стандартное создание новой записи с присвоением serial number работает безупречно и не возникает дубликатов при одновременной нагрузке.


как-то вдруг пришло в голову. если нужно абсолютно надежно исключить дубликаты.
1) создать новую запись. не вычислять порядковый номер в ней. сохранить (commit)
2) просмотреть предыдущую запись (GetNthRecord ), если в ней порядковый номер вычислен, то можно делать собственный запрос Last()
3) если порядковый номер не вычислен, то встать в цикл и дождаться когда в предыдущей записи появится порядковый номер. После этого получить и сохранить собственный номер.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов КЛУБ FileMaker.RU -> Практика FM Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB