Первый рабочий день джуниора Данила Нина Карсанова Это книга о бизнесе на стыке закупок, ВЭД и автоматизации: здесь вы увидите ответы на вопросы : как не потерять деньги на внешнеторговых сделках, как проверять прайсы на скрытые риски и как закрывать эти риски с помощью 1С и понятных регламентов. Добро пожаловать в ИТ-отдел крупной компании "ИнвестБолт", которая знает цену специфики ВЭД с Китаем. Сегодня — первый рабочий день нашего джуниора Данилы. Вокруг него кипит жизнь, сеньор Михалыч флегматично чистит воблу, тимлид наливает кофе, а в углу моргает серверная стойка. Кажется, что впереди спокойное погружение в профессию и чтение документации. Но у вселенной автоматизации на этот день совсем другие планы. Порог отдела переступает менеджер Таня, и с этой секунды время ускоряется, а привычный мир начинает рушиться. Что ждет новичка, когда реальные бизнес-процессы сталкиваются с теоретическими знаниями? Как выжить в первый рабочий день, если всё вокруг идет не по плану, и почему этот день джуниор запомнит на всю жизнь? Нина Карсанова Первый рабочий день джуниора Данила Глава 1. Прайс из Китая Часть 1. Прайс из Китая Действующие лица: Таня — менеджер по закупкам. Мыслит категориями «красивенько», «быстренько» и «скидочки». В руках у неё флешка с прайс-листом поставщика на 300 000 строк. Джуниор (Данила) — 22 года. Называет себя «Промпт-Архитектором». Уверен, что если код компилируется, то он крутой. Искренне верит, что ИИ уже заменил senior-архитекторов. Сеньор (Михалыч) — 45 лет. Борода до пупка. Глаза цвета «абсолютного штиля посреди шторма ». В руках держит сушёную воблу. Тимлид (Антон Павлович) — начальник отдела. Уставший человек с поллитровой кружкой кофе, который просто мечтает дожить до пятницы. Место действия: ИТ-отдел, где пахнет свежемолотым кофе и термопастой. На стене висит наклейка «Выжили! 1С 7.7 на 8.5», ставшая местной иконой. В углу мерно и мирно шуршит серверная стойка, на которой красуется табличка: «Не трогай, оно работает». Атмосфера дышит абсолютным, почти курортным спокойствием. Джуниор Данила сидит за новеньким ноутбуком, на котором еще не высохла краска. Он чувствует себя властелином мира. Зачем три года зубрить синтакс-помощник, если у тебя открыто окно передового ИИ, способного сгенерировать код за две секунды? В паре метров от него, глубоко откинувшись в огромном кожаном кресле, восседает Сеньор Михалыч. Его борода помнит помнит платформу 7.7, а во взгляде читается знание всех тайн СУБД. Михалыч не спеша, с хирургической точностью отламывает хвост у сушеной воблы прямо над клавиатурой. У двери за своим столом замер Тимлид Антон Павлович. Он обновляет почту, пьет кофе из поллитровой кружки и надеется, что этот день пройдет без происшествий. Михалыч: Ну что, Данила, давай посмотрим, как ты умеешь писать код. Создай клиентские процедуры для расчета Суммы при изменении Цены или Количества в табличной части "ПереченьТоваров". Напиши обработчик события "ПриЗаписиНаСервере", который будет выводить в окно сообщений общее количество строк в документе и итог по колонке "Количество". Данила: (вальяжно потягивая смузи) Я написал промпт для ИИ. Задал ему условия, контекст управляемых форм платформы 1С и клиент-серверное разделение. Вот смотрите, Михалыч, какой код получился. &НаКлиенте Процедура ПереченьТоваровКоличествоПриИзменении(Элемент) // Получаем строку, в которой в данный момент работает пользователь СтрТабЧасти=Элементы.ПереченьТоваров.ТекущиеДанные; //Сумма=Цена*Количество СтрТабЧасти.Сумма=СтрТабЧасти.Цена*СтрТабЧасти.Количество; КонецПроцедуры &НаКлиенте Процедура ПереченьТоваровЦенаПриИзменении(Элемент) // Получаем строку, в которой в данный момент работает пользователь СтрТабЧасти=Элементы.ПереченьТоваров.ТекущиеДанные; //Сумма=Цена*Количество СтрТабЧасти.Сумма=СтрТабЧасти.Цена*СтрТабЧасти.Количество; КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Сообщить("Всего в документе "+ ТекущийОбъект.ПереченьТоваров.Количество()+ " строк(и), с количеством товаров "+ ТекущийОбъект.ПереченьТоваров.Итог("Количество")+" шт."); КонецПроцедуры Сеньор Михалыч: (внимательно смотрит в монитор Данилы, жует воблу и одобрительно кивает) Хм... А, ведь действительно, код чистый и рабочий. Текущие данные формы получены верно, вызов серверного контекста при записи оптимален, итоги считаются без лишних запросов. Молодец, Данила. Но помни: чтобы ИИ всегда выдавал тебе рабочий код под 1С, нужно знать тонкости в написании промпта и понимать директивы компиляции. Антон Павлович: (делает большой глоток кофе) Давайте без философии. Главное — чтобы сегодня всё было тихо. У Анастасии Марковны из бухгалтерии сегодня закрытие квартала. Если база упадет хотя бы на минуту, она нас самих на субсчета распилит. Код рабочий — это отлично, но сегодня ничего в прод не внедряем. Так что просто сидим ровно и читаем документацию. (В этот момент дверь ИТ-отдела распахивается с характерным пластиковым хрустом. На пороге возникает менеджер Таня из отдела закупок. Она буквально светится от счастья, в руке у нее победно зажата розовая флешка, а скорость её речи мгновенно перегружает процессор Тимлида.) Таня: Мальчики, приветик! Спасайте, у меня супер-новость! Я нам такую скидочку у китайских поставщиков выбила, просто космос! Они мне только что на почту скинули прайсик на болты. Маленький такой файлик Excel, всего 300 тысяч позиций! Данечка, ты же мне сделаешь быстренько кнопочку, чтобы всё это красивенько в базу залетело? Мне прям очень надо, у меня через 5 минут созвон с Гуанчжоу! (Михалыч замирает с куском воблы во рту. Антон Павлович медленно опускает кружку с кофе. Данила радостно расправляет плечи и открывает окно чата с ИИ, чтобы написать новый промпт специально под Танин эксель...) Пальцы джуниора порхают по клавиатуре, пока он формулирует задачу для нейросети, стараясь выглядеть максимально солидно перед Таней. промпт Данилы для ИИ: «Мне нужно быстро и кроссплатформенно прочитать файл Excel (.xlsx) на 300 000 строк на стороне сервера под Linux и загрузить данные в созданный нами документ. Напиши самый нативный и современный метод 1С без использования COM-объектов». ИИ-Кодер: «Отличное решение! Для нативной и кроссплатформенной работы в 1С 8.3 идеально подходит объект ТабличныйДокумент. Он работает на любой ОС и не требует установленного Excel. Данила: (копирует код и вставляет победно улыбаясь, пока Антон Павлович и Сеньор Михалыч вышли из кабинета) Готово! Таня, вставляй флешку, нажимай «Загрузить»! Таня: Ой, мальчики! Я нажала, и у меня всё зависло! А Анастасия Марковны из бухгалтерии уже кричит в коридоре, что её выкинуло из системы во время закрытия квартала! И у меня на экране написано: «Ошибка: Недостаточно памяти». Сеньор Михалыч: Данила, у нас на сервере рабочий процесс rphost сожрал все 64 Гигабайта оперативной памяти, занял 100% процессора и упал! Данила: (нервно кликает мышкой, краска сходит с лица) Антон Павлович, ну код же идеален! ИИ написал, что ТабличныйДокумент — это встроенный объект 1С, он обязан работать на Linux! Программа просто думает... там же 300 тысяч строк... Сеньор Михалыч: (подходит сзади и кладет руку на плечо Даниле) Садись, бери листок и записывай как устроена СУБД (Система Управления Базами Данных) и как приложение 1С будем закладывать туда фундамент ИТ-архитектуры. (Михалыч решительно отодвигает клавиатуру, берет маркер и подходит к большой офисной магнитной доске) Данила: (тихо) Михалыч, ну при чем тут СУБД? Код же в 1С написан правильно! Сеньор Михалыч: 1С сама по себе не умеет делать выборки, сортировать миллионы строк на диске и обеспечивать их сохранность при сбое питания. Всем этим управляет СУБД. 1С — это педаль в салоне (интерфейс, за которым сидит пользователь), а СУБД — это двигатель под капотом, который и выполняет всю тяжелую работу. Ты жмешь педаль в 1С, а СУБД крутит шестеренки на физических дисках сервера. Михалыч берет маркер и прямо по стрелочкам на доске расписывает Даниле, как строчка кода превращается в байты на диске:( чертит на доске схему и начинает построчно разбирать каждую стрелочку): Шаг 1. КЛИЕНТ (1С:Предприятие): Менеджер Таня нажимает на клиенте кнопку «Загрузить».Клиентское приложение не работает с базой напрямую — оно лишь отправляет массив данных и команду на сервер. Кнопка «Загрузить» физически не имеет доступа к таблицам СУБД, а лишь пакует команду, параметры файла и отправляет этот вызов по сети на сервер приложений. Шаг 2. [ rphost (Сервер приложений 1С) ]:Запрос падает в серверный процесс rphost.Здесь твой код 1С начинает выполняться и построчно переводится (транслируется) в низкоуровневые SQL-запросы, понятные для баз данных. Главная обязанность сервера приложений 1С: он берёт твой высокоуровневый код встроенного языка (или объектные вызовы вроде Документ.Записать()) и на лету генерирует из них строгие, понятные для СУБД низкоуровневые операторы SQL (такие как INSERT, UPDATE, SELECT). Шаг 3. СУБД (PostgreSQL / MS SQL):Сервер 1С передает эти SQL-команды на вход СУБД. Внутри СУБД их встречает Движок SQL (Query Processor). Когда SQL-запрос прилетает из 1С, Движок SQL (Query Processor) не бросается сразу выполнять его вслепую. Он работает как умный навигатор: Он оценивает входящий текст запроса. Смотрит на статистику базы данных и строит план выполнения (Execution Plan) — то есть выбирает оптимальный маршрут (какие индексы использовать, как связать таблицы). Принимает решение, как максимально эффективно и быстро обработать этот поток данных. Шаг 4. [ Кэш памяти СУБД ]:СУБД никогда не пишет данные на медленный диск мгновенно.Первым делом новые строки номенклатуры залетают в сверхбыструю оперативную память сервера — Кэш памяти (Buffer Pool) и параллельно фиксируются в логе транзакций. Когда 1С говорит: «СУБД, запиши новый товар», умная база данных (MS SQL или PostgreSQL) делает два действия одновременно в оперативной памяти: Кэш памяти (Buffer Pool): СУБД меняет данные в своей оперативке. Это мгновенно. На диск сам товар пока не пишется. Лог транзакций (WAL): СУБД обязана сделать текстовую запись-черновик в специальный журнал: «Данила создаёт строку 1». Этот лог — гарантия того, что если прямо сейчас выключится свет, СУБД при перезагрузке прочитает этот черновик и восстановит данные. Что ломается, если транзакция гигантская (на 300 000 строк)? Пока Данила не скажет финалу транзакции Зафиксировать, СУБД находится в состоянии «боевой тревоги»: Журнал (лог) раздувается: СУБД не имеет права стирать этот черновик с диска. Вдруг на 299 999-й строке выдернется флешка? Тогда СУБД должна будет пройти по журналу назад и стереть всё, что Данила успел накодить (сделать откат — Rollback). Журнал забивает весь диск сервера. Диски ложатся в 100% (I/O Bottleneck): Сервер начинает непрерывно сбрасывать этот гигантский лог из памяти на жесткий диск, диски не справляются с потоком, и вся система начинает жутко тормозить. Замок на таблице (Exclusive Lock): Чтобы в этот черновик никто тайно не вписал другие данные (например, Анастасия Марковна со своей накладной), СУБД вешает «монопольный замок» на всю таблицу товаров. Шаг 5. [ HDD / SSD Сервера ]:И только после этого, когда кэш заполнен или транзакция закрыта, СУБД выполняет физическую запись в файлы данных на жесткие диски сервера. Данные сохранены навсегда. Что такое «Фиксация» (Commit) на физическом уровне? Когда в коде 1С срабатывает команда ЗафиксироватьТранзакцию(), СУБД получает команду COMMIT. До этого момента все 300 000 позиций болтов висели в воздухе. Фиксация — это юридическая точка невозврата. СУБД проверяет, что все строчки успешно обработаны, ошибок нет, и ставит в логе транзакций (WAL-журнале) окончательный статус: «Транзакция Данилы завершена успешно, данные подтверждены». Почему СУБД не пишет данные на диск сразу? Жесткие диски (HDD) и даже твердотельные накопители (SSD) — это самая медленная часть любого сервера. Оперативная память работает в тысячи раз быстрее. Если бы СУБД при создании каждого отдельного болта сразу дергала головку жесткого диска или перезаписывала ячейки SSD, сервер бы мгновенно «встал». Поэтому СУБД применяет упреждающую запись: она мгновенно меняет данные прямо в оперативной памяти — в так называемом Кэше страниц (Buffer Pool), а на диск пишет только короткую строчку в лог транзакций. В итоге на диске сами файлы базы данных (.mdf или таблицы Postgres) пока остаются старыми, а новые данные существуют только в оперативке. Как происходит «Физическая запись в файлы данных»? Процесс переноса из быстрой памяти на медленный диск называется Checkpoint (Контрольная точка) или работа асинхронного писателя (Lazy Writer / Background Writer). Шаг А:СУБД копит измененные Данилой страницы данных в оперативке. Эти страницы в мире СУБД называются «грязными страницами» (Dirty Pages) — то есть это данные, которые уже изменились в памяти, но еще не записаны на диск. Шаг Б:Как только транзакция Данилы зафиксирована, или когда оперативная память СУБД начинает переполняться, включается внутренний системный поток СУБД. Шаг В:Этот поток берет «грязные страницы» из оперативки, пакует их в ровные блоки и последовательно, не нагружая процессор, сбрасывает (делает Flush) на физические жесткие диски сервера (HDD/SSD). Шаг Г:Данные физически перезаписываются в файлы базы. Только после этого страницы в памяти становятся «чистыми», а лог транзакций на диске можно очистить. Сеньор Михалыч: (опускает маркер на стол) Вот так, Данилка, выглядит идеальный путь данных. Красивая цепочка, правда? А теперь давай разберем, как твой код устроил погром на каждом метре этой схемы. Принцип 1. Клиент-Серверная архитектура и память приложений. Платформа 1С сама по себе не хранит файлы на диске, а выступает лишь «переводчиком» твоего кода в SQL-запросы для СУБД. Твой ИИ подсказал метод ТабличныйДокумент.Прочитать(), который выполняется на стороне сервера приложений в процессе rphost. Когда rphost начинает читать этот файл, внутренний C++ движок платформы пытается воссоздать в оперативной памяти полную визуальную объектную модель документа. На каждую из миллионов ячеек, на каждый чих со стилем, шрифтом, границей или формулой платформа 1С создаёт тяжелый внутренний объект структуры встроенного языка (область ячеек, форматные свойства и метаданные).Из-за этого колоссального объема внутренних структур 1С скрытый XML-архив весом 50 Мб раздулся в оперативной памяти сервера до 70 Гигабайт. Операционная система Linux увидела, что процесс rphost критически превысил лимиты выделения ресурсов, поэтому сработал механизм защиты OOM Killer — он принудительно завершил работу сервера 1С, остановив работу всей компании. Вывод первого урока: rphost — это память приложения. Ее нельзя засорять визуальными моделями документов на стороне сервера. Для больших файлов память должна использоваться как «проточный фильтр» — прочитал строчку текста, обработал, забыл, пошел к следующей. Это называется потоковым чтением. Принцип 2. Что такое Транзакция и принцип ACID Данила: (завороженно смотрит на доску) Ладно, с памятью приложения понятно — rphost лопнул от Таниных ячеек. — Но если бы у нас было не 64 гигабайта оперативки, а терабайт, код бы выполнился? Сеньор Михалыч: — Он бы дошел до следующего этапа и там бы намертво заклинил саму СУБД. Потому что твой ИИ написал код, который пытается загнать все 300 000 строк в базу одной транзакцией. Что такое транзакция? Это фундаментальное понятие в СУБД. Это группа последовательных операций с базой данных, которая представляет собой единую логическую единицу работы. Транзакция работает по строгому международному стандарту ACID: A (Atomicity) — Атомарность: Транзакция будет выполнена либо полностью, либо не выполнена вообще. Никаких «половинок». Если у тебя загрузится 299 999 болтов, а на последнем произойдет ошибка — СУБД сотрет всё, что ты сделал до этого, вернув базу в исходное состояние. C (Consistency) — Согласованность: Каждая успешная транзакция фиксирует только допустимые результаты. База переходит из одного качественного состояния в другое, не нарушая логических связей и индексов. I (Isolation) — Изолированность: Транзакции, выполняемые параллельно, не должны влиять друг на друга. То, что делаешь ты в своей транзакции, не должно быть видно Анастасии Марковне, пока ты не закончишь. D (Durability) — Стойкость: Если СУБД сказала, что транзакция зафиксирована, данные железно записаны на диск, и даже если в следующую секунду в серверной выключится свет — данные не пропадут. Данила: А как она ломает сервер на практике? Принцип 3. Лог транзакций (Transaction Log) и дисковая подсистема Сеньор Михалыч: А на практике, чтобы обеспечить эту самую Атомарность (Atomicity) и Стойкость (Durability), СУБД использует специальный инструмент — Лог транзакций (журнал предзаписи, WAL в PostgreSQL). Когда СУБД получает команду записать элемент, она не бежит сразу менять файлы самой базы данных на жестком диске — это слишком медленно. СУБД сначала пишет эту операцию в лог транзакций последовательным потоком. Лог — это черновик. СУБД говорит: «Я помню, что Данила хочет записать Болт 1, Болт 2...». И пока твоя гигантская транзакция на 300 000 строк не завершится командой ЗафиксироватьТранзакцию(), СУБД обязана держать в логе транзакций всю эту колоссальную простыню данных! Зачем? Чтобы если на 299 999-й строке выдернется флешка, СУБД могла выполнить команду Rollback (откат) — пройти по логу назад и вернуть базу в исходную точку. Когда ты пихаешь 300 000 элементов в одну транзакцию, лог транзакций раздувается до неприличных размеров, забивает весь кэш СУБД, начинает бешено писать временные файлы на диск, дисковая подсистема сервера встает в стопроцентную полку (I/O Bottleneck), и сервер зависнет. Принцип 4. Блокировки таблиц (Locks) и конкурентный доступ Данила: (сглатывает смузи, в руке карандаш) Михалыч... а при чем тут главбух Анастасия Марковна? Почему её выкинуло, если я работал со справочником Номенклатуры, а она — со своими налогами и накладными? Сеньор Михалыч: (чертит жирную линию на доске) А вот тут вступает в силу свойство Изолированности (Isolation) из принципа ACID. Чтобы твоя транзакция не перемешалась с чужими данными, СУБД использует Блокировки (Locks). Когда твоя транзакция начинает создавать Номенклатуру, СУБД вешает на таблицы справочника и связанных с ним регистров Монопольную блокировку (Exclusive Lock). Для СУБД это выглядит так: «Внимание! Данила открыл транзакцию. Пока он не закончит, я закрываю эти таблицы на замок. Никто другой не имеет права записывать сюда данные и менять индексы!». И вот Анастасия Марковна или Марина пытается провести накладную. В этой накладной есть список товаров. При проведении документы 1С делают проверку остатков, обращаются к таблицам Номенклатуры, пытаются обновить индексы. Анастасия Марковна стучится в базу, а СУБД ей говорит: «Жди. Таблицы заблокированы Данилой. У него там транзакционный лог горит и 300 тысяч позиций болтов едут из Китая». Сессия Анастасии Марковны встает в очередь (Lock Timeout). Она ждет 20 секунд, ждет 40 секунд... Время ожидания блокировки, установленное в кластере 1С, истекает. Платформа понимает, что СУБД ей данные не отдаст, аварийно прерывает сессию бухгалтера и выдает ей на экран ошибку: «Конфликт блокировок при выполнении транзакции». Квартальный отчет сорван. Данила замирает, смотрит на маркерную доску как на великое откровение и растерянно говорит: — То есть... ИИ выдал мне код, который синтаксически правильный, но просто не учел архитектуру нашей СУБД? А про себя в этот момент думает: «Блин, ну я же искренне считал, что тестовая база — это для слабаков, а ИИ ошибаться не может по определению! Зачем вообще тратить время на какую-то копию, если нейросеть написала всё с первого раза идеально? И почему, ну почему этот всемогущий ИИ не учел нашу архитектуру СУБД?!» Михалыч тяжело вздыхает, наливает чай и выносит вердикт: — Да, Данила, именно так, синтаксис идеальный, база легла без единой ошибки. Короче: отныне ты работаешь только в тестовой базе, и все свои действия будешь согласовываешь со мной! Данила уныло кивнул, а сам незаметно открыл Инфостарт. Первым же делом он потратил свою последнюю стартмани, чтобы купить ту самую обработку-переводчик для КОРП промптов. «Всё, — твердо решил джун, скачивая файл— Хватит с меня блокировок СУБД. В следующий раз я заставлю этот ИИ писать код строго по стандартам БСП и Highload, переобуюсь в кроссовки как в знаменитом анекдоте Бориса Георгиевича Нуралиева, и буду бежать впереди самого Михалыча! Глава 2. Визит Анастасии Марковны - главбуха. В предыдущей серии: Краткое содержание Части 1 В ИТ-отделе крупной компании "ИнвестБолт", которая знает цену специфики ВЭД с Китаем, наступило начало прекрасного дня: сеньор Михалыч флегматично чистил воблу, тимлид Антон Павлович пил кофе, а амбициозный 22-летний джуниор Данила (самопровозглашенный «Промпт-Архитектор») радовался жизни. Это был его первый официальный рабочий день после долгих месяцев штурма Хедхантера, и Данила чувствовал себя баловнем судьбы. Он искренне верил, что ИИ уже заменил сеньоров, ведь нейросеть по его первому запросу сгенерировала синтаксически идеальный код для управляемых форм. Идиллия рухнула, когда в отдел влетела менеджер по закупкам Таня с розовой флешкой с «маленьким» прайсом от китайских поставщиков на 300 000 строк Excel, который нужно было загрузить «быстренько и красивенько». Данила не растерялся и скормил ИИ новый промпт. Нейросеть авторитетно заявила, что для кроссплатформенной работы на Linux идеально подходит объект ТабличныйДокумент. Джуниор скопировал код, нажал кнопку «Загрузить» и… серверный процесс rphost сожрал все 64 ГБ оперативной памяти, нагрузил процессор на 100% и упал. База рухнула в разгар закрытия квартала у бухгалтерии, выкинув из системы главбуха Анастасию Марковну. Опытный сеньор Михалыч отложил воблу, взял маркер и пошел к офисной доске и стал объяснять Даниле, как устроен реальный мир СУБД на физическом уровне. Часть 2. Визит Анастасии Марковны - главбуха Действующие лица: Анастасия Марковна (Главбух)— 55 лет. Взгляд прожигает насквозь даже тимлида. Причёска в виде монолитного куба, зафиксированная лаком «Прелесть». Носит с собой огромные счёты как холодное оружие. Таня — менеджер по закупкам. Мыслит категориями «красивенько», «быстренько» и «скидочки». При виде главного бухгалтера мгновенно вспоминает, что ей «срочно нужно забрать важные оригиналы документов на складе», и пытается боком, не поднимая глаз, просочиться к выходу из кабинета. Джуниор (Данила). Медленно сползает под стол, имитируя бурную деятельность: делает вид, что проверяет надежность подключения сетевого кабеля к системному блоку, и мечтает остаться там жить до конца дня. Сеньор (Михалыч)— резко кладет воблу из рук на стол. Тимлид (Антон Павлович)— пытается спрятать пустую кружку из-под кофе. Данила завороженно смотрел на доску, где Михалыч только что закончил рисовать схему прохождения данных от клиента до физического диска. В воздухе ИТ-отдела мгновенно запахло корвалолом. Порог кабинета переступила она — главный бухгалтер Анастасия Марковна... Анастасия Марковна: (от ее крика дрожат даже стекла на окнах ) Так… Я не поняла. Кто у нас тут главный повелитель кремния и мышек? У меня до конца дня — сдача НДС за 3 квартал в налоговую горит. Я нажимаю кнопку «Сформировать декларацию», а мне пишет: «Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки!. Обратитесь к администратору сервера 1С. Антон Павлович: Анастасия Марковна! Родненькая! У нас тут форс-мажор! Танюша из закупок принесла китайский прайс на 400 мегабайт, а Данила… Данила, пока я с Михалычем вышел из кабинета , поработал, и … сервер временно… прилёг отдохнуть. Анастасия Марковна: (переводит взгляд на Данилу, тот сжимается до размеров 1С:Розницы) Данила, значит? Промпт-инженер? Ты мне штрафы как оплачивать будешь, если я не сдам декларацию?! Данила: (тихим голосом) Но Анастасия Марковна... я сделал за 5 минут кнопку «загрузить» и, между прочим, ИИ аргументировал это тем, что через Новый ТабличныйДокумент будет быстрее! Мы экономили такты процессора! Анастасия Марковна: (медленно поворачивается к нему ) Такты процессора? Ты мне базу в «зависла», мамкин хакер! Знаешь, какие у меня будут «издержки», если до конца дня налоговая не увидит декларацию?! Я тебя самого в SQL-таблицу занесу! В колонку «Безвозвратно утраченные активы»! Антон Павлович: Я вообще чай пью! Исключительно зеленый, для нервной системы! Сеньор (Михалыч): (разворачивается к клавиатуре, пальцы начинают порхать по клавишам) Так, отставить панику. Марковна, не кричи, серверу и так страшно. Этот юный падаван умудрился запустить транзакцию без разбиения на порции. TempDB на серваке раздуло так, что жесткие диски сейчас скрипят и просят пощады. База не просто висит, она сейчас в астрале. Таня: (стоит у окна кабинета, смотрит на улицу, будто там есть ответ попроще) Ой, а если она в астрале, китайский прайс загрузится? Они же ждут подтверждения! Михалыч: (открывает консоль кластера серверов 1С) Таня, солнце ты наше. Твой китайский прайс сейчас застрял где-то между оперативной памятью и астралом. (Смотрит в монитор). Ага, вот он. Сеанс Данилы. Сожрал 64 гигабайта оперативки и висит в статусе «Я познал бесконечность». Данила: (с надеждой) Может, оно само отвиснет? Нейросеть писала, что нужно просто подождать... Анастасия Марковна: Я тебе сейчас подожду! У меня НДС горит! Михалыч: Умирает. Не отвиснет. Транзакционный лог забился. (Нажимает пару кнопок в консоли администрирования). Убиваю сеанс. (На секунду в кабинете становится неестественно тихо. Даже гул кондиционера, кажется, замирает. На экране Михалыча выскакивает красное окно с ошибкой, затем консоль мигает). Михалыч: Не понял. Сеанс не убивается. Этот скрипт от ИИ запустил фоновые задания, которые плодят сами себя! Данила, ты что туда скопипастил?! Данила: (бледнея, вжимается в системный блок) Рекурсивный алгоритм самообучения... Чтобы цены сами подстраивались под рынок... Тимлид: (хватается за голову) За что мне это?! У нас же просто оптовая торговля болтами! Какой рынок?! Какое самообучение?! Анастасия Марковна: Я пошла к себе в кабинет если, Антон Павлович, через пять минут вы не оживите сервер, я за себя не ручаюсь. Михалыч: (хрустит костяшками пальцев) До этого не дойдет, я здесь главный реаниматолог. (Подзывает к себе Данилу) Бери свой блокнот и пиши, что делать нужно в таком случае. Бесконечное колесико ожидания — это не просто «1С думает». Это визуализация того, как сеанс пользователя встал в очередь к таблице СУБД. Пока СУБД не разрешит конфликт блокировок, интерфейс будет намертво висеть. Михалыч решительно открывает рабочее окно, на экране разворачивается «СДР: Навигатор по конфигурации» — мощный профессиональный инструмент администратора, который позволяет увидеть всю изнанку информационной базы и мгновенно оценить ситуацию без долгого запуска Конфигуратора. (Чтобы не рисковать живыми данными в разгар аварии, Михалыч первым делом подключается к изолированной тестовой копии — показать джуниору механику работы) Сеньор Михалыч: Так, «промпт-архитектор», отставить панику. Смотри на экран и учись . Посмотри на верхний ряд серых вкладок (кнопок). Найди четвертую по счету вкладку — она называется «Активные сеансы». Кликни по ней мышкой. Когда ты откроешь вкладку «Активные сеансы», перед тобой развернется список всех людей и фоновых заданий, которые прямо сейчас подключены к базе 1С. Там будет колонка «Имя пользователя», «Время начала» и, самое главное, технические параметры нагрузки. Если база зависла из-за тяжелой транзакции, ты сразу увидишь его сеанс в этом списке — он будет выделяться аномально долгим временем выполнения или захватом ресурсов. Прямо из этого окна (если у твоей учетной записи есть административные права) можно выделить зависший сеанс и нажать кнопку «Завершить сеанс» (или «Удалить»), чтобы мягко освободить базу СУБД, не перезагружая весь сервер целиком. Данила: Ой, Михалыч, а почему тут пусто? Списки «Сеансы информационной базы» и «Соединения» вообще белые. База окончательно умерла? Михалыч: База в коме, сейчас обе таблицы («Сеансы информационной базы» и «Соединения информационной базы») пустые, потому что консоль еще не подключилась к самому кластеру серверов 1С. Чтобы списки заполнились, нужно сделать одно простое действие. Посмотри в самый верхний левый угол рабочего поля (под серыми вкладками). Там горит зеленая подчеркнутая ссылка: «Администратор кластера». Кликни мышкой по этой зеленой ссылке «Администратор кластера». У тебя откроется небольшое окошко запроса авторизации. Если у кластера 1С заданы имя администратора и пароль, введи их туда. Если администрирование без пароля, просто нажми «ОК» или «Подключиться». Данила: Михалыч, а какой пароль? Сеньор Михалыч: Пароль у нас на тесте пустой, так что просто дави «ОК». Данила: Что произойдет после этого? Михалыч: Как только консоль авторизуется в кластере, эта страница мгновенно оживет: в верхней таблице появится список всех активных сеансов (пользователей и фоновых заданий). Если кто-то намертво повесит базу (как ты, Данила, со своими болтами), его строка подсветится в этом списке. И прямо здесь станет активной большая кнопка «Завершить сеансы...» (она сейчас серая и неактивная в верхней панели управления). Данила: ( наводит курсор на зеленую ссылку и кликает) Михалыч, я нажал! Окошко авторизации выскочило. Так, логин и пароль пустые, нажимаю «ОК». Пошло считывание! И что теперь? Сеньор (Михалыч): Нажимай кнопку «Обновить». Данила: (кликает мышкой) О, посмотрите! Я нажал «Обновить», и всё ожило! Консоль успешно считала данные с сервера 1С! Рядом с заголовком «Сеансы информационной базы» загорелась зеленая цифра (2) — это значит, что в базе прямо сейчас открыто ровно два подключения. Михалыч, а почему тут всего два сеанса? И всё так просто? Сеньор (Михалыч): Да, сейчас всего два сеанса, потому что мы зашли на тестовую копию, чтобы разобраться в интерфейсе. Смотри, кто именно сейчас находится в базе: Первая строка (Конфигуратор): Кто-то зашел в базу через Конфигуратор. Вторая строка (Тонкий клиент): А вот это — наше текущее рабочее окно. Ну давай, ради эксперимента выделяй вторую строку с Тонким клиентом и нажимай «Завершить сеансы...»! Тренируйся! Данила: (затаив дыхание, наводит курсор и нажимает) Нажал! Михалыч, глянь, появилось то самое заветное окно подтверждения: «Отмеченные сеансы (1 шт) будут завершены. Продолжить?» Михалыч: Нажимай «Да». Данила: (ошарашенно) Я нажимаю «Да»! И всё так просто?.. Нажал одну кнопку, подтвердил — и процесс хирургически вырубился? Наш сеанс закрылся? Сеньор Михалыч: В этой консоли — да, всё именно так просто, быстро и без лишней нагрузки на сервер. А теперь, когда ты понял механику и набил руку, переключаемся на наш боевой сервер кластера! Пора вычищать твои ИИ-шедевры из реальной базы. Данила: Но почему, если я нажал кнопку всего один раз, в консоли администрирования висит не триста тысяч строк из прайса, а несколько сотен зависших сеансов и процессов? Михалыч: Данила, я открою тебе этот главный секрет «размножения» сеансов в 1С. Дело в том, что когда тяжелый код или неудачный скрипт от ИИ начинает выполняться на сервере, он порождает лавину процессов за кулисами. Вот 3 основные причины, почему одно нажатие кнопки превращается в сотни зависших строк в консоли: 1. Фоновые задания (Background Jobs) Ты написал код (или скопировал у ИИ), который не просто читал файл в один поток, а пытался ускорить процесс. Скрипт разбивал прайс на мелкие кусочки и на каждый кусок запускал метод ФоновыеЗадания.Выполнить(). В итоге одно нажатие кнопки породило сотни параллельных фоновых заданий, каждое из которых зарегистрировалось на сервере 1С как отдельная строка-сеанс! 2. Пул соединений СУБД (Connection Pooling) Когда эти сотни фоновых заданий ломанулись в базу данных (MS SQL или PostgreSQL), СУБД не могла пропустить их через одну «дверь». Платформа 1С начала динамически открывать новые и новые физические соединения с SQL-сервером, чтобы параллельно записывать строки. В нижней таблице вашей консоли («Соединения информационной базы») в этот момент как раз и выстроились бы те самые сотни строк блокировок. 3. Рекурсивные повторы (Авто-рестарт) Если фоновое задание в 1С падает по ошибке (например, не успело записать строку из-за блокировки Lock Timeout), кластер сервера по умолчанию пытается запустить его заново несколько раз. В результате старые зависшие сеансы еще не успевали закрыться в памяти, а сервер уже плодил новые попытки выполнить этот же китайский прайс. Данила: Михалыч, как среди нескольких сотен зависших сеансов выбрать именно нужную строку чтобы удалить ее? Михалыч: Если сервер намертво завис, в консоли висят сотни или тысячи процессов (сеансов), удалять их по одной вручную — это сизифов труд. К тому же, пока ты удаляешь одну строчку, сервер успеет расплодить ещё пять новых. В реальной практике и в нашей консоли используется 3 главных правила, чтобы хирургически точно вычислить «виновника катастрофы» среди тысяч одинаковых строк. Пиши, Данила, эти правила прямо в блокнот: Поиск «Пациента Зеро»: Как среди тысяч сеансов найти тот самый, который нужно убить? Когда скрипт запустил лавину процессов, все строки в консоли кажутся одинаковыми — везде написано «Фоновое задание». Но для опытного программиста у каждой строки есть свой скрытый след. Правило 1. Сортировка по времени («Кто первый встал — того и тапки») Запомни: блокировку всегда держит самый первый процесс, который зашёл в таблицу. Все остальные 299 строк — это просто безвинные жертвы, которые встали в очередь за ним и послушно ждут, когда им освободят дорогу. Что делать в консоли: Нажми на заголовок колонки «Начало сеанса». Список отсортируется по времени. Тот сеанс, у которого время запуска самое раннее (например, он запустился на 5 минут раньше остальных), и есть наш «Пациент Зеро». Убивать нужно только его! Как только ты закроешь самый первый сеанс, вся остальная очередь из 299 строк мгновенно отвиснет сама за долю секунды. Правило 2. Анализ колонки «Захват СУБД» или «Время вызова» Тяжёлый и зависший процесс всегда выдаёт себя аномальным потреблением ресурсов серверов. Что делать в консоли: Посмотри на колонки времени вызова (в твоей консоли можно настроить видимость колонок через кнопку Еще ->Изменить форму). Зависающий сеанс будет иметь колоссальное количество времени в графе «Время вызова (всего)» или «Захват СУБД», в то время как у остальных сеансов там будут нули или минимальные значения, потому что они просто спят в очереди. Правило 3. Групповое хирургическое удаление (Массовый сброс) А что делать, если ИИ-скрипт оказался настолько агрессивным, что фоновые задания продолжают плодиться быстрее, чем ты нажимаешь кнопку? Что делать в консоли: В таком случае Senior-разработчики используют кнопку «Завершить сеансы...», но перед этим выделяют не одну строку, а используют комбинацию клавиш Shift или Ctrl+A, чтобы выделить весь куст фоновых заданий, и отправляют команду на массовое уничтожение. (Михалыч перехватывает мышку, мгновенно выделяет через Ctrl+A всю лавину зависших ИИ-сеансов на боевом сервере и решительно нажимает «Завершить сеансы...») Михалыч: Вот так это делается на боевой базе. Смотри на экран, Данила, база сейчас принудительно прерывает процессы и откатывает эту незавершенную транзакцию обратно. (Проходит минута томительного ожидания. На экране бегут строки логов. Наконец, вентиляторы на сервере в углу сбрасывают обороты и начинают гудеть ровно и спокойно). Михалыч: Всё. Служба поднялась. Транзакция откатилась. Кеш я почистил. (Тут в кабинет заходит Анастасия Марковна, достает из кармана телефон и молча набирает кого-то из своих сотрудников) Анастасия Марковна: Мариночка? Попробуй сформировать декларацию. Да, прямо сейчас. Жду. (В кабинете повисает тишина. Данила практически не дышит. Через минуту из трубки доносится радостный, победный писк Марины) Голос из трубки: Сформировалась! Ошибок нет! Анастасия Марковна: (убирает телефон, тяжело выдыхает, и её монолитная прическа-куб кажется уже чуть менее пугающей) Слава тебе, Господи... Молодец, Михалыч! Порадовал. Михалыч: Обращайся, Марковна! Мы всегда на страже. Но нам, Данила, этот китайский прайс всё равно придется грузить. Только теперь мы напишем нормальную обработку через правильное чтение файла и объектную модель 1С с разбиением на порции. Это будет выполняться чуть дольше, зато сервер даже не чихнет. (Дверь за Главбухом закрывается) Антон Павлович достает свою пустую кружку, мечтая налить туда чего-нибудь покрепче ... черный кофе. Михалыч: Данила, запомни, что главбух — это главный босс в любой конфигурации 1С! И если твой код продолжит ломать ей базу в отчетный период, то никакой Senior-разработчик тебя не спасет!» Михалыч усмехнулся, похлопав Данилу по плечу. — Ладно, выдыхай главбуха мы успокоили. Даня, ты не переживай, главное ты освоил консоль: разобрался с авторизацией кластера, научился закрывать зависшие сеансы и спасать базу. Теперь хотя бы знаешь, где у сервера кнопка «тормоз», когда твой «газ» начинает перегружать сервер, и что неоптимальный код может вызывать критический сбой СУБД. Глава 3. Скидка трейдеров Гуанчжоу. В предыдущей серии: Краткое содержание части 1 и 2. Часть 1. «Прайс из Китая» История о том, как в ИТ-отделе крупной компании "ИнвестБолт", которая знает цену специфики ВЭД с Китаем, наступило начало прекрасного дня: сеньор Михалыч флегматично чистил воблу, тимлид Антон Павлович пил кофе, а амбициозный 22-летний джуниор Данила (самопровозглашенный «Промпт-Архитектор») радовался жизни. Это был его первый официальный рабочий день после долгих месяцев штурма Хедхантера, и Данила чувствовал себя баловнем судьбы. Он искренне верил, что ИИ уже заменил сеньоров, ведь нейросеть по его первому запросу сгенерировала синтаксически идеальный код для управляемых форм, решил загрузить «быстренько и красивенько» китайский прайс на 300 000 строк из Гуанчжоу. Доверившись ИИ, он скормил файл платформе через ТабличныйДокумент.Прочитать(). Итог: Данила уронил рабочий сервер в разгар закрытия квартала у бухгалтерии. Часть 2. «Визит Анастасии Марковны» Решив, что один поток — это прошлый век, Данила выбил из нейросети новый «универсальный рецепт» и бахнул многопоточность через ФоновыеЗадания.Выполнить(). Одно нажатие кнопки — и сервер 1С породил неуправляемую лавину фоновых процессов. Михалычу пришлось вручную вычислять сеанс «Пациента Зеро» в консоли администрирования и спасти базу, чтобы сменить гнев на милость главбуха Анастасии Марковны. Часть 3. Скидка трейдеров Гуанчжоу. Действующие лица: Сеньор (Михалыч) — излучает абсолютное спокойствие. Джуниор (Данила) — смотрит на Михалыча как на средневекового инквизитора. Тимлид (Антон Павлович) — пьет кофе со своей поллитровой кружки на которой написано «Не трогай – РАБОТАЕТ!» Логист/Аналитик (Андрей Николаевич, 48 лет) — знает ВЭД без прикрас. Директор (Ирина Федоровна, 45 лет) — строгая, но справедливая. Держит в страхе весь офис. Таня — менеджер по закупкам, которая всего за три дня работы в компании успела договориться о скидке с трейдерами из Гуанчжоу. Таня влетела в кабинет Андрея Николаевича с победным видом, держа в руках флешку (прайс-лист со скидками). — Андрей Николаевич, оформляйте бронь на контейнер! Я выбила скидку 10% у поставщика из Гуанчжоу на болты М10х60 и другие позиции, в которых всего по 1, 5 или 10 штук (редкие фитинги, гайки, сверла, прокладки). Сделка века, 300 000 штук болтов М10х60 крепеж класса 8.8 по 0.40 юаня! Андрей Николаевич даже не отвел взгляда от экрана. В свои 48 лет начальник департамента логистики обладал железобетонным спокойствием. Он знал Китай без прикрас. Николаевич прекрасно понимал, что бесплатный сыр в Поднебесной бывает только в мышеловках. — Танечка, — спокойно, с отеческой усталостью в голосе произнес Николаевич. — Скажи мне, а с каких пор Гуанчжоу стал производить тяжелый крепеж класса 8.8? Гуанчжоу — это хаб. Там сидят перекупщики. Они пьют с тобой чай, улыбаются, делают красивые Excel-файлы по 400 мегабайт с картинками и дают скидку на сам болт. Но они никогда не работают в минус. Тут явно кроется обман со скидкой на болт М10х60, потому что скидка строится на классических китайских механиках: Реальная география производства крепежа в Китае Настоящий тяжелый крепеж, особенно высокопрочный (класс 8.8, 10.9, 12.9) и железнодорожный, производится совершенно в других регионах. Гуанчжоу просто физически далеко от сырьевых баз. Весь металл крутится на севере и востоке Китая: Ханьдань (провинция Хэбэй), особенно район Юннянь (Yongnian) — это неофициальная «столица крепежа» Китая. Там производятся колоссальные объемы строительного и машиностроительного крепежа. Хайянь (провинция Чжэцзян) — крупнейший экспортный узел, где заводы специализируются именно на DIN/ISO стандартах для Европы и РФ. Нинбо и Вэньчжоу — центры высокопрочного и автомобильного крепежа. Ни один завод в мире физически не производит 300 000 разных наименований метизов на одном оборудовании. Они выступают как консолидатор — у них контракты с сотнями мелких производств по всему Китаю и огромные склады. Гигантский торговый дом (трейдер) из Гуанчжоу просто берет этот болт в Юнняне или Хайяне по реальной цене условные 0,28–0,30 юаня, закладывает свой интерес, выставляет тебе прайс 0,40 юаня, а потом «великодушно» говорит, что ваша скидка 10%. Танечка, ну это как в том анекдоте. Сидят два китайских трейдера в шикарном офисе в Гуанчжоу, пьют чай, смотрят в монитор. Один говорит: — Слушай, Ли, к нам тут на склад в Юнняне по ошибке завезли вагон ржавых болтов М10х60. Металл — чистый пластилин, класс прочности в лучшем случае 4.8, а на них по ошибке выбили клеймо «8.8». Завод отдаёт даром, лишь бы забрали. Что делать будем? Куда девать триста тысяч штук? Второй делает глоток чая, улыбается и отвечает: — Спокойно, Ван. Пиши в прайсе: «Высокопрочный тяжелый крепеж класса 8.8 — 0,44 юаня». — Да ты что?! Кто же у трейдера в Гуанчжоу купит строительный крепеж по такой цене? Сразу же поймут, что это подделка! — Э-э-э, Ван, ты не дослушал. Выставляй на наш сайт 1688. А когда клиент появится, мы ему добавим в прайс редкие саморезы, гайки и сверла по 1 - 2 штуке в позиции. Сделаем файл на 400 мегабайт, вставим побольше красивых картинок. Через два дня в офис звонит восторженная русская девушка-менеджер. — Нихао! Мне нужно 300 тысяч болтов! Дайте скидку 10 процентов! Трейдер слушает её с восточным спокойствием, вздыхает в трубку и говорит, что такие серьезные скидки нужно долго пересчитывать на калькуляторе. Ли даже причмокивает, словно наливает себе виртуальный пуэр, и наконец говорит с глубокой грустью в голосе... — Ладно, только ради дружбы наших народов. Скидка 10%! Специально для вас — по 0,40 юаня! Танечка счастливая убегает к логисту оформлять бронь на контейнер. Ван кладет трубку, качает головой и говорит: — Ли, ну ты гений! Продать триста тысяч бракованных болтов с наценкой! Но погоди, а зачем ты в прайс позиции еще и саморезы, гайки и сверла добавлял? Ли улыбается: — Эх, Ван, сразу видно, что ты логистику не знаешь. Болты-то мы ей отгрузим. А вот эти гайки и сверла мы будем собирать по разным заводам Китая ещё месяца три. Контейнер будет стоять в порту, капать демередж, а за хранение и консолидацию груза на нашем складе мы выставим ей счёт ещё на 5000 долларов. Бесплатный сыр, Ван, должен быть красиво упакован в Excel! Улавливаешь суть анекдота? Хорошо, я тебе сейчас подробно расскажу смысл этой скидки. Таня, раз они дали скидку на сам болт, они гарантированно заберут свое в других местах этого гигантского прайса: Для трейдера из Гуанчжоу соблазн заработать еще больше очень велик. Болт класса 4.8 визуально почти не отличается от оцинкованного болта класса 8.8 (если на шляпке выбито «8.8», это еще не значит, что сталь прошла правильную термообработку). Трейдер может заказать на фабрике-производителе партию подешевле, где сталь чуть хуже или закалка «символическая». В Китае это называется «сделать под бюджет клиента». Если этот крепеж пойдет на ответственные конструкции или в машиностроение, в нашей стране первая же лаборатория или срезанная резьба вскроют обман, но предъявить претензии компании из Гуанчжоу будет юридически очень сложно. Таня, а ты знаешь в чем заключается обман и из чего должен делаться класс 8.8? Если китаец продает за 0,40 юаня, значит, его закупочная цена на заводе-производителе составляет около 0,30–0,33 юаня. За эту цену завод физически не мог продать металл марки 10B21 с термической обработкой. Если продают так называемый «Китайский класс 8.8» (Non-standard / Подделка). Схема выглядит так: На заводе берут обычную дешевую сталь Q235 (предназначенную для класса 4.8). На матрице (штампе) выбивают заветные цифры «8.8» на шляпке. Болты покрывают красивой блестящей оцинковкой (белой или желтой), упаковывают в коробки и передают трейдеру. Из чего делают класс 4.8–5.8? Из дешевой «сырой» углеродистой стали марки Q235 или 1008/1010. Она мягкая, легко штампуется холодным способом, не требует закалки. На севере Китая в Хэбэе оптовая цена за килограмм таких готовых «сырых» болтов в мешках колеблется вокруг 6,5–7,5 юаней за кг. Считаем вес: 0,044 кг ? 7 юаней = 0,30–0,32 юаня базовая оптовая цена завода за «сырой» болт. С наценкой трейдера в Гуанчжоу он как раз превращается в 0,40 юаня. Из чего ДОЛЖЕН делаться класс 8.8? По международным стандартам (ISO 898-1) класс 8.8 требует среднеуглеродистой стали с добавлением бора, марганца или хрома (например, марки 35, 45, 10B21 или 35CrMo). Но по принятому в России ГОСТ Р ИСО 898-1 класс 8.8 не привязан жёстко к одной марке стали. Визуально болт выглядит нормально, а по прочности — как низкосортный крепёж. Класс 8.8 получают именно за счёт закалки и отпуска. Если термообработку не делали или сделали с нарушением режима, прочность не достигается. Что именно допускает стандарт? Среднеуглеродистая сталь (например, 35, 45). Среднеуглеродистая сталь с добавками — бора (B), марганца (Mn) или хрома (Cr). Вот тут и появляются такие марки, как 10B21 или 35CrMo: бор, марганец или хром вводят, чтобы улучшить прокаливаемость — то есть чтобы при закалке в сердцевине резьбовой части получилась нужная структура (примерно 90% мартенсита), а не мягкая сердцевина. Легированная сталь — если в ней есть один из элементов: хром (минимум 0,30%), никель (0,30%), молибден (0,20%) или ванадий (0,10%). Но есть критически важный нюанс: одной только подходящей стали мало. Чтобы получить класс 8.8, сталь после формирования изделия обязательно подвергают термической обработке — закалке с последующим отпуском. Именно этот процесс «закрепляет» нужную структуру и даёт те самые гарантированные стандартом механические свойства (предел прочности около 800 МПа, предел текучести около 640 МПа). Без термообработки даже из «правильной» стали класс 8.8 не выйдет — получится «сырой» крепёж с заниженной прочностью. Ещё пара деталей из стандарта, которые стоит держать в голове. Если в стали есть бор, а содержание углерода ниже 0,25%, то для класса 8.8 минимальное содержание марганца должно составлять 0,6%. Финальное решение принимают по реальному химическому анализу плавки и результатам испытаний готового изделия. Выборочный замер твёрдости (по Роквеллу или Бринеллю) для 8.8 это обычно 28–39 HRC. У «сырой» Q235 будет заметно ниже. Поэтому, Танечка, наша задача— проверить не только маркировку, но и сертификаты: там должны быть подтверждены и химсостав, и результаты механических испытаний, и факт проведения нужной термообработки. Этот металл сам по себе стоит дороже. После штамповки болты обязательно должны проходить термическую обработку (закалку и отпуск в тоннельных печах) для достижения предела прочности в 800 МПа. Термообработка — это огромный расход электроэнергии и газа. Танечка, реальная оптовая цена качественного крепежа 8.8 прямо с завода в Юнняне или Хайяне не опускается ниже 9,5–11 юаней за килограмм (в зависимости от типа оцинковки). Считаем вес: 0,044 кг ? 10 юаней = минимум 0,44–0,48 юаня — это чистая себестоимость производства такого болта на заводе, без учета прибыли самой фабрики, упаковки. Танечка, ты знаешь, чем это грозит нашей организации? Во - первых, будет проверка в лаборатории и возбуждение дела в на таможне. Сертификация: Если мы везем груз под маркой «Высокопрочный крепеж класса 8.8», таможня или органы сертификации в РФ могут взять образцы на экспертизу (испытание на разрывной машине и проверку твердости по Роквеллу). Если экспертиза покажет класс 4.8 вместо заявленного 8.8 — это контрафакт, недостоверное декларирование, огромный штраф и арест всего груза. В - вторых, даже если чудом провезли через таможню, то если этот крепеж попадет в розничные сети или на заводы, нас завалят возвратами и исками за сорванные узлы и аварии. Потому что произойдет срез резьбы и разрыв. Настоящий болт 8.8 выдерживает огромные нагрузки на разрыв и кручение. «Сырой» болт с маркировкой 8.8 поплывет или лопнет при первой же серьезной затяжке прямо на конвейере или строительном объекте вашего клиента. Потом карандашом ткнул в нижние строчки спецификации: — Смотри сюда. Твой китаец дал тебе цену 0.40 юаня за штуку. Но он завысил вес нетто в этой колонке на целых 3 грамма на каждом болте. Таня захлопала глазами: на её лице чистый восторг от «сделки века» мгновенно сменился растерянностью: — То есть... они меня обманули? Девятьсот килограммов... Почти тонна воздуха? — тихо пробормотала она, быстро пересчитывая в уме. — Это же... они просто дорисовали мне вес, чтобы оправдать цену? — Именно, — отрезал он, пододвигая к ней калькулятор. — Смотри на их математику. Твой менеджер из Гуанчжоу не просто продает тебе «сырой» металл под видом высокопрочного 8.8. Он виртуозно добирает свою маржу прямо у тебя на глазах. Давай разложим эту схему по пунктам: Нормальный болт М10х60 DIN 933 весит 44 грамма. Твой китаец прописал в графе Net Weight 47 грамм. На одной штуке это кажется мелочью — всего 3 грамма. Но на партии в 300 000 штук эти 3 грамма превращаются в 900 кг несуществующего веса. Ладно бы если просто переплатили за товар. Но этот приписанный вес потянет за собой реальные убытки на логистике: таможенный брокер будет считать пошлину по документальному весу Брутто (Gross Weight), указанному в Packing List. На таможне при досмотре груз взвесят. Если увидят расхождение фактического веса с документами почти на тонну в меньшую сторону — это автоматический штраф и «красный коридор» за недостоверное декларирование. Таня медленно закрыла лицо руками, глубоко вздохнула и посмотрела на него: — И что мне теперь делать? Сказать им, что я всё поняла? Они же просто отменят скидку! — Ничего они не отменят, —сказал Николаевич. — Ты для них мы «ИнвестБолт» крупный клиент! У Тани округлились глаза, и она испуганно перебила: — И... что теперь делать? Нам ведь всё равно нужно проверить весь этот прайс-лист на 300 000 строк! Там среди болтов скрыты редкие фитинги, гайки и прокладки и т.д. Вручную пересчитать вес каждого болта по формуле «Объем х Плотность х Цену за килограмм сырья» и сравнить с ценой трейдера, чтобы поймать его на обмане — нереально! Утонуть можно в расчетах! — Спокойно, — я успокаивающе коснулся её плеча. — Нам не нужно проверять каждую строчку глазами. Против больших данных мы применим автоматизацию. Китайцы думали, что объемом прайса они спрячут концы в воду, но я подготовлю техническое задание (ТЗ) для программистов: Анализ весовых аномалий в китайском прайс-листе метизов. — Для этого у нас и сидит целый ИТ-отдел. Сейчас пойдем к Антону Павловичу. У них там, говорят, новый гений появился — Данила. Самопровозглашенный «Промпт-Архитектор». Вот пусть его искусственный интеллект и посчитает нам. Таня: А мы можем написать им претензию? Николаевич придвинул к себе клавиатуру: Таня, просто так, по первой вежливой просьбе, они прайс на 300 000 позиций переделывать не будут. Для них это колоссальный объем технической работы, и они до последнего будут стоять на своем. У китайского менеджера в Гуанчжоу на простую претензию, мол: «Ребята, у вас тут вес завышен», есть три стандартных заготовки, которыми они от вас отмахнутся: «Это наш заводской стандарт (Our factory standard)». Они скажут, что их станки делают болты именно такого веса, а DIN — это просто ориентир. «Это вес с учетом тяжелой экспортной упаковки (With packing weight)». Начнут уверять, что лишние граммы — это плотные коробки, мешки и паллеты, размазанные поштучно. «Вы же сами просили скидку 10%». В неформальной беседе могут намекнуть, что раз цена упала до 0,40 юаня, то «условия изменились». Вот что заставит их переделать прайс мгновенно! Китайцы перепишут файл только тогда, когда увидят жесткий системный отпор. Им нужно показать, что ты не «девочка Таня, которая считает на калькуляторе», а крупная компания. Переговоры изменятся за секунду, если мы сделаем следующее: Пришлем им выгрузку из нашей 1С. Прямо файлом, где напротив их 20-30 ключевых позиций будет стоять красная колонка «Аномалия веса» и ссылка на международный стандарт. Для китайца это маркер: «Опасно, клиент технически грамотен, обмануть не получится». Включим аргумент про Таможенную декларацию (ДТ). Напишим им: «Друзья, мы работаем только в белую через государственную таможню РФ. Завышенный вес нетто в инвойсе — это гарантированный арест контейнера на границе. Наш таможенный брокер не примет этот прайс для заполнения декларации. Либо вы присылаете корректный вес по DIN, либо сделки не будет, так как мы не сможем подать документы». Покажем альтернативу. Намекнем, что заводы из провинции Чжэцзян (Хайянь) дают идеальные весовые ведомости для деклараций без всяких приписок. Итог: Как только они поймут, что из-за этой «хитрости» сорвется заказ и они потеряют крупного клиента, их программисты или помощники менеджера за одну ночь перевыгрузят из своей ERP-системы прайс с абсолютно чистыми и честными весами. В этот момент раздался телефонный звонок. Из трубки был слышен голос Антона: — Николаевич, напиши нашему новенькому Даниле простенькое ТЗ. Автоматизировать расчёт цены с НДС при ручном заполнении табличных частей документа «Установка цен номенклатуры», пусть потренируется. — Хорошо сейчас, Антон, принесу ТЗ, — ответил он. Николаевич за пять минут написал ТЗ для Данила и отправил на печать. Принтер на его столе мгновенно распечатал готовые листы А4. Он забрал документы и встал из-за стола. — Пойдем, Танечка, вместе к программистам, — сказал Николаевич. Они вместе с Таней вышли в длинный коридор главного офиса «ИнвестБолт». В это время Антон Павлович: — Тихо! Слышите? Каблуки... Кажется, Ирина Федоровна идет от коммерческого директора. Данила, стал быстро бить по клавишам, глядя на Михалыча как на средневекового инквизитора. Михалыч сидел на краю стола, излучая абсолютное спокойствие. Дверь распахнулась. На пороге появилась Ирина Федоровна — строгий деловой костюм, взгляд ледяной, но справедливый. Весь офис мгновенно замер. Следом за ней зашла Таня и Николаевич, держа в руках листки бумаги. Ирина Федоровна с порога командным голосом произнесла: — Так, ИТ-отдел! Антон Павлович, почему работа стоит? Антон Павлович: — Ирина Федоровна, ждали Николаевича с ТЗ.... Ирина Федоровна перебила его, переводя взгляд на Данилу и Михалыча потом на Антона: — Я, Антон Павлович, весь ваш ИТ-отдел переведу на ручной режим, лодыри! Поедете на склад мешки с болтами пересчитывать! Таня, что у тебя? Таня: — Слава тебе, Господи! Ирина Федоровна, Андрей Николаевич раскусил на обмане китайцев, директор Ли из Гуанчжоу пытался нам в прайс приписать лишний вес. Андрей Николаевич подготовит им официальное письмо. Ирина Федоровна: — Хорошо! — Андрей Николаевич! У нас большой заказ на болты М10х60, какова себестоимость одного болта с учетом всей логистики и пошлин? —Согласно, Постановлению Правительства Российской Федерации от 23 октября 2025 г. N 1638 "О внесении изменений в постановление Правительства Российской Федерации от 28 ноября 2024 г. N 1637". Главные изменения, индексация ставок на импорт, постановление проиндексировало фиксированные сборы за таможенное оформление ввозимых товаров. Для партии болтов таможенная стоимость по новой сетке тарифов для грузов стоимостью от 1,2 млн до 2,7 млн рублей ставка сбора составляет 13 541 рубль. Произошел взрывной рост максимального сбора: Максимальная планка таможенного сбора (для крупных партий стоимостью от 10 млн рублей) была поднята более чем в два раза — с 30 000 до 73 860 рублей. — ...Это самое масштабное изменение тарифов за последние годы, Ирина Федоровна! — В общем, как в том анекдоте: Приходит директор компании к логисту и спрашивает: — Ну что, какие новости с таможни по нашему новому Постановлению 1638? Логист вздыхает: — Есть две новости, шеф. Хорошая и плохая. Плохая — таможенные сборы выросли в два раза, электроника вообще теперь по максималке идет. Директор хватается за сердце: — А хорошая?! — Хорошая — мы торгуем болтами, а не смартфонами! Наше железо по сравнению с их микросхемами теперь официально считается бюджетным хобби. — Так что нам, Ирина Федоровна, еще крупно повезло! Но для общего понимания ВЭД в 2026 году картинка вырисовывается интересная. — Наши 13 541 рубль за сбор — это, можно сказать, легкий испуг! Ирина Федоровна после анекдота слегка подобрела, и на её лице появилась улыбка. — Андрей Николаевич, мне нужно идти, времени совершенно нет — у меня срочное дело. Вы мне обязательно сегодня, но попозже, подробно расскажете про калькуляцию. А сейчас назовите только итоговую цифру с учетом логистики. Николаевич: — По калькуляции, с учетом всей логистики и пошлин Владивостока, выходит ровно 20 рублей! Ирина Федоровна (поворачивается к программистам): — Слышали цифру? 20 рублей, продавать будем по 220 рублей! Программисты, даю вам время до вечера все загрузить, у нас уже есть заказчик. Иначе... вы меня знаете! А ты, Антон, ко мне зайди, у меня для тебя есть новость. (Ирина Федоровна разворачивается и строгим шагом выходит из кабинета). Глава 4. Таможенные налоги и сборы. В предыдущих сериях: Краткое содержание части 1, 2 и 3. Наш амбициозный джуниор Данила (самопровозглашенный «Промпт-Архитектор») уже успел знатно повеселить ИТ-отдел «ИнвестБолт». В первой части он намертво уложил рабочий сервер в самый разгар закрытия квартала, попытавшись «быстренько» прочитать китайский прайс на 300 000 строк через прожорливый ТабличныйДокумент.Прочитать(). Во второй части Даня решил «ускориться» и бахнул многопоточность через неуправляемую лавину ФоновыеЗадания.Выполнить(), заставив сисадмина Михалыча вручную вылавливать сеанс «Пациента Зеро» в консоли администрирования, и понял что главбух Анастасия Марковна это –Босс номер 1 для ИТ-отдела. В третьей части Данила познакомился с логистом-аналитиком Николаевичем, который открыл секреты хитрых китайских трейдеров из Гуанчжоу, и начал писать код по его техническому заданию. Действующие лица: Сеньор (Михалыч) — пальцы летают по клавиатуре. В зубах зажата вобла. Джуниор (Данила)— сидит с блокнотом и записывает каждое слово Михалыча. Взгляд просветленный, как после поездки в Тибет. Тимлид(Антон Павлович) — пьет кофе со своей поллитровой кружки, вальяжно сидя на своем кожаном кресле. Михалычмолча выслушал Данилу, который увлеченно расписывал, как красиво он оптимизировал код и связал расчет налога по новой ставке 22% для всех трех табличных частей. Сеньор тяжело вздохнул, отодвинул клавиатуру, сделал глоток остывшего кофе из своей огромной кружки и повернулся к джуниору. — Данила, тормози, — Михалыч поднял вверх указательный палец, прерывая поток восторгов. — Код-то ты написал правильный, тут спорить не буду, Михалыч одобряет. Но я по глазам твоим вижу: ты до сих пор путаешь, зачем вообще нужен документ «Поступление товаров», который прилетает к нам из XML-файлов таможни ФТС, и для чего нужна «Установка цен номенклатуры», которую ты делаешь. Это базовая теория учета. Если ее не поймешь, дальше интерфейсных кнопок в профессии не уедешь. Михалыч взял со стола чистый лист бумаги, покрутил в руках маркер и начал объяснять, мерно постукивая им по столу в такт словам. — Запомни раз и навсегда: «Поступление товаров и услуг» — это документ жесткого, свершившегося факта. Это наше прошлое и настоящее. Вот приехал к нам реальный физический контейнер из Гуанчжоу. В таможенной декларации написано: внутри лежат триста тысяч болтов по цене пять рублей за штуку. Когда бухгалтер проводит Поступление, система делает реальные финансовые проводки. Склад берет эти железяки на баланс, а бухгалтерия Анастасии Марковны видит, что мы теперь официально должны китайскому поставщику кучу юаней, а государству — НДС на таможне. Изменить цену в Поступлении просто так, потому что тебе захотелось, нельзя. Она намертво привязана к контракту, курсу валюты ЦБ и закону. Поступление — это наши реальные затраты, это то, сколько денег у нас уже улетело. Сеньор сделал паузу, давая Даниле время переварить информацию, и продолжил. — А вот документ «Установка цен номенклатуры», под который ты сейчас писал алгоритмы для продукции, аксессуаров и цветов — это документ планирования и управленческого решения. Это наше будущее. Болты-то мы на склад привезли по семь рублей 51 коп., но продавать-то мы их почем будем? Если продадим по семь рублей — вылетим в трубу на следующий день. Если бахнем по сто рублей — их никто в здравом уме не купит. Поэтому финансовый директор садится, чешет затылок, закладывает расходы на логистику, наши аппетиты и новую ставку налога в 22 процента, а потом волевым решением постановляет: «Будем продавать эти болты по двенадцать рублей за штуку!». Он открывает твой документ установки цен, забивает туда эти двенадцать рублей, а твоя функция мгновенно высчитывает правильную цену без НДС для менеджеров. Михалыч откинулся на спинку кресла и хитро прищурился. Короче говоря, Данила, Поступление — это то, сколько с нас содрал китайский поставщик за сам товар. А Установка цен — это то, сколько мы сами решили содрать со своих покупателей, когда этот товар доехал до полок. Не успел Данила переварить лекцию Михалыча, как дверь кабинета снова распахнулась. На пороге опять стоял Николаевич, который проводил Танечку до кабинета и вернулся назад к программистам. — Здорово еще раз, хакеры! — крикнул Николаевич, проходя к столу. — Слышу из коридора, вы тут опять Гуанчжоу поминаете? Николаевич бесцеремонно придвинул стул, усаживаясь рядом с притихшим Данилой, и заглянул в его монитор, оценивая написанный код. — Ну что, Даня, грызешь мое ТЗ? — логист усмехнулся. — Давай ему, Михалыч, лучше актуальный анекдот из жизни нашей таможни расскажем, раз уж он код под две тысячи двадцать шестой год пишет. — Приезжает, значит, на прошлой неделе фура с нашими китайскими метизами на таможенный пост. Инспектор открывает XML-декларацию, смотрит в монитор, потом на водителя и говорит: «Так, ребята, у вас тут в файле по коду ТН ВЭД заявлены высокопрочные стальные болты шаг один-двадцать пять. А в системе 1С из-за вашей новой ставки НДС в двадцать два процента и курса ЦБ на дату релиза они теперь бьются как ювелирные изделия из чистого золота с бриллиантовой крошкой! С вас доплата пошлины — три миллиона». Водитель бледнеет, звонит директору, тот в панике бежит к Анастасии Марковне: «Что делать?!». А Марковна спокойно так чаек мешает и говорит: «Всё нормально, шеф, это не контрабанда. Это наш джуниор Данила в обработке загрузки случайно перепутал запятую с точкой, и у нас себестоимость одного болта за секунду обогнала стоимость унции платины на Лондонской бирже!». Логист громогласно расхохотался, довольный собственной шуткой, а затем посерьёзнел и легонько постучал пальцем по экрану Данилы: — А если без шуток, Даня, то пока ты там в своей «Установке цен» сотые доли копейки выверяешь, у меня на границе курс юаня скачет так, будто у него пульс после трёх банок энергетика. Я сегодня XML-ку от ФТС загружаю — там одна рублёвая сумма по курсу на вторник, а завтра декларацию выпустят — и в «Поступлении» уже совершенно другие цифры из-за переоценки валюты. Поэтому твоя задача — сделать так, чтобы менеджеры в твоем документе видели маржу реальную, а не ту, которая им в сладких снах снится. Заложишь жёсткую формулу без учёта наших логистических реалий и курса ЦБ — и мы вместо прибыли будем торговать воздухом. Николаевич хлопнул Данилу по плечу и резюмировал: — Короче, джуниор, я вижу, ты логику уловил. Михалыч: Антон, Николаевич давайте объясним Дане про таможенные сборы. Антон: Вы тут, ребята, сами объясните, а я пойду к Ирине Федоровне, она просила меня к ней зайти. Сеньор сделал паузу, давая Даниле время переварить информацию, постукивая пальцем по распечатанному ТЗ. — Так вот, Даня, возвращаясь к нашим китайским метизам и тому самому унифицированному XML-формату Федеральной таможенной службы. ФТС России уже давно утвердила структуру обмена urn:customs.ru:Information:ExchangeDocuments:. И когда к нам из Китая идет груз, таможня выплевывает огромный электронный документ. Наша задача — не заставлять менеджеров вбивать эти тысячи позиций руками, а сделать автоматическую загрузку. Михалыч повернул монитор Данилы к себе и открыл схему данных. — Смотри, как это работает на стыке программирования и сурового учета 2026 года. Твой парсер считывает XML-файл ФТС и на выходе должен создать два связанных документа. Первый — это то самое Поступление товаров, о котором я тебе говорил. Оно зафиксирует факт: товар пересек границу, упал к нам на склад, и мы стали должны поставщику. Но поскольку это импорт, к нему тут же, намертво, цепочкой привязывается второй документ — ГТД по импорту. Михалыч хитро прищурился. — И вот тут начинается твоя магия 2026 года. В ГТД по импорту ты должен в программе распределить таможенные сборы, пошлины и — самое главное — рассчитать НДС по новой ставке двадцать два процента, вытащив данные из сорок седьмой графы декларации. Если твой код округлит налог хотя бы на копейку не так, как это сделала система ФТС, документ ГТД просто не сойдется с рублевым списанием с нашего таможенного депозита Данила сглотнул, глядя на экран. — А вот уже после того, как обработка создаст Поступление и ГТД, — Михалыч победно улыбнулся, — менеджеры откроют тот самый документ «Установка цен номенклатуры», который ты сегодня автоматизировал для продукции, аксессуаров и цветов. Роботы 1С подтянут из Поступления реальную себестоимость болтов из Гуанчжоу, накинут нашу маржу, и твой алгоритм мгновенно выведет финальную цену продажи с учетом тех же двадцати двух процентов НДС. Понимаешь теперь? Загрузка ФТС обеспечивает нам учет затрат и налогов на таможне, а Установка цен — управляет нашей прибылью на полке. Это единый кровеносный сосуд компании! Николаевич: — Раз уж заговорили про единый кровеносный сосуд, давайте я добавлю пару слов про таможенные сборы, чтобы наш «Промпт-Архитектор» окончательно протрезвел от иллюзий. Даня, ты, наверное, думаешь, что таможня берет деньги только за сам НДС и пошлины на болты? Как бы не так. Они берут фиксированную плату даже за то, что инспектор просто открыл твой XML-файл. Это называется таможенным сбором за совершение таможенных операций. —Ладно ребята, я к себе пойду в кабинет поработаю. А ты, Михалыч, сам расскажи Дане про документ «ГТД по импорту». Михалыч поднял палец, призывая к максимальному вниманию: — И фишка в том, что этот сбор в документе «ГТД по импорту» падает на отдельную вкладку «Главное», а не распределяется по позициям номенклатуры, как обычная пошлина. Пошлина увеличивает себестоимость каждого конкретного винтика на складе, а сбор — это общие расходы на всю декларацию целиком. Данила, в блокнот: Пошлина вносится в каждую строчку товара отдельно, так как у разных товаров могут быть разные ставки (8%, 10%, 12%). Таможенный сбор — это одна фиксированная сумма на всю декларацию (13 541 рубль по Постановлению 1638). Она не привязана к конкретному товару, поэтому она вносится один раз на вкладке «Главное». Данил: Что такое вкладка «Главное»? Михалыч: «Главное» — это титульный лист. Сюда заносится общая информация, которая относится ко всей поставке целиком, а не к какому-то конкретному болту: Номер таможенной декларации. Название таможни. Таможенный сбор (наши 13 541 рубль). Государство берет эти деньги за то, что таможенник просто взял в руки нашу декларацию и начал её проверять. Таможне все равно, сколько там товаров — один вид болтов или сто разных. Сбор платится один раз за всю бумажку. Поэтому в 1С его пишут на этой общей вкладке «Главное». Но запомни для кода: как только записал сбор в шапку, твоя обработка должна в программе вызвать команду распределения, чтобы 1С сама внутри базы раскидала эти 13 541 рубль по всем строчкам товаров. Иначе сбор не попадет в себестоимость. Если ты в своей обработке запихнешь таможенный сбор внутрь табличной части товаров, то себестоимость продукции уплывет. Данила: А что такое табличная часть? Михалыч: Это внутренние листы. Здесь идет подробный список всего, что приехало в контейнере: Строка 1: Болт М10х60 — 100 000 штук. Строка 2: Гайка М10 — 100 000 штук. В этой таблице для каждого товара считается своя пошлина. Данил: Почему? Михалыч: Потому что у государства на разные товары разные налоги: на болты пошлина 8%, а на сложную электронику может быть 15%. Программа должна посчитать её отдельно для каждой строчки. Данила кивнул, глядя на экран Михалыча, где светился XML с пространством имен таможни xmlns="urn:customs.ru:Information:ExchangeDocuments:" и стал писать под диктовку Михалыча. В его бумажном блокноте появилась жирная запись: «Сбор писать в реквизит шапки "Главное", но в коде обязательно вызывать метод распределения по товарам. Пошлины — заполнять и рассчитывать построчно внутри таблицы. Данила, глубоко вздохнув, повернулся к Михалычу: А почему в коде обязательно вызывать метод распределения по товарам? Михалыч: Потому что, Данила, без вызова этого метода сумма сбора останется просто справочной цифрой в шапке документа и физически не попадет на склад 1С. Программа 1С устроена как строгий двухэтапный конвейер 1С: 1. Как работает интерфейс (для пользователя) Когда бухгалтер заполняет документ вручную, вкладка «Главное» и вкладка «Товары» для него — это просто разные экранные формы. Бухгалтер Марина вбивает 13 541 рубль в шапку. Но чтобы эти деньги дошли до товаров, бухгалтер физически нажимает на экране кнопку «Распределить сбор». В этот момент программа выполняет скрытый математический расчет — делит 13 541 рубль на все строчки и привязывает эти копейки к каждой позиции. Если твой Данила код сделает только первую часть: Объект.ТаможенныйСбор = 13541; — это всё равно что бухгалтер занес цифру в поле, но забыл нажать на экране кнопку. В базе данных 1С это поле так и останется просто «запиской» на обложке. Что произойдет, если НЕ вызвать метод в коде? 1. Себестоимость товаров снизится: 1С оприходует болты на склад по «голой» цене (без учета сбора). Из-за этого компания будет неверно видеть чистую прибыль. 2. Программа выдаст ошибку при закрытии месяца: В конце месяца бухгалтер запустит обязательную процедуру расчета себестоимости в 1С. 1С увидит, что по бумагам таможне уплачено 13 541 рубль сбора, но эти деньги ни на один товар не списаны. Система выдаст критическую ошибку, и баланс компании «поплывет». Именно поэтому ты Данила обязан сделать в коде имитацию нажатия кнопки — то есть принудительно вызвать встроенный программный метод распределения в 1С. Только тогда 1С сама свяжет сбор с позициями номенклатуры в регистрах базы данных. — Михалыч, я всё понял. Взаимосвязь документов в голове уложилась. Пишу дальше код для Установки цен? Михалыч, прищурившись, внимательно всмотрелся в экран Данилы. Его челюсть мерно двигалась, пережевывая очередной кусок воблы. Наконец он откинулся на спинку стула и издал короткий, но одобрительный смешок. — Ну надо же, как ты код пишешь!, — сказал сеньор Михалыч, вытирая руки салфеткой. — Ни Конец ознакомительного фрагмента. Текст предоставлен ООО «Литрес». Прочитайте эту книгу целиком, купив полную легальную версию (https://www.litres.ru/book/nina-karsanova-34099869/pervyi-rabochii-den-dzhuniora-danila-74602409/) на Литрес. Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.