Проблемы 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-клиент

См. также

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

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

7200 руб.

02.08.2023    4081    14    1    

31

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

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

29400 руб.

29.06.2023    5875    14    5    

24

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

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6592    72    10    

29

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

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

2 стартмани

22.04.2024    5234    dimanich70    15    

22

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

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

01.03.2024    6426    dimanich70    9    

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

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