Особенности написания обработок: в помощь начинающему

23.06.11

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

Часто бывает: скачал обработку с Инфостарта - хороша, все делает как надо, но вот если бы тут рюшечку добавить, было бы вообще чудесно. Открываем исходный код, и видим: ни реквизитов обработки, ни текста модуля объекта, все свалено в кучу в модуле формы.

Я своих молодых сотрудников приучаю сразу создавать объекты, максимально адаптированные к клиент-серверному варианту работы. К тому же это помогает при разборе функционала.

Приведу простой пример. Поставлена задача написать обработку (назовем ее "ОстаткиТоваров"), которая выведет в таблицу значений остатки товаров на складах на указанную дату.

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

Но! Допустим, что для какой-то другой задачи (назовем ее "СуперЗадача") тоже необходимо получать остатки по товарам на складах. Можно, конечно, скопировать основной функционал обработки "ОстаткиТоваров" и вставить его в "СуперЗадачу", подкорректировав, где это необходимо. Но можно ведь и просто использовать "ОстаткиТоваров"!

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

Что это дает?
1. Наглядная структура объекта. По реквизитам обработки сразу видны ключевые параметры. В модуле формы описаны интерфейсные функции и обработчики событий, а в модуле объекта - собственно сам функционал.
2. Доступ к необходимым параметрам из модуля формы и модуля объекта напрямую, без использования конструкции ЭлементыФормы.МойРеквизит.Значение и/или глобальных переменных объекта.
3. Доступ к функционалу объекта без необходимости получения его формы.
4. При запуске в клиент-серверном варианте в 90 случаях из 100 обработка будет корректно работать (про передачу мутабельных значений между сервером и клиентом расписывать не буду, это отдельная тема).

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

Так что, в принципе, можно считать это криком души :)

См. также

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

Математика и алгоритмы Платформа 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    4416    user1959478    50    

34

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

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

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

1 стартмани

09.06.2023    7460    4    SpaceOfMyHead    17    

56

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

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

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

1 стартмани

21.03.2022    7855    7    kalyaka    11    

44

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

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

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

16.12.2021    4444    fishca    13    

36

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

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

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

12.10.2021    8837    John_d    73    

46

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

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

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

31.08.2021    7803    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. kitminsk 205 23.06.11 08:21 Сейчас в теме
Система стандартов и методик разработки конфигураций для платформы «1СПредприятие 8.0» (версия 1.15) и такие же для 8.1 и8.2
Spacer; BonR; +2 Ответить
2. anig99 2843 23.06.11 08:47 Сейчас в теме
Если я правильно всё понял, то в управляемом приложении (8.2) в модуле обработки писать - не оптимально с т.з. количества передаваемой информации. Вызов модуля обработки из модуля формы требует передачи копии всей обработки на сервер.
О.Ж; charushkin; deadoralive; BigB; +4 Ответить
11. Damian 909 25.06.11 02:31 Сейчас в теме
(2) Не совсем верно. Предположим, что вам необходимо отобразить на форме таблицу, в которой будут содержаться данные о наличии товаров на складах + в отдельной колонке сколько этого товара находится в резерве.
Если вы попытаетесь в управляемой форме &НаКлиенте сформировать и выполнить запрос, будет ошибка. Если вы напишете процедуру/функцию, которая &НаСервере получит необходимые данные из регистров, проблем не будет.
В управляемых формах идет четкое разграничение функционала. В управляемых формах, по определению (насколько я понимаю), практически невозможно написать такой код, который будет работать в файловом варианте и будет выдавать ошибку в клиент-серверном, и наоборот (результаты выполнения кода пока рассматривать не будем :)
Однако для решения задачи по получению остатков гораздо правильнее из формы обработки вызвать функцию, описанную в модуле обработки (которая, как ни крути, будет исполняться на сервере (+скорость обработки данных, это ж сервер :)!)), которая вернет в качестве результата искомую таблицу.
18. anig99 2843 25.06.11 10:43 Сейчас в теме
(11) почитайте литература по написанию кода для управляемых приложений, посмотрите видеоуроки, погулите "управляемое приложение вызов модуля обработки", почитайте чем отличается &НаСервере и &НаСервереБезКонтекста
Вот стандартный код вызова процедуры модуля обработки из модуля формы.

&НаКлиенте
Процедура Сформировать(Команда)
сформироватьНаСервере();
КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере(Команда)
НашОбъект = РеквизитФормыВЗначение("Объект").
НашОбъект.мВыполнить();
КонецПроцедуры

Как видно в любом случае нужна процедура в модуле формы с параметром &НаСервере, которая передает на сервер ВСЁ, что является неоптимальным с т.з. объема передаваемых данных.

НаСервереБезКонтекста более предпочтительно. Поэтому оптимальный код для управляемого приложения:


&НаКлиенте
Процедура Сформировать(Команда)
........;
АдресТаблицыОстатков = ПолучитьОстатки(СписокНоменклатуры,Дата);
........;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьОстатки(СписокНоменклатуры,Дата);
Запрос.....
КонецФункции
19. anig99 2843 25.06.11 11:29 Сейчас в теме
(11) да. Единственная причина размещать процедуры в модуле обработки - использование процедур в нескольких разных формах.
3. Spartan 365 23.06.11 09:16 Сейчас в теме
В целом согласен, только не представляю, зачем можно использовать конструкцию ЭлементыФормы.МойРеквизит.Значение, если по умолчанию новые элементы формы добавляются, связанные с соответствующими новыми реквизитами формы, обращаться к которым в контексте формы можно напрямую по имени. Но это так... оступление, конечно основные параметры нужно выносить в реквизиты обработки.
7. alexk-is 6533 24.06.11 14:53 Сейчас в теме
(3) Имелось ввиду внешнее управление объектом
8. Spartan 365 24.06.11 17:31 Сейчас в теме
(7) Просто мне в голову не пришло, что можно так извратно управлять объектом извне, когда для этого есть его реквизиты... :D
9. Spartan 365 24.06.11 20:11 Сейчас в теме
(7) Хотя если на то пошло, в таком случае можно управлять опять же через реквизиты формы - Форма.МойРеквизит, через элементы вообще жесть какая-то...
12. Damian 909 25.06.11 02:37 Сейчас в теме
(3) А как вы сможете получить значение реквизита, который существует ТОЛЬКО на форме? Придется писать что-то типа этого:
Форма = МояОбработка.ПолучитьФорму("Форма");
НужноеЗначение = Форма.ЭлементыФормы.МойРеквизит.Значение;
Иначе, если элемент формы не связан с реквизитом обработки, вы до его значения из модуля, извне, и наконец, через COM-объект, не доберетесь.
16. Spartan 365 25.06.11 08:59 Сейчас в теме
(12) С трудом представляю себе необходимость создать элемент формы, не связанный с данными (реквизитом объекта либо реквизитом формы). Извне в таком случае я доберусь так:
Форма = МояОбработка.ПолучитьФорму("Форма"); 
НужноеЗначение = Форма.МойРеквизит;

Ну да ладно - это не суть важно... Я-то как раз для управления объектом обработки как правило создаю реквизиты, если конечно обработка не разовая, когда нет желания париться такими вещами.
4. Andrew0 23.06.11 13:27 Сейчас в теме
В современном мире дешевле докупить сервер, чем оплачивать оптимизацию ПО, т.к. время дороже всего. Оттого качество кода в принципе никого не волнует, лишь бы работало
AnryMc; BigB; Frodo.37; +3 1 Ответить
6. Spartan 365 23.06.11 17:29 Сейчас в теме
(4) А что мешает писать сразу "грамотно", а не оптимизировать потом?
5. romansun 193 23.06.11 14:28 Сейчас в теме
в некоторых случаях сервер не поможет и придётся лезть в код... :D
10. IRLes 207 25.06.11 00:04 Сейчас в теме
Ох! Если уже вспомнить о невероятных кодах, расскажу случай :)
Для начала опишу рабочее место ОДНОГО сотрудника: стол на 10 персон, на столе 4 компьютера, рядом один стул на колёсиках, а на полу ... не побоюсь этого слова, КОЛЕЯ!
Так вот, работа этого сотрудника заключалась в том, что он на одном компьютере запускает отчет, "едет" к другому компьютеру и на нем что-то делает, потом к следующему и т.д. Оказалось, что это связано с очаровательным запросом в цикле и очаровательным запросом "ПриВывоеСтроки" - это больше всего поразило.
И как Вы думаете, что потом сказал этот сотрудник, когда все ошибки прошлого "кодера" были исправлены? А ЧТО МНЕ ТЕПЕРЬ ДЕЛАТЬ, я уже всю работу выполнил? :D
13. Damian 909 25.06.11 02:59 Сейчас в теме
Немного отвлеченно от темы, но все же...
Мой коллега Dankos рассказал такую историю:
Один бывалый программист спросил у молодого:
- Ну, как, твоя программа работает под WinXP?
- Да! Потребляет ресурсов всего 16 МБ!
- А, ну-ну. А на Win98?
- А то! То же самое : 16 МБ и ни байтом больше.
- И чем ты гордишься? Если твоя программа не умеет подстраиваться под доступные ресурсы системы и отбирает у нее все, что ей необходимо, ей суждено быть однодневкой, которая работает нормально только под WinXP.
Ту же аналогию можно привести и под Win7
Что хочу сказать этим: оптимизация кода никогда не выйдет из моды (необходимости), поскольку платформы меняются, а нам, разработчикам, приходится под это дело подстраиваться...
А жаль... Лучше бы они подстраивались под требования разработчиков...
14. webester 26 25.06.11 04:52 Сейчас в теме
(13)Какой откровенный бред, если программе нужно 16 мегабайт памяти, что теперь на win98 функционал отрубать? Или какие предложения?
>>Лучше бы они подстраивались под требования разработчиков...
Напоминает грустные просьбы юзеров а почему нельзя просто сделать чтоб работало...
17. Altair777 644 25.06.11 09:32 Сейчас в теме
(13) фигня это - а сколько МБ сожрет такая подстройка? и на сколько усложниться код и увеличаться затраты при написании и последующей доработке?
вот это и будет однодневка, потому что мало кому захочется заниматься ее сопровождением если там будет много ненужного и непонятного функционала? ведь это системное программирование, а не прикладное
P.S.может нужно и под будущие платформы подстравиваться? :)
15. Abadonna 3958 25.06.11 06:23 Сейчас в теме
(0)
Потому что, когда я открываю чью-то разработку, мне первым делом интересен метод решения задачи, который (несомненно) описан в модуле объекта.

На вкус и цвет... Лично мне просто лень делать лишние телодвижения, чтобы открыть модуль объекта. А метод решения задачи мне интересен в соответствующих функциях процедурах того же модуля формы. А на кнопке Выполнить вообще ничего не должно быть, кроме вызова вышеупомянутых. На мой вкус...
А функции и процедуры, которые мне однозначно еще неоднократно понадобятся, я просто выношу в дополнительный общий модуль и не парюсь.
Куда как приятнее набрать МойМодуль, поставить точку, и получить в выпадающем списке ту же самую ОстаткиТоваров(
Кстати, вот что фирма недоделала: в настоящих языках после точки не только имя, но и необходимые параметры показывает
20. tango 506 25.06.11 11:41 Сейчас в теме
по ходу в (0) важны не технические рекомендации, а отношение автора.
у тебя есть подчиненные, ты либо управляешь ими настолько неэффективно, что приходится лазить в их код, либо твой функционал настолько бесполезен, что тебе больше делать нечего.
имхо: подобные "крики" уместны были бы при разработке типовух. но, насколько видно по тем же типовым, именно "флагмана" это парит в последнюю очередь
и все эти "системы стандартов" (1) - не более чем надувание щек, типа ISO
Istur; vkr; +2 Ответить
21. tango 506 25.06.11 11:52 Сейчас в теме
+(20) перечитал пост, подумалось - не слишком ли резко отозвался? пошел смотреть коды автора, что же видим у гуру?
Перенумератор! улыбнуло так, что дальше смотрел уже без злости
как бы (12) появился не на пустом месте.
Коллега (0), вы где подвизаетесь на руководящей должности, не в БиТе ли?
Прикрепленные файлы:
22. Altair777 644 25.06.11 11:56 Сейчас в теме
(21) я тоже смотрел и тоже самое заметил :D
интуиция мне подсказывает что здесь фигня написана, но знаний по 8-ке у меня недостаточно чтобы с совсем чистой совестью минус поставить
23. tango 506 25.06.11 12:06 Сейчас в теме
(22) минуса заслуживает не содержание, а именно обращение как от гуру к начинающим, собственно крик
40. nafa 657 27.06.11 10:54 Сейчас в теме
[quote]я потому и запостил (21)-(27) : нету у автора практического опыта. ну, ладно, близкий к нулю[/quote]
Не усматриваю в простоте статей отсутствия практического опыта.
Вот еще пример: самый лучший интерфейс для файлового менеджера изобрела маленькая фирма (Norton Commander, помним?) 30 лет назад, и ни одна мегакорпорация (Microsoft, Apple, Google и т.п.) до сих пор ничего лучше не придумала, несмотря на все старания.
"+" - отражают ценность статьи, программы для пользователя (потребителя), а не сложность и затраты времени разработчика.
41. tango 506 27.06.11 10:57 Сейчас в теме
43. Altair777 644 27.06.11 11:31 Сейчас в теме
(40)
nafa пишет:
до сих пор ничего лучше не придумала, несмотря на все старания

Вы бы еще Тетрис вспомнили :D
Кто сейчас пользуется NC? Я вообще ничего не слышал о нем уже несколько лет. А все его клоны популярны потому, что от того древнего файлманагера только двухпанельность унаследована.. и все! Без плагинов они были бы ни чем не лучше проводника.
MaxDavid; +1 Ответить
48. nafa 657 27.06.11 12:28 Сейчас в теме
(43)
Altair777 пишет:
Кто сейчас пользуется NC...

Когда ДОСом пользоваться приходится тогда и используется. (У меня последний случай был 2 недели назад - надо было восстановить обнулившийся MAC адрес для встроенной сетевухи на материнке, а соответствующая утилита под виндой не живет).
А все его клоны популярны потому, что от того древнего файлманагера только двухпанельность унаследована.. и все!

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

Это вобще-то совсем другого рода вещи, чем статься. УПП у меня нет, и проанализировать полностью данный модуль я не могу. Также надо отметить, что в общем случае ISNULL не эквивалентен данной конструкции, так как для поля Выборка.КоличествоРеализованных может требоваться различать значения 0 и NULL. Значения типа NULL могут иметь особую обработку, например в СКД (пропуск группировок).
49. tango 506 27.06.11 12:43 Сейчас в теме
(48) "вообще-то" это как раз то же самое, только на уровне чуть больше "почистить зубы". именно поэтому, коллега, вместо того, чтобы тупо плюсануть, вы начинаете показывать, что вы тоже что-то знаете

"поля Выборка.КоличествоРеализованных может требоваться различать значения 0 и NULL" - если вдруг так, тем более это надо делать в запросе
57. tango 506 27.06.11 15:24 Сейчас в теме
(48) "Когда ДОСом пользоваться приходится тогда и используется. (У меня последний случай был 2 недели назад - надо было восстановить обнулившийся MAC адрес для встроенной сетевухи на материнке, а соответствующая утилита под виндой не живет)."

Вы, коллега, по ходу - "сисадмин со знанием 1с"
62. nafa 657 27.06.11 16:26 Сейчас в теме
(57)
Вы, коллега, по ходу - "сисадмин со знанием 1с"

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

Есть, неудобные до неработоспособности.
Вот пример простой: надо из каталога, в котором 100 файлов выделить произвольные 30, попутно просматривая содержимое? В Нортоне элементарно - F3 просматриваем, Ins отмечаем. Мышка не нужна. Как это в проводнике сделать (пусть даже с помощью мышки?) (Это я молчу про то, что проводник сделали лет через 15 после Нортона, а уж насколько больше было вбухано денег даже лучше и не думать).
67. Altair777 644 01.07.11 10:13 Сейчас в теме
(62)
nafa пишет:
В Нортоне элементарно - F3 просматриваем, Ins отмечаем. Мышка не нужна

мда.. совсем плохо

исправлено: :)
зачем F3 если есть Ctrl+Q? (в тотале)
68. vkr 01.07.11 11:07 Сейчас в теме
58. Altair777 644 27.06.11 15:29 Сейчас в теме
(48)
nafa пишет:
но и горячие клавиши и дополнительные функции (встроенный поиск файлов, просмотрщик, редактор, сортировка, работа с архивами)

теперь все понятно: эти детские восторги взялись от незнания мат.части - в проводнике это тоже все есть
61. tango 506 27.06.11 15:43 Сейчас в теме
64. vkr 28.06.11 12:23 Сейчас в теме
(43) Ну, все файлменеджеры класса FAR, TC и т.д. популярны, в первую очередь,
среди тех, кто умеет грамотно пользоваться клавиатурой.
Потому как скорость работы с файлами в разы выше, чем для мышки.
Эргономика, туды ее в качель... :)
Да и плугинов полезных тоже немеряно для них.

А если по теме - ну вот взяли бы все вместе (кто про обработки и 8.2 знает)
и написали некий FAQ - как НАДО делать и как НЕ НАДО делать...
И визгу было бы меньше...
З.Ы. И я бы тоже поучился у вас с удовольствием... :)
65. alexk-is 6533 01.07.11 07:04 Сейчас в теме
(64) Так есть же уже и кроме этого находится в непрерывном процессе улучшения. :)
Вот прямая ссылка: http://infostart.ru/
66. vkr 01.07.11 09:24 Сейчас в теме
(65) Ну да, ну да... А также DirectHands.sys и SmartHead.sys :)
24. Altair777 644 25.06.11 12:10 Сейчас в теме
я свой минус поставил.... ;)
25. tango 506 25.06.11 12:15 Сейчас в теме
едем дальше.
загрузка екселя.
взята типовуха, добавлено решение коллеги wildhog, собрано 27 плюсов
как бы и не перенумератор, чего уж там... Но!
читаем коллегу wildhog:
"...большинство обработок - законченные решения выполняющие различные функции, а не только ПРОСТОЕ чтение файла. (искренний респект и уважение авторам) Я же предлагаю всего лишь функцию быстрого чтения файла Excel. Готовых обработок в этой области не выкладываю - дублировать существующие нет смысла, или они явно не дотягивают по функционалу до уже выложенных :)"

улыбнуло еще раз
34. Abadonna 3958 27.06.11 03:11 Сейчас в теме
(25), (31) 2 tango
Напрасно ты про авторские обработки ;) В последнее время а на Инфостарте прям априори считается, что любой с нулевым или чуть поболее рейтингом, является скромным гением, которому просто плевать на рейтинг (и при чем тут рейтинг?). Удивляют плюсующие: вы что, не знали раньше, что желательно применять функции и процедуры? И это для вас божественное откровение? Или, наоборот, вам все это хорошо известно, но спасибо автору, что других дурачков просветил?
пока однажды не осознал, что это очевидно мне, но никак не вообще всем.

Правильно! Столько причин для смерти, зачем добавлять еще одну - от скромности? :D
41 плюс (на данный момент) НИ ЗА ЧТО.
35. tango 506 27.06.11 09:57 Сейчас в теме
(34) ну как бы общий уровень отражаит.
есть плюсы, есть минусы (я о состоянии рынка 1снегов)
charushkin; +1 Ответить
26. tango 506 25.06.11 12:37 Сейчас в теме
дальше, "Корректный перенос остатков из другой базы через COM", 20 плюсов

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

имхо, слово "корректный" в заголовке смутило даже самого автора настолько, что он дважды в публикации оговаривается "ни-ни, это я так просто, поучить новичков..."
но заголовок не сменил, что, опять же достойно 1снега
27. tango 506 25.06.11 13:04 Сейчас в теме
дольше, "Для специалиста 1С : Работаем с АшиПками", 9 плюсов

семерка. доработка решения коллеги kompas-dm

ну, что же, это, видимо и есть опыт "боевого" программинга, работы "в поле" самого автора

разбирать не стоит - стоит просто почитать комменты к той публикации

ПС: короче, присоединяюсь к коллеге Altair777
28. Altair777 644 25.06.11 13:22 Сейчас в теме
автор, это еще хорошо что публикация бесполезная, а не вредная
иначе я бы ее просто удалил
29. anig99 2843 25.06.11 14:16 Сейчас в теме
(28) ну почему же... для управляемых форм - вредная. Размещение процедур и функции в модуле объекта в случае управляемых форм - вынужденная и крайняя мера.
30. Yashazz 4709 26.06.11 10:47 Сейчас в теме
Идейно верная статья. Я тоже долго полагал всё это очевидным, и тоже всегда затачивал максимально под клиент-сервер, внешний вызов и всё такое, пока однажды не осознал, что это очевидно мне, но никак не вообще всем. Поэтому принципиально хорошо, что такие вещи озвучиваются и внимание на этом заостряется. Тонкий 8.2 - тоже отдельный момент, но хоть внимание привлечено.
31. tango 506 26.06.11 12:13 Сейчас в теме
(30) плохо вы еще читаете авторские материалы, коллега.
где там "тоже долго полагал всё это очевидным"?
во-первых, там совсем другое: "Я своих молодых сотрудников приучаю сразу"
во-вторых, сколько у автора "старых" сотрудников? казалось бы, научил один раз и спи спокойно :)
так нет же - криком исходит, а франь и есть франь
32. Yashazz 4709 26.06.11 15:11 Сейчас в теме
(31) Я не про "авторские материалы". Я про то, что вообще состоялся этот разговор. Ибо многие сидят по углам и думают, что всё понимают, а подобная ревизия полезна тем, что всколыхнёт и кой-чего заставит актуализировать, а то и пересмотреть кардинально. Что там писал автор - десятое дело, у каждого своя имха и стиль. Флагман же, как верно сказано, и сам не очень-то подаёт пример.
33. anig99 2843 26.06.11 18:14 Сейчас в теме
Что тут говорить, если люди после института и пары лет работы не могут разумно разбивать код на процедуры и функции, структурно оформлять код и т.д. чему меня, например, ещё в школе учили.
36. nafa 657 27.06.11 10:06 Сейчас в теме
Нормальная статья.
[quote]все свалено в кучу в модуле формы[/quote]
В типовых не лучше.
Разработчики платформы поленились сделать, чтобы при создании обработчиков из панельки со свойствами, эти обработчики вставлялись не в конец, а сортировались по реквизитам.
Насчет простоты статьи - половина компаний из списка 30 крупнейших в мире отнюдь не космическими технологиями занимается, вообще всякую примитивщину выпускает - бритвы (Gilette), булочки с мясом (McDonalds) и т.п. Так что вопрос не только в том, что сделать, но и как сделать. На этом сайте не диссертации защищают, а обмениваются практическим опытом. Чем проще и надежнее - тем лучше.
37. tango 506 27.06.11 10:35 Сейчас в теме
(36) "обмениваются практическим опытом"

об том и речь

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

а давать советы типа (0) может придти в голову только маленькому начальнику от айти
(именно давать советы типа чистить зубы по утрам)
я потому и запостил (21)-(27) : нету у автора практического опыта. ну, ладно, близкий к нулю. какой же уровень должен быть у тех, кто увидел полезность в сабже?
38. nafa 657 27.06.11 10:44 Сейчас в теме
[quote]когда тебе надо при нулевом бюджете закрыть очередную хотелку... то ты просто ставишь реквизит дата в форму и все[/quote]
Причем здесь бюджет и реквизит в форме? Для того чтобы его разместить где положено, что сервер новый нужен или лицензии какие?
39. Арчибальд 2706 27.06.11 10:48 Сейчас в теме
(38) При нулевом бюджете приветствуется нулевое качество :D
MaxDavid; +1 Ответить
42. tango 506 27.06.11 10:57 Сейчас в теме
(38) ну, собственно, я именно об этом (см. (39) - доля шутки)
44. tango 506 27.06.11 11:42 Сейчас в теме
вот, впечатлимшись простотой, для новичков на ИС публикую:

в типовых можно встретить (например, в УПП при заполнении отчета комитенту)
в цикле выборки запроса вот такую бадью:
Код
КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);
Показать полностью


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

используйте ISNULL тексте запроса
45. tango 506 27.06.11 11:53 Сейчас в теме
не, ну это вообще песня:
Код
   Пока Выборка.Следующий() Цикл
      КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);
      КоличествоПолученных    = ?(Выборка.КоличествоПолученных = NULL, 0, Выборка.КоличествоПолученных);
      Выручка                 = ?(Выборка.Выручка = NULL, 0, Выборка.Выручка);
      Количество              = Мин(КоличествоПолученных, КоличествоРеализованных);
Если Количество = 0 Тогда 
Продолжить;
КонецЕсли;


Показать полностью
46. tango 506 27.06.11 11:57 Сейчас в теме
то же, но уже для РАУЗа:

Код
   Пока Выборка.Следующий() Цикл
      КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);
      Если КоличествоРеализованных < 0 Тогда
         ОбщегоНазначения.СообщитьОбОшибке("Обнаружено отрицательное количество реализованных товаров "
         + Выборка.Номенклатура + " " + Выборка.ХарактеристикаНоменклатуры + " " + Выборка.СерияНоменклатуры);
         Продолжить;
      КонецЕсли;   
      КоличествоПолученных    = ?(Выборка.КоличествоПолученных = NULL, 0, Выборка.КоличествоПолученных);
      Если КоличествоПолученных < 0 Тогда
         ОбщегоНазначения.СообщитьОбОшибке("Обнаружено отрицательное количество полученных на комиссию товаров " 
         + Выборка.Номенклатура + " " + Выборка.ХарактеристикаНоменклатуры + " " + Выборка.СерияНоменклатуры);
         Продолжить;
      КонецЕсли;
      Выручка                 = ?(Выборка.Выручка = NULL, 0, Выборка.Выручка);
      Количество              = Мин(КоличествоПолученных, КоличествоРеализованных);

      мВалютаУправленческогоУчета = глЗначениеПеременной("ВалютаУправленческогоУчета");
      СтруктраКурса = МодульВалютногоУчета.ПолучитьКурсВалюты(мВалютаУправленческогоУчета,Дата);
      Выручка    = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Выручка
                           ,мВалютаУправленческогоУчета,ДоговорКонтрагента.ВалютаВзаиморасчетов
                           ,СтруктраКурса.Курс, КурсВзаиморасчетов
                           ,СтруктраКурса.Кратность, КратностьВзаиморасчетов);
      Если Количество = 0 Тогда  Продолжить; КонецЕсли;

Показать полностью
50. Ish_2 1104 27.06.11 13:45 Сейчас в теме
(46) Миша , твоё возмущение от непонимания.
Пока Выборка.Следующий() Цикл
КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);

Так как ты опустил текст предшествующий данному коду ,
то я могу допустить своё дополнение :
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл 
     КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных); 
.....


Теперь предположим , что итоги по полю "КоличествоРеализованных" не рассчитываются.
Тогда "КоличествоРеализованных" на всех уровнях группировок кроме последнего будут содержать NULL.
Причем присутствие NULL в итоговых строках запроса никаким ISNULL это не устраняется.

Другими словами , твой обрезанный пример ничего не говорит о качестве кода.
Istur; tsd; MaxDavid; artbear; nafa; +5 Ответить
51. Abadonna 3958 27.06.11 13:47 Сейчас в теме
52. Арчибальд 2706 27.06.11 14:06 Сейчас в теме
47. tango 506 27.06.11 12:04 Сейчас в теме
полный текст шедевра от флагмана (как НЕ надо делать)
Прикрепленные файлы:
Новый1.txt
53. Sintson 411 27.06.11 15:04 Сейчас в теме
Я так понимаю, автор призывает к модульности.
Хотя в данном конкретном примере, на мой взгляд процедуру получения остатков имеет смысл разместить в общем модуле,
для случая, когда отчет (обработка) ориентирован на конкретную конфигурацию и в теле самого отчета (обработки),
если планируется использовать на нескольких.
К тому же 1С - четко указывает на то как писать
и что где размещать в своих рекомендациях к разработчику.
54. tango 506 27.06.11 15:07 Сейчас в теме
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

откуда взято поГруппировкам?
55. tango 506 27.06.11 15:08 Сейчас в теме
+ нафа к 50 весьма красноречив
56. CheBurator 3119 27.06.11 15:19 Сейчас в теме
Sintson пишет:
К тому же 1С - четко указывает на то как писатьи что где размещать в своих рекомендациях к разработчику.

- ссылочку, плиз!
59. Sintson 411 27.06.11 15:34 Сейчас в теме
(56)
Извольте:
На любом диске ИТС в разделе Технологическая поддержка/Документация/Система стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8.1
60. tango 506 27.06.11 15:41 Сейчас в теме
(59) Уважаемый коллега, не могли бы вы указать образец вашего личного следования оным "стандартам и методикам"?
ну, очень интересно.
мы ведь здесь, по сабжу, личным опытом делимся, нет?
63. Sintson 411 28.06.11 11:29 Сейчас в теме
(60) Не вижу повода для иронии.
69. Damian 909 03.07.11 23:09 Сейчас в теме
C интересом наблюдал за комментариями, порадовали.
Спасибо всем, кто принял участие в обсуждении - и критикующим, и поддерживающим.
Поддерживающим мою точку зрения выражаю благодарность, а критикующим могу сказать следующее:
1. Я ни в коем случае не претендую на звание "гуру" и не являюсь руководителем никакого отдела.
2. Если вы, высокоуважаемые гуру Инфостарта, считаете мою публикацию бесполезной (а кое-кто и вредной), то вы вполне можете написать мне личное сообщение и я ее скрою/удалю (или, на крайний случай, вы можете воспользоваться своими правами модераторов, и удалить ее самостоятельно)
3. Если вы считаете, что на Инфостарте развелось чересчур много "велосипедов", вам пора внедрять систему жесткой премодерации. И, если новая публикация в чем то дублирует уже существующую, необходимо нещадно разить ее автора молниями великого Админа.
4. Я считаю, что этот ресурс был создан для того, чтобы люди обменивались опытом и наработками, независимо от объемов и сфер применения. К примеру, все дети рисуют солнце, и никто (заметьте высокоуважаемые гуру, никто!) не говорит им, что, мол "это солнце уже нарисовал твой сосед Вася, это баян, рисуй лучше синхрофазотрон, его еще никто из наших соседей не изображал" :)
5. Хочется вас спросить, уважаемые tango (основной критикан), Altair777, Арчибальд и, пожелавший оставить минус без комментария, almas, может выйдем на прямой диалог, в котором вы, как гуру Инфостарта, укажете мне на ошибки, в результате чего я смогу делать публикации более полезней для пользователей сайта.
Мы ведь за это боремся, не так ли?..
72. Altair777 644 04.07.11 10:19 Сейчас в теме
(69)
Damian пишет:
укажете мне на ошибки

ошибка простая - Вы сбиваете с толку начинающих программистов, навязывая им свои спорные советы
73. Арчибальд 2706 04.07.11 10:49 Сейчас в теме
(69) Вот вспомнилось...
Полковник Фридрих Краус фон Циллергут (Циллергут--
название деревушки в Зальцбурге, которую предки полковника
пропили еще в восемнадцатом столетии) был редкостный болван.
Рассказывая о самых обыденных вещах, он всегда спрашивал, все
ли его хорошо поняли, хотя дело шло о примитивнейших понятиях,
например: "Вот это, господа, окно. Да вы знаете, что такое
окно?" Или: "Дорога, по обеим сторонам которой тянутся канавы,
называется шоссе. Да-с, господа. Знаете ли вы, что такое
канава? Канава -- это выкопанное значительным числом рабочих
углубление. Да-с. Копают канавы при помощи кирок. Известно ли
вам, что такое кирка?"
Он страдал манией все объяснять и делал это с
воодушевлением, с каким изобретатель рассказывает о своем
изобретении.
"Книга, господа, это множество нарезанных в четвертку
листов бумаги разного формата, напечатанных и собранных вместе,
переплетенных и склеенных клейстером. Да-с. Знаете ли вы,
господа, что такое клейстер? Клейстер -- это клей"...
Благодаря приятельским отношениям с корпусным генералом и
другими не менее тупыми военными сановниками старой Австрии он
получал разные награды и ордена, которыми гордился чрезвычайно;
он считал себя лучшим солдатом под луной, лучшим теоретиком
стратегии и знатоком всех военных наук. На полковых смотрах он
любил поговорить с солдатами и всегда задавал им один и тот же
вопрос: почему введенные в армии винтовки называются
"манлихеровки"?
В полку о нем говорили с насмешкой: "Ну вот, развел свою
манлихеровину !"
Показать
Istur; Ish_2; MaxDavid; cool.vlad4; +4 Ответить
74. cool.vlad4 2 04.07.11 10:54 Сейчас в теме
(73) чертовски классная книжка :D я в жизни таких людей встречал, начальников :D вспоминал Гашека и еле от смеха сдерживался....
75. anig99 2843 04.07.11 10:59 Сейчас в теме
76. cool.vlad4 2 04.07.11 11:03 Сейчас в теме
79. Abadonna 3958 04.07.11 15:01 Сейчас в теме
(73)
Вот вспомнилось...

Неправильная у тебя вспоминалка :D
Там есть гораздо лаконичнее:
Потом фельдкурат пустился в откровенность: рассказал, что он должен за верховые сапоги, за хлыст и седло, что несколько лет тому назад у него был триппер и он лечил его марганцовкой.
70. MaxDavid 127 04.07.11 01:40 Сейчас в теме
все дети рисуют солнце

:?: :!: :idea:
71. tango 506 04.07.11 09:08 Сейчас в теме
Damian пишет,
1. Я ни в коем случае не претендую на звание "гуру" и не являюсь руководителем никакого отдела.

по (0) " Я своих молодых сотрудников приучаю "
78. tsd 105 04.07.11 13:51 Сейчас в теме
(71) Наверное все же более корректно начинать критику статьи не с доказательств, что автор вовсе не "гуру", а "лох чилийский" потому как вот тут, тут и тут код кривоватый пишет, а с разбора самой статьи и ее полезности или вредности.

Кстати, по поводу стандартов в (20) не соглашусь. Использование стандартов сильно упрощает жизнь при разработке/доработке и особенно когда используешь различные нетленки (скачанные в том числе и с Инфостарта).

(69)
69.1 Любой пишущий статью на тему "а это делать лучше так", по сути, выступает в роли некоего гуру делящегося опытом.
69.2 Общение в личке не проходит, статья то публичная, соответственно и обсуждение должно быть публичным.


Лично мне первый абзац статьи даже очень понравился, ибо правильный он :D, а вот дальше как то не очень.

Все ниже написанное, да и выше тоже, является исключительно моим ИМХО никоим образом не претендующим на окончательную инстанцию и т.п.
Вы можете быть не согласны с любым изречением, но ежели доступно не растолкуете почему, то фиг с вами :D

Моя ложка дегтя:

А)
Поставлена задача написать обработку (назовем ее "ОстаткиТоваров"), которая выведет в таблицу значений остатки товаров на складах на указанную дату.

Звиняйте, но если мы пишем статью о правильном использовании объектов, реквизитов, размещении кода и т.п. наверное стоит правильно оперировать видами объектов? Давайте вспомним чем отличается отчет от обработки.
В приведенном примере, "ОстаткиТоваров" как объект метаданных является типичным отчетом и не надо обзывать его обработкой. Это далеко не мелочь, кому придет в голову искать отчет взаиморасчеты или ведомость по товарам на складах в обработках?

Б) Следующие 3 абзаца или часть кода из отчета "ОстаткиТоваров" используется некой другой суперзадачей (я так понимаю другим объектом метаданных).

Возможно просто приведен неудачный пример, но как говорится, что написано пером ...
Начали мы использовать часть кода из отчета "ОстаткиТоваров" в нашей "СуперЗадаче". Через полгода взяли да и хезанули "ОстаткиТоваров" (ну не нужен нам больше этот отчет) и что будет с "СуперЗадачей"?
Возможно стоит обратиться к "ленивому" Abadonne в (15) и вcпомнить предназначение общих модулей?

В) А про какого клиента мы говорим?
В 8.2 в зависимости от режима работы модули форм и объектов используются по разному.
судя по скриншоту и
ЭлементыФормы.МойРеквизит.Значение
разговор идет про толстого клиента и обычные формы (аля 8.1), в (11)говорим про управляемое приложение и тонкие формы.

Если про управляемое, то почему упущен момент разжеванный в (18)? Это концептуальный момент.
Какова ресурсоемкость оператора НашОбъект = РеквизитФормыВЗначение("Объект") для системы?
Что важнее: оптимизация количества кода и удобство его изменения ИЛИ снижение нагрузки на сервер при работе в тонком клиенте или уменьшение объема перегоняемых данных при использовании web интерфейса?

Напоследок
Почему я это все написал? Потому что, когда я открываю чью-то разработку, мне первым делом интересен метод решения задачи, который (несомненно) описан в модуле объекта.


Как то очень безапелляционно и без объяснения почему так. А почему, например, не в модуле менеджера, если речь про управляемое приложение?
Из сабжа и всех постов самое логичное и лаконичное в (19).

На мой взгляд, пока минус. Возможно в результате прямого диалога автора с вышеобозначенными гуру мнение свое изменю :D
80. nafa 657 04.07.11 23:01 Сейчас в теме
(78)
[quote]Звиняйте, но если мы пишем статью о правильном использовании объектов, реквизитов, размещении кода и т.п. наверное стоит правильно оперировать видами объектов? Давайте вспомним чем отличается отчет от обработки.[/quote]
Ну судя по тому, что вывод предполагается в таблицу значений, а не табличный документ
[quote]Поставлена задача написать обработку (назовем ее "ОстаткиТоваров"), которая выведет в таблицу значений остатки товаров на складах на указанную дату.[/quote]
то есть с ним видимо будут что-то делать, это скорее обработка, чем отчет.
[quote]Начали мы использовать часть кода из отчета "ОстаткиТоваров" в нашей "СуперЗадаче". Через полгода взяли да и хезанули "ОстаткиТоваров" (ну не нужен нам больше этот отчет) и что будет с "СуперЗадачей"?
Возможно стоит обратиться к "ленивому" Abadonne в (15) и вcпомнить предназначение общих модулей?[/quote]
1. А если общий модуль "хезануть", то что-то другое будет?
2. У общего модуля нет реквизитов.
[quote]Из сабжа и всех постов самое логичное и лаконичное в (19).[/quote]
Ну вообще-то еще бывает, что:
1. У обработки нет формы.
2. Необходимо вызывать функция/процедуру в режиме внешнего соединения
Вообще разделение кода между формой и модулем в 8.1/8.2 в нормальном режиме довольно логично. Очень похоже на "взрослые" среды программирования. В 8.2 в управляемом режиме почти все стянули в модуль формы, что реально неудобно.
82. Abadonna 3958 05.07.11 03:33 Сейчас в теме
(80)
Ну вообще-то еще бывает, что:
1. У обработки нет формы.

Забыл еще один случай: вообще нет обработки :D
Спор ни о чем. Кто как хочет, так @@очит. Лично я полезу в модуль только в крайних случаях, ибо и так достала куча окошек в конфигураторе.
Подход автора не лучше и не хуже, просто один из возможных.
77. cool.vlad4 2 04.07.11 11:05 Сейчас в теме
:D на лурке даже отрывок этот есть в статье К.О.
81. Kamikadze 46 04.07.11 23:03 Сейчас в теме
Что тут сказать - прошел єтот етап по своих же граблях. Думаю, что начинающим сттья будет полезной.
83. Tokiy 131 07.07.11 16:23 Сейчас в теме
А действительно, че, общие модуля в восьмерке отменили?

nafa пишет:
1. А если общий модуль "хезануть", то что-то другое будет?


Вобщето общий модуль предназначен, именно, для размещения общих процедур и функций.

nafa пишет:
2. У общего модуля нет реквизитов.


Но есть параметры...

Если же нужна некая форма для "суперзадачи" можно подумать про общие формы.
Уж если есть желание делать правильно, то не нужно делать наполовину правильно.
Нужно выбирать оптимальное решение (где-то модуль формы, где-то модуль объекта, где-то общий модуль и т.д.), а то получается другая крайность: - "новички пишите-ка вы в модуль объекта все, мне как вашему начальнику там удобнее читать".
В общем статья недоделаная что еще больше смутит "новичков". ИМХО.

P.S. Автор воспринимайте критику достойно, а не критикуйте критикующих.
84. nafa 657 08.07.11 22:07 Сейчас в теме
(83)
1. Вопрос про "хезануть" касался не правильности размещения процедуры в модуле, а то что обработку можно случайно удалить. Так вот мой комментарий был в том, что общим модуль тоже можно случайно удалить. Еще проще. (На обработку могут быть ссылки, которые не дадут это сделать).
2. Про реквизиты и параметры (видимо имеются в виду параметры сеанса). Параметры сеанса как и глобальные переменные не являются заменой реквизитов объекта, так как существуют в единственном числе в то время, как "ОбработкаОбъект" может существовать во множественном числе и реквизиты у различных экземпляров объекта одного класса могут быть разными.
Если же нужна некая форма для "суперзадачи" можно подумать про общие формы.

Те же самые замечания, что и выше. У суперзадачи могут быть также несколько форм, или ни одной формы, но несколько макетов. И т.п. В определенных случаях (а в статье разбирается определенный случай, а не вообще) действительно удобна именно обработка. Пример - внешние печатные формы, обработки обслуживания торгового оборудования и т.п.
85. tsd 105 08.07.11 22:46 Сейчас в теме
(84)
Вопрос про "хезануть" касался не правильности размещения процедуры в модуле, а то что обработку можно случайно удалить

Да нет, как раз не случайно удалить/изменить, а сознательно. Например, по новым требованиям изменить логику работы отчета/обработки с изменением запроса и данных им возвращаемых.
Код расположенный в модулях объекта принадлежит объекту. Если есть некий универсальный код, который может использоваться несколькими объектами метаданных, welcome в общие модули.

Про реквизиты и параметры (видимо имеются в виду параметры сеанса)

:D Извините, улыбнуло. Искренне надеюсь, что это влияние пятницы.
87. Tokiy 131 20.07.11 13:57 Сейчас в теме
(84)

nafa пишет:
Про реквизиты и параметры (видимо имеются в виду параметры сеанса).


Имелись в виду параметры процедур и функций, а не параметры сеанса :)
86. romansun 193 08.07.11 22:50 Сейчас в теме
товарищи, не будьте категоричны

Соблюдайте меру - когда мне нужна тупо обработка с N тупыми кнопками и M не менее тупыми полями выбора, я не буду ничего писать ей в модуль объекта, это заставляет меня делать лишние клики, держать в уме два модуля и постоянно перетыкиваться между ними. И ради чего это?

Когда я пишу "объектно-ориентированный" код :), т.е. который будет, к примеру, работать без формы, то, конечно, вовсю задействуется модуль объекта.

Когда я пишу некую, скажем так, подсистему, то логично выносить что-то в общие модули, модули объектов и вся такая пижня таком духе.

Т.е. для разных задач разная реализация и разные трудозатраты.


Вообще, имхо, надо исходить в работе из наиболее оптимальной схемы телодвижений. В идеале. Лишние телодвижения в данный момент оправданы только будущим каким-либо профитом - опытом, масштабируемостью приложения, скоростью работы и т.д.
88. toshka 15.09.11 15:20 Сейчас в теме
4. Я считаю, что этот ресурс был создан для того, чтобы люди обменивались опытом и наработками, независимо от объемов и сфер применения. К примеру, все дети рисуют солнце, и никто (заметьте высокоуважаемые гуру, никто!) не говорит им, что, мол "это солнце уже нарисовал твой сосед Вася, это баян, рисуй лучше синхрофазотрон, его еще никто из наших соседей не изображал"


Полностью согласен с автором публикации!!! Ресурс всегда служил хорошим "учебником" для программистов
и очень жаль что в последнее время стало много критики "интелекта" авторов, а не реальных советов.
89. trumanl 12 28.02.12 17:21 Сейчас в теме
Полезные советы в понятной форме всегда пригодятся) Спасибо.
90. alina.sorok 6 29.02.12 13:08 Сейчас в теме
Эх, вот вам еще крик души - да, сделали управляемые формы, но как-то так топорно:
1. Почему в серверных методах недоступены методы самого объекта? Почему обязательно РеквизитФормыВЗначение() для основного реквизита вызывать надо?
2. И при этом РеквизитФормыВЗначение() не срабатывает для внешних отчетов-обработок. И как такое отлаживать?
3. А еще у внешних нет команд объекта, и менеджера значений. И как так работать можно?
4. Кстати, о менеджере. Почему было не предусмотреть простой синтаксис вызова его методов, например как статических методов объекта/формы, а не обязывать писать длинный путь. И еще, когда объект копируется - этот путь менять?
5. Почему передача значений типа ДанныеФормы*** въявную напрямую между клиентом и севером запрещена? Хотя спокойно выполняется системой при контекстной передаче? Ну вот почему нельзя без контекста прямо передать на сервер строку ТЧ, а надо оборачивать ее в структуру, а потом разворачивать обратно?
6. И, в конце концов, если уж они так пекутся о быстродействии - почему не сделали реквизитов, непередаваемых на сервер при контекстном вызове?

Итого: идеальным вариантом было бы, когда система сама подталкивала к объектному подходу и разделению фуккционала между обработкой и отображением. А на такое разделение и архитектура клиент-сервер влегкую ложится. Но на практике имеем: система наоборот, подталкивает к пиханию всего кода в форму, объектного подхода - никакого, клиент-серверность - да, есть, но от основного потока мышления "типичного 1Сника" где-то сбоку. Семерка возвращается!
91. BorisMor 310 23.10.12 21:20 Сейчас в теме
ИМХО автор прав.
Логика помещается в "модуль объекта". Код отвечающий за обработку действий пользователя в "модуль формы".
Если конфа своя, то поместить функцию в "модуль менеджера" регистра из которого извлекаем данные.
Общие модули использовать "Если функциональность невозможно однозначно отнести к тому или иному объекту метаданных" (с) ИТС
92. nafa 657 23.10.12 23:42 Сейчас в теме
(91)
Общие модули использовать "Если функциональность невозможно однозначно отнести к тому или иному объекту метаданных" (с) ИТС

Эти деятели (ИТС) лучше бы свои ошибки пошустрее исправляли, а куда функции помещать мы и без них разберемся.
В общие модули код, относящийся к конкретному объкту помещать приходится очень часто. Например
- общие модули могут быть разные (клиент, сервер, переопределяемый, привелигированный и т.п.), а модули менеджеров такого не имеют
- функции/процедуры общих модулей можно использовать в СКД, подписке, меню (в нормальном (не управляемом) интерфейсе) (хотя может что из этого и из менеджеров брать сейчас можно, не знаю, но уверен, что не все).
- при использовании штатного средства коллективной разработки (хранилища) модуль объекта может редактировать только один разработчик, а если надо нескольким одновременно то как ?
- просто функциональность объекта такая, что надо растащить на несколько модулей для собственного же удобства
- и т.п.
И насчет модулей менеджеров. Во "взрослых" языках программирования типа С++ наличие у класса методов не использующих конкретный экземпляр объекта как ни странно, не требует отдельного модуля. У нас как всегда через одно место. И "модуль менеджера" - по моему дает больше путаницы чем порядка.
93. BorisMor 310 24.10.12 10:16 Сейчас в теме
(92)
Да в чем то вы правы. Общие модули с пометкой "привилегированные" действительно не вписываются в картину мироздания) Но зачастую использование таки модулей дело исключительное.

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

Тоже соглашусь. "модуль интерфейса" возможно и правда был лишним. Логично в "модулей объекта" помечать процедуры и функции как "статические", а не создавать новый модуль.
Но раз сделано так, а не по другому, то будем пользоваться "модулем интерфейсов".
94. Lokon 10.12.12 20:34 Сейчас в теме
А я согласен целиком и полностью с автором.. Порядок в обработке = порядок в мозгах... Но ведь все люди разные, при этом не значит, что они плохие... как и обработки :-)
Оставьте свое сообщение