Если вы пропустили первые две главы на Инфостарте, то вот анонс:
• Часть 1. «Прайс из Китая»
История о том, как амбициозный джуниор Данила (самопровозглашенный «Промпт-Архитектор») решил загрузить «быстренько и красивенько» китайский прайс на 300 000 строк из Гуанчжоу. Доверившись ИИ, он скормил файл платформе через ТабличныйДокумент.Прочитать(). Итог: Данила уронил рабочий сервер в разгар закрытия квартала у бухгалтерии.
• Часть 2. «Визит Анастасии Марковны»
Решив, что один поток — это прошлый век, Данила выбил из нейросети новый «универсальный рецепт» и бахнул многопоточность через ФоновыеЗадания.Выполнить(). Одно нажатие кнопки — и сервер 1С породил неуправляемую лавину фоновых процессов. Михалычу пришлось вручную вычислять сеанс «Пациента Зеро» в консоли администрирования и спасти базу, чтобы сменить гнев на милость главбуха Анастасии Марковны.
Часть 3. Урок китайской грамоты и zip-файл
Действующие лица:
• Сеньор (Михалыч) — излучает абсолютное сисадминское спокойствие.
• Джуниор (Данила) — бледный, с дрожащими губами. Смотрит на Михалыча как на средневекового инквизитора.
• Тимлид (Антон Павлович) — стоит у двери. Вглядывается в коридор, чтобы вовремя заметить директора.
• Логист/Аналитик (Андрей Николаевич, 48 лет) — знает Китай без прикрас. Он видит разницу между фабрикой на севере в Хэбэе и трейдерами в Гуанчжоу. С первого взгляда понимает, когда китаец пытается продублировать в счете упаковку или завысить вес нетто, чтобы заработать на пустом месте.
• Директор (Ирина Федоровна, 45 лет) — строгая, но справедливая. Держит в страхе весь офис.
• Таня — менеджер по закупкам, которая выбила скидку на болты у хитрых трейдеров из Гуанчжоу.
Акт 3. Урок китайской грамоты
Таня влетела в кабинет Андрея Николаевича с победным видом, держа в руках распечатанный прайс-лист со скидками.
— Андрей Николаевич, оформляйте бронь на контейнер! Я выбила скидку 10% у поставщика из Гуанчжоу! Сделка века, 300 000 штук болтов по 0.40 юаня!
Андрей Николаевич даже не поднял головы от экрана. В свои 48 лет начальник департамента логистики обладал железобетонным спокойствием. Он знал Китай без прикрас. Николаевич прекрасно помнил времена, когда возил метизы еще через пограничные переходы в Благовещенске, и понимал, что бесплатный сыр в Поднебесной бывает только в мышеловках.
Он медленно снял очки, взял у Тани лист бумаги и окинул его своим фирменным рентгеновским взглядом закупщика с 20-летним стажем. Ему хватило трех секунд, чтобы понять: хитрые трейдеры из Гуанчжоу снова пытаются сыграть в свою любимую игру.
— Танечка, — спокойно, с отеческой усталостью в голосе произнес Николаевич. — Скажи мне, а с каких пор Гуанчжоу стал производить тяжелый крепеж класса 8.8? Гуанчжоу — это хаб. Там сидят перекупщики. Они пьют с тобой чай, улыбаются, делают красивые Excel-файлы по 400 мегабайт с картинками и дают скидку на сам болт. Но они никогда не работают в минус.
Он взял карандаш и с первого взгляда ткнул в нижние строчки спецификации:
— Смотри сюда. Твой китаец дал тебе цену 0.40 юаня за штуку. Но он завысил вес нетто в этой колонке на целых 3 грамма на каждом болте. Для твоих 300 000 штук это лишние 900 килограммов несуществующего металла. А теперь посмотри на строчку Packing fee. Они продублировали стоимость упаковки в счете дважды: первый раз заложили в цену поддона, а второй — расписали как «усиленные картонные коробки».
Таня захлопала глазами:
— То есть... они меня обманули?
— Они тебя не обманули, они просто попытались заработать на пустом месте, переложив свою скидку в стоимость логистики, — Николаевич откинулся на спинку кресла. — Если бы мы везли этот «воздух» и двойную упаковку через Владивосток до Кемерово, то на пустом месте переплатили бы экспедиторам и таможне кучу денег. Твоя скидка просто сгорела бы на Транссибе.
Николаевич придвинул к себе клавиатуру:
— Сейчас я напишу их директору Ли напрямую. Мы заставим этих гуанчжоусцев убрать из счета весь мусор, пересчитать реальный вес брутто и везти груз на условиях FOB.
Когда Таня удивленно спросила: «А что, позвонить нельзя?», Андрей Николаевич лишь снисходительно усмехнулся, даже не отрываясь от клавиатуры:
— Танечка, если я ему сейчас позвоню, он будет полчаса кричать в трубку "Hello, my friend!". По телефону он с удовольствием скажет: «Да-да, хорошо, сделаем скидку, уберем упаковку». А когда придет время отгрузки, окажется, что он имел в виду совсем другое или вообще «забыл» про свои обещания. По телефону они со всем соглашаются, а потом присылают тот же самый кривой прайс. В Китае звонят, чтобы спросить, как здоровье матушки и пригласить на ужин. А бизнес делают на бумаге. Я сейчас отправляю ему скриншот таблицы, где красным маркером обвел его двойную упаковку. Через пять минут его менеджеры уже будут переделывать этот прайс под диктовку. Иди, не мешай работать.
И действительно, не успела Таня дойти до двери, как на мониторе Николаевича звякнул WeChat — директор Ли прислал смайлик со складывающимися в поклоне руками и короткое: «ОК, пересчитываем».
Андрей Николаевич ухмыльнулся, глядя в экран телефона:
— Я пересчитаю сам. Танечка, к программистам одна не ходи, даже ради спасения сделки. У меня в рабочей папке наш стандартный ВЭД-шаблон для ИТ-отдела сохранен. Я в него твой прайс перенесу, сам лишний вес и графику отсеку, свежие цифры курса 13.5 и тарифа 150 рублей внесу. Подожди, сейчас распечатаю задание — не дожидаясь китайцев.
Николаевич за три клика отправил свой проверенный файл на флешку, нажал Ctrl + P, и принтер на его столе мгновенно выплюнул готовый лист А4 с ТЗ. Николаевич забрал документ, взял флешку и встал из-за стола.
— Вот теперь у нас на руках броня. Пошли.
Они вместе с Таней вышли в длинный коридор главного офиса «ИнвестБолт».
(Вторая половина того же дня. Помещение IT-отдела)
Антон Павлович нервно переминался у приоткрытой двери, то и дело заглядывая в коридор:
— Тихо! Слышите? Каблуки... Кажется, Ирина Федоровна идет от коммерческого директора.
Данила, бледный, с дрожащими губами, судорожно бил по клавишам, глядя на Михалыча как на средневекового инквизитора.
Михалыч сидел на краю стола, излучая абсолютное сисадминское спокойствие, и не спеша счищал чешую с очередного кусочка воблы.
Дверь с грохотом распахнулась. На пороге появилась Ирина Федоровна — строгий деловой костюм, взгляд ледяной, но справедливый. Весь офис мгновенно замер. Следом за ней проскальзывала Таня, сжимая в руках новенький листок бумаги.
Ирина Федоровна с порога командным голосом произнесла:
— Так, ИТ-отдел! Антон Павлович, почему работа стоит?
Антон Павлович сглотнул слюну:
— Ирина Федоровна, тут... небольшая техническая накладка. Наш джуниор Данила проводит глубокую оптимизацию импорта данных...
Ирина Федоровна перебила его, переводя взгляд на бледного Данилу:
— Оптимизацию? Данила, еще раз такая оптимизация…
— Я, Антон Павлович, весь ваш ИТ-отдел оптимизировать переведу на ручной режим! Поедете на склад мешки с болтами пересчитывать! Таня, что у тебя?
Таня (шагает вперед, гордо поднимая листок):
— Слава тебе,Господи! Ирина Федоровна, мы поймали китайцев на горячем! Директор Ли из Гуанчжоу пытался нам в прайс зашить двойную упаковку и лишний вес. Андрей Николаевич ему в WeChat пару ласковых отправил, и китаец всё исправляет!
Андрей Николаевич:
— Я выгрузил «чистый» прайс без мусора, картинок и лишних тонн. Вес честный, тариф доставки до Томска — строго 150 рублей за килограмм, курс юаня — 13.5.
Ирина Федоровна:
— Отлично. Андрей Николаевич как всегда на высоте. И сколько теперь выходит себестоимость одного болта М10х60 в Томске, Таня?
Таня (смотрит в листок):
— По калькуляции Николаевича — ровно 11 рублей 70 копеек с учетом всей логистики и пошлин Владивостока! Это супермаржа!
Ирина Федоровна (поворачивается к программистам):
— Слышали цифру? 11.70. Программисты, заливайте этот очищенный прайс в систему. Даю вам время до вечера все загрузить, у нас уже есть заказчик. Иначе... вы меня знаете!
(Ирина Федоровна разворачивается и строгим шагом выходит из кабинета).
Михалыч (спокойно откладывает воблу, вытирает пальцы салфеткой):
— А теперь, джуниор, забудь про свой институтский ТабличныйДокумент. В крупном бизнесе файлы читают красиво. Таня, давай сюда свой новый файл. Даня, пиши код: открываем файл как ЧтениеZipФайла, достаем внутренний sheet1.xml и запускаем ЧтениеXML. Будем читать данные построчно, как конвейер. Память сервера вообще не шелохнется.
Антон Павлович (подходит ближе, заглядывает в монитор Данилы, сверяясь с распечатанным листом ТЗ от Андрея Николаевича):
— Так, Даня, стоп. Давай по шагам, строго по логике нашего аналитика. Открывай ТЗ, которое принес Николаевич. Смотри на алгоритм распределения по вкладкам.
Данила открывает переданный Андреем Николаевичем документ.
ТЕХНИЧЕСКОЕ ЗАДАНИЕ (ТЗ)
Объект автоматизации: Документ «Установка цен номенклатуры» (ERP / КА / УТ)
Бизнес-контекст: Оптовая торговля болтами (импорт из КНР)
1. Бизнес-цель доработки
Автоматизировать расчёт цены с НДС при ручном заполнении табличных частей документа «Установка цен номенклатуры». Исключить ручной пересчёт цены с НДС при изменении базовой цены или ставки налога.
2. Функциональные требования
2.1. Структура табличных частей документа
Документ содержит три табличные части, каждая со своим набором колонок:
• «ПереченьПродукции» — болты (включая гайки, винты, шайбы как сопутствующие крепёжные элементы). Колонки: Продукция, ЦенаБезНДС, Налог, ЦенаСНДС.
• «ПереченьАксессуаров» — сопутствующий ассортимент (инструмент, смазки, упаковка). Колонки: Аксессуар, ЦенаБезНДС, Налог, ЦенаСНДС.
«ПереченьЦветов» — спецификации по покрытиям и цветам. Колонки: Цвет, ЦенаБезНДС, Налог, ЦенаСНДС.
2.2. Автоматическое заполнение ставки налога и пересчёт цены
При изменении номенклатуры в строке любой из трёх табличных частей (выбор или замена значения в колонке «Продукция», «Аксессуар» или «Цвет») система автоматически заполняет колонку «Налог» значением реквизита Налог из карточки выбранной номенклатуры, после чего пересчитывает цену с НДС по формуле из п. 2.3.
При изменении значения в колонке «Цена без НДС» система автоматически пересчитывает «Цена с НДС» по той же формуле, но без повторного запроса ставки налога на сервер — используется уже заполненное значение колонки «Налог» в текущей строке.
Источник данных: реквизит Налог справочника номенклатуры. Чтение выполняется на сервере без контекста формы (&НаСервереБезКонтекста) для минимизации нагрузки.
2.3. Формула расчёта цены с НДС
Цена с НДС = Окр((1 + Налог / 100) × Цена без НДС, 2) где: Налог — ставка из колонки «Налог» текущей строки (проценты);
Окр(..., 2) — математическое округление до 2 знаков после запятой.
3. Технические требования
3.1. Архитектура вызовов
Чтение ставки налога — серверный вызов без контекста (&НаСервереБезКонтекста). Функция ПолучитьНалог(ОбъектНалога) возвращает значение ОбъектНалога.Налог.
Расчёт цены — клиентская процедура РасчетНалогаИЦены(ЭлементТаблица, Тип, ПолучитьНалог). Универсальная для всех трёх ТЧ, принимает:
ЭлементТаблица — элемент управления таблицы формы;
Тип — имя колонкиR09;номенклатуры в строке ("Продукция", "Аксессуар", "Цвет");
ПолучитьНалог — флаг: Истина (обновить налог и пересчитать цену) или Ложь (только пересчитать цену).
3.2. Размещение кода
Код размещается в модуле формы документа. Область ОбработчикиСлужебныхПроцедурИФункций содержит серверную функцию получения налога и клиентскую процедуру расчёта. Область ОбработчикиСобытийЭлементовТаблицФормы содержит обработчики событий ПриИзменении для соответствующих колонок.
3.3. Точность округления
Цена с НДС округляется до 2 знаков после запятой с использованием функции Окр().
Данила (судорожно вытирает пот со лба, его пальцы летают по клавиатуре, превращая строчки ТЗ в живой код):
— Есть! Пишу создание документа и обработчики, согласно пунктам техзадания!
#Область ОбработчикиСлужебныхПроцедурИФункций
&НаСервереБезКонтекста
Функция ПолучитьНалог(ОбъектНалога)
Возврат ОбъектНалога.Налог;
КонецФункции
&НаКлиенте
Процедура РасчетНалогаИЦены(ЭлементТаблица,Тип,ПолучитьНалог=Истина)
Стр=ЭлементТаблица.ТекущиеДанные;
Если ПолучитьНалог Тогда
Стр.Налог=ПолучитьНалог(Стр[Тип]);
КонецЕсли;
Стр.ЦенаСНДС=Окр((1+стр.Налог/100)*Стр.ЦенаБезНДС,2);
КонецПроцедуры
#КонецОбласти
Комментарий от Данила джуна для читателей Инфостарта:
«Ребята-одинэсники, привет! Если к вам прибегает шустрая менеджер Таня и орет, что сервер упал, а в китайском прайсе на 300 000 строк зашиты 70 гигов скрытых картинок, а строгая директор Ирина Федоровна грозится отправить вас разгружать 12 тонн болтов вручную — не паникуйте. Ловите рабочий код!
А продолжение нашей истории и новые приключения ИТ-отдела «ИнвестБолт» ждите в следующей главе. Мы с Михалычем пошли пить кофе... ну и воблу чистить! Всем легких релизов!
Вступайте в нашу телеграмм-группу Инфостарт