Трагикомедия в трёх действиях (зачастую бессмысленных)
Все имена и события являются вымышленными, любые совпадения с реальностью случайны.
Действующие лица:
Василий – Программист 1С, работник умственного труда.
Александр – Начальник отдела IT
Изольда – Начальник отдела снабжения и логистики.
Мария Петровна – Генеральный директор.
Аристарх Николаевич – Исполнительный директор, он же непосредственный руководитель Александра.
Ашот – программист, когда-то написавший несколько отчетов, по сей день используемые в компании.
Действие 1. Завязка
Четверг. Вечер. Комната совещаний. Четверо (Александр, Василий, Изольда и Мария Петровна) ведут активное обсуждение рабочих вопросов. Дело близится к финалу.
Изольда – Мне срочно нужен отчет, заказанный еще месяц назад отделу IT и до сих пор не сделанный.
Василий – ПО ТЗ сформированному месяц назад все работы примерно тогда и выполнены (в сторону) в том числе и само ТЗ.
Александр – Да, давайте отделять первоначальное ТЗ и последующие требования. Первоначальный заказ выполнен, сейчас же требуется внесение дополнительного функционала.
Мария Петровна – ну что же, Василий, в какой срок управитесь?
Василий: (умножая в уме на два) во вторник утром будет готово.
Действие 2. Трагический поворот
В пятницу Василию так и не удалось поработать над отчетом, ибо в полном соответствии с законами Мерфи с базой произошла неприятность, а у пользователей наступил период острой потребности в общении с программистом. Проблема была настолько чувствительной, что все выходные пролетели незаметно, и неуместно солнечное утро понедельника застало Василия закрывающего окно удаленного доступа к серверу.
Утро понедельника. Офис
Василий (с хмурой улыбкой приветствует сослуживцев) – добрый вечер, дорогие мои.
Приложив титанические волевые усилия, наш герой начал работу. Получалось плохо, постоянно отвлекали шумы и посторонние мысли. Зачем-то заходила Изольда и что-то спрашивала, ответил что-то нечленораздельное, вроде сработало – ушла. Мозговая деятельность давалась с трудом, лишь собрав волю в кулак, надев наушники и полностью отключившись от внешнего мира Василию удалось завершить основную часть работы, оставалось самое простое, но слишком хотелось спать.
Утро вторника. Офис
Василий (насвистывая под нос бодрую песенку, заходит в кабинет) – приступим к делу, коллеги.
Разобрав свежую и вчерашнюю почту Василий пошел к Изольде, ибо утро вторника наступило, и нужно было хоть что-то показывать.
Василий (входя в кабинет начальника отдела снабжения) – Доброе утро. Я с двумя новостями, хорошей и плохой. Хорошая – вот отчет, основная задача выполнена, а плохая – остальное даже не начиналось, ибо так сложились звёзды. Но я обязательно сегодня всё сделаю, но чуть позже.
Изольда – Василий, помнится Вы обещали мне, что проверите, правильно ли считается ABC в отчете «Снабжение». Мне нужны формулы – как там считается.
Василий (судорожно пытаясь вспомнить, когда он успел такое пообещать) Хорошо, посмотрю.
Отчет снабжение был давным-давно написан другим программистом. Алгоритм был вполне логичным, но, имея на руках заявление о некорректной работе отчета, начал копать дальше. Ошибка нашлась довольно скоро – не все данные попадали в статистическую выборку, что и создавало погрешности в дальнейших вычислениях. Тратить время на описание кода словами было жалко, и Василий, пять минут порывшись в Интернете узнал, как называется использованный в отчете Ашота метод расчета.
Василий (в чат Изольде) – выделение ABC-групп в отчете «Снабжение» производится по методу сумм. Реквизит "Способ вывода итогов" не используется (всё выводится по номенклатурным позициям. В новом отчете планирую использовать метод сумм (как наиболее реализуемый и масштабируемый).
Засучив рукава и сделав умное лицо, Василий приступил к работе над отчетом. Но поработать не удалось.
Изольда (в чат Василию) – Формулу напиши мне.
Василий – Формулы можно найти в учебнике по экономике, могу дать ссылку.
Изольда (уточняя) – формулу забитую в отчете.
Василий – Там нет формулы, это методика расчетов, сами расчеты просты, но весьма громоздки. (В сторону) RTFM, черт возьми!
Изольда (не думая сдаваться в надежде получить готовый результат без приложения собственных усилий) – методику расчета тогда!
Василий – [хттп:ФинАнализ.АБЦ.АнализАБЦ_методом_сумм.ру]
Изольда – Что это?
Василий – Это методика расчета. У Ашота реализовано именно так.
Изольда – А ты проверял? Мне нужен факт!
Василий (хватаясь за голову) – Я открываю программный код, смотрю, как считается. Лезу в учебник по экономике. Смотрю как называется этот метод и profit!
Изольда – вот покажи мне, как считается в программе, мне не нужен учебник, мне нужно то, как считается в отчете «Снабжение».
Василий – без проблем. (в сторону) – вот тебе то, что написано в программе. //копирует фрагмент программного кода выполняющий финальные вычисления и отправляет в чат.
SELECT
Товары.Группа,
Товары.ПодГруппа,
Товары.Код,
Товары.Артикул,
Товары.Номенклатура,
Товары.РозничнаяЦена,
Товары.ЗакупочнаяЦена,
Товары.Свойство,
Товары.ШтрихКод,
SUM(CASE
WHEN &ПараметрАнализа = ""Прибыль""
THEN Временная.Прибыль
ELSE Временная.Выручка
END) AS Показатель,
SUM(Временная.ПродажиКоличество) КАК ПродажиКоличество,
MAX("""")AS ABCКласс,
SUM(CASE
WHEN &ПараметрАнализа = ""Прибыль""
THEN Временная.Прибыль
ELSE Временная.Выручка
END * 100 / Итог.Показатель) AS Процент
FROM
Итог AS Итог,
Товары AS Товары
LEFT JOIN Временная AS Временная
ON Товары.Номенклатура = Временная.Номенклатура
GROUP BY
Товары.Номенклатура,
Товары.Код,
Товары.Артикул,
Товары.Группа,
Товары.ПодГруппа,
Товары.РозничнаяЦена,
Товары.ЗакупочнаяЦена,
Товары.Свойство,
Товары.ШтрихКод
ORDER BY
Показатель DESC
;
///////////////////////////////////////////////////////////////////
DROP Временная
;
///////////////////////////////////////////////////////////////////
DROP Итог";
Query. SetParameter ("ТекущаяДата",ТекущаяДата());
Query. SetParameter ("ПараметрАнализа",ПараметрАнализа);
Query. SetParameter ("ДатаНачала",Новый Граница((мДатаОкончания – ГлубинаРасчетаСреднихПродаж * 3600 * 24), BoundaryType. Including));
Query. SetParameter ("ДатаОкончания",Новый Граница(мДатаОкончания, ВидГраницы.Включая));
Query. SetParameter ("СписокИсключаемыхПокупателей", ThisObject.ИсключаемыеПокупатели.Выгрузить().ВыгрузитьКолонку("Контрагент"));
МассивТоваров = ЭтотОбъект.Товары.Выгрузить().ВыгрузитьКолонку("Номенклатура");
ПустойСписокТоваров = (МассивТоваров.Количество() = 0);
Query. SetParameter ("СписокТоваров", МассивТоваров);
Query. SetParameter ("ПустойСписокТоваров", ПустойСписокТоваров);
Query. SetParameter ("ОбластьРасчета", ОбластьРасчета);
МассивСкладов = New Array;
FOR EACH СтрокаТЧ FROM ThisObject.Склады DO
IF ValueIsFilled (СтрокаТЧ.Склад) THEN
МассивСкладов.ADD(СтрокаТЧ.Склад.Наименование);
ENDIF;
ENDDO;
ПустойСписокСкладов = (МассивСкладов.Количество() = 0);
Query. SetParameter ("СписокСкладов", МассивСкладов);
Query. SetParameter ("ПустойСписокСкладов", ПустойСписокСкладов);
МассивПоставщиков = ЭтотОбъект.Поставщики.Выгрузить().ВыгрузитьКолонку("Контрагент");
ПустойСписокПоставщиков = (МассивПоставщиков.Количество() = 0);
Query. SetParameter ("СписокПоставщиков",МассивПоставщиков);
Query. SetParameter ("ПустойСписокПоставщиков",ПустойСписокПоставщиков);
Результат = Query. Execute ().Unload ();
ИтогПроцент = 0;
FOR EACH СтрокаТЗ FROM Результат DO
#IF CLIENT THEN
ОбработкаПрерыванияПользователя();
#ENDIF
IF ЗначениеЗаполнено(СтрокаТЗ.Процент) THEN
ИтогПроцент = ИтогПроцент + СтрокаТЗ.Процент;
СтрокаТЗ.Процент = Окр(СтрокаТЗ.Процент, 2);
ELSE
СтрокаТЗ.Процент = 0;
ENDIF;
IF ИтогПроцент < ПроцентAКласса THEN
СтрокаТЗ.ABCКласс = "A"
ELSEIF ИтогПроцент < ПроцентAКласса + ПроцентBКласса THEN
СтрокаТЗ.ABCКласс = "B"
ELSE
СтрокаТЗ.ABCКласс = "C"
ENDIF;
ENDDO;
Василий – У него есть ошибки связанные с неполной выборкой товара. Но метод именно сумм.
Изольда – мне нужен ответ по скорости отчетов //речь шла о других отчетах написанных Ашотом.
Василий – Это второй вопрос? По скорости мы уже давали ответ-оптимизация возможна. Методы оптимизации навскидку назывались, но детальной проработки не было.
P.S. Выделение ABC-классов в новом отчете я делаю по методу сумм.
Изольда – Не нужно делать неизвестно как!
Василий – Известно как. Так и делалось. С ошибками (не все данные попадали в статистическую выборку), но делалось по указанной методике.
Изольда – ты тоже с ошибками будешь делать?
Василий – Надо быть редко встречающимся среди программистов типом чтобы, зная о допущенных предшественником ошибках, вновь допустить их. Если я нашел ошибки, следовательно, я знаю, как от них избавиться
Василий – Уточняю. Ошибки допущены на этапе сбора данных (т.е. ошибка не методологическая, а техническая).
Изольда – так стоп, мне нужно от тебя описание как сейчас работает отчет авс анализ, его возможности, и как он будет работать. На бумаге а не в переписке, мне некогда. Все, давай на бумаге, сегодня мне скинь.
Василий в порыве радостного вдохновения копипастит в текстовый документ подробное с картинками описание (для чайников) методики расчета и отправляет на печать.
Василий (в чат Изольде) - Подготовил наглядное описание методики расчета ABC. Распечатку положил на стол
Изольда – И ты собираешься так делать?
Изольда – Я просила тебя вчера собраться и обсудить, как сейчас рассчитывается и как нужно рассчитывать.
Василий (в сторону) – Вот чего она приходила вчера! (к Изольде) – Вчера обраться не удалось, т.к. один из участников (Александр) отсутствовал. Что же касается отчета, то да – я собираюсь так сделать.
Изольда – давай ты пока так делать не будешь, потому что окончательный вариант так, и не принят.
Василий (в сторону) – Ага, нужно переварить три страницы описания с картинками и графиками. (к Изольде) ОК, тогда я могу заняться оперативной работой пока мы не решили окончательно. Потому что я всё откладывал из-за срочности сдачи отчета.
Изольда – У тебя в приоритете скорость работы отчетов. Сделай это!
Василий – У меня в приоритете – чтобы предприятие не остановилась. Если нужно что-то сделать очень срочно, то через Александра, его нет, но на телефон он отвечает.
Изольда – Василий, сделай ту задачу, которая стояла у тебя в приоритете.
Василий – Отчет, который мы сейчас обсуждали, стоял на верхнем уровне.
Изольда – Ты ее не сделал в срок, у тебя след задача это скорость работы отчетов.
Василий – У меня другие сведения об очередности задач.
С некоторым раздражением закрыв окно переписки Василий, вернулся к оперативной работе, которой накопилось выше крыши.
Действие 3. Разявязка
Вторник. Вечер. Комната совещаний. Пятеро (Александр, Аристарх Николаевич, Василий, Изольда и Мария Петровна) ведут активное обсуждение рабочих вопросов.
Изольда – работа не была выполнена.
Василий – согласен, хочу заметить, что основной причиной этого были даже не наши разногласия, а то, что в связи с техническими проблемами в пятницу поработать не удалось, а в понедельник успеть не удалось, т.к. на выполнение задачи бралось 2 дня.
Далее следует продолжительная дискуссия, где прозвучали справедливые и не очень замечания о методиках работы в серьезных компаниях.
Василий (в сторону) – Время идет, и так хочется спать, надо вернуться к теме! (к собравшимся) Предлагаю вернуться к теме обсуждения. А именно: с Изольдой у нас возникли разногласия относительно методики реализации расчетов.
Изольда – вообще я уже давно ждала ответа с описанием методики расчета в отчете «Снабжение». А в этом описании вообще написано, что результат снимается только по выручке.
Василий (в сторону) Ну как можно быть такой?! (к Изольде) Пример расчетов приводится с использованием выручки, в новом отчете будет возможность выбора целевого показателя. Об этом написано в п.3. данного описания.
Остальные собравшиеся всем сердцем не желая снова начинать срач, коллективным духом вернули дискуссию в конструктивное русло. Мария Петровна с энтузиазмом принялась обсуждать реализацию расчетов.
Мария Петровна – Василий, спасибо за проявленный энтузиазм, но это вообще не твоя работа, и зря потраченное время.
Василий – (в сторону) Выжранный насквозь мозг это проявленный энтузиазм? Та в гробу я видел такой энтузиазм. (к Марии Петровне) Не стоит благодарностей, хотел исключить возможность недопонимания. //Торжествующе посмотрел на Изольду.
Изольда – Но в этом описании не написано как будет работать отчет!
Василий (в сторону) гррр-х. (к собравшимся) Изольда должна знать, но поясню для остальных собравшихся. Отчет, выполняющий подобные вычисления уже есть. Интерфейс этого отчета, чтобы не вызывать шок у пользователей я позаимствую. В том интерфейсе есть ответы на все задаваемые вопросы касательно работы отчета.
Изольда – И расчеты тоже перенесешь?
Василий – Нет, Я не буду использовать разработки Ашота, на то есть свои причины (в сторону) видели бы вы этот код» (к собравшимся) - я создам алгоритм, реализующий названную методику расчетов. Т.е. моя работа будет состоять в том, чтобы по указанной методике реализовать правильные расчеты.
Мария Петровна – Срок выполнения работы?
Василий – завтрашний день, как и планировалось. Один день использован, остался второй.
Мария Петровна – Всем спасибо, все свободны.
Эпилог
Вечер. Офис.
Василий пишет пьесу в трёх действиях