|
Зацикливание ПриПолученииДанных | ☑ | ||
---|---|---|---|---|
0
FiftyStars
26.12.11
✎
18:34
|
Вобщем вот такой код...как избежать зацикливания?
Как я понимаю происходит следующее...ПриПолученииДанных я беру данные, изменяю их и это вызывает событие ПриПолученииДанных Процедура ТаблицаЗаказыПокупателейПриПолученииДанных(Элемент, ОформленияСтрок) Массив = новый Массив; //Записываю те строки что на экране у пользователя в массив Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл Массив.Добавить(ОформлениеСтроки.ДанныеСтроки); КонецЦикла; //Передаю массив на обработку ОбновитьСтроки(Массив); КонецПроцедуры //********************************************************* //Здесь по значениям в массиве проиходит запрос и вызов процедуры обработки результатов запроса //********************************************************** Процедура ОбновитьСтроки(Строки) ЗаказыСсылки = Новый Массив; Для каждого Строка Из Строки Цикл ЗаказыСсылки.Добавить(Строка.ЗаказСсылка); КонецЦикла; ЗапросТМП = новый Запрос; ЗапросТМП.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; ЗапросТМП.Текст="ВЫБРАТЬ Заказы.Ссылка |Поместить Заказы |из Документ.заказпокупателя как заказы |где заказы.ссылка в (&ПараметрЗаказ)"; ЗапросТМП.УстановитьПараметр("ПараметрЗаказ",ЗаказыСсылки); ЗапросТМП.Выполнить(); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц=ЗапросТМП.МенеджерВременныхТаблиц; Запрос.Текст = " |ВЫБРАТЬ | ЗаказыСп.ссылка Как ЗаказСсылка, | Резервирование.Ссылка как РезервированиеСсылка, | Резервирование.Дата как РезервированиеДата, | Корректировки.Ссылка как КорректировкаСсылка, | Корректировки.Дата как КорректировкаДата, | Счета.СчетСсылка КАК СчетСсылка, | Счета.СчетДата КАК СчетДата, | Реализации.РеализацияСсылка КАК РеализацияСсылка, | Реализации.РеализацияДата КАК РеализацияДата, | Закрытия.ЗакрытиеСсылка КАК ЗакрытиеСсылка, | Закрытия.ЗакрытиеДата как ЗакрытиеДата, | ППВ.Ссылка как ППВСсылка, | ПКО.Ссылка как ПКОСсылка |ИЗ (ВЫБРАТЬ * | ИЗ | Заказы) Как ЗаказыСп |Левое соединение | (Выбрать | СчетаТ.Ссылка КАК СчетСсылка, | Счета.Дата как СчетДата, | Счетат.ЗаказПокупателя | из | документ.СчетНаОплатуПокупателю.товары как СчетаТ | ЛЕВОЕ СОЕДИНЕНИЕ | документ.СчетНаОплатуПокупателю как Счета | по | счетат.Ссылка = Счета.Ссылка | //Где | // Счетат.ЗаказПокупателя в (ЗаказыСп) | СГРУППИРОВАТЬ ПО | СчетаТ.Ссылка, | Счета.Дата, | Счетат.ЗаказПокупателя) Как Счета | |по Счета.ЗаказПокупателя = ЗаказыСп.Ссылка | |ЛЕВОЕ СОЕДИНЕНИЕ | (Выбрать | Закрытия.Ссылка КАК ЗакрытиеСсылка, | ЗакрытияЗ.ЗаказПокупателя как ЗаказПокупателя, | Закрытия.Дата как ЗакрытиеДата | ИЗ | Документ.ЗакрытиеЗаказовПокупателей.Заказы как ЗакрытияЗ | Левое соединение | документ.ЗакрытиеЗаказовПокупателей как Закрытия | по | ЗакрытияЗ.Ссылка=Закрытия.Ссылка | //Где | // ЗакрытияЗ.ЗаказПокупателя в &ПараметрЗаказ | Сгруппировать по | Закрытия.Ссылка, | ЗакрытияЗ.ЗаказПокупателя, | Закрытия.Дата) как Закрытия |ПО | Закрытия.ЗаказПокупателя =ЗаказыСп.Ссылка | |Левое соединение | (Выбрать | Реализации.Ссылка КАК РеализацияСсылка, | Реализации.Дата КАК РеализацияДата, | РеализацииТ.ЗаказПокупателя КАК ЗаказПокупателя | Из | документ.РеализацияТоваровУслуг Как Реализации | Левое Соединение | Документ.РеализацияТоваровУслуг.Товары КАК РеализацииТ | По | Реализации.Ссылка=РеализацииТ.Ссылка | //Где | // РеализацииТ.ЗаказПокупателя в &ПараметрЗаказ | Сгруппировать по | Реализации.Ссылка, | Реализации.Дата, | РеализацииТ.ЗаказПокупателя) Как Реализации |ПО | Реализации.ЗаказПокупателя = ЗаказыСп.Ссылка |Левое соединение | Документ.КорректировкаЗаказаПокупателя как Корректировки |ПО Корректировки.ЗаказПокупателя = ЗаказыСп.Ссылка | |ЛЕВОЕ СОЕДИНЕНИЕ | Документ.РезервированиеТоваров Как Резервирование |ПО Резервирование.Заказ = ЗаказыСп.Ссылка |левое соединение | Документ.ПлатежноеПоручениеВходящее Как ППВ |По | ППВ.ДокументОснование = ЗаказыСп.Ссылка |Левое соединение | Документ.ПриходныйКассовыйОрдер как ПКО |ПО | ПКО.ДокументОснование = ЗаказыСп.Ссылка | |"; Результат = Запрос.Выполнить().Выгрузить(); Если результат.Количество()>0 Тогда Для каждого Строка Из Строки Цикл ЗаполнитьСтроку(Строка,"Счет",Результат); ЗаполнитьСтроку(Строка,"Резервирование",Результат); ЗаполнитьСтроку(Строка,"Корректировка",Результат); ЗаполнитьСтроку(Строка,"Реализация",Результат); ЗаполнитьСтроку(Строка,"Закрытие",Результат); //Если результат[результат.Количество()-1]["ППВСсылка"]<>Null Тогда // ЗаполнитьСтроку(Строка,"ППВ",Результат); //ИначеЕсли Строка["ПКОСсылка"]<>Null Тогда // ЗаполнитьСтроку(Строка,"ПКО",Результат); //КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры //********************************************************* //Здесь все обрабатывается и записывается обратно в ТП //******************************************************** Процедура ЗаполнитьСтроку(Строка,Колонка,Результат) НайденнаяСтрока=результат.Найти(Строка.ЗаказСсылка,"ЗаказСсылка"); КолонкаСсылка=Колонка+"Ссылка"; КолонкаДата=Колонка+"Дата"; Если НайденнаяСтрока[КолонкаСсылка]<>Null Тогда Строка[КолонкаСсылка]=НайденнаяСтрока[КолонкаСсылка]; Строка[КолонкаДата]=НайденнаяСтрока[КолонкаДата]; Строка[Колонка] = Истина; Иначе Строка[КолонкаСсылка]=Неопределено; Строка[КолонкаДата]=Неопределено; Строка[Колонка] = Ложь; КонецЕсли; КонецПроцедуры |
|||
1
Fragster
гуру
26.12.11
✎
18:36
|
не надо менять данные ПриПолученииДанных, даже на такие же значения. т.е. сначала сравинвай и меняй только если отличаются.
|
|||
2
vmv
26.12.11
✎
18:37
|
напиши еще запросов и МВТ в этот обработчик и не убивай временные, я пока организую тотализатор как скоро кроякнеться ваш сервер - дерзай
я уже собираю ставки |
|||
3
asady
26.12.11
✎
18:39
|
(0) ты бы хоть в типовых посмотрел как там сделано - зачем же изобретать лисапед
|
|||
4
URAL
26.12.11
✎
18:42
|
(0) удивляюсь и только, согласен с (3)
|
|||
5
FiftyStars
26.12.11
✎
19:02
|
(2) потому это тестовая база...я только начал делать обработку
(1) это понятно, но я думал что можно как то по-другому организовать так чтобы событие дохло еще в зародыше=)) (3)ну что то я ничего подобного моей задачке не видел в типовом... http://imglink.ru/show-image.php?id=74f76108d3173b99559e5fdd6cf1d472 вобщем полная(пока еще нет) таблица заказов...можно сразу увидеть какой заказ в какой стадии, и оформить все что нужно с одного окна, не залезая в 10 менюшек и не тыкая в автосоздание документов когда бывало пишется не совсем то что надо а менеджер узнает об этом хз когда...ничего подобного не видел в типовом |
|||
6
vmv
26.12.11
✎
19:06
|
посмотри в типовой обработки рабочий стол менеджера, конечно круто - когда все в одном флаконе, но, как правило, нужно чтобы было просто понятно и более-менее быстро.
даже можно забить на производительность, если только для демострации возможностей, но граввное простта все же, менеждеры тупые, увы |
|||
7
Живой Ископаемый
26.12.11
✎
19:09
|
2(0) ваш пример описан у габца.. При получении - получаем данные, как бы в кэш, дополняем его как бог черепаху , а при выводе например строки - ищем в кэше по ключу и уже выводим, но не делаем Обновить
|
|||
8
QLgKR
26.12.11
✎
19:29
|
(0) Ну нельзя же данные менять!
Добавить колонки на форму (просто колонки, не связывая с данным). И выводить в эти колонки текст, используя метод оформления строки УстановитьТекст ОформлениеСтроки.Ячейки.ИмяКолонки.УстановитьТекст(<Текст>) |
|||
9
FiftyStars
26.12.11
✎
20:35
|
(8) я так пробовал - не катит так...это больший гемор чем проверять данные перед изменением.
+Не все созданные поля должны иметь тип текст(флажок,картинку), но также и ссылки на документы, т.е. ссылку на счет и т.д. При изменении получаемого в процедуре параметра - коллекции ОформленияСтрок хоть ты шрифт поменяй или цвет фона, все равно вызов будет снова=((( КСТАТИ НАСЧЕТ ЭТОГО ПРИМЕРА событие ПриПолученииДанных вызывается при изменении любых данных ТЗ или только при изменении тех данных что видны в ТП? (7)то есть типа Процедура ПриПолученииДанных(ОформленияСтрок) ОформленияСтрок=ПеределанныеОформленияСтрок; КонецПроцедуры ?или я чего то не понял? Жаль что нет ничего типа "ПередПолучениемДанных"...так бы по пути перехватить их, изменить, и пусть идут туда куда шли (6) эта вещь как раз на тупых и расчитана будет...убрана излишняя свобода действий менеджеров...тыкнул по порядку в поле "счет" где нет галки - создался новый счет, тыкнул в поле где есть счет - открыл его...и т.д. Часто менеджеры путаются какой заказ на какой стадии...оставляют заказы без ПКО или наоборот выписывают 2-3 двойника и приход оказывается не 20000 а 40-60 =)А так все данные(вплоть до адреса и т.д.) будут получаться из справочников(адреса)...у менеджера даже клавиатуры не будет, будет сенсорный экран и все...у админа будет доступ к вводу новой инфы...обычные менеджеры будут работать только с постоянной клиентской базой...вобщем спецификация организации позволяет так замутить=)) |
|||
10
FiftyStars
26.12.11
✎
20:36
|
поправка*(Адреса, например)*
А то как то несерьезно))) |
|||
11
Живой Ископаемый
27.12.11
✎
11:37
|
2(9) давай ты словами расскажешь что хочешь сделать со строками и в зависимости от чего.
|
|||
12
kosts
27.12.11
✎
11:47
|
(9) > оставляют заказы без ПКО или наоборот выписывают 2-3 двойника и приход оказывается не 20000 а 40-60
Это не проблема программиста, это проблема директора, раз два премии лишат - больше не ошибутся. Я бы делал как в (7) или еще одну табличку с нужной информацией, в которой информация меняется при перемещении по основной таблице. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |