Всем привет!
Замечательная конфигурация 1С "БИТ:Управление медицинским центром" вплоть до релиза 2.0.28.3 в логике своей работы имеет пару досадных неточностей, не позволяющих основательно получать удовольствие от её использования.
Привожу здесь два варианта разрешения этих трудностей с оговоркой, что мне лично больше нравится тот что связан с изменением конфигурации - старые дедовские способы работают как должно пока ещё. И да - это моё ИМХО и это работает.
Проблема №1. Не проставляются цены на работы в документе "Оказание услуг".
Нарушение в логике работы программы следующее: регистр сведений "Цены номенклатуры" имеет измерение "ЕдиницаИзмерения", а табличная часть "Работы" вышеуказанного документа не имеет никакого подобного подходящего реквизита для того, чтобы при заполнении строки данной табличной части легко и свободно можно было подставить её в запрос по ценам. Далее, функция "ПолучитьЦену" общего модуля "Ценообразование" содержит строки:
Если ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда
СтруктураОтбора.Вставить("ЕдиницаИзмерения",ЕдиницаИзмерения);
Иначе
СтруктураОтбора.Вставить("ЕдиницаИзмерения",Справочники.ЕдиницыИзмерения.ПустаяСсылка());
КонецЕсли;
Вот здесь, на мой взгляд, применено крайне неверное решение: при нормальных условиях в измерении "ЕдиницаИзмерения" регистра "Цены номенклатуры" никак не могут оказаться пустые ссылки. Скорее там будут ссылки на элементы справочника "Единицы измерения" из реквизитов "ЕдиницаТоваров" соответствующих номенклатур. Используем же их скорее:
Если ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда
СтруктураОтбора.Вставить("ЕдиницаИзмерения",ЕдиницаИзмерения);
Иначе
Если ТипЗнч(Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда
СтруктураОтбора.Вставить("ЕдиницаИзмерения",Номенклатура.ЕдиницаТоваров);
КонецЕсли;
КонецЕсли;
Варианты решения:
а) непосредственное изменение кода конфигурации;
б) создание расширения: проблемную функцию помещаем "вместо" исходной, меняем код.
Проблема №2. Не совсем работают внешние печатные формы с видом использования "ВызовКлиентскогоМетода".
Во-первых, форма внешней обработки должна называться "Форма1". Да. Именно так.
Во-вторых, в модуле объекта обработки должна находиться функция:
Функция РежимЗапускаКлиент() Экспорт
Возврат Истина;
КонецФункции
Тоже так надо.
В-третьих, и что самое неприятное, конфигурация в открывающуюся форму не передаёт ссылку на документ, из которого эта форма открывается... И, как следствие, внешняя печатная форма не знает, что ей печатать.
Варианты решения:
а) добавить строки:
Попытка
Форма.Объект.СсылкаНаОбъект = Объект;
Исключение
КонецПопытки;
после строки
Форма = ПолучитьФорму("ВнешняяОбработка."+Рез+".Форма.Форма1");
в функции "НапечататьВнешнююФормуСПроверкойРежимаКлиент" общего модуля "ПечатьДокументовКлиент"
б) вынести всё это дело в расширение.
Сложности в применении расширений.
На данный момент используем платформу 8.3.10.2505.
Рассматриваемая конфигурация имеет режим совместимости "Версия 8.3.6". Не зря, конечно.
Основная задача состоит в том, чтобы заимствовать некую функцию общего модуля в расширение в режиме "вместо" и, изменив там несколько строк, добиться того, чтобы в процессе работы конфигурации выполнялся модифицированный код.
Вот тут-то и начинаются поводные камни:
- директиву &Вместо("ПолучитьЦену"), поддерживаемую платформой 8.3.10, не даёт использовать режим совместимости;
- метод "УстановитьВыполнениеОбработчиковСобытия" из платформы 8.3.6 вызывает бурную реакцию платформы 8.3.10 типа: "Переопределение свойств заимствованных объектов в расширениях недопустимо в режиме совместимости 8.3.8 и ниже".
По всему видно, что для использования расширений необходимо усановить режим совместимости конфигурации в "Не использовать". Однако, такое решение привносит ряд дополнительных проблем и "неразрешимых" ситуаций в нашу конфигурацию. В основном, начинают хромать методы при и перед закрытием форм и самой системы. Решаются они частично при помощи методик из документа Перевод конфигураций на платформу "1С:Предприятие 8.3" без режима совместимости с версией 8.2, находящегося на сайте 1С ИТС. Почему частично - потому что не все серверные вызовы можно переделать на клиентские и не от всех можно отказаться. Подробности - в прикрепленном расширении "ЗавершениеРаботы".
В списке файлов три расширения, решающие проблемы с внешней печатной формой, ценами и ошибками при закрытии форм и приложения в конфигурации 1С: "БИТ:Управление медицинским центром" релиза 2.0.28.3.