Идеи/заметки

учёт дежурств

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

учёт клиентов/лидов/сотрудников

Называть всех контактами и/или контактными лицами.

Учёт финансов вариант 2

Проводки — это всегда:

  • счёт → счёт

Точнее:

  • Вид минусуемого счёта, ID объекта → Вид плюсуемего счёта, ID объекта

Ещё точнее:

  • ID счета, ID объекта → ID счета, ID объекта

Для клиента:

  • откуда –> сколько –> куда

Варианты «откуда» – константный выпадающий список:

  • Снятие со счёта:
  • Доход по статье: (искусственно добавленный)
  • Уменьшение долга контакта:
  • ? Продажа абонемента:
  • ? Продажа посещения:
  • ? Продажа сертификата:
  • ? Продажа товара:

Варианты «куда» – константный выпадающий список:

  • Поступление на счёт:
  • Расход по статье: (искусственно добавленный)
  • Увеличение долга контакта:
  • Вычет из сертификата:

По этим спискам делается выборка из соответствующих таблиц.


Справочник счетов — поля: ID счета, название, вид: минусуемых, мнимый минусуемых, плюсуемых, мнимый плюсуемых, накопительный, встроенный/пользовательский

Для пользовательских счетов в ГУИ будем приписывать префикс Доход, Мнимый доход, Расход и Мнимый расход соответственно виду счёта.

Для встроенных счетов это будет сделано непосредственно в названии счёта (если нужно).


Виды минусуемых счетов («Откуда»):

  • Пользовательские:
    • «Название статьи дохода 1» (ID из самой табл счетов)
    • «Название статьи дохода 2»
    • «Название статьи дохода №»
  • Встроенные (заданные константы ID счета):
    • Снятие со счёта (название и ID из табл счетов) — будет выбираться для подсчёта расходов в аналитике
    • Доход «Продажа абонемента» (описание и ID из табл абонементов)
    • Доход «Продажа посещений» (описание и ID из табл посещений)
    • Доход «Продажа сертификата» (описание и ID из табл сертификатов)
    • Доход «Продажа товара» (описание и ID из табл отгрузок товаров)
    • Уменьшение долга контакта (ФИО и ID из табл контактов)

Виды плюсуемых счетов («Куда»):

  • Пользовательские:
    • «Название статьи расхода 1» (ID из самой табл счетов)
    • «Название статьи расхода 2»
    • «Название статьи расхода №»
  • Встроенные (заданные константы ID вида счета):
    • Поступление на счёт (название и ID из табл накопительных счетов) — будет выбираться для подсчёта доходов в аналитике
    • Увеличение долга контакта (ФИО и ID из табл контактов)
    • Вычет из сертификата (описание и ID из табл сертификатов)

Для пользователяя работа со счетами выглядит, как:

  • редактирование накопительных счетов
  • редактирование статей доходов (на самом деле пользовательские минисуемые счета)
  • редактирование статей расходов (на самом деле пользовательские плюсуемые счета)

Встроенные счета при этом скрываются от него.


Заранее подготовленные пользовательские счета:

  • минусуемые (Доходы):
    • Аренда массажного каб.
    • Аренда залов
    • Другое
  • мнимые минусуемые (Мнимые доходы):
    • Внесение наличности
    • Коррекция избытка
  • плюсуемые (Расходы):
    • Закупка товара
    • Возврат денег (отказ)
    • Другое
    • Реклама
    • Налоги
    • Зарплата
    • Аренда у собственника
    • Хозяйственные нужды
  • мнимый плюсуемые (Мнимые расходы):
    • Снятие кассы
    • Коррекция недостачи

Примеры проводок:

Оплата абонемента

  • Доход «Оплата абонемента»: Абон № → Поступление в: Касса
  • Доход «Оплата абонемента»: Абон № → Поступление в: РСч
  • Доход «Оплата абонемента»: Абон № → Увеличение долга контакта: ФИО
  • Доход «Оплата абонемента»: Абон № → Вычет из сертификата: Сертиф №

Покупка сертификата:

  • Доход «Оплата сертификата»: Сертиф № → Поступление в: Касса
  • Доход «Оплата сертификата»: Сертиф № → Поступление в: РСч
  • Доход «Оплата сертификата»: Сертиф № → Увеличение долга контакта: ФИО

При этом сначала создаётся счёт сертификата с отрицательной суммой (пользователю показываем положительную).


Оплата услуги:

  • Доход «Аренда залов»: — (нет привязанного объекта) → Поступление в: Касса

Возврат долга:

  • Уменьшение долга контакта: ФИО → Поступление в: Касса

Для товаров продаваемых через взятие на реализацию такая схема проводок (например продажа чужого чая):

Продажа товара осуществляется по мнимому (! в данном случае) доходу «Продажа чая Сергея», деньги кладутся в конверт. Когда приходит поставщик, часть денег забирает, отмечаем это как мнимый (!) расход «Снятие с конверта», но делаем вычет из конверта на всю сумму. А оставленную им комиссию за продажу помечая как реальный (!) доход «Комиссия за чай» кладём в кассу.

Пример:

  • Мнимый доход «Продажа чая Сергея»: (—) → 100 руб → Поступление на счёт: Конверт Сергея
  • Мнимый доход «Продажа чая Сергея»: (—) → 100 руб → Поступление на счёт: Конверт Сергея
  • Мнимый доход «Продажа чая Сергея»: (—) → 100 руб → Поступление на счёт: Конверт Сергея
  • Снятие со счёта: Конверт Сергея → 300 руб → Мнимый расход: «Снятие с конверта»
  • Доход «Комиссия за чай»: (—) → 15 руб → Поступление на счёт: Касса

В самой проге хранится мета информация:

  • тип аккаунта, его таблица, имена полей для ID и Caption

или

  • тип аккаунта и сразу SELECT-строка
NotDefined no_table
Saving accounts
MinusUserIncome accounts
MinusTicketIncome tickets
MinusVisitIncome visits
MinusCertifIncome certificates
MinusIssueIncome issues
MinusContactDebt contacts
PlusUserOutcome accounts
PlusContactDebt contacts
PlusCertifCredit certificates

? Понятие «Комиссия за реализацию»?

Поле в товарах: «Пояснение»

Как добавить товар по названию в продажу?

Как учитывать Товар на реализацию?

Группировать ли проводки в операции?

по Товару

Таблица Движение товара: вид движения (поступление/отгрузка), количество единиц, фактическая цена движения, справочно скидка и почему.

по базе данных

Не забыть задать в mysql.cnf / mysql.ini параметр sql-mode=«STRICT_TRANS_TABLES» !!!

Это нужно, чтобы пришлось указать явна значения NOT NULL полей.

COMMENT A comment for the table, up to 2048 characters long.

A comment for a column can be specified with the COMMENT option, up to 1024 characters long.

COMMENT 'string' In MySQL 5.7, index definitions can include an optional comment of up to 1024 characters

Use ANALYZE TABLE tbl_name to update the key distributions for the scanned table

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

When you insert a value of NULL (recommended) or 0 into an indexed AUTO_INCREMENT column, the column is set to the next sequence value.

Можно по триггеру в таблицах с данными добавлять айдишник и тип этих данных в таблицу «Недавние». (а по триггеру в самих «недавних» удалять устаревшие записи)

ПО GUI

Как убрать отображение данных из БД в контролах

DisableControls

BeginUpdate

DisableScrollEvents

procedure OnAftsterScroll (DataSet : TDataSet):
begin
  if DataSet.ControlsDisabled then 
    Exit;
  { а вот теперь обрабатываем }
end;

web

Here are the simplest ways (none should take more than five minutes) of including JavaScript snippets («the dirty way»):

1. include it (inline) in your template's main.php (disadvantage: it's not inside the wiki content) 2. turn on html and paste it between and (disadvantage: should only be done in closed wikis, because of security reasons) 3. (mis)use entities.local.conf to make a shortcut to eg. «ADMINMAIL» (then the javascript should be all in one line)

«<?php echo json_encode($array); ?>»;