|
У единственного пользователя неправильно работает обработка | ☑ | ||
---|---|---|---|---|
0
inlimbo
14.03.14
✎
14:46
|
Это продолжение моей предыдущей темы. Для ознакомления ее текст:
Доброго времени суток! Клиент-сервное решение, УПП , платформа 8.2. Пользователи работают через RDP. Я уже много чего перепробывала, но проблема не уходит. После обновления конфигурации(УПП) у одного пользователя стала неправильно работать обработка "Согласование заявок". Эта обработка есть копия стандартной с добавлением условия на выбор следующего этапа согласования. В отладчике проверила работу обработки под этим пользователем, там все нормально срабатывает. А вот у него нет! Воникло подозрение, что это кэш. Почистили кэш в его RDP сессии. Заработало! Но на следующий день опять та же песня! Создали новую учетку в 1С, помогло. На след день опять то же самое. Удалили учетку с терминального сервера и создали новую, помогло. Но на следующий день опять то же самое. Вопрос: что же еще может влиять на его работу? И что такое кэш конфигурации сервера 1С, для чего он нужен? |
|||
1
vicof
14.03.14
✎
14:50
|
Кэш
|
|||
2
timurhv
14.03.14
✎
14:51
|
(0) Уверены что не ошибка в коде? Может в каких-то ситуациях работает по-другому алгоритму?
|
|||
3
inlimbo
14.03.14
✎
14:53
|
Дискуссия закончилась 8 марта и ни к чему не привела.
Вот что я выяснила за неделю моих экспериментов над злосчастным пользователем и его этапом согласования: Оказывается у него с завидным постоянством (в результате чего непонятно) выполняется код той старой обработки. Тест был чрезвычайно прост: в новую обработку добавлены сообщения о ходе работы именно этой обработки, в старую добавлено сообщение, что идет выполнение старой обработки. Также почистили кеш сервера приложения, почистили его кэш на RDP сервере. Обновление конфигурации(не динамическое) и пробуем: сначала все работает как наддо, то есть выполняется новая обработка(видно по сообщениям). через несколько часов работы видим что при согласовании используется уже другая обработка. |
|||
4
Necessitudo
14.03.14
✎
14:56
|
Переставьте сервер приложений
|
|||
5
inlimbo
14.03.14
✎
14:56
|
Я трублю права к этой старой обработке. Правда она стандартная и находится на поддержке.
Но меня все таки мучает вопрос : КАК?? как они взаимосвязаны? Я знаю что создатели новой обработки создали ее скорее всего копированием старой и внесением новых изменений. |
|||
6
The_SpecialOne
14.03.14
✎
14:57
|
...в старую добавлено сообщение, что идет выполнение старой обработки.
И что выдаются сообщения из нее? Так может юзер сам что-то не то запускает? |
|||
7
inlimbo
14.03.14
✎
14:57
|
(6) Нет , при мне юзер делает все как надо.
|
|||
8
inlimbo
14.03.14
✎
14:59
|
(6) Сообщения выдаются, добавленные мной
|
|||
9
МойКодУныл
14.03.14
✎
15:00
|
Включить отладку на сервере, подключится к пользователю и посмотреть стек вызовов, когда зайдет в старую обработку. МОжет станет понятно как.
|
|||
10
inlimbo
14.03.14
✎
15:03
|
(9)Пробовала, взял тогда новую. Надо наверное еще раз попробовать. Как посмотреть стек вызовов?
|
|||
11
The_SpecialOne
14.03.14
✎
15:03
|
после того, как "переключается" работа на старую перезапуск 1С не помогает вернутся к новой?
|
|||
12
The_SpecialOne
14.03.14
✎
15:04
|
(10) Ctrl+Alt+C
|
|||
13
inlimbo
14.03.14
✎
15:05
|
(11) не обращала внимания.
|
|||
14
The_SpecialOne
14.03.14
✎
15:07
|
(13) обратите как-нибудь. Если поможет, то скорее всего ошибка где-то в коде
|
|||
15
inlimbo
14.03.14
✎
15:09
|
(14) Тогда бы она отражалась на других пользователях
|
|||
16
The_SpecialOne
14.03.14
✎
15:10
|
все делают одни и те же действия с обработкой?
|
|||
17
inlimbo
14.03.14
✎
15:11
|
(16) все обращаются к одной и той же форме(форма управляемая между прочим), процедуре в модуле обработки.
|
|||
18
The_SpecialOne
14.03.14
✎
15:13
|
(17) можно взглянуть одним глазком на обработку?
|
|||
19
inlimbo
14.03.14
✎
15:19
|
Ладно:
Функция ОбработатьСогласованиеЗаявок() Экспорт //Получим этапы согласования текущего пользователя Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | МаршрутыСогласованияСогласующиеЛица.Ссылка КАК МаршрутСогласования |ИЗ | Справочник.МаршрутыСогласования.СогласующиеЛица КАК МаршрутыСогласованияСогласующиеЛица |ГДЕ | МаршрутыСогласованияСогласующиеЛица.Пользователь = &ТекПользователь"; Запрос.УстановитьПараметр("ТекПользователь", ТекущийПользователь); ЭтапыТекущегоПользователя = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("МаршрутСогласования"); СоответствиеСледующиеЭтапы = Новый Соответствие(); ЕстьОшибки = Ложь; УспешноОбработанныеЗаявки = Новый Массив; Для Каждого СтрокаТабличнойЧасти ИЗ ЗаявкиНаРасходованиеСредств Цикл Если НЕ СтрокаТабличнойЧасти.Пометка Тогда Продолжить; КонецЕсли; Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.Состояние) ИЛИ (СтрокаТабличнойЧасти.ПоследнийСогласующий = ТекущийПользователь И СтрокаТабличнойЧасти.ТекущееСостояние = СтрокаТабличнойЧасти.Состояние) Тогда УспешноОбработанныеЗаявки.Добавить(СтрокаТабличнойЧасти); Продолжить; КонецЕсли; Отказ = Ложь; ТекстПоля = ОбщегоНазначенияКлиентСервер.ПолучитьТекстДляВыдачиСообщенийПоСтрокеТЧ("ЗаявкиНаРасходованиеСредств", СтрокаТабличнойЧасти.НомерСтроки, "Дата"); Если СтрокаТабличнойЧасти.ПоследнийСогласующий = ТекущийПользователь ИЛИ НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.Этап.Родитель) Тогда НовыйЭтап = СтрокаТабличнойЧасти.Этап; Иначе //Определим новый этап - это может быть следующий этап (непосредственный родитель) // или один из вышестоящих этапов НовыйЭтап = Неопределено; ОпределитьСледующийЭтапСогласования(НовыйЭтап, СтрокаТабличнойЧасти.Этап, ЭтапыТекущегоПользователя, СоответствиеСледующиеЭтапы); //Если новый этап не удалось определить - сообщим об ошибке // Такой ситуации возникать не должно. Если НовыйЭтап = Неопределено Тогда ТекстСообщения = НСтр("ru = 'Не удалось определить следующий этап согласования заявки &Заявка. |Состояние заявки изменено не будет.'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "&Заявка", СтрокаТабличнойЧасти.Заявка); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ТекстПоля,, Отказ); Продолжить; КонецЕсли; КонецЕсли; НовыйУровень = НовыйЭтап.Уровень() + 1; //Обработаем состояние Отказано Если СтрокаТабличнойЧасти.Состояние = Перечисления.СостоянияОбъектов.Отклонен И СтрокаТабличнойЧасти.Заявка.Проведен Тогда Попытка ЗаявкаОбъект = СтрокаТабличнойЧасти.Заявка.ПолучитьОбъект(); ЗаявкаОбъект.Заблокировать(); ЗаявкаОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); Исключение ТекстСообщения = НСтр("ru = 'Не удалось отменить проведение документа &Заявка. |Состояние заявки изменено не будет.'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "&Заявка", СтрокаТабличнойЧасти.Заявка); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ТекстПоля,, Отказ); КонецПопытки; КонецЕсли; // Обработаем изменение состояния с Отказано на другое Если СтрокаТабличнойЧасти.ТекущееСостояние = Перечисления.СостоянияОбъектов.Отклонен И НЕ СтрокаТабличнойЧасти.Заявка.Проведен Тогда Попытка ЗаявкаОбъект = СтрокаТабличнойЧасти.Заявка.ПолучитьОбъект(); ЗаявкаОбъект.Заблокировать(); ЗаявкаОбъект.Записать(РежимЗаписиДокумента.Проведение); Исключение ТекстСообщения = НСтр("ru = 'Не удалось провести документ &Заявка. |Состояние заявки изменено не будет'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "&Заявка", СтрокаТабличнойЧасти.Заявка); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ТекстПоля,, Отказ); КонецПопытки; КонецЕсли; Если Отказ Тогда ЕстьОшибки = Истина; Продолжить; КонецЕсли; //Изменим состояние заявки в регистре НаборЗаписейСостояниеСогласования = РегистрыСведений.СостоянияСогласованияЗаявок.СоздатьНаборЗаписей(); НаборЗаписейСостояниеСогласования.Отбор.Заявка.Установить(СтрокаТабличнойЧасти.Заявка); НаборЗаписейСостояниеСогласования.Прочитать(); //Проверим последнюю запись - если она относится к тому же пользователю и этапу, удалим ее Если НаборЗаписейСостояниеСогласования.Количество() > 0 Тогда ПоследняяЗапись = НаборЗаписейСостояниеСогласования[НаборЗаписейСостояниеСогласования.Количество()-1]; Если ПоследняяЗапись.Пользователь = ТекущийПользователь И ПоследняяЗапись.Этап = НовыйЭтап Тогда НаборЗаписейСостояниеСогласования.Удалить(ПоследняяЗапись); КонецЕсли; КонецЕсли; Если СтрокаТабличнойЧасти.Состояние = Перечисления.СостоянияОбъектов.Согласован И НовыйУровень = 1 Тогда НовоеСостояние = Перечисления.СостоянияОбъектов.Утвержден; Иначе НовоеСостояние = СтрокаТабличнойЧасти.Состояние; КонецЕсли; НоваяЗапись = НаборЗаписейСостояниеСогласования.Добавить(); НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Активность = Истина; НоваяЗапись.Заявка = СтрокаТабличнойЧасти.Заявка; НоваяЗапись.Пользователь = ТекущийПользователь; НоваяЗапись.Состояние = НовоеСостояние; НоваяЗапись.Уровень = НовыйУровень; НоваяЗапись.Этап = НовыйЭтап; ЭтоСмагин = ЛОЖЬ; Если ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию("Смагин Антон Владимирович") Тогда ЭтоСмагин = ИСТИНА; КонецЕсли ; Если ЭтоСмагин Тогда Сообщить("Определен следующий этап согласования :" + НоваяЗапись.Этап ); КонецЕсли ; //ИТ партнер Если ЗначениеЗаполнено(НовыйЭтап.Родитель) И НовоеСостояние <> Перечисления.СостоянияОбъектов.Отклонен И НовоеСостояние <> Перечисления.СостоянияОбъектов.Отложен Тогда МС_Родитель = НовыйЭтап.Родитель; //Если МС_Родитель.Уровень() > 0 Тогда Если ЭтоСмагин Тогда Сообщить("Проверка родителя" + МС_Родитель ); КонецЕсли ; Для i = 0 по МС_Родитель.Уровень() Цикл НадоПропускать = ложь; если МС_Родитель.ВидыОперацийЗаявок.Найти(СтрокаТабличнойЧасти.Заявка.ВидОперации, "ВидыОперацийЗаявок") <> неопределено Тогда НоваяЗапись.Этап = МС_Родитель; НоваяЗапись.Состояние = ?(ЗначениеЗаполнено(МС_Родитель.Родитель), Перечисления.СостоянияОбъектов.Согласован, Перечисления.СостоянияОбъектов.Утвержден); НоваяЗапись.Уровень = МС_Родитель.Уровень() + 1; НадоПропускать = истина; Если ЭтоСмагин Тогда Сообщить("Изменен на этап согласования :" + НоваяЗапись.Этап ); КонецЕсли ; КонецЕсли; если МС_Родитель.СтатьиОборотовПоБюджетам.Найти(СтрокаТабличнойЧасти.Заявка.СтатьяОборотов, "СтатьяОборотовПоБюджетам") <> неопределено Тогда НоваяЗапись.Этап = МС_Родитель; НоваяЗапись.Состояние = ?(ЗначениеЗаполнено(МС_Родитель.Родитель), Перечисления.СостоянияОбъектов.Согласован, Перечисления.СостоянияОбъектов.Утвержден); НоваяЗапись.Уровень = МС_Родитель.Уровень() + 1; НадоПропускать = истина; Если ЭтоСмагин Тогда Сообщить("Изменен на этап согласования :" + НоваяЗапись.Этап ); КонецЕсли ; КонецЕсли; Если МС_Родитель.СверхБюджет и ЗначениеЗаполнено(СтрокаТабличнойЧасти.Заявка.Сценарий) Тогда Если СтрокаТабличнойЧасти.Заявка.УЮСуммаСверхБюджета = 0 Тогда НоваяЗапись.Этап = МС_Родитель; НоваяЗапись.Состояние = ?(ЗначениеЗаполнено(МС_Родитель.Родитель), Перечисления.СостоянияОбъектов.Согласован, Перечисления.СостоянияОбъектов.Утвержден); НоваяЗапись.Уровень = МС_Родитель.Уровень() + 1; НадоПропускать = истина; Если ЭтоСмагин Тогда Сообщить("Изменен на этап согласования :" + НоваяЗапись.Этап ); КонецЕсли ; Иначе Если СтрокаТабличнойЧасти.Заявка.УЮСуммаСверхБюджета <= МС_Родитель.СверхБюджетОрганичение Тогда НоваяЗапись.Этап = МС_Родитель; НоваяЗапись.Состояние = ?(ЗначениеЗаполнено(МС_Родитель.Родитель), Перечисления.СостоянияОбъектов.Согласован, Перечисления.СостоянияОбъектов.Утвержден); НоваяЗапись.Уровень = МС_Родитель.Уровень() + 1; НадоПропускать = истина; Если ЭтоСмагин Тогда Сообщить("Изменен на этап согласования :" + НоваяЗапись.Этап ); КонецЕсли ; Иначе Прервать; КонецЕсли; КонецЕсли; КонецЕсли; Если НадоПропускать = ложь Тогда Прервать; КонецЕсли; МС_Родитель = МС_Родитель.Родитель; Если не ЗначениеЗаполнено(МС_Родитель) Тогда Прервать; КонецЕсли; КонецЦикла; //Конецесли; КонецЕсли; //ИТ партнер НаборЗаписейСостояниеСогласования.Записать(); Если ЭтоСмагин Тогда Сообщить("Этап согласования определен :" + НоваяЗапись.Этап ); КонецЕсли ; //отправка сообщения Если НоваяЗапись.Состояние = Перечисления.СостоянияОбъектов.Согласован Тогда Для каждого стр из МС_Родитель.СогласующиеЛица Цикл ОтправитьСообщение(стр.Пользователь, СтрокаТабличнойЧасти.Заявка.Номер, СтрокаТабличнойЧасти.Заявка.Дата, "Получена заявка на согласование: ", СтрокаТабличнойЧасти.Заявка.Описание); КонецЦикла; ИначеЕсли НоваяЗапись.Состояние = Перечисления.СостоянияОбъектов.Отклонен Тогда ОтправитьСообщение(СтрокаТабличнойЧасти.Заявка.Ответственный, СтрокаТабличнойЧасти.Заявка.Номер, СтрокаТабличнойЧасти.Заявка.Дата, "Заявка отклонена: ", СтрокаТабличнойЧасти.Заявка.Комментарий); ИначеЕсли НоваяЗапись.Состояние = Перечисления.СостоянияОбъектов.Утвержден Тогда Если ТипЗнч(СтрокаТабличнойЧасти.Заявка.БанковскийСчетКасса) = Тип("СправочникСсылка.Кассы") Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Пользователи.Ссылка КАК Пользователь |ИЗ | РегистрСведений.ОтветственныеЛица.СрезПоследних(&ДатаОтбора, СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ОтветственныеЛицаСрезПоследних | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи | ПО ОтветственныеЛицаСрезПоследних.ФизическоеЛицо = Пользователи.ФизЛицо"; Запрос.УстановитьПараметр("ДатаОтбора", СтрокаТабличнойЧасти.Заявка.Дата); Запрос.УстановитьПараметр("СтруктурнаяЕдиница", СтрокаТабличнойЧасти.Заявка.БанковскийСчетКасса); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписиКасса = Результат.Выбрать(); Если ВыборкаДетальныеЗаписиКасса.Следующий() Тогда ОтправитьСообщение(ВыборкаДетальныеЗаписиКасса.Пользователь, СтрокаТабличнойЧасти.Заявка.Номер, СтрокаТабличнойЧасти.Заявка.Дата, "Деньги по заявке можно выдавать.", " "); КонецЕсли; КонецЕсли; Если ТипЗнч(СтрокаТабличнойЧасти.Заявка.БанковскийСчетКасса) = Тип("СправочникСсылка.БанковскиеСчета") Тогда Если Найти(СтрокаТабличнойЧасти.Заявка.БанковскийСчетКасса.Наименование, "Иной") > 0 Тогда //10.09.2013 Ощепкова мЛицаОтветсвенныеЗаСчетИной = ВернутьМассивПользователейПоСчетуИной() ; Для каждого стр из мЛицаОтветсвенныеЗаСчетИной Цикл ОтправитьСообщение(стр, СтрокаТабличнойЧасти.Заявка.Номер, СтрокаТабличнойЧасти.Заявка.Дата, "Заявка утверждена: ", СтрокаТабличнойЧасти.Заявка.Описание); КонецЦикла; //МаршрутКазначейство = Справочники.МаршрутыСогласования.НайтиПоНаименованию("Казначейство"); //Для каждого стр из МаршрутКазначейство.СогласующиеЛица Цикл // ОтправитьСообщение(стр.Пользователь, СтрокаТабличнойЧасти.Заявка.Номер, СтрокаТабличнойЧасти.Заявка.Дата, "Заявка утверждена: ", СтрокаТабличнойЧасти.Заявка.Описание); //КонецЦикла; //. КонецЕсли; Иначе //Верификация Запрос = Новый Запрос("ВЫБРАТЬ | Пользователи.Ссылка Как Пользователь |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.Верификация = ИСТИНА"); Результат = Запрос.Выполнить(); ВыборкаПользователей = Результат.Выбрать(); Пока ВыборкаПользователей.Следующий() Цикл ОтправитьСообщение(ВыборкаПользователей.Пользователь, СтрокаТабличнойЧасти.Заявка.Номер, СтрокаТабличнойЧасти.Заявка.Дата, "Заявка требует верификации: ", " "); КонецЦикла; КонецЕсли; ОтправитьСообщение(СтрокаТабличнойЧасти.Заявка.Ответственный, СтрокаТабличнойЧасти.Заявка.Номер, СтрокаТабличнойЧасти.Заявка.Дата, "Заявка утверждена: ", СтрокаТабличнойЧасти.Заявка.Описание + Символы.ПС + Символы.ПС + "Комментарий: " + СтрокаТабличнойЧасти.Заявка.Комментарий ); КонецЕсли; //& УспешноОбработанныеЗаявки.Добавить(СтрокаТабличнойЧасти); КонецЦикла; // Удалим из списка заявки по которым удалось изменить состояние Для каждого ЭлКоллекции Из УспешноОбработанныеЗаявки Цикл ЗаявкиНаРасходованиеСредств.Удалить(ЭлКоллекции); КонецЦикла; Возврат НЕ ЕстьОшибки; КонецФункции //Процедура определяет этап согласования, который соответствует маршруту согласования и текущему пользователю Процедура ОпределитьСледующийЭтапСогласования(НовыйЭтап, ТекущийЭтап, ЭтапыТекущегоПользователя, СоответствиеСледующиеЭтапы) НовыйЭтап = СоответствиеСледующиеЭтапы.Получить(ТекущийЭтап); Если НовыйЭтап = Неопределено Тогда Если ЭтапыТекущегоПользователя.Найти(ТекущийЭтап)<>Неопределено Тогда НовыйЭтап = ТекущийЭтап; СоответствиеСледующиеЭтапы.Вставить(ТекущийЭтап, НовыйЭтап); ИначеЕсли ЗначениеЗаполнено(ТекущийЭтап.Родитель) Тогда ОпределитьСледующийЭтапСогласования(НовыйЭтап, ТекущийЭтап.Родитель, ЭтапыТекущегоПользователя, СоответствиеСледующиеЭтапы) КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
20
inlimbo
14.03.14
✎
15:20
|
это из модуля объекта
|
|||
21
inlimbo
14.03.14
✎
16:24
|
1с отправила письмо.
Обрублю права на эту обработку и попробую еще раз в отладчике глянуть. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |