Данные, на которые можно опираться при проведении документа

28.09.14

Разработка - Математика и алгоритмы

Очень часто можно встретить в формулировках задач (например, экзаменационных) требование к устойчивости решения.
Мне такое требование долго казалось непонятным - ведь есть же требования к универсальности, скорости, объему, которые
и можно назвать устойчивостью. Попробуем на примере обработки проведения документов разобраться, на какие данные
можно "положиться".

Преамбула. Данная статья рассчитана на начинающих коллег-разработчиков, знакомых с понятием "регистр сведений, проведение" и т.д,  не претендует на полноту раскрываемого вопроса. Цель - поделиться идеями и пригласить к дальнейшему обсуждению. Спасибо за понимание!

Итак, перед нами (здесь и далее я отождествляю себя с программистом 1С Cool) очень часто встает необходимость изменений в алгоритме проведения какого-либо документа. Как только такая задача появляется на горизонте, в голове рождается мысль "Могу ли я использовать подходящие для решения внешние данные?".

Давайте сначала определимся с термином "Устойчивость". Под ним будем понимать такое поведение алгоритма, при котором изменение внешних (по отношению к нему) тех же самых данных "задним числом" не влечет за собой изменение выходных данных. Т.е. если при проведении мы считали из таблицы БД значение СуммаЗатрат = 74 и наш алгоритм выдал цифру 35, то при изменении значение СуммаЗатрат на 83, наш алгоритм выдает значение 290, то будем считать алгоритм неустойчивым.

Итак, давайте рассмотрим на примере основных объектах метаданных, какие данные использовать :

1. Первый и самый напрашивающий класс данных - это данные самого документа. И правда, если в бухгалтерскую проводку идет запись комментария из соответствующего реквизита, то все понятно.

Однако рассмотрим такой пример - в документе поступления необходимо реализовать учет комплектов (набор нескольких позиций номенклатуры). Состав комплектов храниться в независимом регистре сведений. Можно ли читать данные о составе комплектов напрямую? Казалось бы, пуркуа па, как говорят французы. Но если мы подберем такой комплект, то наш сосед может изменить его и при перепроведении получится эпикфейл другой набор данных.

Поэтому разумным и корректным будет вариант хранение данных о составе таких комплектов внутри документа. Дополнительно нужно продумать вариант синхронизации этих данных между собой.

Рис. 1. Хранение данных о наборах

 Хранение данных о наборах

2. Данные, заблокированные от изменений. Как мы знаем, константы отлично подходят для хранения условно-постоянной информации. Но в отличие от математических констант, константы 1С редко, но меняют свое значение.

Так можно ли на них положиться? Таки да, но при одном условии - если мы их "заморозим", заблокируем от изменений.

Нужно ли хранить валюту регламентированного учета в реквизите каждого документа? Капитан очевидность Здравый смысл подсказывает нам, что нет - ведь есть такая константа. В типовых конфигурациях реализована проверка на возможность ее изменения.

Рис. 2. Валюта регл.учета. При проведении документов блокируется.

Валюты учета

 

3. Данные из регистров, подчиненных регистратору. Тут может возникнуть вопрос - при отмене проведения набор записей станет пустым, все движения очистится (при соответствующих настройках документа). Можно ли полагаться на них? Ответ - да, ведь в системе будем зафиксирован момент, когда документ перестал быть актуальными, использую объект Последовательность. Такой объект хранит информацию о границе, начиная с которой документы нужно перепровести.

Рис. 3. Варианты последовательностей

Последовательности

 

Давайте обратим внимание и на другие объекты. Могут ли они быть источником данных при проведении?

1. Справочники. Если они не фиксируется в каком-либо одном состоянии после записи, то риск получить различный результат очень высок.

2. Независимые регистры сведений. Иногда возникают задачи, когда все-таки необходимо получить данные из независимых РС. Ранее мы вроде отбраковали отказались от них как ненадежного варианта. Но здесь можно предложить следующий прием. Предположим, есть регистр сведений, хранящий связь контрагентов с менеджерами компании, которые контрагентов курируют. Фиксация такой связи должна происходить документально. Как обеспечить возможность синхронизации данных при проведении и отмене проведения?

Как вариант - завести реквизит, ссылающийся на документ-регистратор.

Пример такой структуры на след.рисунке:

Рис.4. Структура регистра сведений.

Структура регистра

 

Подводя итоги, можно сказать, что 3 типа данных можно использовать в алгоритмах проведения:

  1. Данные документа.
  2. Неизменяемые данные.
  3. Данные регистров, подчиненных регистратору.

Проведение данные для проведения

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1883    stopa85    12    

34

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4677    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7672    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7948    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4559    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8953    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7983    dusha0020    8    

70
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1715 01.10.14 16:46 Сейчас в теме
Из всего перечисленного - только данные, сохраняемые в самом документе - являются надежным и устойчивым источником + не забываем про версионирование ключевых справочников и документов (чтобы ответить на вопрос "откуда это сюда попало?", если были изменения задним числом в этих самых ключевых справочниках)...
+
2. dimonster 90 03.10.14 13:06 Сейчас в теме
(1) DrAku1a, Не согласен - 2 другие категории является устойчивыми и надежными. Коллега, прошу ваши аргументы. По поводу версионирования не понял - при здесь оно? Каким образом версионирование ключевых документов и справочников приводит к созданию устойчивого алгоритма? Если оно реализовано на регистре сведений, подчиненном регистратору, то это п.3 статьи, если это независимый РС, то эти данные можно исправить (или стереть) интерактивно или программно задним числом. Во общем, пока не увидел критику по существу.
+
Оставьте свое сообщение