Вторник, 26.11.2024
Мой сайт
Меню сайта
Статистика

Онлайн всего: 27
Гостей: 27
Пользователей: 0
Главная » 2018 » Август » 18 » Остатки по счетам, триггеры SQL-сервера и регистры 1С
14:47
Остатки по счетам, триггеры SQL-сервера и регистры 1С

Остатки по счетам, триггеры SQL-сервера и регистры 1С

Я написала, что в «Бюджете», похоже, нет остатков и счетам из-за чего приходится гадать по поводу очень важной информации
Проблема немного смешная потому что где-то эта информация есть. Если есть желание она будет. Более того, я не призываю заводить там эти остатки. И вот прямо сейчас тем более. Я просто хочу поболтать о теории сделав эту практику поводом.
Самый безопасный способ – сделать отчёт, суммирующий все приходы  и вычитающий все расходы со времён начала ведения базы. Считывание информации ничего нигде не меняет. Начальный остаток по счёту будет первым приходом, так что итогом этой операции будет текущий остаток по счёту (если, конечно, информация по движениям верна). Дело только в том, что это очень тяжёлая операция. Пусть, например, надо суммировать что-то за 10 лет. Машина просуммирует, конечно, но метод какой-то… некрасивый. Лучше хранить что-то что позволяет получать подобную информацию быстрее и проще.
Добавить это средствами SQL-сервера легко и просто. Пользователям ни только ничего не надо будет делать. Они могут даже не знать, что где-то есть таблица на данных которой теперь отражаются все их действия по вводу информации о приходе и расходе.
Инструмент называется триггер. Это написанная на том же языке SQL программа, которая вызывается каждый раз, когда в таблице что-то меняется. Триггеров три вида: для добавления, корректировки и удаления строк. В каждом случае обычно выполняются какие-то свои действия. Пусть есть таблица, в которой хранятся ID учреждений и сумма остатков по лицевым счетам.
Чтобы обеспечить актуальность остатка к таблице приходов надо добавить три триггера.  Триггер на добавление будет находить нужную строку по ID учреждения и просто менять сумму на её же плюс то, что введено в новой строке, Триггер на изменение будет находить тут же строку и вначале вычитать то, что было добавлено раньше (сторнируя эффект триггера на добавление) а потом добавлять то, что получилось в результате корректировки. Триггер на удаление будет минусовать сумму на то, что содержится в удаляемой строке. Примерно тоже самое можно сделать для таблицы расходов ZF_R. Благодаря автоматическому внесению изменений при всех корректировках остаток всегда будет равен тому, что можно получить просуммировав обороты.
Примеры триггеров есть тут:
http://akostina76.ucoz.ru/blog/2017-07-06-4249

Только они не суммы корректируют а вносятся изменения в другую базу. В триггере можно написать что угодно, оно и будет выполняться при каких-то изменениях. Неизменно только то, что изменений только три (вставка – INSERT, корректировка – UPDATE и удаление – DELETE)/
Триггер – удобный инструмент автоматизации изменений, и в описанном выше виде получается прекрасный (если и такого нет) результат. Но его очень быстро становится мало. Обычно ведь интересно не только то, что есть сейчас но и то, что было раньше, на начало месяца например. Это можно сделать теми же триггерами, но надо придумать какую-то логическую конструкцию, которая позволит быстро получать эту информацию. В 1С для ускорения таких выборок используются так называемые регистры:

Не смотрела на внутреннее устройство таблиц, но подозреваю, что там хранятся суммы оборотов по годам, месяцам и дням. А внутренние «триггера» обновляют сразу три цифры (за год, месяц, день). Если хранить такую информацию, то для суммирования за несколько лет надо взять несколько цифр-итогов по годам и прибавить к ним суммы по месяцам и дням (если это надо). Это будет работать не мгновенно но намного быстрее чем суммирование строк всех документов. Примерно так обычно решается проблема хранения и поддержания актуальности сумм по остаткам.
 

Просмотров: 265 | Добавил: akostina76 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Календарь
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024
    Бесплатный конструктор сайтов - uCoz