Проблемы web-клиента 1С: Предприятие. Исправляем ошибку в 1С: Договорчики 8

06.07.16

Задачи пользователя - Адаптация типовых решений

Описывается способ обхода ошибки, возникающей в web-клиенте при программном изменении видимости элементов формы в процессе записи и закрытия. Ошибка была выявлена в типовой конфигурации 1С: Договорчики 8, но, вполне вероятно, может встречаться и в иных ситуациях. Предложен способ обхода с использованием механизма расширений 1С: Предприятие 8.3, что позволяет не вносить изменения в типовую конфигурацию.

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

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

В центральном офисе был успешно поднят web-сервер и сделаны необходимые разрешения для удаленного доступа. На этапе тестирования в web-клиенте (только в нем!) столкнулись со следующей ошибкой при нажатии кнопки Записать и закрыть в карточке договора (элемента справочника «Договорные документы»):

 

Текст ошибки мог немного варьироваться.

Заметим, что эта ошибка не препятствовала записи документа (все данные успешно записывались), однако элемент справочника при этом оставался заблокированным. Снять блокировку можно было только закрытием приложения в окне браузера пользователя, вызвавшего ошибочную ситуацию.

При этом, последовательное интерактивное выполнение двух операций: записи элемента (кнопка Записать) и закрытия (кнопка Закрыть) отрабатывало нормально и ошибок не вызывало.

Мы пробовали: обновить конфигурацию/платформу, настраивать web-сервер в соответствии с многочисленными рекомендациями, сменить web-сервер, перейти с файловой на серверную версию платформы. Не помогло. Обратились на линию консультаций 1С. После долгой переписки получили ответ вида: «Ваша проблема зарегистрирована и передана в службу разработки».

Устав от ожиданий, попробовали выявить и решить проблему своими силами. Проведенные исследования показали, что ошибка вызывается при выполнении процедуры ОбновитьДекорации() модуля формы справочника «Договорные документы», а именно при установке и последующей смене видимости одного или нескольких элементов ДекорацияПросрочка3, ДекорацияПросрочка4 и ДекорацияПросрочка5. Процедура вызывается из обработчика события При записи:

&НаКлиенте
Процедура ОбновитьДекорации()
               
                Элементы.ДекорацияПросрочка3.Видимость = Ложь;
                Элементы.ДекорацияПросрочка4.Видимость = Ложь;
                Элементы.ДекорацияПросрочка5.Видимость = Ложь;
                              
                ЕстьПроблемы = Ложь;
               
                Если Не Объект.Закрыт Тогда
                               Если ЗначениеЗаполнено(Объект.ДатаОкончанияДействия)
                                               И Объект.ДатаОкончанияДействия < НачалоДня(ТекущаяДата()) Тогда
                                               ДнейПросрочки = (НачалоДня(ТекущаяДата()) - НачалоДня(Объект.ДатаОкончанияДействия)) / (24*3600);
                                               Элементы.ДекорацияПросрочка.Заголовок = СтрШаблон(
                                                               НСтр("ru = 'Срок действия документа истек %1 %2 назад!'"),
                                                               Строка(ДнейПросрочки), ПолучитьПодписьДней(ДнейПросрочки));
                                               Элементы.ДекорацияПросрочка.Видимость = Истина;
                                               ЕстьПроблемы = Истина;
                               Иначе
                                               Элементы.ДекорацияПросрочка.Видимость = Ложь;
                               КонецЕсли;
                              
                               ПросроченныйЭтап = ""; КоличествоПросроченных = 0;
                               Для Каждого Строка Из Объект.Этапы Цикл
                                               Если ЗначениеЗаполнено(Строка.Срок) И Не Строка.Пройден
                                                               И КонецДня(Строка.Срок) < КонецДня(ТекущаяДата()) Тогда
                                                               ДнейПросрочки = (КонецДня(ТекущаяДата()) - КонецДня(Строка.Срок)) / (24*3600);
                                                               ПросроченныйЭтап = Строка.Этап;
                                                               КоличествоПросроченных = КоличествоПросроченных + 1;
                                               КонецЕсли;
                               КонецЦикла;
                              
                               Если КоличествоПросроченных = 1 Тогда
                                               Элементы.ДекорацияПросрочка2.Заголовок = СтрШаблон(
                                                               НСтр("ru = 'Этап ""%1"" просрочен на %2 %3!'"),
                                                               ПросроченныйЭтап, Строка(ДнейПросрочки), ПолучитьПодписьДней(ДнейПросрочки));
                               ИначеЕсли КоличествоПросроченных > 1 Тогда
                                               Элементы.ДекорацияПросрочка2.Заголовок = СтрШаблон(
                                                               НСтр("ru = 'Этапы (%1) просрочены!'"),
                                                               Строка(КоличествоПросроченных));
                               КонецЕсли;
                              
                               Элементы.ДекорацияПросрочка2.Видимость = КоличествоПросроченных > 0;
                               ЕстьПроблемы = ЕстьПроблемы Или КоличествоПросроченных > 0;
                              
                Иначе
                               Элементы.ДекорацияПросрочка2.Видимость = Ложь;
                               Элементы.ДекорацияПросрочка.Видимость = Ложь;
                               ЕстьПроблемы = Истина;
                КонецЕсли;
               
                Если Не (ЕстьПроблемы Или Элементы.ДекорацияПросрочка1.Видимость) Тогда
                               Строки = Объект.Согласующие.НайтиСтроки(Новый Структура("РезультатСогласования",
                                               ПредопределенноеЗначение("Перечисление.РезультатыСогласования.ПустаяСсылка")));
                               Если Строки.Количество() > 0 Тогда
                                               Элементы.ДекорацияПросрочка3.Видимость = Истина;
                               КонецЕсли;
                              
                               Строки = Объект.Этапы.НайтиСтроки(Новый Структура("Пройден", Ложь));
                               Если Строки.Количество() > 0 Тогда
                                               Элементы.ДекорацияПросрочка5.Видимость = Истина;
                               КонецЕсли;
                              
                               Если ЗначениеЗаполнено(ТекстПередачи) Тогда
                                               Элементы.ДекорацияПросрочка4.Видимость = Истина;
                               КонецЕсли;
                КонецЕсли;
               
КонецПроцедуры

 

 

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

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

Сложность грамотной реализации задуманного состоит в невозможности (? не уверен) отличия исполнения события ПриЗаписи по нажатии кнопки Записать и закрыть от других способов записи. Поэтому, было принято решение в форме, добавленной в расширение, подменить стандартную кнопку Записать и закрыть на обычную кнопку с привязкой команды с нестандартным обработчиком (процедура Расш1_ЗаписатьЗакрыть).

 

 

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

&НаСервере
Процедура ЗаписатьЗакрытьСервер()
	
	Записать();
	
КонецПроцедуры

&НаКлиенте
Процедура Расш1_ЗаписатьЗакрыть(Команда)
	
	ЗаписатьЗакрытьСервер();
	Закрыть();
	
КонецПроцедуры
 

Таким несложным способом практически незаметно для пользователей была исправлена ошибка работы web-клиента для поставки 1С: Договорчики 8. Почему почти? Некоторые пользователи заметили пропадание уведомления о записи в правом нижнем углу экрана.

Договорчики web-клиент

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4653    9    5    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3066    4    0    

20

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1691    dimanich70    8    

14

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

27.10.2023    2109    19    avmartynov    14    

44

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2246    25    progmaster    8    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. nixel 1408 13.07.16 10:04 Сейчас в теме
Интересный способ обхода багов типовых, надо взять на заметку :)
Только поправьте в статье - в упр форме не существует события ПриЗаписи. Даже если бы оно было, то из него никак бы нельзя было вызвать клиентскую процедуру.
2. Sergey1CSpb 216 13.07.16 10:36 Сейчас в теме
(1) nixel, Спасибо!
Ну да, маленькая неточность. Думаю поменять на "События, связанные с записью".

"Даже если бы оно было, то из него никак бы нельзя было вызвать клиентскую процедуру" так вполне можно из ПриЗаписиНаСервере.
Оставьте свое сообщение