Визионное программирование

29.04.20

Разработка - Работа с интерфейсом

Новый способ программирования и его практическая демонстрация.

Вы наверняка слышали о т.н. "визуальном программировании". Лично у меня этот термин всегда вызывал легкое недоумение. Я прекрасно знаю - что это такое. Но все же. Если новый способ предлагает нам программировать визуально, то как же мы программируем сейчас? На ощупь? Как по мне, так любое программирование визуально. Еще этот способ называют программированием без программирования. И это, наверное, еще хуже. То есть, вопрос ставится так:

можно ли заниматься программированием, не занимаясь программированием?

Вопрос звучит абсурдно. Да он, собственно, таковым и является. Поэтому, здесь большинство полагает, что достигло апагогии и на этом ставит точку. И это очень жаль. Потому что на самом деле вопрос должен звучать так:

можно ли заниматься программированием, не занимаясь ерундой

Этот вопрос уже не абсурден. И на него есть ответ.

Все начинается с достаточно банальной мысли: 

программа - это не текст

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

Тут важно понимать, что использование кратковременной памяти - это далеко не высшая форма деятельности. Существуют исследования, которые показывают, что у шимпанзе кратковременная память развита существенно лучше, чем у человека. Это - действительно тупая работа. 

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

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

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

Новый способ программирования заключается в том, чтобы предоставить разработчику возможность записывать иерархические структуры каким-либо способом. Если вы достаточно долго работали с 1С и много общались с пользователями, тогда вы наверняка заметили: с каким энтузиазмом (подчас совершенно излишним, если не вредным) они занимаются созданием "папочек" и "папочек внутри папочек" в различных списках (товары, клиенты и т.п.) Это показывает нам, что такого рода работа естественна для человеческого мышления. Нам остается только предусмотреть возможность создавать группы двух типов: обычные и повторяющиеся по каким-либо правилам. А также дать возможность для любой группы указать простое или исключительное условие. И наш инструмент программирования готов. Можно показать, что машина Тьюринга воспроизводится этим инструментом. А значит - он обладает всеми теми возможностями, что и все прочие языки программирования.  

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

Возьмем задачу, описание решения которой не слишком вас утомит. Но, в то же время, достаточно сложную. Сформируем в типовой конфигурации "Бухгалтерия предприятия, редакция 3" декларацию по налогу на добавленную стоимость. Для решения задачи будем использовать новый инструмент программирования ART.

//infostart.ru/public/707283/

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

 

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

 

Зайдем внутрь группы "Книга покупок" и создадим там группу "Файл", а внутри группы "Файл" группу "Документ".

 

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

Внутри группы "Документ" создадим группу типа R(repeat). R-группа - это повторяющаяся группа. В процессе того, что в традиционном программировании называется выполнением программы, а я называю трэкингом, группа типа A превращается в такую же одиночную группу. А группа типа R размножается и превращается во множество групп, в соответствии с тем, что задано в качестве итератора в свойстве "Источник".

 

 

В свойстве "Источник" здесь указан регистр накопления "НДСЗаписиКнигиПокупок". То, что указано в этом свойстве далее, после запятой, связано с особенностями текущей реализации ART. Там соединение таблицы регистра с таблицами документов, что легко может быть заменено на обращение через точку. Не обращайте на это внимание. Свойство "Отбор" и функция "СУММА()", я думаю, не нуждаются в комментариях.

Внутри группы "КнигаПокуп" создадим две группы типа A с одним и тем же именем: "КнПокСтр". Для каждой из этих групп зададим свойство "Условие". Группа с условием отрабатывает и появляется в трэкинге только при выполнение условия(условий). В рабочей области группа с условием выделяется бледным цветом.

 

Внутри группы "КнПокСтр" разместим четыре группы A: "КодВидОпер", "ДатаУчТов", "СвПрод", "Расчеты".

 

 

 

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

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

 

 

Внутри группы "СвПрод" разместим две группы A с условиями

Группа "Расчеты" имеет одну особенность. Этой группы нет в схеме налоговой декларации. Соответственно, ее не должно быть в файле результата. Но она нам нужна для вычисления величины, которую мы потом используем в группе "Декларация". Эта проблема решается добавлением специального свойства под названием "СКРЫТЬ".

Вторую группу "КнПокСтр" получим путем копирования первой и последующего внесения очевидных изменений. Чтобы не тратить зря ваше время, я не буду на них останавливаться.

То же самое можно сказать о группе "Книга продаж". Она также является почти точной копией группы "Книга покупок".

 

В группе "Декларация" создадим иерархию групп, соответствующую схеме.

 

И заполним их свойства также очевидным образом. Например, так:

 

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

Обратите внимание. Если вам сейчас кажется все простым и понятным, то это вовсе не потому, что я выбрал слишком простую задачу для демонстрации нового способа программирования. Мне доводилось делать декларацию по НДС на седьмой версии 1С.  И там это заняло около 1000 строк кода. А если вы возьмете реализацию этой же задачи в типовой конфигурации "Бухгалтерия предприятия", то там будут все 25 тысяч строк кода. И это еще без учета общих модулей.

Задача кажется простой, потому что новый способ программирования не создает сложностей на пустом месте. Это - не visual программирование. Это - vision программирование.

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61795    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54402    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    16697    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10735    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    9611    151    acces969    31    

118

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12080    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
106. vadim1011985 99 22.06.20 14:10 Сейчас в теме
(105) ещё раз , зачем мне структура разбитая на мелкие действия ? Я уже привёл пример на загрузки данных . Есть первый пункт - я пишу код по чтению файла 2) загрузка в ТЧ - пишу код по загрузки данных в ТЧ и все необходимые дополнительные процедуры
И т.д.
107. mkalimulin 1148 22.06.20 14:33 Сейчас в теме
(106) Вы мыслите структурно. У вас в голове несколько крупных пунктов. Их вы обдумываете. Потом вы переходите к конкретному пункту. И тут история повторяется. У вас в голове следующие несколько чуть более мелких, но все еще крупных подпунктов. И так далее.
Суть в том, что для написания программы традиционным способом, вам придется выйти из мира структур и заняться сериализацией. А в ART вам покидать мир структур не надо.
89. vadim1011985 99 22.06.20 01:48 Сейчас в теме
(87) вам уже приводили сравнение с html редактором , вот у вам тоже самое . Добавили блок (Только у вас их 2 вида) - добавили тег(а тут побольше разнообразия) , и там и там можно управлять параметрами и видишь структур . Только почему-то никто не считает html -редактор каким-то отдельным ЯП
91. mkalimulin 1148 22.06.20 02:36 Сейчас в теме
(89) Вы уже раз пять повторили "то же самое". Попробуйте не искать аналогии, а вникнуть в саму идею.
92. vadim1011985 99 22.06.20 08:37 Сейчас в теме
(91) ну так вы опровергните это утверждение , вы просто ушли от вопроса так как опровергнуть это не можете вот и все .
94. mkalimulin 1148 22.06.20 11:37 Сейчас в теме
(92) html не обладает полнотой по Тьюрингу
97. vadim1011985 99 22.06.20 11:58 Сейчас в теме
(94) Да что вы привязались к этой полноте ? Полнотой по тьюрингу обладает не ваша обработка а 1с из-под которой запускается эта обработка - не будет 1с вашу обработку можно выкинуть , то что не может сделать 1с не сможет и Ваша обработка .
99. mkalimulin 1148 22.06.20 12:56 Сейчас в теме
(97) С таким же успехом можно говорить, что полнотой по Тьюрингу обладает не 1С а компьютер. Не будет компьютера, 1С можно выкинуть. Задействуйте абстрактное мышление.
Есть идея, а есть ее конкретная реализация. Не путайте эти две вещи. Есть, например, html. Его можно реализовать на разных платформах. Но где бы вы его не реализовали, он не будет Тьюринг полным. И есть ART. Его тоже можно реализовать на какой угодно платформе. И где бы вы его не реализовали, он будет Тьюринг полным.
108. palsergeich 23.06.20 01:39 Сейчас в теме
Штука может и прикольная, но у меня после УХ контузии вызывает сомнение возможность сделать каким либо конструктором производительный код.
Как показала практика - ради универсальности всегда страдает производительность и часто сильно.
А тут уже в примерах по 3-4 точки (уровня дерева, но сутиэто не меняет), достаточно 1-2 поля составного типа посередке что бы стало плохо.
А еще я себе представляю число уровней абстракции и становится плохо.
farukshin; +1 Ответить
109. mkalimulin 1148 23.06.20 09:47 Сейчас в теме
(108) Производительность - это вопрос реализации. Нет никаких принципиальных ограничений сделать ART таким же быстрым, как C например.
Количество уровней иерархии - оно у вас изначально есть. Это то, что вы имеете на входе при решении какой-либо задачи. Только при традиционном подходе, вы эту иерархию развернете в простыню с бесчисленными пометками: ходи туда, ходи сюда. А если будете использовать ART, то вы останетесь в естественной среде.
110. starik-2005 3033 23.06.20 13:41 Сейчас в теме
На всякий случай прочитал все посты и и материалы, но до сих пор задача о рюкзаке не отметилась в списке решенных. Есть движения? А то я даже на ассемблере ее уже написал - быстро работает, собака! ))) Получается, что разработка на ассемблере более быстрая, чем визионное программирование? Или я что-то упустил?
111. mkalimulin 1148 23.06.20 14:48 Сейчас в теме
(110) Нет, не пропустили. Я сейчас готовлю новую статью, где будут машина Тьюринга и задача о рюкзаке. Текучка не позволяет сделать быстрее.
Насчет того, что быстрее, а что медленнее в статье тоже будет.
Оставьте свое сообщение