Дмитрий Рожков

24
Рейтинг

rozhkovdmitriy
Рожков Дмитрий



  •   Регистрация: 03.12.2012 (11 лет назад)

  •   Был(а) на сайте: 07.03.2021

Друзья
  • Виктор Иванов
Подписчики 2

Рейтинг 24

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

Инструменты и обработки Программист Платформа 1С v7.7 Конфигурации 1cv7 Windows Абонемент ($m) Архив с данными Универсальные функции

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

1 стартмани

17.09.2015    15104    3    rozhkovdmitriy    21       

24

Комментарии

DevПравила округления#3 14.11.17 9:41
Код
   
        рез = ОкруглитьПоПравилам(1.999, 1);
   рез = Окр(1.999, 1);
   рез = ОкруглитьПоПравилам(1.50, 1);
   рез = Окр(1.50, 1);
   рез = ОкруглитьПоПравилам(1.399, 1);
   рез = Окр(1.399, 1);
   рез = ОкруглитьПоПравилам(1.09, 1);
   рез = Окр(1.09, 1);
   рез = ОкруглитьПоПравилам(0.555, 1);
   рез = Окр(0.555, 1);
   рез = ОкруглитьПоПравилам(0.4449, 1);
   рез = Окр(0.4449, 1);


Объясните в чем преимущества пожалуйста! В каких случаях это лишний код оправдан?
DevБизнес-процессы для чайников#90 08.11.16 14:47
Замечательная статья, спасибо!!!

Однако, есть еще две статьи на которые следует обратить внимание:

Бизнес процессы 1С (http://howknow1c.ru/programmirovanie-1c/biznes-processy-1s.html)

Объект задачи 1С (howknow1c.ru/programmirovanie-1c/zadachi-i-adresacija-zadach-1s.html)
Dev1С: 7.7. Функции-обертки, функторы, отложенный вызов, карринг параметров на примере функции чтения табличных данных#18 23.09.15 14:29
Спасибо за критику, друзья!

В оправдание своего решения позволю себе процитировать самого себя.

Цитата
Пример является надуманным и в реальной практике такие сложные вызовы встречаются примерно никогда и скорее вредны с точки зрения возможности поддержания кода коллегами. Оптимальным решением является обработка коллекций при помощи несложных простых или более сложных составных функторов на основе композиции.

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

Цитата
Нет, она объясняется тем, что обычные заказчики не хотят оплачивать специалиста стоимостью 200к в месяц. Плюсанул к "горю от ума", ибо приходилось иногда разгребать такие витиеватые коды, мама не горюй... причём за счёт заказчика...

Если бы я был заказчиком, я бы тоже с осторожностью относился к *витиеватым* кусочкам кода соискателей. Ключевым словом, уважаемый woflsoft, является "витиеватые коды". Сам перелопатил, тонны такого кода, в зарплатной конфигурации, написанного тёмными силами, работающими в не менее тёмных застенках компании 1С и кода, написанного за счет моего предприятия, именитыми аутсорсинговыми компаниями-подрядчиками. Надеюсь вы не будете оппонировать отложенным вызовам и возьмете их на вооружение при сохранении требования отсутствия витиеватости.

Цитата
В принципе, если функция работает и хорошо задокументирована, то почему бы и нет.

Спасибо, так и есть, берем и пользуемся. Документация в шапках функций. Мои коллеги, их двое, не используют предложенные механизмы, но и по голове мне тоже не стучат, вполне себе могут править мои куски.
Более того, при обсуждении всплыл например такой вопрос - "Что проще, отложенные вызовы или прямые запросы из 1С++". И то и другое - инструмент. В первом случае надо иметь опыт работы с функторами на одном из ЯП высокого уровня, в другом - иметь опыт работы с SQL
Dev1С: 7.7. Функции-обертки, функторы, отложенный вызов, карринг параметров на примере функции чтения табличных данных#10 21.09.15 6:25
(8) vcv, добрый день, использую прототипирование в табло чтобы проверять работоспособность написанного, всегда "проваливаюсь" в функцию по ctrl-Enter чтобы посмотреть количество параметров.
Dev1С: 7.7. Функции-обертки, функторы, отложенный вызов, карринг параметров на примере функции чтения табличных данных#5 18.09.15 14:33
(4) vcv, Спасибо за интерес к теме

Код
Подход интересный. Но боюсь, быстродействие будет  сильно страдать.


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

Цитата
Если уж пользуетесь активно функцией Шаблон, то почему бы не сделать более простой синтаксис?
Что-то типа такого:

глФильтрСпискаЗначений(лСписок,"($.СтажГазпромРКСПриУвольнении>14)И($.НеПереработал=1)")

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

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

Рождается больше вопросов чем ответов. Прошу меня поправить, если я во всем и не прав :)

глФильтрСпискаЗначений(лСписок,"($.СтажГазпромРКСПриУвольнении(прм1, прм2..., прмN)>14)И($.НеПереработал(прм1, прм2..., прмN)=1)")

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

Существующие реализации:

c++ (https://en.cppreference.com/w/cpp/utility/functional) ,
lisp (http://clojuredocs.org/clojure.core/sort)
javascript,actionscript - там нет явной подстановки операторов, зато лямбда-функции создаются на лету (http://javascript.ru/Function)

p.s. Были мысли перевести вызов функций на ВыполнитьФункцию объекта "Сервис" из FormEx, но что-то мне тогда помешало

Спасибо!
Dev1С: 7.7. Функции-обертки, функторы, отложенный вызов, карринг параметров на примере функции чтения табличных данных#0 15.09.15 13:10
Человек, работающий в 1С, в силу своей практики и опыта может нуждаться в средствах программирования, в 1С не представленных. В публикации описаны средства отложенного вызова функций, каринга параметров, композиции и др., в основе которых лежит вызов функции посредством функции Шаблон. Несмотря на простоту, созданный за несколько лет работы в 1С 7.7 набор функций обрел мощь, достаточную для лаконичной реализации указанных целей.