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

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 1C:Бухгалтерия Россия Абонемент ($m)

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

1 стартмани

30.01.2024    5028    stopa85    12    

39

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

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

19.10.2023    10057    user1959478    54    

37

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

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    4876    maksa2005    8    

26

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

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

1 стартмани

09.06.2023    12609    8    SpaceOfMyHead    20    

62

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

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    6121    RustIG    9    

25

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

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

23.11.2022    5241    gzharkoj    14    

25

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

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

1 стартмани

21.03.2022    9424    7    kalyaka    11    

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