Единый семинар «1С» для бухгалтеров и руководителей

Цены на работы и внешние печатные формы в конфигурации 1С БИТ:Управление медицинским центром

Печать - Печатные формы документов

В статье рассмотрены ошибки конфигурации и приведены методы их решения, связанные с невозможностью использовать внешнюю печатную форму с видом использования "ВызовКлиентскогоМетода" и открытием произвольной формы перед выводом на печать и отсутствием цен в табличной части "Работы" документа "Оказание услуг".

Всем привет!

Замечательная конфигурация 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.

Скачать файлы

Наименование Файл Версия Размер
ВнешниеПечФормы
.cfe 5,18Kb
03.10.17
0
.cfe 5,18Kb Скачать
Цены
.cfe 5,76Kb
03.10.17
0
.cfe 5,76Kb Скачать
ЗавершениеРаботы
.cfe 71,90Kb
03.10.17
0
.cfe 71,90Kb Скачать

См. также

В этой теме еще нет сообщений.
Оставьте свое сообщение