Объектно-ориентированный взгляд на программирование в 1С

18.04.12

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

Рассматриваем программирование в 1С как работу с объектами и классами.

Скачать файлы

Наименование Файл Версия Размер
СписокЗначенийРас.epf
.epf 8,75Kb
53
.epf 8,75Kb 53 Скачать

Первое что меня поразило при знакомстве с 1С – это отсутствие ООП. Никаких классов, наследований, закрытых методов. А ведь любой код должен быть логически структурирован. А классы - это то, что позволят это сделать с наименьшими нервами.
Потом, поработав с 1С, понял, что объекты конечно есть. Одни предопределенные (вроде «Документы», «Регистр сведений»), а другие зависят от фантазии программиста («Обработки»). Конечно, нет полиморфизма, нет наследования, но объектную модель построить можно.

Только есть другая проблема: большинство 1С-программистов все пишут в «процедурном стиле». Язык сам по себе толкает создать общий модуль. Потом поместить в этот модуль кучу процедур для обработки данных и поддерживать все это «спагетти» из вызова процедур.

Похожая проблема наблюдается в Delphi. Там тоже программист может ничего не знать про ООП и писать приложения. Никакого разделения на классы, весь код зачастую помещается в модуль формы. Но плюс Delphi в том, что с опытом все приходит, т.к. в книжках объектная модель пропагандируется.

Рассмотрим 1С в объектно-ориентированном подходе. Предопределенные объекты (Документ, Регистр,..) содержат код 3-х типов:

  • «Модуль объекта» - Код отвечает за конкретный экземпляр объекта, а вернее обработку данных этого объекта.
  • «Модуль формы» - Код отвечает за обработку действий пользователя.
  • «Модуль менеджера» - Код отвечает за операции над определенным типом объекта, без привязки к конкретному экземпляру. В обычных языках это зовется «статические методы» 

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

А существование «модуля формы» - это вообще фишка 1С, которой можно гордиться. Этот модуль позволяет отделить код отвечающий за обработку действий пользователя и код который обрабатывает данные (Ни дать ни взять MVC).

Только проблема в том, что большинство разработчиков в модуль формы «суют» код, отвечающий за общую логику работы с данными. Сам грешен. По-моему, разработчикам платформы 1С не мешает в «модуль формы»  добавить быстрый вызов «модуля объекта» (например через контекстное меню).

Теперь про объекты, созданные самим программистом. На infostart встречал различные статьи о эмуляции объектно-ориентированной модели. Но согласитесь, манипуляция  со  структурами для хранения данных – занятие муторное и неинтуитивное. Я считаю, что лучшее решение, это воспринимать «обработки»  как описание собственных классов.

Наглядный пример. В «Списке значений» мне не нравится диалог, вызываемый методом «ОтметитьЭлементы». Не хватает кнопок, которые выделяли (или снимали выделение) со всех пунктов. И вот обработка СписокЗначенийРас как раз и дает такой диалог. Добавляем обработку в конфигуратор, а потом вызываем:

СписокЗначенийРас = Обработки.СписокЗначенийРас.Создать();
СписокЗначенийРас.Добавить("Пример1");
СписокЗначенийРас.Добавить("Пример2");
Если
СписокЗначенийРас.ОтметитьЭлементы() тогда
   
СписокЗначенийРас.Данные.ОтметитьЭлементы(); // а это стандартный диалог
КонецЕсли;

К сожалению, наследования в 1С нет. Поэтому методы и свойства которые есть у СпискаЗначений  надо либо дублировать в обработке или обращаться к реквизиту который хранит оригинальный список значений (в моем случае это  СписокЗначенийРас.Данные)

Теперь переходим в конфигуратор. Находим обработку  СписокЗначенийРас и, вызвав на нем контекстное меню, переходим в «модуль менеджера». Добавляем следующую функцию.

// Устанавливает или снимает (интерактивно) пометки у элементов списка значений.
// Заголовок - Заголовок окна диалога
// РабочиеДанные - список значений
Функция ОтметитьЭлементы(Заголовок=Неопределено, РабочиеДанные) Экспорт
   
Результат = Ложь;

   
ФормаОЭ = ПолучитьФорму("ФормаОтметитьЭлементы");
   
ФормаОЭ.ПрочитатьДанные(РабочиеДанные);
   
ФормаОЭ.ЧитатьДанныеПриОткрытие = Ложь;
    Если
Заголовок <> Неопределено тогда
       
ФормаОЭ.Заголовок = Заголовок;
    КонецЕсли;

   
РезультатФормы = ФормаОЭ.ОткрытьМодально();
   
Результат = (РезультатФормы = КодВозвратаДиалога.ОК);

    Возврат
Результат;
КонецФункции

Теперь мы можем вызвать диалог еще проще.

сзДанные = Новый СписокЗначений;
сзДанные.Добавить("Пример_1");
сзДанные.Добавить("Пример_2");
Обработки.СписокЗначенийРас.ОтметитьЭлементы("Заголовок",сзДанные);

Чем не статический класс?
В подходе использования обработок как классов есть несколько недостатков.

  • Нет наследования. Хочется возможности указывать родителем хотя бы простейшие типы (СписокЗначений, ТаблицаЗначений, Дата, Строка…)
  • Класс-обработка показывается в общем списке обработок. Хотелось бы отдельный тип объектов.

На этом пока все. Надеюсь, заметка позволила вам разглядеть в 1С зачатки ООП :)

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1754    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

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

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4424    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

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

1 стартмани

09.06.2023    7464    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7856    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4446    fishca    13    

36

Интересная задача на Yandex cup 2021

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

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8841    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

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

31.08.2021    7807    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
122. Stamper 43 18.04.12 22:31 Сейчас в теме
(119) sergathome, к сожалению, я не разработчик платформы.
у меня была возможность сравнить скорость разработки сравнимого функционала одним мной (за две ночи, в рамках выполнения тестовой задачи при приёме на работу) и группой из 20 .net разработчиков (которые расценили выполнение в 2..4 недели). этим и объясняется моя приверженность

(120) Арчибальд, Статья 9 Закона о бух. учете: один из обязательных реквизитов "Дата составления документа"
а каким документом руководствуетесь вы?
125. Арчибальд 2706 19.04.12 07:43 Сейчас в теме
(122) Stamper,
Стаття 9. Первинні облікові документи та регістри бухгалтерського обліку
1. Підставою для бухгалтерського обліку господарських операцій є первинні документи, які фіксують факти здійснення господарських операцій. Первинні документи повинні бути складені під час здійснення господарської операції, а якщо це неможливо - безпосередньо після її закінчення. Для контролю та впорядкування оброблення даних на підставі первинних документів можуть складатися зведені облікові документи.
127. Stamper 43 19.04.12 09:06 Сейчас в теме
(125) Арчибальд, ну здорово. нужно сделать то, что в последствии никак не фиксируется
171. zfilin 2337 22.04.12 15:35 Сейчас в теме
(119) sergathome, Гагагагага! Вот веселье-то. Я теперь буду так обзываться: "А ты! Ты! Разработчик платформы! - Ах, так? Ну получай!"
115. Арчибальд 2706 18.04.12 20:11 Сейчас в теме
(107) О споре говорить не приходится: там от участников требуются внятные ответы на вопросы, а не рассуждения наподобие "в бухучете время не требуется".
Какая свезь существует у непосредственного наблюдения операций (метод ОУ в Вашем определении) с многочисленными режимами проведения документов?
Какое время "реально" у упомянутой мной операции выпуска продукции? Можно ли средствами 1С эту операцию непосредственно наблюдать?
117. Stamper 43 18.04.12 20:15 Сейчас в теме
(115) Арчибальд, ну а что я могу сделать, если в ПСБУ действительно время не упоминается.

при оперативном проведении Дата документа сдвигается на ТекущуюДату. а т.к. в большинстве случаев Период записи регистров заполняется из Даты Регистратора -- вот и имеем дату/время операции.

Какое время "реально" у упомянутой мной операции выпуска продукции? Можно ли средствами 1С эту операцию непосредственно наблюдать?

ответ прост до безобразия: такое, которое запрограммируете.
запретите неоперативное проведение -- вот вам и будет текущая дата.

резюме: всё зависит от заложенной разработчиком модели описания процесса
120. Арчибальд 2706 18.04.12 20:52 Сейчас в теме
(117) Stamper, а разве там нет слов о составлении первичного документа в момент совершения хозяйственной операции либо сразу после ее завершения? Разве бывают моменты не времени?
57. sergathome 4 18.04.12 12:35 Сейчас в теме
Платформа, конечно, имеет массу не совсем понятных фич ака МоментВремени(), но, вобщем, сказать, что этот вариант самый плохой тоже нельзя. Мне лично больше симпатичен вариант со сквозной нумерацией, но он тоже имеет недостатки...
58. Stamper 43 18.04.12 12:39 Сейчас в теме
(57) sergathome, мсье имеет сертификат Специалист по Платформе 1С 8?
60. sergathome 4 18.04.12 12:46 Сейчас в теме
(58) Stamper, практически. Подтягивать расчёт и сдавать лень. "Мсье" кроме этого разрабатывал и другие системы с другими подходами и моделями данных. Но проиграл монстру, такова селява. Теперь вот сам на ниве пробавляюсь...
61. Stamper 43 18.04.12 12:50 Сейчас в теме
(60) sergathome, а я практически миллионер, лень заработать *trollface*
прошу оставаться в контексте обсуждения! я, например, когда-то завод чуть не взорвал. и что-же теперь? :)

моё ИМХО: с таким негативным отношением к технологии продолжать не рекомендую. на собственном же кармане отразится
62. sergathome 4 18.04.12 12:59 Сейчас в теме
(61) Stamper, почему "негативным" ? Где оно, это "негативное" ?? Заметьте - не я перешёл на личности, г-н тролллфейс. ;) Это было ответом на вопрос, не более того.
64. Stamper 43 18.04.12 13:02 Сейчас в теме
(62) sergathome,
Заметьте - не я перешёл на личности

ценю!

хм... значит мне показалось. извини
67. sergathome 4 18.04.12 13:30 Сейчас в теме
(64) Stamper, я не обидчивый, но обсуждение личных, в том числе профессиональных качеств в отрыве от предмета как-то не комильфо уж совсем, согласись. :) Продолжим тогда по теме - фиксация события документа по методу Граница, определяемая как совокупность ДатаВремя+УУИД очевидно не является единственно возможной. Более того, очевидно, что такая схема, заявленная в официальной документации - я ничего не придумываю, сама по себе не обеспечивает однозначной фиксации последовательности документов на оси времени. Для обеспечения требуемого функционала (однозначной фиксации) в этом случае требуется как минимум таблица УУИДов с привязкой к чему-то ещё. Очевидно, что система, основанная на простой сквозной нумерации с автоинкрементом такого недостатка лишена.
Нет ?
70. Stamper 43 18.04.12 13:45 Сейчас в теме
(67) sergathome, вот я ж и спросил про сертификат, т.к. удачная сдача этого экзамена обычно не оставляет "белых" пятен в несложных вопросах.
описана проблема многопользовательских систем, когда в один и тот же момент могу писать несколько пользователей. в таких случаях помогает объект Граница()
нумератор штука конечно хорошая, но с осью времени он нам не поможет, т.к. документы часто вводятся задним числом.
72. sergathome 4 18.04.12 14:09 Сейчас в теме
(70) Stamper, а никакого "пробела" тут у меня и нет. Я всё отлично понимаю, если ты не заметил. А вот ты сможешь ответить на простой вопрос - каким образом объект типа Граница, содержащий официально всего три поля - УУИД, ДатаВремя и признак включения без запроса таблицы привязки УУИДов может "помочь" ?
При введении документов задним числом проявляется уже недостаток нумератора. И с ним тоже можно бороться. Например введением дерева нумерации. Может быть гораздо эффективнее ведения таблицы УУИДов ;)
75. Stamper 43 18.04.12 14:18 Сейчас в теме
(72) sergathome, мы выходим за рамки ООП, и идём в предметную область.
не буду телепатировать, сразу спрошу: мы сейчас о получении остатков или о списании партий?!
если про партии -- помогает МоментВремени(), если об остатках -- нам хватит границы.
78. sergathome 4 18.04.12 15:03 Сейчас в теме
(75) Stamper,
если про партии -- помогает МоментВремени(), если об остатках -- нам хватит границы.

Вот с этого момента поподробнее. Я-то, дурак, считал, что Граница точнее МоментВремени(), так как включает дополнительную инфу. Но даже не в этом суть. Суть в том, что механизм привязки документов ко времени в 1С не является ни единственно возможным, ни идеальным. Существуют другие подходы. Вот и всё. И пример с Моментом я привёл только для иллюстрации того, что не всё в слоне прекрасно, хотя слон и живой вполне.
И ООП тут действительно не в тему. На чём предлагаю и закруглиться. :)
79. Stamper 43 18.04.12 15:08 Сейчас в теме
(78)[QUOTE=sergathome]На чём предлагаю и закруглиться. :) [/IS-QUOTE]
выручил =)
sergathome; +1 Ответить
63. larisab 160 18.04.12 13:02 Сейчас в теме
В 1С 8 архитектурно заложена концепция предметно-ориентированного программирования (ПОП). Модель 1с – объектная, поэтому за основу взяли синтаксис ООП, но только синтаксис. Синтаксис похож, но программирование не объектно-ориентированное. Этим 1С отличается от всех систем разработки и программирования, именно поэтому платформа 1С8 начала продвигаться на западе. (Платформа, а не конкретные реализации – конфигурации)
Концепция ПОП – это следующий виток в развитии программирования, и фирма 1С является заслуженным основателем этого витка.
ПОП предназначена для решения предметных задач, и состоит из 3 уровней программирования:
1)описание логики прикладной задачи (уровень бизнес-логики)
2) инструкции для системы (уровень технической реализации)
3) расширения встроенного языка

Р.S. Курс «Основы клиент-серверного программирования в 1С: Предприятие 8». Мысли из вступительного слова Арутюнова Сергея.
irishka77; alex_shkut; gaglo; +3 Ответить
65. larisab 160 18.04.12 13:06 Сейчас в теме
+ 63) так что спор о том насколько "мальчик, переодетый в девочку, я вляется девочкой )))))
sergathome; +1 Ответить
68. maXon777 128 18.04.12 13:37 Сейчас в теме
Хороший взгляд на платформу!Поддерживаю автора
76. tyfmyl 18.04.12 14:27 Сейчас в теме
зык сам по себе толкает создать общий модуль. Потом поместить в этот модуль кучу процедур для обработки данных и поддерживать все это «спагетти» из вызова процедур.

Общие модули пишутся не как раз для того для чего создано ООП и другие технологии программирования(повторное использование кода). Туда обычно попадают процедуры и функции, которые используются больше 1 раза в разных местах. Это вам не компилируемый язык, чтобы раздувать код, здесь каждая строчка блин время добавляет.
80. igormiro 714 18.04.12 15:10 Сейчас в теме
Я дописывал конфигурацию созданную по такой методике.
Ничего хорошего в этом нет, я сторонник общих модулей. Просто первая же задача была убрать утечку памяти которая образовывалась из за переизбытка создания обработок и не удаления их в дальнейшем из памяти. Я понимаю что это ошибка разработчика но все же. Задача убрать утечку памяти в 1С звучит устрашающе.
82. sergathome 4 18.04.12 15:20 Сейчас в теме
(80) igormiro, задача утечки памяти в скриптовом языке это нечто. Это из области решения задач не имеющих решения.
81. пользователь 18.04.12 15:19
Сообщение было скрыто модератором.
...
85. DoctorRoza 18.04.12 16:24 Сейчас в теме
Спасибо за статью .. очень поучительно!!
89. romansun 193 18.04.12 17:49 Сейчас в теме
вполне закономерные статьи и разговоры

8-ке скоро 10 лет.... и если сперва задачи, решаемые её были весьма локальны, то всё больше и дальше 1С уходит в серьёзные отраслевые информационные внедрения

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

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

это и ООП, и svn, olap, юнит-тестирование, регресс-тестирование, всякие вумные понятия типа "рефакторинг" или "реинжиниринг". Это попытки создать какие-то автоматизированные системы документирования. Это redmine, jira и прочие мантиссы... И т.д. и т.п.

вот как-то так думается мне... :)
DMSDeveloper; zfilin; BorisMor; YVolohov; +4 Ответить
91. Stamper 43 18.04.12 18:12 Сейчас в теме
(89) romansun, ну чёрт с ним с ООП, о нём уже много чего сказано.
Хранилище конфигурации, Корпоративный инструментальный пакет, Сценарное тестирование -- это о чем-то говорит?!
эти "технологии" "накрывают" версионирование и тестирование.

про OLAP лучше не начинать -- эта технология старше 1С 8 и о ней уже даже успели забыть.
смотрите в сторону QlikView и т.п. нереляционные технологии

рефакторинг и реинжиниринг ограничен не 1С-ом, а ясностью головы и прямотой рук.

ну а redmine и jira я, как 1С-ник, активно использую.

следующий =)
94. romansun 193 18.04.12 18:22 Сейчас в теме
(91)

дык, отлично ж!

но

хранилища недостаточно... это вполне четко описывается в статье про svn тут на инфостарте. У каждого 1С-ника есть свой каталог обработок, где лежат "ЗаливкаА_в_Б", "ЗаливкаА_в_Б_ДляЛены", "ЗаливкаА_в_Б_НоваяСРюшками", "ЗаливкаА_в_Б_ДляЛены2" и никакой версионности и всех прочих клевых инструментов нет... Это, честно говоря, сильно запаривает

olap используется весьма активно

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

Самый очевидный пример - сертификат "1С:Эксперт по технологическим вопросам" - один из самых весомых (если не самый весомый), в котором от 1С одно название, похоже, осталось
YVolohov; +1 Ответить
99. Stamper 43 18.04.12 18:39 Сейчас в теме
(94) romansun,
У каждого 1С-ника есть свой каталог обработок, где лежат "ЗаливкаА_в_Б", "ЗаливкаА_в_Б_ДляЛены", "ЗаливкаА_в_Б_НоваяСРюшками", "ЗаливкаА_в_Б_ДляЛены2" и никакой версионности и всех прочих клевых инструментов нет... Это, честно говоря, сильно запаривает

начнём с того, что эти обработки должны быть встроены в конфигурацию. всё, что снаружи -- это неуправляемые костыли.
в С/C++ за #define true false током же не бъёт =)))) и никто не говорит при этом, что плюсы -- плохой язык.

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

так говорить как минимум не этично. вам видимо не очень везло со знакомыми 1Сниками =)

Самый очевидный пример - сертификат "1С:Эксперт по технологическим вопросам" - один из самых весомых (если не самый весомый), в котором от 1С одно название, похоже, осталось

в нашей конторе такими техническими вопросами занимается штат системщиков и сетевиков.
хотя, это конечно исключение
217. AlexO 135 23.05.12 16:11 Сейчас в теме
(94) romansun,
У каждого 1С-ника есть свой каталог обработок, где лежат "ЗаливкаА_в_Б", "ЗаливкаА_в_Б_ДляЛены", "ЗаливкаА_в_Б_НоваяСРюшками", "ЗаливкаА_в_Б_ДляЛены2" и никакой версионности и всех прочих клевых инструментов

у меня если ветвистое дерево обработок - есть и версионность, и описания отличий, и даже текстовый файл с историей версий. А всеми этими "svn" не пользуюсь принципиально - времени заполнять всякие несуразные поля уходит много, плюс ненадежность (то открывается - то нет, то находишь нужную инфо, то - нет), а толку меньше, чем когда у тебя все по папкам, с указанием задания и зачем та или иная фишка вделана.
В большом же проекте, где важна согласованность действий прежде всего, а не "крутость", всегда используется хранилище 1с - хоть и фигня на палочке, но какая-никакая совместная разработка, да и все изменения в конфе перед глазами с историей и ответственными.
90. YVolohov 721 18.04.12 18:08 Сейчас в теме
А вы, друзья, как ни садитесь Всё в музыканты не годитесь


... из процедурного языка объектный не сделаешь никакими ухищрениями. А вот потребность в нем огромная. Кто пытался разбирать процедуры в 50 экранов кода в УПП, тот меня поймет. Кроме того очень нужен механизм автодокументирования, подобный JavaDoc. А то в типовых документированы дай Бог если 10% всех функций, да и то достаточно криво. Остальные - догадайтесь сами (предположительно по названию), что же они делают и нафик нужны вообще.
92. Stamper 43 18.04.12 18:15 Сейчас в теме
(90) YVolohov, на тему документирования -- не забываем пользоваться "Шаблоны текстов". никакая технология не заменит организованность разработчика
93. YVolohov 721 18.04.12 18:20 Сейчас в теме
(92) Шаблоны текста не имеют никакого отношения к документированию. Это инструмент, позволяющий более эффективно повторно использовать код.
Насчет организованности разработчика - организованность конечно замечательная вещь, но если в 1с я должен делать руками то, что другие системы позволяют сделать в автоматическом режиме, то это минус для 1с.
95. YVolohov 721 18.04.12 18:23 Сейчас в теме
(93)+ Добавлю, что платформа документирована прекрасно. Синтакис-помощник отличный инструмент. Здесь у меня никаких претензий.
96. alexk-is 6533 18.04.12 18:24 Сейчас в теме
97. YVolohov 721 18.04.12 18:26 Сейчас в теме
(96) Лучше уж вообще без рук, даже прямых. Чтобы нажал кнопку "Сделать все" и все сделалось :)))
98. Stamper 43 18.04.12 18:32 Сейчас в теме
(93) YVolohov, что-то мы слишком много говорим о том, чего в 1С нет.
а давайте обсудим то, что есть! а за одно прикинем, во что встанет разработка хотя-бы Регистра бухгалтерии на Java. я уж про регистр расчета не говорю :)
168. zfilin 2337 22.04.12 15:12 Сейчас в теме
(90) YVolohov, Автодокументирование это миф, мне кажется. Код должен быть самодокументирующимся, спросите у Макконнелла.

(91) Stamper, Коллега, я понимаю ваше возмущение, но давайте будем объективными и не будем впадать в крайности ради желания разделаться с оппонентом. Если мы возьмем хранилище конфигурации и те же инструменты SVN, то SVN наголову бьет хранилище возможностями мерджа, например. Что на самом деле очень важно сразу после версионности и поддержки разных бранчей. Мне кажется, что "хранилище" это только личинка полноценной системы контроля версий, ей еще развиваться.
А еще, если уж совсем по-честному, 1С не постеснялась хранить свои данные с помощью MSSQL (а теперь еще и в куче других движков БД) и я не вижу причин по которым 1С-у не хранить бы свои исходники в том же SVN или git. Точнее, причины я, конечно вижу, но иногда хотелось бы, чтобы все было иначе...

Про остальные инструменты, вроде "инструментального пакета" я осведомлен меньше, но на первый взгляд мне оно все показалось сыроватым. Но, спорить не буду. Может недоглядел.

А далее безусловно. Redmine и Mantis. С Jirой не сложилась любовь, внешне не понравилась. Хотя, сейчас жалею. К mantis нет хорошего плагина для организации управления тикетами, как то рекомендует scrum. Пришлось делать "закат солнца вручную".
169. Stamper 43 22.04.12 15:17 Сейчас в теме
(168) zfilin, just for $m's
очков заработал немеряно =)

вы же наверняка знаете, что споры в интернете очень похожи на участие в специальной олимпиаде...
173. zfilin 2337 22.04.12 16:04 Сейчас в теме
100. romansun 193 18.04.12 18:53 Сейчас в теме
>>Самый очевидный пример - сертификат "1С:Эксперт по технологическим вопросам" - один из самых весомых (если не самый весомый), в котором от 1С одно название, похоже, осталось

в нашей конторе такими техническими вопросами занимается штат системщиков и сетевиков.
хотя, это конечно исключение


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

Например, билет №3


Я лишь хотел сказать, что 1С-ный мир не слишком открыт именно благодаря своей самодостаточности. И многих классных штук в 1С нет. Хотя при разработках особенно крупных систем они были бы весьма кстати.
101. Stamper 43 18.04.12 18:56 Сейчас в теме
(100) romansun, так в чем же дело?!
http://kb.mista.ru/article.php?id=56
http://infostart.ru/public/20035/
разрабатывайте! и будете иметь уважение
102. romansun 193 18.04.12 19:03 Сейчас в теме
а тестирование, кстати, ваще больная тема

свежий опрос на ИС показывает, что особо никто ничего не тестирует (тестят только непосредственную функциональность написанного кода)

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

и, главное, эту ситуацию исправить очень сложно уже

(100) ВК? не, это зыбкий путь... :)
104. Stamper 43 18.04.12 19:09 Сейчас в теме
(102) romansun, так это уже проблема не платформы, а урезанных штатов и бюджетов. я отдельной позиции "тестировщик" ни в одном франче не встречал. только в АБИ ЕЕ, но они же разработчики, а не внедренцы.

ВК? не, это зыбкий путь...

стонать в каментах путь всяко более годный *sarcasm*
108. romansun 193 18.04.12 19:39 Сейчас в теме
(104)

не стонал и не стенал я, неправда ваша

мой первый коммент (89) был адресован скорее тем, кто говорит, что нам ничо не надо - 1С всё даёт и так. Это ж неверные мыслеформы? Я кратко описал почему так думаю - сфера применения 1С расширяется и разработчикам становится недостаточно каких-либо исконно 1С-ных механизмов и методик. Поэтому пробуют применять что-то еще...

только и всего :)
sergathome; +1 Ответить
109. Stamper 43 18.04.12 19:44 Сейчас в теме
(108) romansun, уж извините -- все телепаты в отпуске
110. sergathome 4 18.04.12 19:59 Сейчас в теме
(108) romansun, любому среднестатистическому ежу понятно, что на сказаное "А" будуД ждать "Б". Однако, находятся индивидуи, имеющие супернаглость с этим спорить. (мотивацию не обсуждаю бай дефолт). Понятно также, что ЦеПэПэ отражает развитие сей мысли приблизтельно так же, как хирургия сисек кардиохирургию. Есть эталоны. ЛИСП тот же. Нет, им так неудобно спорить... ;))
111. Stamper 43 18.04.12 20:05 Сейчас в теме
(110) sergathome, а что такое ЦэПэПэ?
170. zfilin 2337 22.04.12 15:29 Сейчас в теме
(102) romansun, Ага! О тестировании заговорили! А потому, что в "обычных" задачах требуется тестировать то, что в 1С работает в любом случае. Например, тот же вывод какого-нибудь хитроунаследованного компонента. А в 1С, если кнопка на форме есть - все, баста! Она есть. И унаследоваться от кнопки и получить "мою-супер-кнопку-с-рюшками", чтобы ее потом тестировать, не получится по-определению. Потому объем тестирования должен быть меньше. Вы ж не будете тестировать в C++ оператор "<<". (Хотя, учитывая, что его можно "перегрузить"...=) И это первая проблема (или достоинство, если хотите).
А второе - это тестирование модулей работающих с БД. Разработчики плачут горючими слезами, выдумывают MOCK-объекты, колются но продолжают жрать кактусы. В смысле тестировать. Никто не любит тестировать модуль работающий с БД. А если учесть, что конфигурация 1С это на 90% и есть "модуль работающий с БД", да еще и с очень ограниченным набором инструментов... Вообщем все плохо.
Да! Должен сказать, что это я больше о unit-тестировании. Понятно, что сценарное и интеграционное тестирование работает как всегда отлично, было бы кому писать сценарии. И инструменты можно брать почти любые, нажимались бы кнопочки.
178. AlexO 135 26.04.12 15:22 Сейчас в теме
(170) zfilin,
вы считаете, что джае кнопочки - кнопочки!, - прекрасно и без нареканий работают в 1с? и ничего не надо тестировать и следить за работой платформы?
И по компонентам, работающими с БД. В 1с НЕТ В ПРИНЦИПЕ компонентов, работающих с БД. Она сама "подменяет" БД ("ну не шмогла я, не шмогла..") и выступает в роли и СУБД, и инструментария по БД.
А всяких компонентов работы с базами ой как не хватает в 1с....
113. sergathome 4 18.04.12 20:07 Сейчас в теме
* ЦеПеПе = CPP = C++
тьт
В рамках холивара - ООП в рамках дохлозаврового (трупа страуса(ещё расшифровать ?))нечитабельно по сравнению с той же жабой. Не говоря уже об эталонах. Которые ваши сподвижники КРАЙНЕ не любят вспоминать ;))
218. AlexO 135 23.05.12 16:27 Сейчас в теме
(113) sergathome,
* ЦеПеПе = CPP = C++
тьт
В рамках холивара - ООП в рамках дохлозаврового (трупа страуса

да... а почему не ПолуОвал-крест-крест? тоже не избито и свежо.
Т.е. шинель всех современных языков ООП - это дохлозавр?
интереснейшие вещи выдают 1с-ники, если копнуть поглубже...
121. awk 741 18.04.12 22:01 Сейчас в теме
(0) Я пишу не только на 1С, но любители ООП объясните мне как вы собрались разруливать ситуацию:

От документа ПКО мы унаследовали МайПКО, добавив реквизит мЛевойНогиИПравогоУха, вопросы на данном этапе:

1. В какой таблице должны хранится реквизиты МайПКО?
2. А унаследованные от ПКО?

Ну ладно путь вы ответили на данный вопрос, но... Но 1С взяла и изменила ПКО добавив реквизит мЛевойНогиИПравогоУха. Вопросы:

1. Как бороться с конфликтов имен?
2. Когда вы узнаете об ошибке?

Допустим вы справились с конфликтом имен, но 1С опять выпускает релиз где результат унаследованного, но не переопределенного вами метода меняет тип. Вопросы:

1. Когда вы узнаете об ошибке?
2. Кто заплатит за простой оборудования?

Сторонники ООП вы никогда не задумывались о том почему идет завязка на версии библиотек? Да потому что в пределах версии не меняется интерфейс. Вы готовы предложить бухгалтеру даунгрейд 1С:Бухгалтерия 2.0.х.х на 2.0.у.у, по причине что в новом релизе не работают созданный вами функционал?

P.S. Ложка хороша к обеду. Не нужен сейчас на 1С ООП. Там без него функционала хватает, хотя не хватает то же многого. Но ООП - это последнее, что бы я туда прикручивал. А любители поводить машину так же как вертолет рискуют оказаться в канаве, пытаясь по привычке ее перелететь.
Damian; Yashazz; Циник; gaglo; fishca; Арчибальд; +6 Ответить
123. orefkov 1152 19.04.12 01:05 Сейчас в теме
(121)
Можно подумать, сейчас в 1С без ООП эти ситуации разруливаются легко и непринужденно...
zfilin; JohnyDeath; sergathome; +3 Ответить
128. awk 741 19.04.12 09:15 Сейчас в теме
(123) orefkov, Мое почтение. А какое должно быть наследование? Множественное как С++ или простое как Java, C# и т.д.

Сейчас вопрос с доп. реквизитом решается крайне просто. Регистр сведений: Измерение - объект, ресурс - мЛевойНогиИПравогоУха + копипаст формы с ее изменением и вуаля. Ну может еще подписку на событие проведения добавить для изменения бизнес-логики. Полиморфизм во всей красе.

Я понимаю, что копирование - враг программирования, но... Но ведь работает и не плохо. А ведь есть области где ваш ООП и близко не подпустят. Это, например, драйверы промышленного оборудования. Там во всю царствуют Си и Симантек.

С# и Java не с первой редакции, но ввели sealed классы. То есть классы унаследоваться от которых невозможно. Да и вся литература по этим языкам пестрит: "Класс должен быть окончательным, а наследуемые классы должны разрабатываться с особой тщательностью".

(126) Арчибальд, да скорее всего именно так.
129. orefkov 1152 19.04.12 10:14 Сейчас в теме
(128)
Писать с ООП или без ООП - это скорее всего, вопрос организации ума у каждого человека. Кто-то вникает в ООП и ему удобнее с ним, кто-то не вникает, ему кажется не удобно. Это как левшу заставлять есть правой рукой - можно, но ему не комфортно. Мне удобнее с ООП. И слава Deb'у, в клюшках этот вопрос был решен. В своей рабочей конфе вся важная логика поведения документов у меня была сделана на классах. К примеру, класс ПриходКонс, наследник от ПриходнаяНакладная. Весь его код был:
// ПриходКонс
// Класс шаблона проведения прихода консигнационного товара

// Переопределяем статус прихода
Функция СтатусПрихода() Экспорт
	Возврат "П";
КонецФункции

// Взаиморасчеты не возникают
Функция СчитатьВзаиморасчеты() Экспорт
	Возврат 0;
КонецФункции
Показать

Глядя на этот код, сложно ли понять, чем приход консигнационного товара отличается от обычного прихода?
Начал недавно пристальнее изучать код 8ой бухии - во многих доках появился реквизит ВидОперации, влияющий на логику поведения документа. То есть например, для списания с расчетного счета можно выбрать - "ОплатаПоставщику" или "ВозвратПокупателю", или "ПеречислениеНалога" и т.п. Реализуется унутре кучей "ИначеЕсли ВидОперации =....". Например,
	Если ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога
		ИЛИ ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПрочееСписание  
		ИЛИ ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПереводНаДругойСчет Тогда


или

		ЕстьРасчетыСПоставщикамиПокупателями = 
			(ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ОплатаПоставщику)
			ИЛИ (ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ВозвратПокупателю);

Показать


На клюшках с 1C++ подобная возможность (для дока указывать вид операции) у меня была сделана еще в 2003 году.
И никаких кучек "Если". Для каждого вида операции - два своих класса, которые наследуются от общих базовых, переопределяя некоторые их функции. Один класс для проведения, второй для формы. Вот например, приход на ответ.хранение:
// ПриходОтветХранение
// Класс шаблона проведения прихода товара на ответхранение

// Переопределяем статус прихода
Функция СтатусПрихода() Экспорт
	Возврат "Х";
КонецФункции

// Взаиморасчеты не возникают
Функция СчитатьВзаиморасчеты() Экспорт
	Возврат 0;
КонецФункции
Показать

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


Теперь за С и драйвера.
Из больших проектов на С мне пришлось боле-менее плотно поработать с двумя - sqlite и ядро линукса.
Теперь у меня есть стойкое мнение, что любой большой и гибкий проект на С содержит внутри себя самодельную, кривоватую, велосипедистую реализацию ООП. Модули ядра линукса и подключаемые модули sqlite - классический пример реализации ООП доморощенными методами С - с базовой структурой с данными, и таблицей указателей на функции (по сути - виртуальные функции из С++). Да практически все драйвера в операционках - суть объекты в терминологии ООП. Дают системе указатель на свои данные и указатель на таблицу, где лежат адреса функций обработчиков, в которые потом этот же указатель на данные идет первым параметром.
В sqlite и fossil куча функций вида
int blob_is_reset(Blob *pBlob)
void blob_init(Blob *pBlob, const char *zData, int size)
void blob_set(Blob *pBlob, const char *zStr)

или

void sqlite3HashInit(Hash*);
void *sqlite3HashInsert(Hash*, const char *pKey, int nKey, void *pData);
void *sqlite3HashFind(const Hash*, const char *pKey, int nKey);
void sqlite3HashClear(Hash*);
Показать

что это, как не кривая запись сиплюсплюсных конструкций
int Blob::is_reset()
void Blob::init(const char *zData, int size)
void Blob::set(const char *zStr)

или

namespace sqlite3{
void Hash::Init();
void *Hash::Insert(const char *pKey, int nKey, void *pData);
void *Hash::Find(const char *pKey, int nKey);
void Hash::Clear();
}
Показать

А то что там кучка академиков гнобят ООП - так мне фиолетово.
Они привыкли в тиши кабинетов корпеть на программками, которые получают на вход один набор данных, и выдать на выход результат обработки. Там им конечно, ООП только мешает - использовать бензопилу для намазывания масла на бутерброд можно, но неудобно. Но вот когда надо завалить сотку леса - берется таки бензопила, а не столовый ножик.
steban; JohnyDeath; EarlyBird; zamichnik; Stamper; +5 Ответить
135. awk 741 19.04.12 11:46 Сейчас в теме
(129) orefkov,
1. В коде 1С не увидел ООП совсем.
2. Не надо про функции обратного вызова. Они к ООП имеют такое же отношение как нож к вилке.
3. Это не кривая запись Си++. Более того, посмотри на реализацию методов любого класса. Они только по синтаксису для каждого объекта свои. По реализации один метод, на все объекты. Так что мМля.Инит() и Инит(мМля) по сути одно и то же. Или как сказал Мерлин Менсон маме, на ее замечание, что ей его друзья не нравятся: "Поешь салатику".
136. orefkov 1152 19.04.12 11:55 Сейчас в теме
(135)
Извини, судя по твоим пунктам, ты просто не понимаешь сути ООП.
Времена, когда я с пеной у рта пытался что-то кому-то доказать, прошли.
Считаете ли вы нужным в 1С ООП или не считаете - для меня ровным счетом ничего не измениться.
Когда и если мне будет оно нужно в 8ке - оно там будет.
137. awk 741 19.04.12 12:14 Сейчас в теме
(136) orefkov, Не совсем так. Я просто снял розовые очки, и не считаю, что ООП панацея от всех бед. Там где ООП было заложено при проектировании - ООП благо. Где ООП это костыль - зло. Касается это не только 1С, в PHP 4 ситуация такая же. Да и в PHP 5 не далеко ушли.
138. BorisMor 310 19.04.12 12:40 Сейчас в теме
(137) awk, Но современное профессиональное программирование на php все "стоит" на фреймворках. И они вовсе не процедурные. И концепция MVC там что не есть популярна. А вспомните с чего начиналось? Ужасная смесь html и php кода.
139. awk 741 19.04.12 13:17 Сейчас в теме
(138) MVC - это не ООП - это шаблон проектирования. Я пишу на PHP. В джаве применять ООП удобнее. Да и запутанность некоторых фреймворков иногда до бешенства доводит.
140. BorisMor 310 19.04.12 14:12 Сейчас в теме
(139) awk, MVC привел как пример использования ООП в благих целях) Переход от спагетти к нормальном приложениям.
А про запутанность фреймворков - возможно. Но лучше с ними чем без них.
141. awk 741 19.04.12 14:22 Сейчас в теме
(140) Я считаю, что если нужен мерседес, то надо разоряться на мерседес, а не покупать запорожец, брать напильник и переделывать его в мерседес.
147. hogik 443 19.04.12 19:29 Сейчас в теме
(129)
Александр (orefkov).
Почему Вы в своей разработке 1sqlite не используете "замечательные" методы FX_...() ?
149. orefkov 1152 19.04.12 20:28 Сейчас в теме
(147)
Потому что работаю напрямую с буфером записи.
150. hogik 443 19.04.12 21:39 Сейчас в теме
(149)
Александр (orefkov).
:-)
А почему Вы работаете напрямую с буфером записи?
Ведь есть такие "удобные" методы FX_...().
152. orefkov 1152 19.04.12 23:37 Сейчас в теме
(150)
1sqlite я бы предпочел обсуждать в ветке обсуждения 1sqlite.
153. hogik 443 20.04.12 00:36 Сейчас в теме
(152)
Александр (orefkov).
Я и не пытаюсь обсуждать 1sqlite.
Я задаю Вам конкретный вопрос по Вашему примеру об ООП из (129) сообщения. Т.к. пример о "Blob" полностью совпадает с "проблемой" использования методов FX_...() в интерфейсе DBF-ного движка "1С 7.7". Т.е. искусственное притягивание ООП к задаче, где ОНО абсолютно не нужно и только усложняет программирование и делает его менее гибким (ориентирует на конкретику) ради "внешней формы".
Для пояснения своего утверждения приведу пример описания функции из некой СУБД:
Skips the given number of records.
Syntax:
UNSIGNED32 xSkip (ADSHANDLE hObj, SIGNED32 lRecs);
Parameters:
hObj - Handle of table, cursor, or index order.
lRecs - Number of records to skip (can be negative).
Т.е. для данной функции безразлично как получается просматриваемое множество записей - запросом или навигационным доступом. Аналогично и Вашему примеру с "Blob" и методам FX_...() - абсолютно не нужна конкретика о типе поля БД в тексте программы. Т.е. как в Вашем пример, так и в "движке" 1С-а это всего ОДНА функция - получить/установить значения поля для ВСЕХ типов полей. Нет тут нужды в "кривой записи" вызова обычных функций ООП-шными конструкциями.
154. orefkov 1152 20.04.12 01:49 Сейчас в теме
(153)
Владимир, пять раз перечитал твой пост, так ничего и не понял.
Наверное, это из-за того, что ты тоже не совсем понял (129).
Совершенно непонятно, как обычные функции FX.., предназначенные для чтения данных из буфера записи, связаны с ООП и с примером кода про Blob.
155. hogik 443 20.04.12 02:39 Сейчас в теме
(154)
Александр (orefkov).
"Совершенно непонятно, как обычные функции FX.., "(с)
Это не функции, а - методы. В которых расписаны все варианты типов данных в БД и "типов" параметров. Их около 30 штук. В именах методов присутствует тип данных БД. Чтобы получить значение конкретного типа поля БД следует вызывать "одноименный" метод. Т.е. в исходном тексте программы "прописывается" жесткая привязка типа поля к имени функции. При таком подходе очень сложно разработать универсальные алгоритмы обработки данных. Ваш пример про "Blob" полностью повторяет эту методику программирования. Как в "постановочном" примере из "sqlite и fossil"(с), так и Вашем предложении использовать ООП-конструкции для работы с полями БД. Даже, еще больше конкретизирует (сужает) методику работы с информацией. Возможно, путано я это излагаю.
Но, приведу абстрактные примеры. От конкретики к общему. ;-)
1) Х=Таб.ИмяПоляБД
2) Х=Таб.GetNumeric("ИмяПоляБД")
3) Х=Таб.Get("ИмяПоляБД")
4) Х=Get(Таб,"ИмяПоляБД")
5) Х=Get("ИмяТаблицы","ИмяПоляБД")
Только последний вариант даёт возможность писать алгоритмы не зависящие от данных. И это очень далеко от ООП-конструкций. ;-)
126. Арчибальд 2706 19.04.12 08:00 Сейчас в теме
(121) awk, думается, это частная иллюстрация к моему посту 50. В том смысле, что наследование для разработчиков платформы - это одно, а для прикладников (программистов - пользователей платформы) - совершенно иное, причем, скорее, вредное. Ни сейчас, ни позже прикладникам не нужно наследование (если я и ошибаюсь в этом, то ненамного).
alex_shkut; gaglo; +2 Ответить
219. AlexO 135 23.05.12 16:37 Сейчас в теме
(121) awk,
От документа ПКО мы унаследовали МайПКО, добавив реквизит мЛевойНогиИПравогоУха
...
Но 1С взяла и изменила ПКО добавив реквизит мЛевойНогиИПравогоУха
...
но 1С опять выпускает релиз где результат унаследованного, но не переопределенного вами метода меняет тип

Вот Вы, "програмирующий на разных языках", знаете разницу между разработкой классов и "реквизита мЛевойНогиИПравогоУха" у какого-то программиста для МайПКО?
1с только тем и занимается, что меняет все, что можно поменять, причем зачастую не за ради улучшения, убыстрения или удосбтва, а токмо чтобы запустить очередной процесс "меняния" (обновлений).
И придумать какую-нибудь ерунду, и найти лучшего способа проверить жизнеспособность этой ерунды, как только вбросить её в коммерческое использование.
А уж по то, что реквизит в КЛАССЕ меняет тип... такое реализуется только у 1с, которой плевать на все совместимости и мнение об её поделке.
222. awk 741 23.05.12 17:03 Сейчас в теме
(219) AlexO,
Вот Вы, "програмирующий на разных языках", знаете разницу между разработкой классов и "реквизита мЛевойНогиИПравогоУха" у какого-то программиста для МайПКО?
Да, знаю.

1с только тем и занимается, что меняет все, что можно поменять, причем зачастую не за ради улучшения, убыстрения или удосбтва, а токмо чтобы запустить очередной процесс "меняния" (обновлений).
И придумать какую-нибудь ерунду, и найти лучшего способа проверить жизнеспособность этой ерунды, как только вбросить её в коммерческое использование.
Это субъективно.

А уж по то, что реквизит в КЛАССЕ меняет тип... такое реализуется только у 1с, которой плевать на все совместимости и мнение об её поделке.
:) мало вы с другими системами разработки знакомы. Еще как меняются.

1С великая фирма. Она родила класс людей килограмм мозга которых стоит 1000$. Если сравнивать с людьми знающими другие языки, то килограмм мозга программиста C# стоит 30$, программиста C++ 50$.

Почему, килограмм мозга программиста 1С стоит так дорого?

Да потому что: сколько же нужно найти программистов 1С, что бы насобирать на этот килограмм.

И этим людям вы хотите дать ООП?

P.S> Надеюсь никого не обидел, я и сам пишу на 1С.
kittwell; +1 Ответить
124. Webvemon 19.04.12 01:41 Сейчас в теме
а я считаю что было бы неплохо если 1с имела бы возможность ООП, было бы больше возможностей для роста
130. cool.vlad4 2 19.04.12 11:04 Сейчас в теме
Честно говоря я в вашей статье ООП не увидел. Соответственно зачем нужен, да еще и в 1С, - не убедили. Из чего состоит ООП - из полиморфизма,наследования, инкапсуляции, а также из способности выделять (абстрагировать) объект программистом. Что такое 1С? Это язык общего назначения, основной стиль(или парадигма) которого - процедурный + некий набор бизнес библиотек, упрощающий написание бизнес приложений. Так, что чисто теоретически можно на нем создавать видимость ООП. Коряво и некрасиво, на мой взгляд, но можно. Вопрос, зачем? А зачем ООП вообще? На мой взгляд - это отличный инструмент даже не столь кодирования программы, сколько построения её архитектуры. Вы берете задачу, - пытаетесь решить её в уме(или на бумажке), пишете алгоритм, -> разбиваете на подзадачи и т.д. Пока, что ООП нет. Потом при проектировании системы в целом приходит осознании того, что есть некие вполне выделяемые сущности - классы и т.д. Так строится система в целом, определяются методы, поля и т.п. Мое мнение такое, что все это прекрасно работает для 1) большой системы и когда кода относительно много, сколько сказать не могу, - но это не пара строк как в статье. 2) когда вы точно знаете(или спроектировали) систему в целом, но потом будете если, что её менять. Для каких-то чисто функциональных вещей оно нафиг не надо, т.е. нужно четкое понимание когда нужен новый класс, а когда нет. Можно написать еще кучу строк, да и парадигм всяких много - стилей тоже, - у меня лишь складывается впечатление 1) что нельзя быть категоричным, все относительно 2) конкретно про 1С - предсказываю, что язык они менять коренным образом не будут. Смысла особого нет. Есть куча других проблем. Так, что придется делать именно все своими руками.
131. orefkov 1152 19.04.12 11:12 Сейчас в теме
(130)
Да не надо никаких объяснений, зачем в 1С ООП. Человек знакомится с ООП и либо он его понимает, и ему с ним проще (и зачастую даже без него ему уже никак), либо он его не понимает - и соответственно ему оно не надь.
Это как левши и правши. Большинство отлично работает правой рукой, но левшам это не понятно, им проще левой.
А одинэсники - это люди, которым правую руку отпилили с рождения, поэтому очень сложно им объяснять, чем правая рука удобнее. У них просто нет выбора.
132. cool.vlad4 2 19.04.12 11:19 Сейчас в теме
(131)
Да не надо никаких объяснений, зачем в 1С ООП.
ну в таком случае не надо объяснять кому чего надо, а кому не надо и уж тем более тогда зачем статья и о чем? О чем 132 поста в этой теме?
Это как левши и правши. Большинство отлично работает правой рукой, но левшам это не понятно, им проще левой.
А одинэсники - это люди, которым правую руку отпилили с рождения, поэтому очень сложно им объяснять, чем правая рука удобнее. У них просто нет выбора.
Удобно то, что человеку считает удобным. Агитировать тогда никого не надо. И уж тем более считать одних людей ущербнее других по неким ярлыкам.
133. orefkov 1152 19.04.12 11:23 Сейчас в теме
(132)
Я нигде не утверждал, что один подход ущербней другого.
И зачем полемику развели на 100+ постов, тоже искренне не понимаю.
145. WKBAPKA 214 19.04.12 19:10 Сейчас в теме
(130) cool.vlad4,

менять не будут, наверное, т.к. четкая направленность на пользователя, чем на проф. программиста...
но когда читаешь код типовых, хочется там всех поубивать
189. AlexO 135 27.04.12 00:47 Сейчас в теме
(130) cool.vlad4,
Вопрос, зачем? А зачем ООП вообще? ...Смысла особого нет.

Ну да, нет смысла в ООП в 1с... и поэтому я не могу сейчас программно создать стандартные кнопки на форме - и даже повторить их не могу без изврата, - в 1с нет ООП, нет наследования событий, нет подключения к объектам, и "никому оно там не нужно"....
134. ZLENKO 398 19.04.12 11:30 Сейчас в теме
Мда... "жирную" тему автор поднял для холивара :-)
142. Yury1001 1470 19.04.12 15:07 Сейчас в теме
С точки зрения программиста прикольно написано, но 1С это не язык программирования, это проблемно-ориентированная среда разработки и исполнения со встроенным языком, который во многом напоминает макрокоманды. В связи с чем претензии не уместны.
143. awk 741 19.04.12 16:01 Сейчас в теме
(142) Yury1001, Угу вообще статья напоминает что-то вроде:

Первое что поразило при знакомстве с английским языком, так это отсутствие русских слов. Никаких тебе цветы, или любовь. А ведь как жить без любви? Ведь если писать стихи, то в 90% они о любви.

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

(0) Прошу прощенья, но не удержался...
Nuobu; WhiteOwl; Spi1y; MaxDavid; gaglo; JohnyDeath; EarlyBird; Арчибальд; hogik; mtv:); Stamper; BorisMor; larisab; Yury1001; +14 Ответить
146. MaxDavid 127 19.04.12 19:20 Сейчас в теме
Тут проблема скорее философская, нежели научная (сиречь - воспроизводимая). Просто некоторые программисты предпочитают из максимально вариативного набора средств выбирать и подстраивать под себя нужное, а некоторые - из минимума необходимых средств создавать необходимое. То есть один подход - подстраивать под себя существующие условия, другой - приноравливаться к ним. И тот и другой подход, в принципе, понятен, и, в общем, принципиальной разницы тут нет. Какой подход наиболее адекватен в отношении 1С, а точнее, в отношении к ее прикладным задачам (не программистским, а именно прикладным, то есть практическим) - доказано практикой.
Психологически 1С заточено под вторую категорию. Мало кто ждет от 1Сника, что он начнет прогибать бизнес-процессы под типовую конфигурацию, скорее наоборот - все надеются, что он приспособит программу с ее ограниченными возможностями под хотелки заказчика. В этом случае более выигрышен второй подход.
hogik; Арчибальд; +2 Ответить
148. alex_shkut 62 19.04.12 19:33 Сейчас в теме
Добросовестно прочитал все посты. Несомненно, в статье есть смысл. Только вот каков процент потенциальных "программистов"? Кто прав, кто неправ? Все по-своему правы. Однако примем во внимание некоторые моменты.
Насколько я понимаю, Конфигуратор не среда программирования, а именно конфигуратор.
1. 8-ка унаследовала многие "детские болезни" от 7-ки для сохранения идеологии и преемственности.
2. А чего стоит полностью переписать всю логику платформы "с нуля", всегда легче использовать старое, а потом патчить.
3. Примите во внимание сложности, когда необходимо быстро пересадить если не миллионы, то сотни тысяч бухов и программеров на новую платформу? Как бы вы поступили? Нельзя сразу давать людям нечто революционное. Это не примут.
4. ООП полностью должно реализовываться в платформе, а франчу остается возможность только уточнять бизнес-логику.
Пример: бизнес-процессы, управляемые формы и многое, чего не было в 8.0.
5. С помощью "танцев с бубном" можно реализовать подобие ООП например подпиской на события и переопределением данных.
И представьте себе скорость создания, выполнения всех этих классов переклассов описанных на русском VB.
Одна из "самых" продвинутых в мире систем написана еще в 70-е, и я не заметил там ООП для франча. Вся ООП уже заложена в платформу.
ИМХО: Для 1С как состоявщейся системы нет необходимости в ООП. Круг программистов, которые смогут сделать хоть что-то полезное резко сократится. Время подготовки и стоимость резко возрастет... со всеми вытекающими. Это еще и маркетинг. Не нужно усложнять то, что для этого не предназначено.
И еще: я бы сравнил 1С с Windows - и то, и то сделано "для домохозяек" без лишних сложностей. Потому и продается.
Это тема для целой книги, и спорить на эту тему тут абсолютно нет смысла.
172. zfilin 2337 22.04.12 15:56 Сейчас в теме
(148) alex_shkut, Товарищ! Вот вы сейчас точно рассуждаете с позиции сотрудника компании 1С.
Я думаю, что большинство их тех, кто так яростно высказываются за или против ООП имели опыт поддержки живой системы (в любом виде) и сталкивались с ситуацией, когда убытков при внедрении каких-то изменений перевешивают потенциальную пользу от изменений. И представляют себе то, что вы описываете.
Но это на первый взгляд. Современная IT-индустрия, я надеюсь, изжила эту болезнь. Что явно демонстрирует нам упомянутый microsoft штампующий каждые пару лет новую винду и при этом не ноющий о том, что "ой-ой-ой! а как же пользователи бедные-несчастные будут менять виндоуз, отказываться от старого привычного".
То, что вы описываете, давно уже лечится. Обратной совместимостью в ограниченном объеме. Во-вторых никто даже сейчас не мешает использовать 1cv6 (и используют!) если нововведения оказываются не приемлимыми. Да, мало ли еще технологических, маркетинговых и прочих способов. Проснитесь, 21-й век уже.
Арчибальд; jONES1979; +2 Ответить
188. AlexO 135 27.04.12 00:37 Сейчас в теме
(148) alex_shkut,
1. 8-ка унаследовала многие "детские болезни" от 7-ки для сохранения идеологии и преемственности.

о да, преемственность и идеология между 7 и 8 версиями конечно соблюдена )))
2. А чего стоит полностью переписать всю логику платформы "с нуля", всегда легче использовать старое, а потом патчить.

как раз 1с переписывается каждый раз - 7, 8.0, 8.2...
3. Примите во внимание сложности, когда необходимо быстро пересадить если не миллионы, то сотни тысяч бухов и программеров на новую платформу? ....Нельзя сразу давать людям нечто революционное. Это не примут.
1с как раз и занимается только тем, что ломает все старое, и предлагает "новое, революционное", как она понимает на текущий момент - вернее, в соответствии с текущей любимой игрушкой 1с (регистры, УФ, облака...)
4. ООП полностью должно реализовываться в платформе, а франчу остается возможность только уточнять бизнес-логику.
Пример: бизнес-процессы, управляемые формы и многое, чего не было в 8.0.
а где еще реализовать ООП, ка кне в среде программирования (конфигураторе)? У вас есть другие претенденты из модулей платформы 1с для реализации ООП?
5. С помощью "танцев с бубном" можно реализовать подобие ООП например подпиской на события и переопределением данных.

причем тут подписки и ООП? вернее, как их можно сравнивать? Подписки - это костыль подключения в событиям "объектов"; ООП же - это определенная иделогия программирования, в том числе включающая обработку и создание событий разных объектов, кроме всего прочего. ООП - это не только объекты, это прежде всего работа с ними, а в 1с используются только статичные объекты, никак на объектном уровне не взаимодействуюшие между собой. Поэтому ООП в 1с и близко не наблюдается.
И представьте себе скорость создания, выполнения всех этих классов переклассов описанных на русском VB....
Дальше вы проcто перечисляете какие-то термины (ООП, платформа, Windows, "домохозяйки"), не утруждая себя разбираться в связях перечисляемых сущностей.
"Одна из "самых" продвинутых в мире систем написана еще в 70-е", "ООП для франча", "вся ООП уже заложена в платформу" - или потрудитесь объяснить эти бессмысленные монстры-фразы, или не употребляйте того, чего не знаете :)
И весь ваш пост, разобранный мной здесь - перевертыш настоящего положения дел, КАЖДЫЙ пункт. Будем считать, что вы это от незнания, а не специально вводите в заблуждение ))
151. nirbolz 31 19.04.12 22:40 Сейчас в теме
Да эти все классы, ООП, меня в институте достали, поэтому я и пошел изучать 1с, достали эти классы. Сложно в них разбираться...
156. EarlyBird 6 20.04.12 08:03 Сейчас в теме
Восхитительный пятничный диспут, коллеги!
Просто бальзам на душу!
157. 1cKiller 105 20.04.12 08:33 Сейчас в теме
Хорошая статья, однозначно плюс.

Хотелось бы отметить, что в типовых конфигурациях есть зачатки ООП:

обработка СерверТО,
УниверсальныйОбменДаннымиXML - эту обработку можно принять как класс, объекты которого мы создаем для вызова методов загрузки и выгрузки
УниверсальныйОтчет, у которого есть свойство Построитель - аналог наследования.
160. slimper 201 20.04.12 14:00 Сейчас в теме
Такая горячая дискуссия по поводу ООП,по моему мнению, указывает на то, что 1С-программисты в большинстве своем страдают комплексом неполноценности. По аналогии с автомобилестроением - есть конструкторы(разработчики), которые создают автомобиль с нулевого цикла до готовой модели, и есть люди, работающие на станциях ТО.Они тоже делают нужное дело, но по отношению к первым они вторичны. Ведь так хочется ощущать себя творцом, способным сделать продукт любой сложности, а приходится подкручивать гайки на чужих машинах.
162. AlexO 135 20.04.12 14:06 Сейчас в теме
(160) slimper,
если продукт неполноценен - это накладывает ограничения и на тех, кто его пользует ))
со всеми вытекающими комплексами ))
jONES1979; +1 Ответить
164. aim 20.04.12 15:54 Сейчас в теме
о чем статья-то?
Чушь какая-то! Я тоже увидел в своем пальце зачатки ракеты "стингер". А чё -- форма, поражающее действе, соизмеримое с масштабом... Я и системным блоком могу гвозди забивать. Ну и что? "СписокЗначений" -- это что- пуп земли в ООП чо-ли?
165. kuza_87 28 22.04.12 07:28 Сейчас в теме
статейка интересная. автору спасибо,повеселил
167. jONES1979 22.04.12 10:08 Сейчас в теме
Автору спасибо и "+" за статью.

В своё время поработал в Турбо-Бухгалтере/ТБ.Корпорации - вот там есть "наследование". И вообще всё продумано, элегантно и при этом работает.
174. Yashazz 4709 24.04.12 23:49 Сейчас в теме
Грамотный, прозрачный, чёткий и оптимальный код - не обязательно ООП. Эти понятия не равны. Не надо делать из 1С монстра, из 1с-ников тупорылых кодеров, а из ОПП икону. Некоторые на пятом Паскале такое делали, чего и на си-шарпе не все достигают, в смысле простоты, гибкости и читабельности. Считаю, что ООП в полном виде в 1С просто не нужно. Думать надо, когда архитектуру кода строишь, независимо от инструментария, и мне, например, отсутствие наследования не сильно мешает. Не сотворяйте из ОПП кумира, будьте проще.
177. AlexO 135 26.04.12 15:17 Сейчас в теме
(174) Yashazz,
чего и на си-шарпе не все достигают

а почему вы считаете, что си-шарп сейчас не в тупике?
Думать надо, когда архитектуру кода строишь, независимо от инструментария

ваши предложения - чем заменить наследование в 1с. Или вот - как мне подписку сделать на обновление формы? А? Или ячейки в ТП обрабатывать пакетом на уровне событий? или клики мыши ловить? чтоб независимо от инструментария и не делать из 1С монстра, а из ОПП не сотворять кумира.
186. Yashazz 4709 26.04.12 20:17 Сейчас в теме
(177) Путаете понятия. Одно дело - средствами самой 1С натужно пытаться изобразить псевдо-ООП. Другое - лезть в потроха, как г-н Орефков, докручивая фичи по своему желанию и рискуя обломаться на следующем же релизе с иной прихотью 1С-ников, плюс скользкий вопрос лицензионного соглашения насчёт потрохов платформы. Третье - мечтать о доработке функционала самими платформописателями.
Разберём:
1. "Чем заменить наследование в 1с." Вопрос: зачем, где и на каком уровне из вышеперечисленных?
2. "Или вот - как мне подписку сделать на обновление формы?" ОбновлениеОтображения или таймерные в модуле формы - не устраивают? Уточните задачу.
3. "Или ячейки в ТП обрабатывать пакетом на уровне событий?" Собирайте в некие именованные множества, продумывайте нотацию имён, работайте с бОльшими областями. ООП тут совершенно не нужно, инструментария - полно. Опять же, уточните, мож я не понял.
4. "или клики мыши ловить?" - это к Нуралиеву сотоварищи. Иногда элементарных сишных или дельфёвых фишек правда не хватает, но - опять же - какое отношение ООП имеет к перехвату событий мыши? Не припомню объекта "мышь", всё больше как-то обычные событийные аргументы...
Оставьте свое сообщение