Мечты 2006 года об 1С 8.0

Нашел случайно письмо, которое высылал Станиславу Митичкину в феврале 2006 года с просьбой опубликовать не под моим именем. Статья так и не была опубликована. А жаль… Многое в ней до сих пор актуально, к сожалению.


Мечты об 1С:80

            80, чего же боле,
Что я могу еще желать.

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

ЯЗЫК ПРОГРАММИРОВАНИЯ

= Видимость переменных приложения =

Невозможность получения переменных приложения из общего модуля и создания переменных

= Указатель на функцию =

Нужен указатель на функцию с возможностью вызова это функции по указателю. Даже в таком языке как Pascal есть указатель на функцию.

= Сылку на переменную =

Тоже хорошая вещь.

= Глобальные триггеры =

Глобальные триггеры – это процедуры, которые возникают при записи, открытии и других действиях над любым прикладным объектом.

Глобальные триггеры должны быть переназначаемыми.

= Каскадные триггеры =

Желательно, чтобы можно было не просто заменить обработчик события, а заменить его каскадом, т.е. указать способ каскадного вызова – например, сначала новый обработчик, затем старый.

= Нормальная программная диагностика ошибок выполнения

Функция ОписаниеОшибки() получает гораздо меньше информации, чем получает пользователь в окошке подробного описания ошибки. В частности нет номера строки. Также хочется, чтобы были предопределенные и документированные коды ошибок. Пока возможно только анализировать текст сообщения.

= Попытка Исключение и крах транзакций =

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

= Нормальное сохранение настроек  =

В настоящее время настройки сохраняются только при закрытии 1С-предприятия.

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

= Расширенный анализ событий =

В обработчике события желательно иметь информацию о том, что за событие повлекло его вызов. Тогда можно назначать один обработчик разным событиям.

= Борьба с зацикливаниями =

Желательно на системном уровне обеспечить вызов каждые N секунд обработчика, который будет проверять, был ли нажат пользователем Ctrl+Break и преывать работу программы, если это было сделано, чтобы не загружать текст программы вызовами ОбработкаПрерыванияПользователя.

В 77 любую обработку можно было прервать.

Код может выглядеть так:

УстановитьИнтервалОбработкиПрерыванияПользователя(5); //5 секунд

= Дополнительный синтаксис =

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

  • Операторы +=   -=   ++  —  *=  /=
  • Цикл repeat until

= Копирование любого объекта =

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

= Ошибки сортировки =

При сортировке таблиц значений нет возможности сортировать документы по дате.

РАБОТА В РЕЖИМЕ 1С:ПРЕДПРИЯТИЕ

= Нормальная диагностика ошибок прав доступа =

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

= Нормальная диагностика некоторых частных ошибок выполнения =

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

Также в строке Спр.Код=Стр.Код хочется знать, где именно недоступно поле Код, можно выделить это место маркером, например Спр.Код=Стр. <<Код>>

= Крах 1С при создании объекта. Важно.

Если прикладной объект не может быть создан, платформа вылетает с критической ошибкой. Это непрозрачное поведение, более логично не создавать объект, возвращая Неопределено.

= Крах 1С на зацикленных иерархиях.

Если элемент А является родителем элемента Б, а элемент Б является родителем элемента А, то 1С:Предприятие виснет при отображении таких иерархий. Нужно этого избежать.

ПРИКЛАДНЫЕ ОБЪЕКТЫ

= Несовершенство объектной модели =

Желательно:

  • Иметь возможность получить Менеджер любого объекта.
  • Проверить является ли значение Объектом или Ссылкой.

= Ссылка на строку табличной части =

Желательно получить возможность хранить в базе ссылку на конкретную строку табличной части.

= Момент времени =

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

Также желательно преобразование момента времени в строку и обратно.

= Преобразования иерархических справочников =

Желательно преобразовать группу в элемент и наоборот.

= Ссылки на метаданные =

Желательно ссылки на объекты метаданных хранить в базе данных.

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

Возможно кто-то захочет хранить в базе и объекты типа Шрифт и прочие.

= Расширенная работа с регистром накопления =

Желательно сделать так, чтобы с регистром накопления можно было работать как с регистром сведений — отбирать не только по регистратору набор записей, но делать и любые другие отборы.

Хотя возможно это пожелание и может наткнуться на технические проблемы реализации.

= Путь внешней обработки =

Желательно получать путь, из которого открыта внешняя обработка. В 77 это было. В 80 нет никаких технических препятствий, одни идеологические.

= Предопределенные элементы =

Желательно получить имя предопределенного элемента без полного перебора этих элементов.

Также желательно получить коллекцию предопределенных элементов.

ИНТЕРФЕЙСНЫЕ ОБЪЕКТЫ

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

= Вложенные формы =

Таких банальных вещей, как форма в форме, в 1С почему-то нет. Увы.

= Программное создание интерфейсов =

Этого ожидали, но не получили. Можно комбинировать интерфейс из других интерфейсов, но нельзя программно создать пункт меню. Жаль, иначе бы можно было бы все интерфейсы создавать только программно в сложных конфигурациях.

= Триггеры – в общие модули =

Обработчик события формы может быть только в форме. Странное ограничение. Хочется размещать эти обработчики в общих модулях.

= Программное создание, идентичное конфигурированию =

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

Например, нельзя указать связь по владельцу для созданного программно элемента управления. Это очень плохо.

= Список созданных форм =

Такая банальная вещь, как список созданных (открытых) форм, в 1С 80 недоступна.

= Недостатки объектной модели =

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

= Программный клик =

Странно, но нельзя программно нажимать кнопки формы.

= Фильтр таблицы значений =

Если табличное поле привязано к табличной части прикладного объекта, то фильтрация может быть любой. А вот если источником является таблица значений – то никакой.

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

Также желательно, чтобы свойство Видимость для строки табличного поля, у которого источник таблица значений работало.

= Сохранение десктопа =

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

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

= Программный доступ к окну сообщений =

Желательно читать окно сообщений, а не только его очищать. Также изменять его видимость.

= Полная триггеризация =

В формах нельзя отловить событие, когда значение поля ввода (формы или табличной части) изменяется программно, что очень плохо.

= Пометки в списках =

Во всех списках, где есть галочки, сделать чтобы можно было автоматом выбрать, очистить или инвертировать все галочки.

КОНФИГУРАТОР

= Программное конфигурирование  =

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

Мы хотим не обязательно программного доступа к текущей конфигурации базы данных, а хотя бы открытие, модификация и запись cf-файла из встроенного языка или из другого языка программирования через OLE.

Код мог бы выглядеть так:

Конфигурация=Новый ComОбъект(«1s80.Configuration»);
Конфигурация.Open(“”);
Для Каждого Эл Из Конфигурация.Справочники() Цикл
  Если Эл.ДлинаКода=4 Тогда
            Эл.ДлинаКода=8;
  КонецЕсли;
КонецЦикла;
Если Конфигурация.Модифицированность() Тогда
  Конфигурация.Save(“”);
КонецЕсли;

= Выделение латинских букв =

Латинские буквы другим шрифтом (опционально)

= Выгрузка/загрузка объектов конфигурации в файлы. Важно =

Очень важное пожелание: выгрузка/загрузка во внешние файлы всех файлов конфигурации (роли, RLS, формы). Причем формы и права доступа удобно было бы выгружать в XML формате.

= Интеллектуальное обновление конфигурации =

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

Также есть претензия к скорости обновления. Если меняется только один модуль, почему перезаписывается весь файл конфигурации?

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

= Мелкие пожелания =

  • Делать недоступной галочку «захватывать рекурсивно» у тех объектов хранилища, которые не могут быть захвачены рекурсивно
  • Вставка через буфер обмена большого количества объектов — выгрузка/загрузка объектов.

ОТЛАДКА

= Изменение значений переменных =

Есть в VBA – можно в процессе отладки менять значения переменных простых типов.

= Изменение порядка выполнения =

Есть в VBA, удобная вещь – можно перетащить указатель текущей строки на любую строку в рамках текущей функции.

= Режим эмуляции сервера =

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

= Мягкое прерывание =

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

= Интеллектуальная обработка исключений =

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

= Несколько отладчиков сразу

Почему-то 1С считает, что такая вещь никому не нужна, а вот когда на проекте работают несколько программистов, удобнейшая вещь, тем более что в 77 она была.

= Список Последние файлы =

Если внешнюю обработку или файл не удалось открыть, чтобы он не исчезал из списка «Последние файлы». Очень неудобно при отладке внешних обработок.

= Сохранение настроек при прерывании =

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

= Загрузить из файла =

Очень не хватает этой конструкции из 77, которая компилировала модуль из файла.
Можно заменить обращение к файлу обращением к хранилищу, но все равно такая возможность была бы полезной и ускоряла бы отладку.

ОБМЕН ДАННЫМИ

= 1S8 OLE DB =

Не мешало бы сделать интерфейс к 1S8, как к обычной базе данных например через OLE DB или ADO — для доступа к данным 1С из внешнего приложения через SQL-запросы (например из Access). Такой интерфейс — признак взрослого приложения баз данных.

= Обмен в BMP & PDF =

Сделать возможность выгрузки таблиц mxl в bmp/jpg/png и PDF формат – интерактивный и программный.

ПРАВА ДОСТУПА

= Динамический RLS =

Хочется, чтобы права доступа RLS можно было назначать программно перед стартом системы.

А потом их можно зафиксировать и стартовать 1С.

= Проверка доступа без доступа =

Программная проверка, можно ли записать объект без непосредственной записи

ЗАПРОСЫ

= Таблицы значений в запросах. Важно =

Чтобы можно было в запросах обращаться к таблицам значений (технически это просто – таблица значений копируется во временную таблицу в базе данных, запрос идет к ней и другим таблицам БД). Такая возможность была в первых релизах 8-ки, затем ее посчитали ненужной и почему-то отменили.

= Комментарии в запросах =

Чтобы в запросах сохранялся текст комментариев.

= Сравнение строк неограниченной длины =

Чтобы в запросах сравнивало строки неограниченной длины. Неужели есть технические проблемы?

= Предопределенные элементы в тексте запроса =

Использовать в тексте запроса предопределенные элементы.

= Борьба с зацикливаниями запросов =

Желательно иметь возможность прервать пользователю выполнение запроса по Ctrl+Break.

= Прогрессор запросов =

Желательно получать информацию о состоянии выполнения запроса от SQL-сервера, чтобы выводить прогрессор выполнения запроса.

ЖУРНАЛ РЕГИСТРАЦИИ

= Место хранения журнала регистрации =

Желательно, чтобы журнал регистрации можно было выборочно хранить в файле или в базе данных.

= Управление работой журнала регистрации =

Желательно программное включение/выключение журнала регистрации

= Триггер записи в журнал регистрации =

Желательно наличие события ПриЗаписиВЖурналРегистрации, возможность его включения/выключения и назначения списка событий, при которых это событие вызывается.

fixin

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

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *