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

18.04.12

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
СписокЗначенийРас.epf
.epf 8,75Kb
53
53 Скачать (1 SM) Купить за 1 850 руб.

Первое что меня поразило при знакомстве с 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    3164    stopa85    12    

38

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

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

19.10.2023    7555    user1959478    51    

36

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

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3110    maksa2005    8    

26

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

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

1 стартмани

09.06.2023    10905    7    SpaceOfMyHead    18    

61

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

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4359    RustIG    9    

25

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

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

23.11.2022    3530    gzharkoj    14    

25

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

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

1 стартмани

21.03.2022    9042    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ViteG 5 18.04.12 04:29 Сейчас в теме
полезная очень статья. Автору спасибо :)
Makc16384; +1 Ответить
2. a-novoselov 1158 18.04.12 04:34 Сейчас в теме
Не кажется ли вам, сударь, что в 1С ООП и не нужно? ИМХО, язык программирования - это просто инструмент и для своих целей язык 1С вполне подходит. 1С настолько популярна не в последнюю очередь из-за дешевизны поддержки. Можно посадить студента какого-нибудь биологического факультета с небольшим наличием мозга, дать желтые книжки, и он рано или поздно сможет разобраться в коде. А вы предлагаете усложнять код, созданием дополнительных обработок без описания с неявным и не совсем понятным предназначением... Тем более непонятным человеку, не знающему фундаментальных основ ООП. Зачем это нужно?
Yakud3a; Makc16384; Aleksandtmt; DenisKin; papami; sheff161; +6 3 Ответить
3. natnat3 18.04.12 05:44 Сейчас в теме
(2) a-novoselov, полностью согласна с замечанием, зачем мешать мух и котлет, 1С вполне выполняет свои функции в данном диапазоне. Не хватает возможностей, нужно наследование и т.п., есть куча других языков программирования. У каждого своя сфера применения
4. BorisMor 310 18.04.12 05:55 Сейчас в теме
(2) a-novoselov, может нужно потому что делает жизнь легче?)
Большинство людей ведь хранят вещи аккуратно сложенными у себя в шкафу т.к. легче их найти. Да и если другой что то захочет взять то ему легче разобраться.
Хороший пример, это "Универсальный обмен данными XML". Ее кончено можно использовать как внешнюю обработку, а можно вызвать ее из своего кода и весь функционал будут доступен. При этом не надо лезть внутрь обработки и смотреть как все работает. Обработка как "черный ящик". На входе получает данные, а при запуске отдает результат.
А можно было сделать в виде функций и процедур. И тогда надо было бы понять какие функции нам нужны, разбираться с параметрами, смотреть что возвращает, понимать последовательность запроса функций.
ООП на самом деле не сложная штука. И если человек закончил биологический факультет - он разберется)
amaksimov; CyberCerber; CratosX; Никс; ViteG; +5 Ответить
6. a-novoselov 1158 18.04.12 06:30 Сейчас в теме
(4) Да, согласен, что сложные вещи нужно делать с применением основ ООП. И так это, в основном, и делается.
7. s.sintsov 250 18.04.12 08:19 Сейчас в теме
(4) согласен полностью, объектный подход необходим, но только будьте добры, если разрабатываете свои классы, не забывайте писать документацию, без этого никакой пользы от них для других программистов не будет, только лишние проблемы в виде кучи потраченного времени, чтобы разобраться, как с вашими объектами работать.
elegam; Damian; sermalp; BorisMor; +4 Ответить
77. sermalp 18.04.12 14:38 Сейчас в теме
(7) s.sintsov, согласен. Документация нужна для всего нужна обязательно, и для таких обработок в частности. Бывает, что самому проще написать, чем искать чужое, а потом еще и разбираться.
243. Droonimus 08.12.21 14:12 Сейчас в теме
(4)
При этом не надо лезть внутрь обработки и смотреть как все работает. Обработка как "черный ящик". На входе получает данные, а при запуске отдает результат.
А можно было сделать в виде функций и процедур. И тогда надо было бы понять какие функции нам нужны, разбираться с параметрами, смотреть что возвращает, понимать последовательность запроса функций.


Ну что ж. Прошло почти 10 лет. Стоит обратить внимание на нынешний подход к проектированию структуры и написанию кода в современных типовых конфигурациях. Думаю, что уже многие смогли оценить наступающую "простоту" и "легкость" их сопровождения и модернизации. ),
37. zfilin 2352 18.04.12 11:14 Сейчас в теме
(2) a-novoselov, Чем проще, тем лучше, согласен на все 100! Кстати, я считаю, что компьютер для бухгалтера - излишество, которое ведет к беспрерывной игре в косынку и питью чаев. Ручка, бумага и калькулятор. И можно садить в бухгалтерию любого человека. Любой разберется. ;-)

(21) gaglo, Товарищи! Так, "сектантов ООП" уже посрамили давно и окончательно: http://blogerator.ru/page/oop_why-objects-have-failed

(26), (28) sergathome, Без наследования тоскливо и "костыли" не помогают. Жаль, конечно. А по поводу "статических", так это просто по-аналогии с "взрослыми" языками по способу использования. Понятно, что фактически это фикция, так как нет раннего и позднего связывания, как такового.
awk; sergathome; +2 Ответить
40. Арчибальд 2709 18.04.12 11:21 Сейчас в теме
(37)
Ручка, бумага и калькулятор
А куркулятор-то зачем?
44. zfilin 2352 18.04.12 11:25 Сейчас в теме
(40) Арчибальд, Да. Действительно! =)
53. gaglo 18.04.12 12:16 Сейчас в теме
(40) Ну хоть счЁты-то?? (жалобно так)
240. yuraos 1003 22.01.13 18:27 Сейчас в теме
(2) a-novoselov, насчет дешевизны вы, уважаемый, пальцем в небо попали!
Это еще с 1С-Бухгалтерии 6.0 пропагандируется, что 1С любой "лох" конфигурять может.

вот только это на самом деле не совсем так стало со временем -
тут количество перерасло в качество - все же есть така профессия "Программист 1С".

но подход остался прежним - делаем типовухи дешево и сердито силами разных биологов и гуманитариев!

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

Пора наверно смежные области присматривать ...
242. a-novoselov 1158 25.01.13 13:01 Сейчас в теме
(240)
Да это не только в 1С. Посмотрите на толпы ПХП-быдлокодеров, даже на С++ куча библиотек индусским кодом написана. Дешевая рабочая сила есть везде, и работают на "лишь бы лишь бы". Я просто считаю, что 1С в этом обвинять не стоит. И многие таланты без образования и знания английского поднялись на 1С и стали супер-спецами, раскрыли себя, так сказать, благодаря доступности и распространенности. Мне кажется не стоит за простоту 1С судить, и за индусов, так как они раньше 1С-ки появились и всегда будут :).

(241)
Нет ООП? Да ладно...
Реализация = Сделка.ПолучитьОбъект();
Раелизация.Записать(РежимЗаписиДокумента.Проведение);
Это ли не ООП? Какой избыточный код? Сколько кода нужно напечатать в том же С++, чтобы было настолько простое и лаконичное отражение хозяйственной операции "продажа"? Дюбой кодер понимает, что двумя строчками перезаписываются все движения этого документа. Где тут избыточность? Мне кажется язык 1С для своих целей очень даже хорошо подходит.
241. kittwell 34 24.01.13 21:04 Сейчас в теме
(2) a-novoselov, понимаете ли в 1совском подобии Бейсика нет не то, что ООП а многих других элементарных вещей присущих языкам программирования, которые спасают от очень многих ошибок, которые кстати трудно выловить. Что же касается самого ООП то его отсутствие приводит как раз к низкому качеству кода, его избыточности делающей как раз понимание того что уже написано сложным. Для двухнедельных само обручающихся программеров изучение ООП кончно кажется сложным и непонятным. Посмотришь на код таких вундеркиндов и сразу приходит на ум фраза: Не стреляйте в пианиста,- он играет как умеет.
5. ViteG 5 18.04.12 06:20 Сейчас в теме
Мне несколько неясен вообще повод для возникшей здесь дискуссии. Кто-то говорит, что не нужно мешать мух с котлетами, кто-то говорит, что в шкафу аккуратно вещи хранить удобнее. В статье обо всем этом уже написано. Как такового объявления классов там нет, но оно и не нужно. В 1С уже хватает необходимых полочек, чтобы хранить вещи в аккуратном виде и каждую вещь на своем месте. Каждый объект в системе 1С предназначен для каких-то своих целей, будь это регистр накопления (очень удобный для накопления данных и получения остатков) или регистр расчета (для хранения данных о периодических расчетах и удобного получения необходимых данных из виртуальных таблиц соответствующих). И если вам необходимо создать нечто свое уникальное - есть обработки. Что опять таки было описано в статье. На выходе универсальная система для решения учетных и управленческих задач на предприятиях. В итоге получается, что все кто писал выше правы, каждый по своему, и для каждого есть возможность реализовать желаемое в 1С :)
fort13; sound; BorisMor; +3 Ответить
9. s.sintsov 250 18.04.12 08:27 Сейчас в теме
(5) ViteG, в 1С нет наследования, а это, пожалуй, основное преимущество объектной модели. Скажем, вам нужно было бы сделать копию типового документа, но с расширенными под себя свойствами. Как вы делаете это сейчас? Копируете типовой документ, добавляете свои процедуры и функции, переопределяете функционал, либо лезете в типовой документ и меняете всё там (чего лучше не делать). В первом случае после типового обновления ваш функционал может перестать работать, скажем, если поменяют какой-то реквизит в регистре, куда ваш документ делал движения. Во-втором, обновление тупо просто затрет ваш функционал, либо вы потратите много времени на саму процедуру обновления, чтобы разобраться, что поменяли в 1С и как теперь с этим жить. Так вот в объектной модели вам не нужно на эту тему волноваться, вы просто создали бы экземпляр класса типового документа, содержащий весь заложенный в него функционал и добавили бы свои методы и свойства, причем каждый раз при обновлении типовой функционал бы обновлялся вместе с стандартным документом и ваш экземпляр класса типового документа не потерял бы актуальности, а ваш код не был бы затронут. Это не единственное преимущество объектной модели и попытки реализовать ее подобие в 1С уже давно идут, взять, хотя бы универсальный отчет, обмен данными XML и т.д. Проблема в том, что не хватает хорошей документации по этим объектам. А с появлением управляемых форм ситуация еще более усугубилась в этом плане.
CyberCerber; ViteG; BorisMor; +3 Ответить
11. BorisMor 310 18.04.12 08:30 Сейчас в теме
(9) s.sintsov, согласен. С наследованием в 1С проблема.
12. ZLENKO 398 18.04.12 08:39 Сейчас в теме
(9) Проблема с обновлением конфигурации после изменений есть и очень актуальна.
Насколько я знаю в Аксапте это решено при помощи так называемых слоев, а 1С ограничилась тем что есть конфигурация разработчика и основная конфигурация (ну и конфигурация БД), но это не совсем то что нужно в данном случае. Аналог наследования очень был бы полезен в данном случае.
BorisMor; ViteG; +2 Ответить
8. ZLENKO 398 18.04.12 08:23 Сейчас в теме
Какое ключевое преимущество для конечного потребителя (заказчика) даст ООП в 1С ?
10. BorisMor 310 18.04.12 08:28 Сейчас в теме
(8) розница.net,
Код легче поддерживать и развивать. Теоретически будет меньше "костыликов" в коде, а значит и стабильней.
Новому человеку будет легче разобраться в вашем коде.
13. Арчибальд 2709 18.04.12 08:41 Сейчас в теме
Интересен тон некоторых комментариев: мол, и без ООП прекрасно проживем. Это покруче, чем у того парня, что удивился, узнав, что говорит прозой. Здесь же неприятие какое-то: не будем говорить прозой, и все тут.
Возможно, и в самом деле наследование не очень-то нужно в рассматриваемой прикладной области (хотя в зачаточном состоянии оно существует). Но уж инкапсуляция данных священна. Без этого сколько-нибудь объемный код становится абсолютно неуправляемым.
"Ты хоша мне и подруга, но порядок быть должОн"...
MaxDavid; zfilin; ViteG; +3 Ответить
14. JohnyDeath 302 18.04.12 08:57 Сейчас в теме
А теперь самое интересное. Имеем 8.2 на Управляемых формах. Доступность Модуля менеджера (как и модуля объекта): Сервер, толстый клиент, внешнее соединение. Таким образом приведенный вами код не будет работать на тонком клиенте.
15. BorisMor 310 18.04.12 09:14 Сейчас в теме
(14) JohnyDeath, Вероятно. Я на толстом все делаю.
17. JohnyDeath 302 18.04.12 09:22 Сейчас в теме
(15), (16)
Тема актуальна, но для УФ совсем не жизнеспособна, т.к. "объекты" можно создавать только на Сервере (или в толстом клиенте), а таких конфигураций скоро будет подавляющее большинство. А ООП "только не сервере", когда объект класса надо сохранять в некотором сеансе (на клиенте), крайне геморойная и неблагодарная затея, которая перечеркивает все плюсы ООП на корню.
18. iliabvf 18.04.12 09:39 Сейчас в теме
(17) Причем тут тонкий клиент. Если бы было реализовано хотя бы некое подобие наследия, это облегчило бы рутинную разработку, правку и поддержку конфигураций.
20. JohnyDeath 302 18.04.12 09:49 Сейчас в теме
(18) при том что в модуле менеджера нельзя "ОткрыватьФорму", и вообще создавать объект обработки или вызывать "статические" методы на клиенте.
Про наследование в v8: http://infostart.ru/public/19332/ - разработка 2009 года!
158. AlexO 135 20.04.12 13:50 Сейчас в теме
(20) JohnyDeath,
нет там настоящего наследования, а только иммитация куцыми средствами 1с копирования и исполнения процедур объектов (но не для форм - для форм не получилось), и простое юзание несчастного IDispatch. Может, максимально приблизятся в разработке chessman (при поддержке artbear): http://www.1cpp.ru/forum/YaBB.pl?num=1313560540/105
16. iliabvf 18.04.12 09:15 Сейчас в теме
Не понимаю, как наследование может быть не полезным? Это же сэкономленное время разработки и исправления ошибок.

Спасибо за статью, тема действительно актуальная.
21. gaglo 18.04.12 10:09 Сейчас в теме
(16),(18) - не понимаю, зачем заявлять такие вещи бездоказательно.
...как наследование может быть не полезным?

...хотя бы некое подобие наследия... облегчило бы...

Это - в данном виде - только лозунги, вроде политических или религиозных.
Лично я думаю, что никакая вещь не может быть полезной "вообще", то есть всегда и всюду.
А рутинную разработку может облегчить дисциплина программирования, безотносительно к трем священным словам.
kuntashov; ViteG; +2 Ответить
19. KulSer 18.04.12 09:40 Сейчас в теме
Позвольте и мне вставить свои 5 копеек. Предположим, что Вам нужно сделать документ Приходный кассовый ордер, который очень похож на типовой, но имеет некий дополнительный реквизит, и имеет некие особенности при проведении. При использовании ООП можно было бы поступить примерно так (простите, приходится на ходу придумывать свой псевдоязык):
1. Создаём документ МойПриходник. В свойстве НаследуетсяОт указываем ПриходныйКассовыйОрдер (предположим, что все объекты 1С имеют свойство НаследуетсяОт, где указывается типовой объект - родитель вновь создаваемого объекта)
2. В объекте МойПриходник создаём реквизит МойРеквизит. В модуле формы и модуле объекта пишем, как мы работаем с этим реквизитом. Болше ничего не пишем, поскольку весь функционал документа-родителя сохраняется (если мы сознательно не его не переписываем).
3. Проведение документа пишем примерно так:
Процедура ОбработкаПроведения()
ОбработкаПроведения(); // вызывается обработка проведения из родительского класса
..... // теперь наши действия
КонецПроцедуры
Ну вот приблизительно так. А теперь прикиньте, как бы вы стали решать поставленную задачу сейчас, без использования ООП. Или вносить исправления в существующий приходник (проблемы при обновлениях). Или создавать свой приходник, копируя типовой, и добавляя функционал.
Теперь предположим, поменялось законодательство, приходники стали в чём-то другими. При использовании ООП изменения в родительском классе наследуются в дочерний, и Вам в документе МойПриходник, возможно, вообще ничего не придётся переделывать (конечно, если изменения законодательства не революционны). А без использования ООП придётся писать ручками (или копировать изменившиеся процедуры из типового приходника).
Надеюсь, понятно рассказал.
user645801_yyyuuu123q; zhenianik; Pigzilla; CyberCerber; DMSDeveloper; Damian; alex_shkut; Nevan; Tsprogrammist1; ixijixi; ViteG; +11 Ответить
25. gaglo 18.04.12 10:23 Сейчас в теме
(19) "Не надейтесь." Если "некие" особенности при проведении МойПриходника не перекрывают, а чисто дополняют стандартный функционал ПКО, то подпиской на события к стандартному документу можно обойтись. Добавится программный модуль, и для хранения некого реквизита - некий регистр, а документ-то новый зачем?
Так что мне такая полуконкретизация непонятна. Да, я чего-то не знаю про ООП, я чего-то не понимаю в ООП, но я что, должен просто на слово поверить, что ООП в 1С лучше, чем 1С без ООП?
56. KulSer 18.04.12 12:28 Сейчас в теме
(25) gaglo, значит, я объяснил непонятно. Попробую ещё раз на пальцах. Допустим, имеем тот же приходник. Но главбух просит, чтобы в некоей конкретной ситуации, которая бывает только в нашей фирме, проводки были другими, а в остальном поведение стандартного приходника её устраивает. То есть ей надо, чтобы на форме документа стоял реквизит ОсобаяСитуация (галочка), и, допустим, ещё пара реквизитов: текст и число. Бухгалтер по своему усмотрению ставит, когда надо, эту галочку, и поведение документа меняется, как ему нужно.
Так понятнее?
Как это сделать сейчас, Вы и без меня знаете. А с применением ООП было бы примерно так:
1. Создаём документ МойПриходник. В свойстве НаследуетсяОт указываем ПриходныйКассовыйОрдер
2. В конфигураторе создаём реквизиты: ОсобаяСитуация (Булево), ОсобыйТекст (Строка) и ОсобоеЧисло (Число).
Остальные реквизиты платформа берёт из родительского объекта.
3. Реквизиты кидаем на форму. Тут, конечно, проблема, где разместить. Предположим, что как-то этот вопрос решили. Причём, методы модуля формы переписываем только те, которые влияют на наши новые реквизиты. Предположим, что нас интересует только видимость наших новых реквизитов, и в базовом классе (ПриходныйКассовыйОрдер) описана процедура
Процедура УстановитьВидимостьЭлементовФормы() МожетПерекрываться
// словом МожетПерекрываться мы указываем, что процедура может быть переписана в наследниках класса.
В наследуемом документе МойПриходник в модуле формы пишем:
Процедура УстановитьВидимостьЭлементовФормы() Перекрытие
Если ОсобаяСитуация = Истина Тогда
// что-то написали
КонецЕсли
УстановитьВидимостьЭлементовФормы(); // вызывается процедура с тем же именем из базового класса
КонецПроцедуры
слово Перекрытие указывает на то, что наша процедура будет вызываться вместо базовой процедуры, но только в нашем документе.
Больше ничего (никаких других процедур) в модуле формы нашего документа не пишем.
Теперь, если открыть документ МойПриходник, и в форме сделать что-то, что вызовет процедуру УстановитьВидимостьЭлементовФормы(), то вызовется наша (переписанная) процедура. А если открыть стандартный приходник, то там будет вызываться стандартная УстановитьВидимостьЭлементовФормы(). То есть вызовы процедур не меняются - это важно, платформа сама определяет, откуда идёт вызов, и запускает соответствующую реализацию процедуры.
Так понятнее?
4. В модуле объекта пишем:
Процедура ОбработкаПроведения()
Если ОсобаяСитуация = Истина Тогда
// делаем проводки, специфичные для особой ситуации
Иначе
ОбработкаПроведения(); // вызываем обработку проведения из родительского класса
КонецЕсли;
КонецПроцедуры
Таким образом, что мы сделали:
Создали (не копировали) документ, три реквизита, написали две процедуры, одну в модуле формы и одну в модуле объекта. Остальное поведение документа унаследовано из базового класса, мы о нём не задумываемся. Сравните с тем, что приходится делать сейчас.
И, самое главное, при обновлении конфигурации, если что-то меняется в базовом классе, нам ничего не придётся делать вообще. При условии, разумеется, что базовый класс написан грамотно. Но написан он не нами, а умными разработчиками, а я - "студент-биолог", добавил свой кусочек, ничего в базовом классе не испортил, и почти не парился.
Надеюсь, что теперь понятнее.
hvs; DMSDeveloper; Damian; МАлексей; sergathome; Stamper; +6 Ответить
59. zfilin 2352 18.04.12 12:42 Сейчас в теме
(56) KulSer, Хех. Для ответа на вопрос "где разместить элементы на форме" нужно еще сильнее отвязывать объект от представления.
В таком случае, стандартные объекты где-то имеют обработчик: ИспользоватьФорму("СтандартнаяФорма"), а в вашем унаследованном объекте этот обработчик будет переопределен на: ИспользоватьФорму("МояФорма"). Но рисовать (или копировать) все-равно придется обе формы, визуальные компоненты принципам ООП не подчиняются. Конечно, если мы не говорим об управляемом интерфейсе, который пытается что-то сделать в этом направлении.
159. AlexO 135 20.04.12 14:00 Сейчас в теме
(25) gaglo,
но я что, должен просто на слово поверить, что ООП в 1С лучше, чем 1С без ООП?

(27) gaglo,
Цитата
"...Дельфи с формами, событиями, но без наследования... -- Невозможно, ибо абсурд."
VBA?

А чем вам VBA не понравился? Тем, что явно не можете классы создать? Так продукты, которые он обслуживает (причем работает не чета 1с-у - в 2010 Екселе, например, когда через формат файла сняли ограничение на количество строк на листе, макрос заполняет 1 мол (1 000 000 000) строк произвольным значением за 20 минут), можно обработать и другими языками с наследованием и классами - тем же Дельфи.
Потпробуйте для конфы 1с что-нить написать на Дельфи ))
1с-у такая производительность не снилась.
163. alex_shkut 63 20.04.12 15:50 Сейчас в теме
(159) AlexO,
Потпробуйте для конфы 1с что-нить написать на Дельфи ))
1с-у такая производительность не снилась.



Будет полностью нарушен основной принцип 1С - открытость конфигурации.
Подобные разработки есть, и были в 7-ке. Подключаются через СОМ-объекты. Например драйвера кассовых аппаратов. Подключайте чего угодно... и используйте.

(161) AlexO,
Или вы на С++ для 1с писать будете? интересно взглянуть ))


А на чем, по Вашему, написана платформа?
176. AlexO 135 26.04.12 15:12 Сейчас в теме
(163) alex_shkut,
Будет полностью нарушен основной принцип 1С - открытость конфигурации.

Открытость?? вы долго на 1с пишете? ))
Подобные разработки есть, и были в 7-ке. Подключаются через СОМ-объекты. Например драйвера кассовых аппаратов.

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

а вы платформу к 1с совершенствуете? мое вам уважение ))
(166) gaglo,
"1 мол строк за 20 минут" не впечатляет меня как невиданное быстродействие;

вы точно на 1с работаете? ))
166. gaglo 22.04.12 09:30 Сейчас в теме
(159) Уважаемый - Вы (кажется) не вчитались в тексты, ну это и понятно, дискуссия-то вон как разрослась...
Мне VBA вполне нравится; слово "абсурд" не моё, а цитированное; и уж если на то пошло, "1 мол строк за 20 минут" не впечатляет меня как невиданное быстродействие; и ещё рассказы про "1с-у такая производительность не снилась"... Опять лозунги и заклинания, а конкретика только на уровне (162). См. также цепочку (19)-(25)-(56)-(59) - KulSer попытался (полу)конкретно доказать преимущество наследования в кнкретном случае, но зажевал неудобный вопрос с наследованием формы, на что тут же zfilin и указал. А сравнив рецепт от KulSer с комментом, где концентрированно изложены действия для достижения практически той же цели без наследования, вижу я, что... то есть не вижу я никакого решающего преимущества одного способа над другим.
Вот только один способ - воображаемый, а другой реальный.
(Ну это уже мои комплексы ;-])
22. Stamper 43 18.04.12 10:19 Сейчас в теме
автору зачет. само дерево конфигурации невозбранно намекает, что в 1С применяется ООП. это дерево я бы сравнил с .h-файлом для C/C++, например
а кроме того, в 1С мы видим ORM (объекты Регистр Накопления, Регистр Сведений и т.п.) и если лезть дальше -- то и MVC.
должен заметить так же, что для усиления эффекта от вброса повидла в вентилятор рекомендую следующие шаги:
1) листинги кода переписать на английском языке;
2) добавить файл внешней обработки или замастырить ролик на ТыТрубе с заголовком "Я гарантирую это";
3) разместить статью на Хабре =)
223. tango 545 23.05.12 17:30 Сейчас в теме
(22) Stamper, дерево конфы - это всего лишь кучка ini-файлов, собранных в одну кучку. напоминает реестр виндовса
226. Stamper 43 23.05.12 22:06 Сейчас в теме
(223) tango, если посмотреть, например, в таблицы SQL -- то выглядит всё иначе
227. AlexO 135 23.05.12 23:08 Сейчас в теме
(226) Stamper,
и что вы увидели в таблицах SQL кроме ссылок?
228. Stamper 43 23.05.12 23:25 Сейчас в теме
(227) AlexO:
в таблице Config лежит код модулей и идентификаторы таблиц всех объектов
229. AlexO 135 24.05.12 13:53 Сейчас в теме
230. Stamper 43 24.05.12 15:40 Сейчас в теме
(229) AlexO, ну так дело же не в форме абстракции, а в её содержании
231. AlexO 135 25.05.12 17:58 Сейчас в теме
(230) Stamper,
а в её содержании

так давайте найдем там ООП... я его пока не вижу :)
232. Stamper 43 25.05.12 22:41 Сейчас в теме
(231) AlexO, сертификат 1С:Специалист по Платформе 8 есть?
234. AlexO 135 26.05.12 21:57 Сейчас в теме
(232) Stamper,
а что - сертификат 1с автоматически вносит в 1с ООП? не знал.
Знал бы раньше - когда познакомился со всеми этими профессионалами-специалистами, продолжил бы сдавать. А так - не собираюсь тратить на эту ерунду время.
Вы молодой, у вас его много - пожалуйста. Сдавайте, пересдавайте, хвалитесь друг перед другом этими мусорными бумажками, меряйтесь длиной сертификатов....
А я лучше в лес схожу, на птичек посмотрю.
235. AlexO 135 26.05.12 21:58 Сейчас в теме
(232) Stamper,
сертификат 1С:Специалист по Платформе 8 есть?

хотя не так.
А вот так:
- А вы думать умеете? Проектировать? сам, а не как 1с сказала и показала?
236. Stamper 43 27.05.12 01:09 Сейчас в теме
(235) AlexO, извините, не думал, что это Вас так заденет.
просто как и повсюду, сертификация позволяет отсеять "случайных" людей.
как Вам не хочется "тратить на эту ерунду время", так и мне не хочется тратить время на споры со случайными людьми.
23. Serj1C 483 18.04.12 10:20 Сейчас в теме
В средневековые времена программирования, к данным мы применяли функции. Для того, чтобы нарезать хлеб, брали структуру «хлеб» и передавали ее как параметр функции «нарезать»:

нарезать(хлеб);

Потом пришла эпоха объектно-ориентированного программирования. И вместо функии «нарезать», нам надо попросить «хлеб» нарезать себя — вызываем метод «нарезать» у объекта «хлеб»:

хлеб.нарезать();

Очевидно, что это значительное улучшение.
В настоящее время объектно-ориентированное программирование стало еще изысканнее. Сначала мы создаем объект «хлеборезка» и затем просто передаем ему «хлеб» для «нарезки»:

Хлеборезка хлеборезка = new Хлеборезка();
хлеборезка.нарезать(хлеб);


Прогресс налицо. Источник
CyberCerber; WhiteOwl; tango; link_l; boggonzikov; Spi1y; Svetlana_Trofimova; CratosX; MaxDavid; DoctorRoza; anton.fly7; Hany; sergathome; ViteG; gaglo; +15 Ответить
24. JohnyDeath 302 18.04.12 10:22 Сейчас в теме
(23) В той статье более интересны обсуждения, чем сама статья. Например вот этот пост: http://habrahabr.ru/post/141505/#comment_4733285
BorisMor; gaglo; +2 Ответить
26. sergathome 4 18.04.12 10:30 Сейчас в теме
Совершенно очевидно, что без наследования нет ООП. Все разговоры о каком-то ООП в 1С абсолютно беспочвенны. Да, можно условно считать "полочки" типа документов, регистров и тд абстрактными классами, но это НИЧЕГО не даёт ни для программиста, ни для пользователя. Потому как нет наследования. Полочки - есть, а наследования - нет. Представьте себе эдакое Дельфи с формами, событиями, но без наследования... -- Невозможно, ибо абсурд.
zfilin; ViteG; +2 Ответить
27. gaglo 18.04.12 10:32 Сейчас в теме
(26)
...Дельфи с формами, событиями, но без наследования... -- Невозможно, ибо абсурд.

VBA?
29. sergathome 4 18.04.12 10:35 Сейчас в теме
(27) gaglo, Именно, и-мен-но ! Это скрипт. В том виде, в котором он есть в 7 и 8 - это скриптовый язык манипулирования данными. Он даже и компилируется-то не полностью. Какое уж тут наследование, в каше модулей бы не потонуть !
30. gaglo 18.04.12 10:44 Сейчас в теме
(29) Ну да, скрипт... Но: все-таки возможно. И даже не совсем абсурд?
Я даже согласен обозвать программирование на этом скрипте процедурным, а ни разу не объектно-ориентированным. Но ведь работает зараза?
32. sergathome 4 18.04.12 10:57 Сейчас в теме
(30) gaglo, конечно, имея объект манипулирования скрипт не бесполезен. Но вот пустая объектная Дельфа без наследования - абсурд однозначный.
28. sergathome 4 18.04.12 10:32 Сейчас в теме
Кстати, функции модуля менеждера это класс-методы, уж если на то пошло. Как можно вообще называть что-то "статическим" если "динамического" на горизонте даже не видать ???
31. WKBAPKA 215 18.04.12 10:55 Сейчас в теме
Лично мне статья нравиться. Хорошо написана. В ООП есть много полезного, 1С этого явно не хватает
Арчибальд; +1 Ответить
35. sergathome 4 18.04.12 11:04 Сейчас в теме
(31) WKBAPKA, да никто не спорит, что не хватает. Конечно лучше быть богатым и здоровым. Но повода считать таковой 1С-овскую модель никакого нет, имхо. Есть определённая схожесть некоторых черт и не более. Дерево метаданных оно, а не объектная модель. Возможно, когда-нибудь, в 9 версии... ;)
33. YakshinAnd 18.04.12 10:57 Сейчас в теме
Наследование самое важное что нужно для ООП в 1с. Зачем что то еще не знаю...но наследование документов различных и т.д. сократит код в разы и будет проще работать. А так лучше оставить все как есть, а если хотите программировать ООП, то программисты C# C++ и т.д. тоже требуются)
161. AlexO 135 20.04.12 14:04 Сейчас в теме
(33) YakshinAnd,
А так лучше оставить все как есть, а если хотите программировать ООП, то программисты C# C++ и т.д. тоже требуются)

где требуются?? и кому? Дельфи умерло почти, а сишники нужны только на драйверах - прикладные программы (где и нужны в основном классы и наследование) никому не сдались - уровень падает, как заказчиков и их задач, так вслед этому и программистов.
Или вы на С++ для 1с писать будете? интересно взглянуть ))
34. Stamper 43 18.04.12 11:01 Сейчас в теме
А на тему наследования...
Все объекты "Документ.*" наследуют свойства и методы (типа .Записать() и т.п.) объекта дерева конфигурации "Документы". Чем не наследование?!
36. sergathome 4 18.04.12 11:07 Сейчас в теме
(34) Stamper, ага, а констркуции вида Выборка.Следующий отнесём к механизму RTTI ;)) Не смешно ?
38. Stamper 43 18.04.12 11:15 Сейчас в теме
(36) sergathome, не вижу связи между типизацией переменных и выборкой результатов из строго-типизированного хранилища данных (а именно из базы данных).
так а собственно по существу (34) -- почему добавление документа (и следовательно отсутствием необходимости реализовывать стандартные методы, добавления Номера, Даты и т.п.) нельзя считать наследованием от Документов?!
википедия категорически подтверждает моё предложение :)
45. sergathome 4 18.04.12 11:26 Сейчас в теме
(38) Stamper, повторяю для танкистов - считать можно, толку от этого нет никакого, поскольку подменить стандартный метод нельзя НИКАК. Также абсолютно бесполезно представление объектной модели таблицы как потомка некоей абстрактной сущности, поскольку контекст полностью управляет поведением кода.
47. Stamper 43 18.04.12 11:34 Сейчас в теме
(45) sergathome, ну зачем же оскорблять!? не надо этого делать.
>>"поскольку подменить стандартный метод нельзя НИКАК"
быстренько открой литературу и найди N отличий между наследованием и переопределением методов. это во-первых.
а во-вторых, заставить бы тебя реализовать все методы ДокументОбъект-а (коих в 1С 8.2.15.301 насчитал 20), в УПП (где документов хорошо за сотню) за твой счёт -- ты бы иначе заговорил.
48. zfilin 2352 18.04.12 11:51 Сейчас в теме
(47) Stamper, Формально вы правы. Наследование и полиморфизм (а так же инкапсуляция, раз уж начали) между собой слабо связаны как таковые. Но фактически не зря эти три понятия все вместе называют тремя китами ООП. Так как только втроем они позволяют достичь максимального эффекта. А то, что есть в 1С, очень ограничено. Да, наследование есть. Но наследуется только "базовый класс Документ" (Справочник, Регистр, etc.) и все. Язык не поворачивается настолько ограниченное наследование называть наследованием. Извините за возможно лишнее упоминание, но я хотел бы наследовать больше. С полиморфизмом все плохо, ну а с инкапсуляцией (те самые "полочки", которых как уже было тут сказано, хватает) все более или менее хорошо.
Получаем в итоге, у нашего ООП один кит больной, другого нет, а третий вообщем-то нормальный, но выглядит странно.
Den_D; sergathome; +2 Ответить
51. Stamper 43 18.04.12 12:07 Сейчас в теме
(48) zfilin, ну почему же плохо с полиморфизмом? есть же возможность указать Procedure Foo(parameter=0);
т.е. возможность есть ;)
ну а красота... кто-то упорно пишет на C++ а кто-то переходит на Ruby или развивает C++0x
(49) sergathome, на обиженных балконы падают ;) я же призываю вести себя тактично
"переопределение методов неотделимо от наследования" -- ИМХО, вопрос религии.
я себе могу представить, что творилось бы в конфигурациях, если бы каждый франч мог переопределить .Записать()
52. sergathome 4 18.04.12 12:12 Сейчас в теме
(51) Stamper,
что творилось бы в конфигурациях, если бы каждый франч мог переопределить .Записать()

Это ответ на вопрос, что будет, если 1С разродится истинной ООП-платформой. Не станет ли народу нечего делать. Не станет. ;)))
55. Stamper 43 18.04.12 12:25 Сейчас в теме
(52) sergathome, яркий тому пример Википедия :)
49. sergathome 4 18.04.12 11:51 Сейчас в теме
(47) Stamper, зря обиделся. Извини, если что. Что касаемо теоретических воззрений на само ООП, то переопределение методов неотделимо от наследования. ;) Потому как первым был скелет и имя ему Абстрактный.
Впрочем это беллетристика. А вот обращение вида Метаданные.Документы прямо указывает - это дерево метаданных и ничто иное. Иначе придётся придумывать РТТИ, что маразм.
144. WKBAPKA 215 19.04.12 19:08 Сейчас в теме
(34) Stamper,
зато полезно тем кто пишет типовые... за такой быдлокод я бы их поубивал...
а про запросы я вообще молчу
DMSDeveloper; +1 Ответить
41. rus128 2 18.04.12 11:22 Сейчас в теме
Не вдаваясь в очередной холивар "Нужно ли в 1С ООП?", заметил, что публикация изобилует ошибками (например, "Никаких описание(?) классов", "модэль", "весь код зачастую помещалась(?) в модуль формы.") - лично мне читать неприятно.
Неужели трудно вычитать текст перед публикацией? Даже если не пользуемся Мозиллой со встроенной проверкой орфографии - неужели тяжело сначала набрать текст хотя бы в Ворде, а потом перенести сюда? И как оценивать высоту полета мысли автора, который не уважает своих читателей?
mike1970; ixijixi; +2 Ответить
43. Stamper 43 18.04.12 11:24 Сейчас в теме
(41) rus128, дык холивар о другом: есть ли там ООП, или нет его
42. fromon 18.04.12 11:24 Сейчас в теме
Многие "1Сники" просто не знакомы с другими языками и естественно с ООП.
46. Stamper 43 18.04.12 11:27 Сейчас в теме
(42) fromon, и как это влияет на обсуждаемый вопрос? тролей не кормим
50. Арчибальд 2709 18.04.12 12:06 Сейчас в теме
Надо заметить, что все обсуждение касается только наследования, полиморфизм и инкапсуляция сомнениям не подвергаются. Выскажу свое мнение. А именно, должен ли быть прикладной язык совсем уж объектно-ориентированным, т.е. с генеалогическими (евгеническими?) возможностями?
Я в этом сильно сомневаюсь. В процессе формирования прикладного языка должна быть исследована предметная область (реальные объекты), проведена классификация обнаруженных объектов и, далее, классификация свойств объектов (однозначно присущие, либо возможные/опциональные. При этом в какой-то разумный момент необходимо остановиться. Если исследование (анализ) предметной области проведено надлежащим образом, а затем грамотно построены соответсвующие объекты (классы) платформы (синтезирован адекватный платформенный образ предметной области), то прикладнику не потребуется наследование.
Другой вопрос, насколько платформа 1С адекватна предметной области. Например, Время Документа - это один момент, или таки несколько (ВремяСоздания, ВремяХозоперации, ВремяПроведения...)
hogik; awk; sergathome; Stamper; +4 Ответить
54. Stamper 43 18.04.12 12:23 Сейчас в теме
(50) Арчибальд,
Например, Время Документа - это один момент, или таки несколько (ВремяСоздания, ВремяХозоперации, ВремяПроведения...)

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

я бы сказал, что максимально адекватна из всех мне известных
66. Арчибальд 2709 18.04.12 13:24 Сейчас в теме
(54) Stamper, мне непонятно
так эта дата -- таки дата
А 1С при проведении просит указать, с каким временем прводить документ. Т.е. у документа время как минимум, не единственное.
Регистры сведений и регистры накопления здесь совершенно ни при чем. Может, у меня в конфе их вообще нет.
Да, я согласен, что модель 1С наиболее адекватна из существующих. Только вот адекватна чему? Хотелось бы адекватности (в частности) настоящему учету. Реально же мы видим адекватность документообороту.
69. Stamper 43 18.04.12 13:38 Сейчас в теме
(66) Арчибальд, документ без заполненного реквизита "Дата" (который по сути отражает, сколько секунд прошло с 01.01.0001, т.е. он включает в себя время тоже) не запишется, не то, что не проведется.
это единственное время документа. в проводки можно писать какое угодно время, хоть ТекущаяДата(), если это соответствует бизнес-логике. равно как Вы можете добавить какую-то свою дату (типа ДатаОтгрузки), которая может отличаться от даты документа и по отдельным разделам учета делать движения с соответствующими датами. повторюсь: всё зависит от бизнес-логики, т.е. от того, как реализовано в конфигурации. а у документа Дата -- это один реквизит, который фактически является обязательным полем в базе данных. как его использовать -- дело разработчика.

Адекватность учету -- это вопрос уже конфигурации.
71. Арчибальд 2709 18.04.12 14:02 Сейчас в теме
(69) Stamper, может, я непонятно объясняю... Речь шла о модели предметной области (учет). 1С считает, что у Документа (модели хозяйственной операции, отражаемой в учете) есть один атрибут Время (неважно, что оно в составе даты). Однако по действующему законодательству, моменты совершения хозяйственной операции и составления документа могут различаться. Т.е. в реальности у каждого документа времени, как минимум, два, и эти два времени неотъемлемы от реальности.
73. zfilin 2352 18.04.12 14:13 Сейчас в теме
(71) Арчибальд, Ага! В этом случае получается, что доменная (предметная) модель платформы отстает от действующего законодательства. А завтра поменяется законодательство и даты станет ТРИ. И, что? Менять платформу? А некоторым документам, как сущностям, но не как сущностям отражающим хоз.деятельность предприятия (ну, например, "Служебная записка") одной даты вполне достаточно. Или вообще без даты. Те же "Договора контрагентов" в типовых вовсе не документы, а очень даже элементы справочника.
Вот поэтому я и утверждаю, что не худшее решение привести платформу к чем-то более фундаментальному, вроде ООП, а доменную модель реализовывать средствами конфигурации от потребностей непосредственно предметной области.
74. Stamper 43 18.04.12 14:16 Сейчас в теме
(71) Арчибальд, если я ничего не путаю, то подтверждением хозяйственной операции в бух. учете является первичный документ, дата которого является обязательными реквизитом для заполнения.
время нас интересует для оперативного учета, который не регламентирован.
а уж сколько реквизитов "Дата" добавить разработчику -- это его дело.
в типовой РеализацияТоваровИУслуг их штуки 3, кажется.
83. Арчибальд 2709 18.04.12 16:11 Сейчас в теме
(74)
...подтверждением хозяйственной операции в бух. учете является первичный документ, дата которого является обязательными реквизитом для заполнения.
Дата, а не время.
время нас интересует для оперативного учета, который не регламентирован.
Про оперативный учет я вообще не говорил, ибо не знаю, что это такое. Но точно знаю, что бухгалтерский учет является оперативным. Таким образом, время нас интересует именно в бухгалтерском учете.
Далее, Хозяйственная операция (реальная) имеет некоторую протяженность во времени. Начало совершения операции может иметь дату, отличающуюся от даты завершения операции. Скажем, выпуск продукции ночной сменой. Вполне очевидно, что он будет зафиксирован (сделает движения регистров) завтра утром. А сегодня вечером часть продукции уже отгружена. Что нам об этой ситуации говорит время (даже дата) проведения документа? Проводить отгрузку завтрашним числом? Сегодняшним не получится: продукции на складе сегодня еще не наблюдается.
И дело здесь не в конфигурации, а в модели учета 1С.
84. Stamper 43 18.04.12 16:24 Сейчас в теме
(83) Арчибальд,
Про оперативный учет я вообще не говорил, ибо не знаю, что это такое. Но точно знаю, что бухгалтерский учет является оперативным.

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

в ПСБУ Украины я нигде упоминание времени в связи с первичными документами не встречал.

то, что Вы описали ("разорванная" отгрузка товаров), реализована в Акселот Логистика: Управление складом, например (не сочтите за рекламу). это конфигурация для 1С.

повторюсь: Вы сейчас поднимаете проблемы реализации конфигурации, которые механизмами платформы вполне удаётся запрограммировать.
86. Арчибальд 2709 18.04.12 16:58 Сейчас в теме
(84)
трудно вести дискуссию в таком ключе

Почему трудно? Я сказал: не знаю, что такое ОУ. Не встречал нигде определения. Если Вы встечали - поделитесь. А то обстоятельство, что бухучет обязан быть "оперативным" в смысле не "посмертным" определено законодательно. В http://infostart.ru/public/22032/ я это разбирал. А фирма 1С длительное время игнорировала это обстоятельство: например, в семерочной Комплексной бухучет был заложен как "среднеежемесячный". Т.е. при анализе предметной области (я о бухучете говорю) не было учтено одно из ключевых обстоятельств - отсюда и неадекватность. И не в конкретной конфигурации дело, а в поверхностном понимании сути учетных документов.
87. Stamper 43 18.04.12 17:16 Сейчас в теме
(86) Арчибальд, когда человек пишет "не знаю, что это такое, но точно знаю что это..." (когда речь об одном и том же) становится смешно :)
Бухгалтерский учет -- регламентирован ПСБУ (правила, стандарты бухгалтерского учета)
Управленческий учет -- каждый хоз. субъект выбирает для себя сам его правила
кстати, я из Украины. но у нас эти моменты практически одинаковые.
А то обстоятельство, что бухучет обязан быть "оперативным" в смысле не "посмертным" определено законодательно

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

1С 7.7 была выпущена в 1997 году, если я не путаю. 15 лет назад!!!!
а мы тут обсуждаем 8.2, спешу напомнить
88. larisab 160 18.04.12 17:45 Сейчас в теме
(87)
1С 7.7 была выпущена в 1997 году

В 1999 г.
103. Арчибальд 2709 18.04.12 19:08 Сейчас в теме
(87)
"не знаю, что это такое, но точно знаю что это..." (когда речь об одном и том же)
Еще раз произнесу те же слова. Я не знаю, что такое оперативный учет. Но точно знаю, что бухучет должен быть оперативным. Где здесь одно и то же? Бухгалтерский учет и оперативный учет - одно и то же? Да, бухгалтерскому учету присуща оперативность. А что такое учет оперативный?
Насколько я понимаю, Вы уж точно не знаете, что такое оперативный учет, раз в ответе мне говорите про управленческий.
105. Stamper 43 18.04.12 19:11 Сейчас в теме
(103) Арчибальд, википедия нас рассудит Оперативный учет
106. Арчибальд 2709 18.04.12 19:30 Сейчас в теме
(105) Ну, не то чтобы рассудил...
Целью оперативного учёта является быстрый ежедневный сбор хозяйственной информации, уточняющей данные бухгалтерского учёта о себестоимости и выпуске продукции, расходе фонда заработной платы, рентабельности и ряда других показателей делового цикла. Посредством оперативного учёта осуществляется своевременное обобщение числовых данных в документах первичного бухгалтерского учёта и соблюдается принцип ажура. Высокая оперативность данного вида учёта обеспечивается за счёт краткости и быстроты, поскольку оперативный учёт не предполагает обязательности документирования операций.
Метод оперативного учёта состоит в непосредственном наблюдении хозяйственных операций, причём также и тех, которые невозможно непосредственно отразить в бухгалтерском учёте ― таких, как: явка работников, нагрузка на производственные мощности, простои, режим технологического процесса, характер брака. Специфика этого метода объясняет тот факт, что в оперативно-техническом учёте чаще всего применяются натуральные и трудовые измерители.
Если Вы говорили об этом учете, то вообще непонятно, зачем его приплели в разговор о Документах 1С, да и об 1С вообще. Объектная модель 1С вообще не предполагает непосредственного наблюдения операций - именно об этом я говорил, рассуждая о протяженности хоз операций во времени в противовес наличию у Документа точечного местоположения на шкале времени. Особенно мне понравилась явка работников применительно к 1С.
107. Stamper 43 18.04.12 19:37 Сейчас в теме
(106) Арчибальд,
Объектная модель 1С вообще не предполагает непосредственного наблюдения операций

РежимПроведенияДокумента (DocumentPostingMode)
Оперативный (RealTime)
Описание:
Оперативное проведение, т.е. проведение выполняется в реальном времени. При этом может, например, выполняться контроль текущих остатков. 

это выдержка из синтакс-помощника конфигуратора
черт знает сколько лет в конфигурациях реализовано раздельное поведение при оперативном и неоперативном проведении документов
откройте хоть раз конфигуратор перед вступлением в спор
112. sergathome 4 18.04.12 20:05 Сейчас в теме
(107) Stamper, кстати о птичках - модель оперативный/неоперативный крива также, как метод (!) МоментВремени(). И растут они из одного места - объять необъятное. ? ;)
114. Stamper 43 18.04.12 20:08 Сейчас в теме
(112) sergathome,
модель оперативный/неоперативный крива

обоснования?
116. sergathome 4 18.04.12 20:15 Сейчас в теме
(114) Stamper, обоснование просто как пробка - если делается система с "машиной времени", то есть запоминается всё и вся и есть возможность любого отката, то нефига пенять на дохлое быстродействие. А если нет, то будь честным. 1С 8 не является ни тем, ни другим. Факт. Один МоментВремени() с Границей чего стоят. Вы, таки разобралися с механизмом сего чуда ? ;)
118. Stamper 43 18.04.12 20:19 Сейчас в теме
(116) sergathome, лично у меня складывается чувство, что вы ни разу не внедряли 1С на действующем предприятии
"оперативный/неоперативный учет" нужен для разделения поведения программы в случае отражения операций минута в и минуту и в случае проведения задним числом
119. sergathome 4 18.04.12 20:28 Сейчас в теме
(118) Stamper, у меня есть уверенность. !. Вы имеете отношение к разработчикам платформы и ...не обслуживали ваше произведение. Или не видели альтернатив. ;)
Не обижайтесь.
Ваш "отдел продаж" выполнил свою функцию гораздо лучше отдела разработки. Увы.
Оставьте свое сообщение