Особенности написания обработок: в помощь начинающему
Разработка - Математика и алгоритмы
Я своих молодых сотрудников приучаю сразу создавать объекты, максимально адаптированные к клиент-серверному варианту работы. К тому же это помогает при разборе функционала.
Приведу простой пример. Поставлена задача написать обработку (назовем ее "ОстаткиТоваров"), которая выведет в таблицу значений остатки товаров на складах на указанную дату.
Что делает начинающий?
Рисует форму, располагает на ней поле ввода с типом "Дата", таблицу значений и кнопку "Сформировать".
Что в результате имеем?
В обработчике КнопкаСформироватьНажатие() сначала у элемента формы "ДатаНачала" получаем значение, чуть ниже описываем текст запроса, передаем в него параметр, выполняем запрос и выгружаем его результат в таблицу значений. Вреде бы все работает, без проблем.
Но! Допустим, что для какой-то другой задачи (назовем ее "СуперЗадача") тоже необходимо получать остатки по товарам на складах. Можно, конечно, скопировать основной функционал обработки "ОстаткиТоваров" и вставить его в "СуперЗадачу", подкорректировав, где это необходимо. Но можно ведь и просто использовать "ОстаткиТоваров"!
Для этого у обработки "ОстаткиТоваров" достаточно создать реквизит "ДатаОстатков", который связать с элементом формы, а функцию формирования таблицы значений вынести в модуль объекта, сделав экспортной.
Что это дает?
1. Наглядная структура объекта. По реквизитам обработки сразу видны ключевые параметры. В модуле формы описаны интерфейсные функции и обработчики событий, а в модуле объекта - собственно сам функционал.
2. Доступ к необходимым параметрам из модуля формы и модуля объекта напрямую, без использования конструкции ЭлементыФормы.МойРеквизит.Значение и/или глобальных переменных объекта.
3. Доступ к функционалу объекта без необходимости получения его формы.
4. При запуске в клиент-серверном варианте в 90 случаях из 100 обработка будет корректно работать (про передачу мутабельных значений между сервером и клиентом расписывать не буду, это отдельная тема).
Почему я это все написал? Потому что, когда я открываю чью-то разработку, мне первым делом интересен метод решения задачи, который (несомненно) описан в модуле объекта. Ан нет... Модуль объекта девственно чист, приходится лазить по модулю формы и вычленять функционал из кучи процедур типа "ДатаПриИзменении".
Так что, в принципе, можно считать это криком души :)
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Математика и алгоритмы Разработчик 1С 8.3 Абонемент ($m)
Данная внешняя обработка для платформы 1С:Предприятие реализует усовершенствованный алгоритм Левенштейна для вычисления схожести строк с учетом различных лингвистических особенностей русского языка. В отличие от классической реализации, этот алгоритм учитывает фонетические, визуальные и контекстные особенности набора текста.
1 стартмани
07.11.2025 7046 18 InFlach 17
Математика и алгоритмы Запросы Разработчик 1С:Предприятие 8 Бесплатно (free)
Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.
08.07.2024 9200 ivanov660 9
Математика и алгоритмы Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Абонемент ($m)
На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.
1 стартмани
30.01.2024 17005 stopa85 12
Математика и алгоритмы Бесплатно (free)
Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.
19.10.2023 25275 user1959478 57
Математика и алгоритмы Разное 1С:Предприятие 8 1C:Бухгалтерия Россия Абонемент ($m)
Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.
2 стартмани
29.09.2023 15759 maksa2005 8
Математика и алгоритмы Инструментарий разработчика Разработчик 1С:Предприятие 8 Россия Абонемент ($m)
Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.
1 стартмани
09.06.2023 25590 13 SpaceOfMyHead 20
Математика и алгоритмы Разработчик 1С:Предприятие 8 Бесплатно (free)
Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.
03.04.2023 17753 RustIG 10
Механизмы платформы 1С Математика и алгоритмы Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
В статье анализируются средства платформы для решения системы линейных уравнений в 1С. Приводятся доводы в пользу некорректной работы встроенных алгоритмов, а значит потенциально некорректного расчета себестоимости в типовых конфигурациях.
23.11.2022 16636 gzharkoj 17
Если вы попытаетесь в управляемой форме &НаКлиенте сформировать и выполнить запрос, будет ошибка. Если вы напишете процедуру/функцию, которая &НаСервере получит необходимые данные из регистров, проблем не будет.
В управляемых формах идет четкое разграничение функционала. В управляемых формах, по определению (насколько я понимаю), практически невозможно написать такой код, который будет работать в файловом варианте и будет выдавать ошибку в клиент-серверном, и наоборот (результаты выполнения кода пока рассматривать не будем :)
Однако для решения задачи по получению остатков гораздо правильнее из формы обработки вызвать функцию, описанную в модуле обработки (которая, как ни крути, будет исполняться на сервере (+скорость обработки данных, это ж сервер :)!)), которая вернет в качестве результата искомую таблицу.
Вот стандартный код вызова процедуры модуля обработки из модуля формы.
&НаКлиенте
Процедура Сформировать(Команда)
сформироватьНаСервере();
КонецПроцедуры
&НаСервере
Процедура СформироватьНаСервере(Команда)
НашОбъект = РеквизитФормыВЗначение("Объект").
НашОбъект.мВыполнить();
КонецПроцедуры
Как видно в любом случае нужна процедура в модуле формы с параметром &НаСервере, которая передает на сервер ВСЁ, что является неоптимальным с т.з. объема передаваемых данных.
НаСервереБезКонтекста более предпочтительно. Поэтому оптимальный код для управляемого приложения:
&НаКлиенте
Процедура Сформировать(Команда)
........;
АдресТаблицыОстатков = ПолучитьОстатки(СписокНоменклатуры,Дата);
........;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьОстатки(СписокНоменклатуры,Дата);
Запрос.....
КонецФункции
Форма = МояОбработка.ПолучитьФорму("Форма");
НужноеЗначение = Форма.ЭлементыФормы.МойРеквизит.Значение;Форма = МояОбработка.ПолучитьФорму("Форма");
НужноеЗначение = Форма.МойРеквизит;Ну да ладно - это не суть важно... Я-то как раз для управления объектом обработки как правило создаю реквизиты, если конечно обработка не разовая, когда нет желания париться такими вещами.
Для начала опишу рабочее место ОДНОГО сотрудника: стол на 10 персон, на столе 4 компьютера, рядом один стул на колёсиках, а на полу ... не побоюсь этого слова, КОЛЕЯ!
Так вот, работа этого сотрудника заключалась в том, что он на одном компьютере запускает отчет, "едет" к другому компьютеру и на нем что-то делает, потом к следующему и т.д. Оказалось, что это связано с очаровательным запросом в цикле и очаровательным запросом "ПриВывоеСтроки" - это больше всего поразило.
И как Вы думаете, что потом сказал этот сотрудник, когда все ошибки прошлого "кодера" были исправлены? А ЧТО МНЕ ТЕПЕРЬ ДЕЛАТЬ, я уже всю работу выполнил? :D
Мой коллега рассказал такую историю:
Один бывалый программист спросил у молодого:
- Ну, как, твоя программа работает под WinXP?
- Да! Потребляет ресурсов всего 16 МБ!
- А, ну-ну. А на Win98?
- А то! То же самое : 16 МБ и ни байтом больше.
- И чем ты гордишься? Если твоя программа не умеет подстраиваться под доступные ресурсы системы и отбирает у нее все, что ей необходимо, ей суждено быть однодневкой, которая работает нормально только под WinXP.
Ту же аналогию можно привести и под Win7
Что хочу сказать этим: оптимизация кода никогда не выйдет из моды (необходимости), поскольку платформы меняются, а нам, разработчикам, приходится под это дело подстраиваться...
А жаль... Лучше бы они подстраивались под требования разработчиков...
>>Лучше бы они подстраивались под требования разработчиков...
Напоминает грустные просьбы юзеров а почему нельзя просто сделать чтоб работало...
вот это и будет однодневка, потому что мало кому захочется заниматься ее сопровождением если там будет много ненужного и непонятного функционала? ведь это системное программирование, а не прикладное
P.S.может нужно и под будущие платформы подстравиваться? :)
На вкус и цвет... Лично мне просто лень делать лишние телодвижения, чтобы открыть модуль объекта. А метод решения задачи мне интересен в соответствующих функциях процедурах того же модуля формы. А на кнопке Выполнить вообще ничего не должно быть, кроме вызова вышеупомянутых. На мой вкус...
А функции и процедуры, которые мне однозначно еще неоднократно понадобятся, я просто выношу в дополнительный общий модуль и не парюсь.
Куда как приятнее набрать МойМодуль, поставить точку, и получить в выпадающем списке ту же самую ОстаткиТоваров(
Кстати, вот что фирма недоделала: в настоящих языках после точки не только имя, но и необходимые параметры показывает
у тебя есть подчиненные, ты либо управляешь ими настолько неэффективно, что приходится лазить в их код, либо твой функционал настолько бесполезен, что тебе больше делать нечего.
имхо: подобные "крики" уместны были бы при разработке типовух. но, насколько видно по тем же типовым, именно "флагмана" это парит в последнюю очередь
и все эти "системы стандартов" (1) - не более чем надувание щек, типа ISO
Перенумератор! улыбнуло так, что дальше смотрел уже без злости
как бы (12) появился не на пустом месте.
Коллега (0), вы где подвизаетесь на руководящей должности, не в БиТе ли?
Не усматриваю в простоте статей отсутствия практического опыта.
Вот еще пример: самый лучший интерфейс для файлового менеджера изобрела маленькая фирма (Norton Commander, помним?) 30 лет назад, и ни одна мегакорпорация (Microsoft, Apple, Google и т.п.) до сих пор ничего лучше не придумала, несмотря на все старания.
"+" - отражают ценность статьи, программы для пользователя (потребителя), а не сложность и затраты времени разработчика.
до сих пор ничего лучше не придумала, несмотря на все старания
Вы бы еще Тетрис вспомнили :D
Кто сейчас пользуется NC? Я вообще ничего не слышал о нем уже несколько лет. А все его клоны популярны потому, что от того древнего файлманагера только двухпанельность унаследована.. и все! Без плагинов они были бы ни чем не лучше проводника.
Кто сейчас пользуется NC...
Когда ДОСом пользоваться приходится тогда и используется. (У меня последний случай был 2 недели назад - надо было восстановить обнулившийся MAC адрес для встроенной сетевухи на материнке, а соответствующая утилита под виндой не живет).
Вообще-то не только двухпанельность, но и горячие клавиши и дополнительные функции (встроенный поиск файлов, просмотрщик, редактор, сортировка, работа с архивами) и вообще большая часть интерфейса. Хотя если нужна работа с файлами (порядок навести на винте) одной двухпанельности было бы достаточно. В проводнике 2-3 сотни файлов рассортировать в принципе нереально. Плагинами же как раз пользуются только продвинутые пользователи.
(44)
Это вобще-то совсем другого рода вещи, чем статься. УПП у меня нет, и проанализировать полностью данный модуль я не могу. Также надо отметить, что в общем случае ISNULL не эквивалентен данной конструкции, так как для поля Выборка.КоличествоРеализованных может требоваться различать значения 0 и NULL. Значения типа NULL могут иметь особую обработку, например в СКД (пропуск группировок).
"поля Выборка.КоличествоРеализованных может требоваться различать значения 0 и NULL" - если вдруг так, тем более это надо делать в запросе
Вы, коллега, по ходу - "сисадмин со знанием 1с"
Не зная броду, не суйся в воду. (с) Народная мудрость.
У ребенка в компе материнка на 754 сокете сдохла, новых не выпускают, купил бушную, а у нее MAC адрес нулевой. Перешил - заработало.
(58)
теперь все понятно: эти детские восторги взялись от незнания мат.части - в проводнике это тоже все есть
Есть, неудобные до неработоспособности.
Вот пример простой: надо из каталога, в котором 100 файлов выделить произвольные 30, попутно просматривая содержимое? В Нортоне элементарно - F3 просматриваем, Ins отмечаем. Мышка не нужна. Как это в проводнике сделать (пусть даже с помощью мышки?) (Это я молчу про то, что проводник сделали лет через 15 после Нортона, а уж насколько больше было вбухано денег даже лучше и не думать).
но и горячие клавиши и дополнительные функции (встроенный поиск файлов, просмотрщик, редактор, сортировка, работа с архивами)
теперь все понятно: эти детские восторги взялись от незнания мат.части - в проводнике это тоже все есть
среди тех, кто умеет грамотно пользоваться клавиатурой.
Потому как скорость работы с файлами в разы выше, чем для мышки.
Эргономика, туды ее в качель... :)
Да и плугинов полезных тоже немеряно для них.
А если по теме - ну вот взяли бы все вместе (кто про обработки и 8.2 знает)
и написали некий FAQ - как НАДО делать и как НЕ НАДО делать...
И визгу было бы меньше...
З.Ы. И я бы тоже поучился у вас с удовольствием... :)
загрузка екселя.
взята типовуха, добавлено решение коллеги wildhog, собрано 27 плюсов
как бы и не перенумератор, чего уж там... Но!
читаем коллегу wildhog:
"...большинство обработок - законченные решения выполняющие различные функции, а не только ПРОСТОЕ чтение файла. (искренний респект и уважение авторам) Я же предлагаю всего лишь функцию быстрого чтения файла Excel. Готовых обработок в этой области не выкладываю - дублировать существующие нет смысла, или они явно не дотягивают по функционалу до уже выложенных :)"
улыбнуло еще раз
Напрасно ты про авторские обработки ;) В последнее время а на Инфостарте прям априори считается, что любой с нулевым или чуть поболее рейтингом, является скромным гением, которому просто плевать на рейтинг (и при чем тут рейтинг?). Удивляют плюсующие: вы что, не знали раньше, что желательно применять функции и процедуры? И это для вас божественное откровение? Или, наоборот, вам все это хорошо известно, но спасибо автору, что других дурачков просветил?
Правильно! Столько причин для смерти, зачем добавлять еще одну - от скромности? :D
41 плюс (на данный момент) НИ ЗА ЧТО.
"Еще раз повторюсь, обработка не претендует на полноту реализации и предлагается только лишь в качестве иллюстрации методов работы с идентичными объектами в двух базах."
имхо, слово "корректный" в заголовке смутило даже самого автора настолько, что он дважды в публикации оговаривается "ни-ни, это я так просто, поучить новичков..."
но заголовок не сменил, что, опять же достойно 1снега
семерка. доработка решения коллеги kompas-dm
ну, что же, это, видимо и есть опыт "боевого" программинга, работы "в поле" самого автора
разбирать не стоит - стоит просто почитать комменты к той публикации
ПС: короче, присоединяюсь к коллеге Altair777
где там "тоже долго полагал всё это очевидным"?
во-первых, там совсем другое: "Я своих молодых сотрудников приучаю сразу"
во-вторых, сколько у автора "старых" сотрудников? казалось бы, научил один раз и спи спокойно :)
так нет же - криком исходит, а франь и есть франь
[quote]все свалено в кучу в модуле формы[/quote]
В типовых не лучше.
Разработчики платформы поленились сделать, чтобы при создании обработчиков из панельки со свойствами, эти обработчики вставлялись не в конец, а сортировались по реквизитам.
Насчет простоты статьи - половина компаний из списка 30 крупнейших в мире отнюдь не космическими технологиями занимается, вообще всякую примитивщину выпускает - бритвы (Gilette), булочки с мясом (McDonalds) и т.п. Так что вопрос не только в том, что сделать, но и как сделать. На этом сайте не диссертации защищают, а обмениваются практическим опытом. Чем проще и надежнее - тем лучше.
об том и речь
когда тебе надо при нулевом бюджете закрыть очередную хотелку...
просто закрыть, иначе тебя просто загнобят, а что там внутри - это будут плеваться следующие поколения
... то ты просто ставишь реквизит дата в форму и все.
а давать советы типа (0) может придти в голову только маленькому начальнику от айти
(именно давать советы типа чистить зубы по утрам)
я потому и запостил (21)-(27) : нету у автора практического опыта. ну, ладно, близкий к нулю. какой же уровень должен быть у тех, кто увидел полезность в сабже?
Причем здесь бюджет и реквизит в форме? Для того чтобы его разместить где положено, что сервер новый нужен или лицензии какие?
в типовых можно встретить (например, в УПП при заполнении отчета комитенту)
в цикле выборки запроса вот такую бадью:
| Код |
|---|
КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);
Показать полностью |
я долго думал, что это только типовые пишут такие тупые 1снеги, но, подумав уже, додумался, что раз за данную публикацию дают плюсы, то тем более мне плюсов накидают за простой совет:
используйте ISNULL тексте запроса
| Код |
|---|
Пока Выборка.Следующий() Цикл
КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);
КоличествоПолученных = ?(Выборка.КоличествоПолученных = NULL, 0, Выборка.КоличествоПолученных);
Выручка = ?(Выборка.Выручка = NULL, 0, Выборка.Выручка);
Количество = Мин(КоличествоПолученных, КоличествоРеализованных);
Если Количество = 0 Тогда
Продолжить;
КонецЕсли;
Показать полностью |
| Код |
|---|
Пока Выборка.Следующий() Цикл
КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);
Если КоличествоРеализованных < 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("Обнаружено отрицательное количество реализованных товаров "
+ Выборка.Номенклатура + " " + Выборка.ХарактеристикаНоменклатуры + " " + Выборка.СерияНоменклатуры);
Продолжить;
КонецЕсли;
КоличествоПолученных = ?(Выборка.КоличествоПолученных = NULL, 0, Выборка.КоличествоПолученных);
Если КоличествоПолученных < 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("Обнаружено отрицательное количество полученных на комиссию товаров "
+ Выборка.Номенклатура + " " + Выборка.ХарактеристикаНоменклатуры + " " + Выборка.СерияНоменклатуры);
Продолжить;
КонецЕсли;
Выручка = ?(Выборка.Выручка = NULL, 0, Выборка.Выручка);
Количество = Мин(КоличествоПолученных, КоличествоРеализованных);
мВалютаУправленческогоУчета = глЗначениеПеременной("ВалютаУправленческогоУчета");
СтруктраКурса = МодульВалютногоУчета.ПолучитьКурсВалюты(мВалютаУправленческогоУчета,Дата);
Выручка = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Выручка
,мВалютаУправленческогоУчета,ДоговорКонтрагента.ВалютаВзаиморасчетов
,СтруктраКурса.Курс, КурсВзаиморасчетов
,СтруктраКурса.Кратность, КратностьВзаиморасчетов);
Если Количество = 0 Тогда Продолжить; КонецЕсли;
Показать полностью |
КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);
Так как ты опустил текст предшествующий данному коду ,
то я могу допустить своё дополнение :
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);
.....Теперь предположим , что итоги по полю "КоличествоРеализованных" не рассчитываются.
Тогда "КоличествоРеализованных" на всех уровнях группировок кроме последнего будут содержать NULL.
Причем присутствие NULL в итоговых строках запроса никаким ISNULL это не устраняется.
Другими словами , твой обрезанный пример ничего не говорит о качестве кода.
Хотя в данном конкретном примере, на мой взгляд процедуру получения остатков имеет смысл разместить в общем модуле,
для случая, когда отчет (обработка) ориентирован на конкретную конфигурацию и в теле самого отчета (обработки),
если планируется использовать на нескольких.
К тому же 1С - четко указывает на то как писать
и что где размещать в своих рекомендациях к разработчику.
К тому же 1С - четко указывает на то как писатьи что где размещать в своих рекомендациях к разработчику.
- ссылочку, плиз!
Спасибо всем, кто принял участие в обсуждении - и критикующим, и поддерживающим.
Поддерживающим мою точку зрения выражаю благодарность, а критикующим могу сказать следующее:
1. Я ни в коем случае не претендую на звание "гуру" и не являюсь руководителем никакого отдела.
2. Если вы, высокоуважаемые гуру Инфостарта, считаете мою публикацию бесполезной (а кое-кто и вредной), то вы вполне можете написать мне личное сообщение и я ее скрою/удалю (или, на крайний случай, вы можете воспользоваться своими правами модераторов, и удалить ее самостоятельно)
3. Если вы считаете, что на Инфостарте развелось чересчур много "велосипедов", вам пора внедрять систему жесткой премодерации. И, если новая публикация в чем то дублирует уже существующую, необходимо нещадно разить ее автора молниями великого Админа.
4. Я считаю, что этот ресурс был создан для того, чтобы люди обменивались опытом и наработками, независимо от объемов и сфер применения. К примеру, все дети рисуют солнце, и никто (заметьте высокоуважаемые гуру, никто!) не говорит им, что, мол "это солнце уже нарисовал твой сосед Вася, это баян, рисуй лучше синхрофазотрон, его еще никто из наших соседей не изображал" :)
5. Хочется вас спросить, уважаемые (основной критикан), , и, пожелавший оставить минус без комментария, , может выйдем на прямой диалог, в котором вы, как гуру Инфостарта, укажете мне на ошибки, в результате чего я смогу делать публикации более полезней для пользователей сайта.
Мы ведь за это боремся, не так ли?..
название деревушки в Зальцбурге, которую предки полковника
пропили еще в восемнадцатом столетии) был редкостный болван.
Рассказывая о самых обыденных вещах, он всегда спрашивал, все
ли его хорошо поняли, хотя дело шло о примитивнейших понятиях,
например: "Вот это, господа, окно. Да вы знаете, что такое
окно?" Или: "Дорога, по обеим сторонам которой тянутся канавы,
называется шоссе. Да-с, господа. Знаете ли вы, что такое
канава? Канава -- это выкопанное значительным числом рабочих
углубление. Да-с. Копают канавы при помощи кирок. Известно ли
вам, что такое кирка?"
Он страдал манией все объяснять и делал это с
воодушевлением, с каким изобретатель рассказывает о своем
изобретении.
"Книга, господа, это множество нарезанных в четвертку
листов бумаги разного формата, напечатанных и собранных вместе,
переплетенных и склеенных клейстером. Да-с. Знаете ли вы,
господа, что такое клейстер? Клейстер -- это клей"...
Благодаря приятельским отношениям с корпусным генералом и
другими не менее тупыми военными сановниками старой Австрии он
получал разные награды и ордена, которыми гордился чрезвычайно;
он считал себя лучшим солдатом под луной, лучшим теоретиком
стратегии и знатоком всех военных наук. На полковых смотрах он
любил поговорить с солдатами и всегда задавал им один и тот же
вопрос: почему введенные в армии винтовки называются
"манлихеровки"?
В полку о нем говорили с насмешкой: "Ну вот, развел свою
манлихеровину !"
Неправильная у тебя вспоминалка :D
Там есть гораздо лаконичнее:
Кстати, по поводу стандартов в (20) не соглашусь. Использование стандартов сильно упрощает жизнь при разработке/доработке и особенно когда используешь различные нетленки (скачанные в том числе и с Инфостарта).
(69)
69.1 Любой пишущий статью на тему "а это делать лучше так", по сути, выступает в роли некоего гуру делящегося опытом.
69.2 Общение в личке не проходит, статья то публичная, соответственно и обсуждение должно быть публичным.
Лично мне первый абзац статьи даже очень понравился, ибо правильный он :D, а вот дальше как то не очень.
Все ниже написанное, да и выше тоже, является исключительно моим ИМХО никоим образом не претендующим на окончательную инстанцию и т.п.
Вы можете быть не согласны с любым изречением, но ежели доступно не растолкуете почему, то фиг с вами :D
Моя ложка дегтя:
А)
Звиняйте, но если мы пишем статью о правильном использовании объектов, реквизитов, размещении кода и т.п. наверное стоит правильно оперировать видами объектов? Давайте вспомним чем отличается отчет от обработки.
В приведенном примере, "ОстаткиТоваров" как объект метаданных является типичным отчетом и не надо обзывать его обработкой. Это далеко не мелочь, кому придет в голову искать отчет взаиморасчеты или ведомость по товарам на складах в обработках?
Б) Следующие 3 абзаца или часть кода из отчета "ОстаткиТоваров" используется некой другой суперзадачей (я так понимаю другим объектом метаданных).
Возможно просто приведен неудачный пример, но как говорится, что написано пером ...
Начали мы использовать часть кода из отчета "ОстаткиТоваров" в нашей "СуперЗадаче". Через полгода взяли да и хезанули "ОстаткиТоваров" (ну не нужен нам больше этот отчет) и что будет с "СуперЗадачей"?
Возможно стоит обратиться к "ленивому" Abadonne в (15) и вcпомнить предназначение общих модулей?
В) А про какого клиента мы говорим?
В 8.2 в зависимости от режима работы модули форм и объектов используются по разному.
судя по скриншоту и
Если про управляемое, то почему упущен момент разжеванный в (18)? Это концептуальный момент.
Какова ресурсоемкость оператора НашОбъект = РеквизитФормыВЗначение("Объект") для системы?
Что важнее: оптимизация количества кода и удобство его изменения ИЛИ снижение нагрузки на сервер при работе в тонком клиенте или уменьшение объема перегоняемых данных при использовании web интерфейса?
Напоследок
Как то очень безапелляционно и без объяснения почему так. А почему, например, не в модуле менеджера, если речь про управляемое приложение?
Из сабжа и всех постов самое логичное и лаконичное в (19).
На мой взгляд, пока минус. Возможно в результате прямого диалога автора с вышеобозначенными гуру мнение свое изменю :D
[quote]Звиняйте, но если мы пишем статью о правильном использовании объектов, реквизитов, размещении кода и т.п. наверное стоит правильно оперировать видами объектов? Давайте вспомним чем отличается отчет от обработки.[/quote]
Ну судя по тому, что вывод предполагается в таблицу значений, а не табличный документ
[quote]Поставлена задача написать обработку (назовем ее "ОстаткиТоваров"), которая выведет в таблицу значений остатки товаров на складах на указанную дату.[/quote]
то есть с ним видимо будут что-то делать, это скорее обработка, чем отчет.
[quote]Начали мы использовать часть кода из отчета "ОстаткиТоваров" в нашей "СуперЗадаче". Через полгода взяли да и хезанули "ОстаткиТоваров" (ну не нужен нам больше этот отчет) и что будет с "СуперЗадачей"?
Возможно стоит обратиться к "ленивому" Abadonne в (15) и вcпомнить предназначение общих модулей?[/quote]
1. А если общий модуль "хезануть", то что-то другое будет?
2. У общего модуля нет реквизитов.
[quote]Из сабжа и всех постов самое логичное и лаконичное в (19).[/quote]
Ну вообще-то еще бывает, что:
1. У обработки нет формы.
2. Необходимо вызывать функция/процедуру в режиме внешнего соединения
Вообще разделение кода между формой и модулем в 8.1/8.2 в нормальном режиме довольно логично. Очень похоже на "взрослые" среды программирования. В 8.2 в управляемом режиме почти все стянули в модуль формы, что реально неудобно.
1. У обработки нет формы.
Забыл еще один случай: вообще нет обработки :D
Спор ни о чем. Кто как хочет, так @@очит. Лично я полезу в модуль только в крайних случаях, ибо и так достала куча окошек в конфигураторе.
Подход автора не лучше и не хуже, просто один из возможных.
1. А если общий модуль "хезануть", то что-то другое будет?
Вобщето общий модуль предназначен, именно, для размещения общих процедур и функций.
2. У общего модуля нет реквизитов.
Но есть параметры...
Если же нужна некая форма для "суперзадачи" можно подумать про общие формы.
Уж если есть желание делать правильно, то не нужно делать наполовину правильно.
Нужно выбирать оптимальное решение (где-то модуль формы, где-то модуль объекта, где-то общий модуль и т.д.), а то получается другая крайность: - "новички пишите-ка вы в модуль объекта все, мне как вашему начальнику там удобнее читать".
В общем статья недоделаная что еще больше смутит "новичков". ИМХО.
P.S. Автор воспринимайте критику достойно, а не критикуйте критикующих.
1. Вопрос про "хезануть" касался не правильности размещения процедуры в модуле, а то что обработку можно случайно удалить. Так вот мой комментарий был в том, что общим модуль тоже можно случайно удалить. Еще проще. (На обработку могут быть ссылки, которые не дадут это сделать).
2. Про реквизиты и параметры (видимо имеются в виду параметры сеанса). Параметры сеанса как и глобальные переменные не являются заменой реквизитов объекта, так как существуют в единственном числе в то время, как "ОбработкаОбъект" может существовать во множественном числе и реквизиты у различных экземпляров объекта одного класса могут быть разными.
Те же самые замечания, что и выше. У суперзадачи могут быть также несколько форм, или ни одной формы, но несколько макетов. И т.п. В определенных случаях (а в статье разбирается определенный случай, а не вообще) действительно удобна именно обработка. Пример - внешние печатные формы, обработки обслуживания торгового оборудования и т.п.
Да нет, как раз не случайно удалить/изменить, а сознательно. Например, по новым требованиям изменить логику работы отчета/обработки с изменением запроса и данных им возвращаемых.
Код расположенный в модулях объекта принадлежит объекту. Если есть некий универсальный код, который может использоваться несколькими объектами метаданных, welcome в общие модули.
:D Извините, улыбнуло. Искренне надеюсь, что это влияние пятницы.
Соблюдайте меру - когда мне нужна тупо обработка с N тупыми кнопками и M не менее тупыми полями выбора, я не буду ничего писать ей в модуль объекта, это заставляет меня делать лишние клики, держать в уме два модуля и постоянно перетыкиваться между ними. И ради чего это?
Когда я пишу "объектно-ориентированный" код :), т.е. который будет, к примеру, работать без формы, то, конечно, вовсю задействуется модуль объекта.
Когда я пишу некую, скажем так, подсистему, то логично выносить что-то в общие модули, модули объектов и вся такая пижня таком духе.
Т.е. для разных задач разная реализация и разные трудозатраты.
Вообще, имхо, надо исходить в работе из наиболее оптимальной схемы телодвижений. В идеале. Лишние телодвижения в данный момент оправданы только будущим каким-либо профитом - опытом, масштабируемостью приложения, скоростью работы и т.д.
Полностью согласен с автором публикации!!! Ресурс всегда служил хорошим "учебником" для программистов
и очень жаль что в последнее время стало много критики "интелекта" авторов, а не реальных советов.
1. Почему в серверных методах недоступены методы самого объекта? Почему обязательно РеквизитФормыВЗначение() для основного реквизита вызывать надо?
2. И при этом РеквизитФормыВЗначение() не срабатывает для внешних отчетов-обработок. И как такое отлаживать?
3. А еще у внешних нет команд объекта, и менеджера значений. И как так работать можно?
4. Кстати, о менеджере. Почему было не предусмотреть простой синтаксис вызова его методов, например как статических методов объекта/формы, а не обязывать писать длинный путь. И еще, когда объект копируется - этот путь менять?
5. Почему передача значений типа ДанныеФормы*** въявную напрямую между клиентом и севером запрещена? Хотя спокойно выполняется системой при контекстной передаче? Ну вот почему нельзя без контекста прямо передать на сервер строку ТЧ, а надо оборачивать ее в структуру, а потом разворачивать обратно?
6. И, в конце концов, если уж они так пекутся о быстродействии - почему не сделали реквизитов, непередаваемых на сервер при контекстном вызове?
Итого: идеальным вариантом было бы, когда система сама подталкивала к объектному подходу и разделению фуккционала между обработкой и отображением. А на такое разделение и архитектура клиент-сервер влегкую ложится. Но на практике имеем: система наоборот, подталкивает к пиханию всего кода в форму, объектного подхода - никакого, клиент-серверность - да, есть, но от основного потока мышления "типичного 1Сника" где-то сбоку. Семерка возвращается!
Логика помещается в "модуль объекта". Код отвечающий за обработку действий пользователя в "модуль формы".
Если конфа своя, то поместить функцию в "модуль менеджера" регистра из которого извлекаем данные.
Общие модули использовать "Если функциональность невозможно однозначно отнести к тому или иному объекту метаданных" (с) ИТС
Эти деятели (ИТС) лучше бы свои ошибки пошустрее исправляли, а куда функции помещать мы и без них разберемся.
В общие модули код, относящийся к конкретному объкту помещать приходится очень часто. Например
- общие модули могут быть разные (клиент, сервер, переопределяемый, привелигированный и т.п.), а модули менеджеров такого не имеют
- функции/процедуры общих модулей можно использовать в СКД, подписке, меню (в нормальном (не управляемом) интерфейсе) (хотя может что из этого и из менеджеров брать сейчас можно, не знаю, но уверен, что не все).
- при использовании штатного средства коллективной разработки (хранилища) модуль объекта может редактировать только один разработчик, а если надо нескольким одновременно то как ?
- просто функциональность объекта такая, что надо растащить на несколько модулей для собственного же удобства
- и т.п.
И насчет модулей менеджеров. Во "взрослых" языках программирования типа С++ наличие у класса методов не использующих конкретный экземпляр объекта как ни странно, не требует отдельного модуля. У нас как всегда через одно место. И "модуль менеджера" - по моему дает больше путаницы чем порядка.
Да в чем то вы правы. Общие модули с пометкой "привилегированные" действительно не вписываются в картину мироздания) Но зачастую использование таки модулей дело исключительное.
Тоже соглашусь. "модуль интерфейса" возможно и правда был лишним. Логично в "модулей объекта" помечать процедуры и функции как "статические", а не создавать новый модуль.
Но раз сделано так, а не по другому, то будем пользоваться "модулем интерфейсов".
Рейтинг: 912
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 86552
Создание 23.06.11 01:07
Обновление 23.06.11 01:00
Просмотры 19217
Загрузки 0
Рейтинг
122
Комментарии 95
Код открыт Не указано
Рубрики Математика и алгоритмы
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)