Очень часто бывает, что тебе присылают ТЗ на многих страницах. Слов написано много, но важные детали, необходимые для реализации, пропущены. Или другая ситуация: общаешься с заказчиком и пытаешься записать его слова, а потом сам не понимаешь, что написал. Или еще вот: делал задачу два месяца назад, но все детали уже выветрились из головы, и нужно лезть в код, чтобы освежить в памяти детали. Еще периодически требуется объяснить другому программисту, что от него требуется, и хочется быть уверенным, что он тебя правильно понял.
Для всех этих ситуаций я выработал универсальный метод описания задачи. Точнее сказать, это способ описания связей между данными. Но он подходит в большинстве случаев.
Метод состоит из двух этапов:
1. Описание ожидаемого результата в виде таблицы. При этом нужно нарисовать таблицу с заголовками полей.
2. Перечисление всех источников данных. При описании данных нужно параллельно заполнять таблицу ожидаемого результата.
Описание задачи считаем законченным, когда все поля ожидаемой таблицы заполнены.
Продемонстрирую суть методики на примере.
Пример. Задача расчета себестоимости.
Пусть нам нужно описать алгоритм списания по ФИФО при реализации товара.
Шаг 1: в качестве ожидаемого результата хотим получить движения в регистре Остатки после проведения документа Расходная накладная. Рисуем заголовки полей регистра:
Регистр Остатки
Регистратор | Период | Склад | Товар | Количество |
Нарисуем одну строку под шапкой, но не заполняем ее
Шаг 2.1: Заполняем поля в ожидаемом результате и параллельно рисуем источники данных.
Поля Регистратор, Период и Склад нужно взять из документа Расходная накладная, поэтому нарисуем эту табличку и параллельно заполним соответствующие поля в ожидаемом результате.
Регистр Остатки (ожидаемый результат)
Регистратор | Период | Склад | Товар | Количество |
РН1 | Д10 | С1 |
Документ Расходная накладная
Ссылка | Дата | Склад |
РН1 | Д10 | С1 |
Шаг 2.2: Связь с первым источником данных описали, переходим к следующим полям.
Поле Товар заполняем из табличной части Товары документа Расходная накладная. Количество указываем в табличной части, но не заносим в конечный результат, потому что оно участвует в расчетах, но не переносится напрямую
Регистр Остатки (ожидаемый результат)
Регистратор | Период | Склад | Товар | Количество |
РН1 | Д10 | С1 | Т1 |
Документ Расходная накладная
Ссылка | Дата | Склад |
РН1 | Д10 | С1 |
Документ Расходная накладная (табличная часть)
Ссылка | Товар | Количество |
РН1 | Т1 | 20 |
Шаг 2.3: Описываем заполнение последнего поля.
В качестве источника данных будут выступать записи регистра Остатки. При этом нужно отразить, что важен порядок приходов.
Регистр Остатки (ожидаемый результат)
Регистратор | Период | Склад | Товар | Количество |
РН1 | Д10 | С1 | Т1 | - 3 |
РН1 | Д10 | С1 | Т1 | - 17 |
Документ Расходная накладная
Ссылка | Дата | Склад |
РН1 | Д10 | С1 |
Документ Расходная накладная (табличная часть)
Ссылка | Товар | Количество |
РН1 | Т1 | 20 |
Регистр Остатки
Регистратор | Период | Склад | Товар | Количество |
ПН1 | Д1 | С1 | Т1 | 3 |
ПН2 | Д2 | С1 | Т1 | 30 |
В результате получили детальное описание задачи. При этом оно содержит только важные детали.
Этот способ я использую при постановке задач по проведению документов и написанию отчетов.