Об уровне абстракции и сложности системы

Публикация № 719023

Разработка - Математика и алгоритмы

Архитектура уровни абстракции

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

Мы привыкли к тому, что в 1С есть два уровня абстракции: уровень платформы и уровень бизнес-логики.

На уровне платформы существуют такие понятия, как константы, документы, регистры и их логика: например, невозможность проведения документа в режиме обмена данными, которая напрямую к фуре с хлебом отношения не имеют.

Следующий уровень - это уже как раз та самая фура с хлебом и логика действий с ней (оприходование хлеба по количеству и качеству, невозможность оприходования без согласованного договора, отсрочка платежа и т.п.), т.е. уровень бизнес-логики.

Бывает, встречаются промежуточные слои, выступающие "посредниками" между прикладной логикой и логикой платформы, такие как подсистема печати (БСП целиком я бы к отдельному уровню абстракции не относил), конфигурация Конвертация данных, однако такие примеры редки и не встречаются повсеместно.

Зачем же нужны посредники, не проще ли запрограммировать все напрямую?

Бывает проще, бывает - нет.

Если перед нами стоит задача раскрасить неоплаченные заказы в красный цвет - довольно сложно придумать какой-либо обобщающий подход, который будет более универсален, при соответствующей настройке покрывать текущую потребность и проще в реализации.

Но можно привести другой пример: требуется вести остатки номенклатуры в разрезе документов: Заказ поставщику, Заказ на перемещение, Заказ клиента, Заказ на внутреннее потребление, Заявка на возврат товаров от клиента... Классический остаточный регистр накопления. Типа Товаров к поступлению, Заказов клиентов и т.п. (т.е. заказ поставщику начисляет - поступление списывает, заказ на перемещение начисляет - перемещение списывает и так 5 пар документов)

В типовой УТ эта задача решена "в лоб", с получением данных для проведения отдельно в каждом документе, при чем почти для каждой пары еще и регистр отдельный. Вопрос о том, почему в типовой так сделали, рассматривать не будем (спойлер: не потому что они плохие, а потому что у них специфика такая), рассмотрим, какие есть альтернативы.

Поднимем ставки Повысим уровень абстракции.

Стоит задуматься: зачем писать 10 обработок проведения? Нельзя ли написать одну или две? Зачем нам вообще знать, будет это документ заказ на перемещение или заказ на что-нибудь еще? Нельзя ли сформулировать требования каким-то более общим образом? При обдумывании этих вопросов вы столкнетесь со сложностью обобщения: таб.часть с номенклатурой может называться не только Товары. Колонка с количеством может называться не только Количество. Ссылка на документ-заказ тоже может называться по-разному.

Поняв, как все это можно обобщить, мы для себя сформулируем задачу уже в следующем виде: проводить документы по регистру накопления в разрезе номенклатуры и документов-заказов, список регистраторов и названия их реквизитов для измерений (номенклатура, документ-заказ) и реквизит количества задать настройкой для каждого типа регистратора отдельно.

Очевидно, задача в такой формулировке кажется более привлекательной, а трудности, которые нас подстерегают на этом пути, более "предпочтительными" (нам предстоит не написать 10 однотипных запросов без ошибок, а понять, как быть с тем, что ссылка на документ-заказ лежит в реквизитах, а номенклатура в таб.части). Но это, собственно, и есть более высокий уровень абстракции: мы абстрагировались от конкретных документов и поставили задачу в более общем виде. При этом ее решение у нас займет гораздо меньше времени, чем если бы мы начали решать ее "в лоб".

Не стоит ли пойти дальше?

Глядя на вторую формулировку задачи, можно попытаться пойти дальше: зачем употреблять термины "номенклатура" и "документ-заказ"? почему бы не переформулировать задачу так: требуется разработать механизм проведения документа; тип регистратора, пути к 2 измерениям и 1 ресурсу указывать через настройки.

А потом еще: разработать механизм проведения документа, произвольное количество измерений и ресурсов проведения указывать через настройки.

А потом еще: разработать механизм, записывающий произвольный объект или набор записей в базу по произвольному событию объекта-источника.

И так, в общем, можно продолжать пока не будет задан главный вопрос жизни, вселенной и всего такого... (давным давно, когда трава была зеленее, кто-то пошел по этому пути и зашел так далеко, что в результате появился БИТ.Финанс. Кто знает - тот понимает)

Понятно, что нужно где-то остановиться.

Очевидно, что с повышением уровня абстракции сложность нашей доработки будет сначала снижаться (иначе не стоило и связываться), а затем повышаться (последняя формулировка уже тянет на разработку чуть ли не Конвертации данных).

На своих проектах, как правило, я выбираю одну из трех возможных тактик выбора уровня абстракции:

  1. Точка минимальных издержек - т.е. выбирается наименее трудозатратный вариант. Этот вариант выбирается, когда разрабатываемая функциональность вряд ли будет иметь какое-то развитие и скорее всего останется статичной. Это, как правило, "обычные задачи".
  2. Точка начальных издержек - т.е. выбирается наиболее абстрактный вариант, трудозатраты по которому не превышают тех, которые имели бы место при решении задачи "в лоб". Такой вариант выбирается, если функциональность обещает развиваться, но еще не выглядит весьма универсальной. Это, например, задача приведенная выше.
  3. Точка максимальных затрат - т.е. выбирается наиболее абстрактный вариант, который мы себе только можем позволить реализовать. Пишем и переписываем код до тех пор, пока нас не выгонят с работы код не станет идеален. Такой вариант выбирается, когда функциональность выглядит достаточно универсальной для того, чтобы разрабатывать ее независимо от текущего проекта, как отдельную библиотеку. Это, как правило, какие-то транспортные модули, подсистемы сверок данных и т.п.

Важный прием - декомпозиция.

Иногда стоящая перед программистом задача выглядит довольно сложной и повышение уровня абстракции "просится" само собой, но при попытке сформулировать задачу в более общем виде что-то постоянно мешает, формулировка выглядит "корявой" и ни разу не упрощает реализацию.

У меня такое было с бухгалтерией: требовалось загружать из документы из УТ в БП по... не совсем линейному принципу, ну вы понимаете, и при попытке сделать систему которая подстраивалась бы под меняющиеся требования, мне мешало одно обстоятельство: сгенерировать кучу типов документов по настройкам внутри интерфейса обмена никак не получалось.

Тогда пришло осознание, что я должен отделить мух от котлет задачу генерации документов от задачи их транспортировки. С этого момента все пошло как по маслу: была написала легкая, гибкая и элегантная подсистема генерации документов и подсистема "рассовывания" документов по нужным бухгалтериям.

Это называется декомпозиция. Вы должны "атомизировать", т.е. разбить фрагментированную задачу на элементарные составляющие и работать с каждой из них отдельно. Этот же прием поможет вам при командной разработке.

Обратная сторона медали.

Как и в любом бесплатном сыре, в повышении уровня абстракции есть минус. Вы должны быть готовы к тому что все последующие доработки следует приводить к тому же уровню абстракции, на котором выполнена разработка. Например, если в задачу про движения по регистру накопления, реализованную в постановке №2 внести требование "заказы клиентов проводить только в статусе Согласован" - это требование следует привести к тому же уровню абстракции, что и вся разработка: т.е. абстрагироваться от конкретного документа и, как следствие, от конкретного поля и значения его статуса, и пилить что-то вроде проверки соответствия документа неким условиям, конкретные реквизиты, типы сравнения и значения которых задаются в пользовательском интерфейсе.

Из этого принципа есть следствия:

1. При получении незапланированного доп.требования трудозатраты могут оказаться существенно выше по сравнению с вариантом "в лоб". (хотя, могут оказаться существенно ниже)

2. Последующие доработки подсистемы должен вести весьма квалифицированный программист (в идеале автор), поскольку при применении подхода "в лоб" поверх абстрактной доработки получится непонятно что, работающее непонятно как.

Есть правда и тут свои лайфхаки: если новое требование уж совсем не укладывается в выбранную архитектуру - можно запилить отдельную доработку со своим собственным уровнем абстракции. Например, для задачи со статусами, можно прикинуться, что эта задача не связана с предыдущей и сделать отдельную, независимую функциональность которая будет очищать движения, если документ не находится в нужном нам статусе.

И при чем же здесь сложность?

Дело все в том, что доработки, разработанные на более высоки уровнях абстракции, как правило, оказываются более простыми. Там, условно говоря, нечему глючить: если в нашем примере провелся документ одного типа - проведение документа второго типа - это вопрос правильной настройки; в программной части все уже проверено.

Ради получения этого эффекта доработку можно разбить не на два уровня абстракции (как в нашем примере: абстрактная процедура проведения и бизнес-логика в настройках), а на большее количество уровней. Но здесь, опять же, следует чувствовать баланс: каждый следующий уровень, с одной стороны, должен быть обоснован снижением сложности, с другой - будет негативно сказываться на гибкости системы к изменениям.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. brr 179 21.12.17 11:58 Сейчас в теме
Единственная возможность повышать уровень абстракции это оператор Выполнить. И на том спасибо.
2. genayo 21.12.17 12:07 Сейчас в теме
Да, такие подходы приводят к созданию конфигураций, где совсем не используются регистры накопления и документы с табличными частями. Работать с ними будет удобно, если сможешь разобраться. Но на то, чтобы с нуля понять, как оно работает, уйдет очень много времени, и такие знания применить будет негде, кроме как на этом конкретном проекте.
3. neikist 21.12.17 12:53 Сейчас в теме
Проблема смешения уровней абстракции которую вы тут затронули в т.ч. довольно часто встречается к сожалению. Даже если не брать описанные вами абстракции, "макроуровневые" так сказать, на "микроуровне" очень часто можно встретить в одной процедуре сразу и проверку условий каких то уровней так на 4-5 вложенных если, и пару циклов, и установку флагов каких нибудь, и еще вывод печатки. Все в одной куче.
4. Сурикат 316 21.12.17 13:37 Сейчас в теме
Спасибо за статью. Последнее время о программировании на infostart пишут мало. Может быть стоило начать сразу с применения SOLID с оглядкой на 1С? =)

По-моему вы привели очень неудачный пример. Чем формирование настроек принципиально отличается от формирования таблиц для движений? Только какими буквами это написано. Причем в типовой конфигурации подход используются более гибкий, т.к. позволяет применять более сложную логику при формировании движений. А уже класс ФормировательДвижений (ОбщийМодуль Проведение) пишет данные в регистр, но сделано это больше для уменьшения дублирования кода, чем для борьбы со сложностью.

Т.е. вывод статьи немножко расходиться с примером.

И вам не кажется, что если доработку должен вести квалифицированный программист (в идеале автор!!!!), то где-то что-то пошло не так (мы неправильно назвали классы, ошиблись при проектировании, наша абстракция оказалась плоха)?

У меня был случай, когда делал свой "класс" дата, для переопределения операции сложения. Тогда такой подход мне здорово помог распутать свою писанину. А в остальном объектов платформы за глаза хватает.

А можете привести примеры, где вам не хватило объектов, которые предлагает платформа, и пришлось какими-то ухищрениями повышать уровни абстракции именно для уменьшения сложности?
5. pm74 180 21.12.17 18:00 Сейчас в теме
(4)
мы неправильно назвали классы, ошиблись при проектировании, наша абстракция оказалась плоха
для этого абстракция должна быть представлена в виде некоторой модели которая , в идеале, может быть верифицирована
6. Сурикат 316 21.12.17 18:08 Сейчас в теме
(5)
Ну т.е. в идеале должен быть code-review =)
7. pm74 180 21.12.17 18:12 Сейчас в теме
(6) в самом идеальном идеале )) формальная верификация еще на этапе моделирования
8. genayo 21.12.17 19:30 Сейчас в теме
(4) Так наоборот, при повышении уровня абстракции становится очевидно, что от большого числа объектов вполне можно отказаться...
9. Manoshkin 346 22.12.17 08:39 Сейчас в теме
.... и не документ должен писать в регистры, а регистр знать как наполнять себя по событиям внешнего мира.... (что-то навеяло :)
10. m-rv 860 22.12.17 08:56 Сейчас в теме
(9)
Это интересная мысль, спасибо
11. Сурикат 316 22.12.17 10:33 Сейчас в теме
Такой подход опасен

Ведь при изменении любого события придется изменять сам регистр и получиться объект с огромным количеством обязанностей, который будет сложно сопровождать
12. l1ike 26.12.17 08:49 Сейчас в теме
(9)
Только не Регистр должен сам себя наполнять, а Сервис. Сервис учета НДС, к примеру. А по скольким уж там регистрам Сервис распихает информацию, должен решать сам сервис. Документы же должны уметь генерировать события понятные сервису.

Долгие годы мучает вопрос, почему в 1с не срослись СтруктураШапкиДокумента, XDTO и сервисно ориентированный подход.
Сурикат; Manoshkin; +2 Ответить
13. Сурикат 316 29.12.17 23:22 Сейчас в теме
(12)
Слишком сложно для большинства? =(
14. NoRazum 28 21.03.18 13:02 Сейчас в теме
(12) Когда такое случиться будет счастье, но это уже будет не 1С, а что-то другое
15. 2ncom 03.06.18 06:47 Сейчас в теме
Очень интересно про абстракцию данных.
Но вот документы и справочники, мне кажется, логичнее отнести к абстрактному уровню, поскольку они непосредственно отражают предметы учета — участвуют в построении бизнес логики.
Оставьте свое сообщение

См. также

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    30851    m-rv    21    

1С: Документооборот, Data Science и Python

Документооборот и делопроизводство Математика и алгоритмы ДО Бесплатно (free)

В статье рассказывается о создании и обучении модели Data Science на языке Python и интеграции с системой 1С: Документооборот

04.08.2020    1632    Vaganov_Alexey    4    

Применение математических достижений в решении сложных задач бизнеса

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

Как правило, самые сложные задачи решаются с точки зрения математики очень легко. Но чтобы найти правильное решение, важно понять бизнес-цель, которую достигает эта задача. О практическом применении математических достижений для эффективного решения сложных задач бизнеса на конференции Infostart Event 2019 Inception рассказал Дмитрий Мишнов.

25.05.2020    3424    Mishnov    17    

Улучшение пооперационного планирования в 1С:ERP 2.4 внешними средствами

Математика и алгоритмы Производительность и оптимизация (HighLoad) Бесплатно (free)

Задача построения оптимального производственного расписания требует сравнения тысяч и десятков тысяч вариантов. Выполнять такие вычисления средствами платформы 1С Предприятие нецелесообразно. Как реализовать пооперационное планирование с использованием генетических алгоритмов и параллельных вычислений в докладе на конференции Infostart Event 2019 Inception рассказал генеральный директор компании «ИНТЕХ» Сергей Сафаров.

02.03.2020    5356    ildarovich    7    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    35124    ids79    40    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Предлагается ознакомиться с редким способом графического представления иерархических данных. Приводится алгоритм формирования и пример реализации.

18.02.2020    4893    randomus    18    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    29038    YPermitin    24    

"Хочу универсально!" [Часть 1]

Математика и алгоритмы Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Сентябрьская серия статей про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма. На этот раз - открытие значения из текущей колонки.

02.09.2019    9878    SeiOkami    35    

Как работает серверный вызов в 1С Промо

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

Клиент-серверная архитектура заложена в платформе изначально — со времен «1С:Предприятие 8.0». Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере. Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере — другой. Клиент и сервер «общаются» между собой с помощью серверного вызова. Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

18.11.2017    56465    pahich    82    

Иерархия без "В ИЕРАРХИИ"

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

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    12487    ildarovich    19    

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8 Разработка v8 v8::УФ 1cv8.cf Бесплатно (free)

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    15117    ids79    8    

Обработчики событий при записи объектов. Зачем и что за чем?

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

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    52934    AlbinaAAA    28    

Будни автоматизации или "мне нужна программка для 3D упаковки" Промо

Практика программирования Математика и алгоритмы Оптовая торговля Оптовая торговля v8 1cv8.cf УУ Бесплатно (free)

Автоматизация отечественных предприятий, которой приходиться заниматься, это нужная и высокооплачиваемая, но довольно нервная работа. Выручает юмор. Например, при общении с требовательным клиентом можно вспомнить анекдот: "Держась руками за стену, на ногах еле стоит мужик. К нему пристает ребенок: "Ну, папа, пожалуйста, сделай мне кораблик!", папа отвечает: "Ага! - Сейчас все брошу и пойду делать тебе кораблик!". Про один такой сделанный для клиента "кораблик" и хочется рассказать. Надеюсь, совместное погружение в теплое ламповое (то есть клиентоориентированное) программирование доставит Вам положительные эмоции, да и задача попалась интересная. Поплыли?

24.03.2014    45354    ildarovich    116    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    27769    skv_79    35    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    16578    Stepa86    33    

Что делает "В ИЕРАРХИИ" в запросе?

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

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    27262    YPermitin    34    

Метод Кларка-Райта. Оптимальное планирование маршрутов грузоперевозок Промо

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

Одной из наиболее важных задач каждого предприятия, осуществляющего доставку грузов в крупных населенных пунктах, является сокращение издержек. Возможное решение данной проблемы заключается в сокращении пробега автотранспорта и, как следствие, уменьшении расхода ГСМ. Появляются такие вопросы ... - СКОЛЬКО НУЖНО МАШИН ДЛЯ РАЗВОЗКИ КОНКРЕТНОГО ОБЪЕМА ГРУЗА ПО АДРЕСАМ ДОСТАВКИ ? - КАК РАЗБИТЬ ТОЧКИ ДОСТАВКИ НА ОПТИМАЛЬНЫЕ ПО ПРОБЕГУ И ЗАГРУЗКЕ МАШИН МАРШРУТЫ ? ... В этой статье Вы найдете один из многих способов получить ответ на эти вопросы.

10.02.2016    60103    mi1man    20    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    53516    ids79    25    

Реализуем Стек, Очередь и Приоритетную очередь в 1С

Практика программирования Математика и алгоритмы v8 1cv8.cf Россия Бесплатно (free)

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

24.06.2019    14246    RonX01    65    

Почему вообще работает мой запрос? или Ещё раз о планах запросов

Математика и алгоритмы Практика программирования Разработка v8::Запросы Бесплатно (free)

Другие статьи на эту тему объясняют, что такое план выполнения запроса, но не рассказывают о том, как его получить. Эта заметка призвана заполнить этот пробел. Её цель - популяризировать общедоступные инструменты получения плана запроса среди разработчиков, которые ещё не начали их использовать.

10.06.2019    9426    DataReducer    12    

Приемы обработки больших данных в 1С Промо

Универсальные обработки Математика и алгоритмы Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

Рассказ об эффективных приемах организации обработок больших объемов данных на платформе 1С

07.08.2015    67329    tormozit    27    

Вычисление 200 тысяч знаков числа pi

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

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    7970    Oleg_nsk    96    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

Практика программирования Математика и алгоритмы Разработка v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    28279    YPermitin    7    

Выдержки из книги Чистый код

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

Недавно я прочитал книгу "Чистый код" Роберта Мартина (Robert Cecil Martin). В ней описываются принципы организации и форматирование исходного кода программы так, чтобы в дальнейшем было легко поддерживать такой код. Эта книга является библией для многих программистов, но вот в среде программистов 1С, к сожалению, не очень распространено чтение подобной фундаментальной литературы. Книга более 400 страниц и так много порой лениво читать, да и времени всегда не хватает. По этому я решил выделить в виде цитирования по разделам самые важные моменты. А также снабдил текст своими примерами кода.

16.05.2019    10703    FreeArcher    105    

XDTO - это просто Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    295890    Evil Beaver    173    

Что такое алгоритм?

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

Как ответить на этот вопрос и не попасть пальцем в небо.

25.02.2019    8724    mkalimulin    274    

Криптовалюты, а также иные взгляды на природу денег в терминах 1С

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

Это отчасти полемическая статья. Я задумал написать ее как ответ на другую хорошую статью о криптовалютах. Хотелось поспорить с некоторыми утверждениями автора, а ещё больше с некоторыми комментариями. А чтобы текст был более понятным для местной аудитории, я решил использовать, где только возможно, терминологию и практику 1С.

28.01.2019    6240    mkalimulin    89    

Как писать код? Технологии древних цивилизаций, или все новое - это хорошо забытое старое

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

Все современные технологии - это развитие и доведение до ума (или маразма) древних идей. За последнее время не придумали ничего нового - все, что мы видим, было придумано тысячи лет назад. Не является исключением и программирование, которое в сути своей является переводом с языка условностей технического задания или заявки пользователя в формализованный и абсолютно точный язык математической логики. А логику придумали (по крайней мере первыми опубликовались в ведущих научных журналах) еще древние греки.

23.01.2019    11689    starik-2005    43    

Самоучитель языка запросов 1С. Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 v8::Запросы Бесплатно (free)

Сервис для изучения запросов 1С: "Консоль изучения запросов 1С:Предприятие 8". Теперь и с конструктором запросов!

07.05.2013    110307    bpc222    327    

Роберт Мартин: "Будущее программирования" / Robert Martin: "The Future of Programming"

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

Перевод-транскрибация выступления.

14.01.2019    15732    Vladimir Litvinenko    38    

Многоязычное программирование: создание систем с использованием нескольких языков

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

В мире существует несколько тысяч языков программирования. Несмотря на то, что многие из них крайне непопулярны, очень специфичны или уже созданы очень давно, они продолжают существовать, а новые языки продолжают появляться. Похоже, нет оснований полагать, что количество языков когда-нибудь начнет уменьшаться и в конечном счете будет создан один универсальный язык программирования. Большое количество языков может пугать своей необъятностью, но новое понимание идеи многоязычных проектов позволяет не только ориентироваться в этом разнообразии, но и видеть очевидную выгоду для всех.

09.01.2019    12183    kalyaka    36    

Предметно-ориентированное проектирование (3D) в 1С. Виртуальная машина. Промо

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

Проектирование программного обеспечения - это постоянная битва за простоту.

03.06.2014    40311    Evgen.Ponomarenko    88    

Размышления о хороших практиках, навеянные одной статьей

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

Прочитал статью "Ректальное программирование: основы для практикующих 1С-программистов". Статья очень хорошая и своевременная. Но у меня возникло некоторое сомнение. А достаточно ли автор любит и понимает предмет, о котором пишет? Насколько богат его опыт ректального программирования и занимался ли он им вообще? Как человек обладающий многолетним опытом РП, я решил представить вам необходимые дополнения к статье.

21.12.2018    6817    mkalimulin    61    

Ректальное программирование: основы для практикующих 1С-программистов

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

Одной из самых популярных и зарекомендовавших себя методологий программирования в 1С является так называемое ректальное программирование. Редкий проект внедрения и сопровождения учётных систем на платформе 1С обходится без его использования. Зачастую без знания данной методологии программистам даже бывает сложно найти работу в сфере 1С, потому что работодатели, особенно фирмы-франчайзи, в основном отдают предпочтение классическим, зарекомендовавшим себя методикам, а не новомодным заграничным веяниям.

19.12.2018    43484    for_sale    351    

Многопоточное восстановление последовательностей

Производительность и оптимизация (HighLoad) Практика программирования Математика и алгоритмы Универсальные функции v8 Бесплатно (free)

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    13319    _ASZ_    33    

Решение транспортной задачи запросом Промо

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

Списание по двум последовательностям партий запросом (без программной обработки)

1 стартмани

30.04.2014    35067    bforce    22    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    38887    Rain88    46    

Учебный курс. Повышение качества разработки. Ошибки программы

Практика программирования Математика и алгоритмы Рефакторинг и качество кода Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Лекции № 3,4,5. Эти лекции посвящены ошибкам программ, их классификации и способам исправления

10.07.2018    19700    Артано    92    

Що там у них в Java

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

Развенчание мифа о тяжёлой жизни не 1С программистов на примере создания веб сервиса редактирования таблички с использованием framework spring в Java.

24.05.2018    11240    van_za    62    

Парсер запросов 1С. Часть 1: Введение, разбор математических выражений Промо

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

Рано или поздно становится скучно решать типичные задачи, для которых придумана 1С. Голова пухнет от бухгалтерских терминов и очередных "хотелок" пользователей. Именно в такие моменты хочется гордо поднять голову, воскликнуть "Но я же программист!" и заняться чем-то интересным. В цикле статей я постараюсь доступно описать, как устроены парсеры в целом и на примере парсера языка запросов 1С. Требования к навыкам читающего: основы языка 1С, основы алгоритмизации.

1 стартмани

04.12.2013    30747    juntatalor    49    

Учебный курс. Повышение качества разработки. Вводная лекция, часть 2

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

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Лекция №2. Эта лекция посвящена абстракциям, их свойствами и практическому применению в рамках классических парадигм программирования.

24.05.2018    12984    Артано    36    

Учебный курс. Повышение качества разработки. Вводная лекция

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

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста.

10.05.2018    17932    Артано    51    

"Взлом" теста "1С:Профессионал" методом машинного обучения

Практика программирования Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Нейронные сети – не единственная модель, реализующая принципы машинного обучения. Есть еще байесовская модель, которая математически строже и определеннее, поскольку построена на надежном фундаменте теории вероятностей. Применению байесовского вывода к решению интересной теоретической задачи и посвящена данная статья. Слово "взлом" в заголовке использовано для привлечения внимания. Речь идет исключительно о математическом методе, показанном на примере знакомой всем задачи. 

12.03.2018    19255    ildarovich    19    

Сервис для изучения методов платформы 1С:Предприятие 8. Бесплатно! Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 Бесплатно (free)

Бесплатный ON-Line сервис изучения методов платформы 1С:Предприятие 8. Подготовка к аттестации 1С:Специалист on-line! Тестовые задания по различным видам учета! Подсказки для оптимального решения!

27.06.2013    50124    bpc222    52    

Правила программирования и автоматизации

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

Изложил свой опыт программирования, больше десяти лет.

21.02.2018    18439    Dzenn    127    

Творим Историю вместе

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

Расширяем границы, выходим за рамки, ставим новые цели - все, как вы любите.

17.01.2018    17485    1c-intelligence    108    

Использование git при разработке на 1С

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

Продолжение цикла статей по основам CI. Данная статья расскажет о реализации возможности хранения кода продукта в системе управления версиями git и познакомит со специализированным инструментарием, предназначенным для решения этой и других смежных задач.

27.12.2017    32609    real_MaxA    57    

Внутреннее качество разработки конфигураций 1С Промо

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

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

21.06.2013    37874    ig1082    50    

Двоичное дерево, двоичное дерево поиска, двоичная куча, B-дерево

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

В большинстве реляционных СУБД в качестве структуры данных для индексов (та или иная их реализация) используются именно деревья. И не просто деревья, а сбалансированные деревья поиска. В этой статье как раз о них.

24.11.2017    16061    Irwin    5    

Введение в CI для 1С

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

Значение роли тестирования при разработке ПО трудно переоценить, его применение позволяет повысить надёжность продукта и улучшить качество кода. Для продуктов для платформы 1С:Предприятие существует ряд инструментов для проведения тестирования, в том числе и от самого вендора. Но, также появились открытые инструменты, реализующие мировые практики проведения тестирования (проверки продукта), поддерживаемые сообществом. В этой статье описаны базовые принципы, которые необходимо понимать перед началом применения этих инструментов.

21.11.2017    23784    real_MaxA    22