|
1С:Предприятие
:: 1С:Предприятие 7.7 и ранее
|
|
| ||
Джордж1 05.01.21 - 20:08 | Из формы открываю обработку, которая отрабатывает без открытия формы.
Данные передаются через СписокЗначений в Форма.Параметр. В этот СЗ добавляется параметр "ЕстьОшибка" - так вот этот параметр не добавляется в СЗ, причем проблема только новых (быстрых) компьютерах. В режиме отладки - тоже все ОК Если ПустоеЗначение(Форма.Параметр)=0 Тогда //работаем не в интерактивном режиме СтатусВозврата(0); СЗ=Форма.Параметр; Команда=СЗ.Получить("Команда"); Если Команда="ВыписатьЧек" Тогда//формируем чек ДокЧек=СЗ.Получить("ДокЧек"); Статус=ВыписатьЧек(ДокЧек); Если Статус=0 Тогда Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда Форма.Параметр.Установить("ЕстьОшибка",1); КонецЕсли; Иначе Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда Форма.Параметр.Установить("ЕстьОшибка",0); КонецЕсли; КонецЕсли; | ||
Крэкпэк 1 - 05.01.21 - 20:42 | Добавь логирование после каждой строки. Смотри где не отрабатывает. | ||
Джордж1 2 - 05.01.21 - 20:53 | (1)Попробую, только вот ошибка пока воспроизводится только на одном компе в магазине на кассе. И то вчера ее не было, а сегодня появилась | ||
Крэкпэк 3 - 05.01.21 - 20:57 | Логирование поможет проблеме быстрых компьютеров. С таким не встречался.
Обычно тупо ошибка в коде например в строке Статус=ВыписатьЧек(ДокЧек); хз что там происходит что в переменной ДокЧек? может просто замена на ДокЧек.ТекущийДокумент() решит проблемы | ||
Джордж1 4 - 05.01.21 - 21:05 | (3)Я же пишу - 3 компа в сети. Тот на котором база выдает ошибку, на других все нормально
В режиме отладки тоже все ОК Было бы так просто - я бы сам отладил | ||
ДенисЧ 5 - 05.01.21 - 21:17 | (2) Замени компьютер на более медленный. | ||
Джордж1 6 - 05.01.21 - 21:24 | (5)Медленным компьютерам уже лет под 10, боимся сдохнут уже | ||
Злопчинский 7 - 05.01.21 - 23:46 | Отпиши когда порешаешь | ||
ДенисЧ 8 - 06.01.21 - 06:02 | (6) Хм.... У меня сейчас музыку играет ноут, которому 12 лет... И ничего, не дохнет... | ||
Джордж1 9 - 06.01.21 - 07:56 | (8)так и в магазинах может не сдохнут, но лучше до этого не доводить.
Один комп загружается 10 минут. А покупатели ждут | ||
Джордж1 10 - 06.01.21 - 08:04 | (7)пока решилось добавлением параметра в СЗ сразу в начале модуля. (2-я строчка).
Если ПустоеЗначение(Форма.Параметр)=0 Тогда//работаем не в интерактивном режиме Форма.Параметр.Установить("ЕстьОшибка",0); СтатусВозврата(0); СЗ=Форма.Параметр; Команда=СЗ.Получить("Команда"); Если Команда="ВыписатьЧек" Тогд//формируем чек ДокЧек=СЗ.Получить("ДокЧек"); Статус=ВыписатьЧек(ДокЧек); Если Статус=0 Тогда Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда Форма.Параметр.Установить("ЕстьОшибка",1); КонецЕсли; Иначе Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда Форма.Параметр.Установить("ЕстьОшибка",0); КонецЕсли; КонецЕсли; | ||
ДедМорроз 11 - 06.01.21 - 10:30 | А слабо сразу из параметра получить СЗ проверить,что там список и только потом идти далее?
Просто,возможна ситуация,когда у вас в ВыписатьЧек создаётся Com-объект выписывается,который начинает работать в своем потоке и вы из него получаете значение,когда он что-то делает. | ||
Джордж1 12 - 12.01.21 - 09:55 | Посмотрел повнимательнее
вот кусок кода
СЗ=СоздатьОбъект("СписокЗначений");
СЗ.Установить("Команда","ВыписатьЧек");
СЗ.Установить("ДокЧек",ДокЧек);
СЗ.Установить("ЕстьОшибка",0);
ОткрытьФорму("Обработка.ККМ",СЗ);
ЕстьОшибка=СЗ.Получить("ЕстьОшибка");
Ошибка вылезает на последней строке. Причем ошибка "Поле агрегатного объекта не обнаружено" - т.е. переменная СЗ каким-то макаром обнуляется иногда. в Обработка.ККМ мы с СЗ кроме чтения и установки параметров ничего не делаем - проверил | ||
Bigbro 13 - 12.01.21 - 10:00 | выходит что-то делаете все же. попробуй перед возвратом в явном виде пересоздать СЗ и добавить в него "ЕстьОшибка" | ||
Джордж1 14 - 12.01.21 - 10:03 | (13)пока ошибка проявляется только на одном компе из 10-ка и воспроизвести ее не удается устойчиво
там в СЗ еще ряд параметров добавляется - нельзя пересоздавать | ||
НЕА123 15 - 12.01.21 - 10:13 | |||
Джордж1 16 - 12.01.21 - 10:15 | (15)Тоже самое и делаю | ||
НЕА123 17 - 12.01.21 - 10:25 | (11) проверили? может там и не СЗ... | ||
Джордж1 18 - 12.01.21 - 10:44 | (17)СЗ. я же пишу ошибка не воспроизводится | ||
Ёпрст 19 - 12.01.21 - 11:05 | где то есть перем сз в коде или реквизит формы с таким идентификатором | ||
Ёпрст 20 - 12.01.21 - 11:05 | И..ибо нехрен давать короткие имена переменным | ||
Ёпрст 21 - 12.01.21 - 11:06 | + Не ясно, на кой хрен проверять тип значения параметра формы, если РАНЬШЕ уже используешь метод списка значения через Получить. | ||
Ёпрст 22 - 12.01.21 - 11:06 | не боясь получить ошибки, что это не список значений. | ||
Джордж1 23 - 12.01.21 - 11:37 | |||
Ёпрст 24 - 12.01.21 - 11:54 | (23) нормальный, это какой ? | ||
Ёпрст 25 - 12.01.21 - 11:55 | Ты один хрен не проверяешь что прилетело в Форму.Параметр и сразу обращяешься к методу списка значений через Получить().
А в форму.параметр можно запихать что угодно | ||
Ёпрст 26 - 12.01.21 - 11:56 | И зачем только потом проверяешь на тип - загадка.. | ||
Джордж1 27 - 12.01.21 - 11:58 | |||
ChMikle 28 - 12.01.21 - 12:11 | (0) платформы 1С все одинаковые ? | ||
Джордж1 29 - 12.01.21 - 12:21 | (28)Да, должны быть 27, т.к. часть компов на WinXP еще | ||
Джордж1 30 - 12.01.21 - 12:23 | Используется FormEx.dll - но раньше не было к нему претензий
Попробую я сделать все тоже самое, только с Форма.Закрыть() в конце Рекламное место пустует | ||
Salimbek 31 - 12.01.21 - 13:13 | (12) "ОткрытьФорму("Обработка.ККМ",СЗ);"
Синтаксис:
ОткрытьФорму (<Параметр1>, <КонтекстФормы>, где <КонтекстФормы> Необязательный параметр. Имя переменной, куда можно задать значение любого типа для передачи в открываемую форму. Данное значение будет доступно в открытой форме как атрибут Форма.Параметр. После исполнения данного метода система вернет в данную переменную контекст открытой формы (см. Передача контекста в качестве параметра). С помощью значения этого контекста можно затем произвольно манипулировать открытой формой, пока она открыта. Пока форма открыта, тип значения данного параметра равен 100 (см. ТипЗначения), если закрыта — 0. т.е. этот параметр перезаписывается. Поэтому на ИС рекомендуют так: Список = СоздатьОбъект("СписокЗначений");
ПередаваемыйПараметр = Список;// т.е. присвоить список в переменную, а потом передать эту переменную в форму
ОткрытьФорму("Обработка.<ИмяФормы>",ПередаваемыйПараметр);
или так: http://catalog.mista.ru/1c/articles/17048/ | ||
Джордж1 32 - 12.01.21 - 13:15 | (31)Да я так и делаю | ||
Builder 33 - 12.01.21 - 13:20 | |||
Джордж1 34 - 12.01.21 - 13:25 | (33)
Вот этот код вызывается из справочника (документа). Т.е. тут переменная СЗ локальная СЗ=СоздатьОбъект("СписокЗначений"); СЗ.Установить("Команда","ВыписатьЧек"); СЗ.Установить("ДокЧек",ДокЧек); СЗ.Установить("ЕстьОшибка",0); ОткрытьФорму("Обработка.ККМ",СЗ); ЕстьОшибка=СЗ.Получить("ЕстьОшибка"); Дале в форме обработки ККМ работаю только с Форма.Параметр. То что я тут использую тоже переменную СЗ - тоже нормально, она же локальная Форма.Параметр.Установить("ЕстьОшибка",0); СтатусВозврата(0); СЗ=Форма.Параметр; Команда=СЗ.Получить("Команда"); Если Команда="ВыписатьЧек" Тогд//формируем чек ДокЧек=СЗ.Получить("ДокЧек"); Статус=ВыписатьЧек(ДокЧек); Если Статус=0 Тогда Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда Форма.Параметр.Установить("ЕстьОшибка",1); КонецЕсли; Иначе Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда Форма.Параметр.Установить("ЕстьОшибка",0); КонецЕсли; КонецЕсли; | ||
Salimbek 35 - 12.01.21 - 13:35 | (34) Блин, я же показал уже в (31) Вместо: ОткрытьФорму("Обработка.ККМ",СЗ); Пишут: вПараметр = СЗ; ОткрытьФорму("Обработка.ККМ",вПараметр);Потому что по условию этой команды в эту Переменную запишется КонтекстФормы. Ну или в конце своей процедуры делай принудительно (хотя по учебнику говорят, что так надо делать в ПриЗакрытии): Форма.Параметр = СЗ; Или после ОткрытьФорму жди, пока вернется правильный параметр (тТак как ниже - делать совсем нельзя, но для понимания напишу именно так) ОткрытьФорму("Обработка.ККМ",СЗ); Пока ТипЗначения(СЗ)=100 Цикл КонецЦикла; | ||
Джордж1 36 - 12.01.21 - 15:26 | (35)Чувствую вы правы.
Но как это черт возьми работает? Сначала возвращается контекст, а потом только параметр? | ||
Джордж1 37 - 12.01.21 - 15:38 | Почему так не всегда происходит? | ||
Ёпрст 38 - 12.01.21 - 15:40 | Модально поди изначальное изделие открывается ? | ||
Джордж1 39 - 12.01.21 - 15:54 | (38)Нет, были мысли в этом направлении - что бы форму открывать как для эквайринга сберовского - что бы повисела секунду | ||
DJ Anthon 40 - 12.01.21 - 16:05 | помню, как писал универсальную обработку объектов из формы самих же объектов. вызывал двойным щелчком правой кнопки мыши на любой точке формы. это событие было единственным незанятым.
как известно, ничего с объектом сделать нельзя, он заблокирован, когда он открыт. НО! я нашел способ разблокировать его. надо было развернуть форму на весь экран и обратно. либо если он уже развернут, то свернуть и развернуть. в этот момент объект освобождался на микросекунду, но этого хватало, чтобы успеть произвести отмену проведения или пометку удаления или еще чего. юзер просто видел небольшое моргание экрана и все. почему-то я поверил, что такой фокус с базой проканает и я его нашел. очень удобно стало работать с семеркой после этого, но снеговик уже подкрадывался... | ||
Arbuz 41 - 12.01.21 - 16:14 | (40) Может что-то более правдоподобное надо выдумывать? Или это под грибами было? | ||
Cthulhu 42 - 12.01.21 - 16:29 | обрабатывай результат через форма.обработкаожидания("ЧоТамВернулось",1); | ||
Cthulhu 43 - 12.01.21 - 16:31 | (42)+ в "Процедура ЧоТамВернулось()", в которой "форма.обработкаожидания("",0);", а все возвраты пихай в переменную модуля. | ||
Cthulhu 44 - 12.01.21 - 16:31 | в смысле - параметр при вызове и потом для анализа в той процедуре | ||
DJ Anthon 45 - 12.01.21 - 16:33 | (41) могу скинуть. я сам в шоке был | ||
Arbuz 46 - 12.01.21 - 16:35 | (45) Скидывай конечно | ||
DJ Anthon 47 - 12.01.21 - 16:36 | (41) меня бесило, что в типовых постоянно была проблема в том, что надо пометить на удаление элемент или документ, который у тебя открыт в данный момент, а найти его трудно - ты не знаешь ни наименования элемента, на владельца. этой обработкой можно было узнать и поменять его скрытые реквизиты - код, владелец, наименование; узнать его статус - проведен ли, помечен ли. можно было открыть родителя и владельца (привет, банковские счета и договоры). для программирования было удобно узнать его название в конфигураторе, и так далее. и все это вызывается менюшкой правой кнопкой мыши. | ||
Джордж1 48 - 12.01.21 - 16:53 | (43)Так нет такого в 7-ке. Есть просто ОбработкаОжидания, но работает она криво | ||
Cthulhu 49 - 12.01.21 - 17:04 | (48): есть такое в 7-ке. просто ты не в курсе. | ||
Cthulhu 50 - 12.01.21 - 17:05 | (48): и обработкаожидания работает не криво - просто надо знать как ей пользоваться и помнить о том. что 7-ка это тупо один поток в котором оно и ждет. в смысле - и тут "просто ты не в курсе". | ||
Джордж1 51 - 12.01.21 - 17:12 | |||
Cthulhu 52 - 12.01.21 - 17:20 | (51): странное замечание. человеку, знакомому с 7-кой єто понятно в качестве стандартного свойства а не в качестве претензии на несоответствие факта документации.
(51): с чем вас и поздравляю. IdToStr/StrToId/_Getperformansecounter и много чего еще "нет в СП". что не мешает быть достаточно продвинутому прогеру (даже не гуру) знать и использовать все эти возможности. | ||
Джордж1 53 - 12.01.21 - 17:33 | (52)честно никогда ОбработкаОжидания в форме не требовалась
А чем плохо?
Пока ТипЗначения(СЗ)=100 Цикл
КонецЦикла; | ||
Arbuz 54 - 12.01.21 - 17:45 | (53) Мощу жрёт | ||
Джордж1 55 - 12.01.21 - 17:54 | (54)Да если в сетевом режиме на отдельном компе - вроде и не страшно | ||
Salimbek 56 - 12.01.21 - 22:26 | (53) Если есть 1С++, то можно:
Система=СоздатьОбъект("Система"); Пока ТипЗначения(СЗ)=100 Цикл Система.Уснуть(200);//Уснуть на 200 миллисекунд, без нагрузки процессора КонецЦикла; | ||
victuan1 57 - 13.01.21 - 05:17 | Сколько я нового узнал)) | ||
Джордж1 58 - 13.01.21 - 06:49 | Вот такая конструкция совсем не работает. Уходит в вечный цикл
Пока ТипЗначения(СЗ)=100 Цикл
КонецЦикла; | ||
Salimbek 59 - 13.01.21 - 07:43 | (58) Блин, точно. Дело в том, что и у СписокЗначений и у Контекст это значение одно и то же - 100. Тогда надо смотреть через ТипЗначенияСтр
Для Списка значений ------ ТипЗначения: 100 ТипЗначенияСтр: СписокЗначений Для открытой формы ------ ТипЗначения: 100 ТипЗначенияСтр: ГрупповойКонтекст | ||
Джордж1 60 - 13.01.21 - 07:48 | Рекламное место пустует | ||
ДедМорроз 61 - 14.01.21 - 16:48 | ТипЗначенияСтр используйте.
ТипЗначения возвращает 100 для любого объекта,кроме связанных с базой данных(справочник,документ и т.п.) | ||
ДедМорроз 62 - 14.01.21 - 16:56 | А обработка ожидания имитировалась,насколько я помню через функцию в поле информации и вызов закрытия формы в ней,когда закрытие отменяется,тогда несколько форм обрабатывались параллельно. | ||
Arbuz 63 - 14.01.21 - 17:03 | Жаль, что получения стека вызовов так и не добили в 1с++, а то можно было бы замутить класс красиво имитирующий статические переменные и даже иерархию области видимости переменных. | ||
DJ Anthon 64 - 16.01.21 - 06:21 | (46) https://files.fm/u/2u6vzgnp8
я последний релиз где-то потерял, вот нашел какой-то. Посмотри файл описаний отличий от стандартного ЗиКа и файл скриншотов про то, что я говорил. В глобальнике краткое описание изменений, по нему нельзя сказать, что я адекватный человек, потому что писалось это на эмоциях и для себя, так что не обессудь, все-таки это было 12 лет назад ) |
|
Список тем форума |