AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.03.2010, 15:30   #1  
Romul is offline
Romul
Участник
 
186 / 11 (1) +
Регистрация: 26.12.2007
Может быть я, конечно, долго к этому шел и напишу давным-давно всем известную истину, но меня сей факт поверг в легкое недоумение...

Есть отчет. Допустим в нем есть DataItem на таблицу ААА. И, скажем, есть глобальная переменная типа Record, связанная с таблицей ВВВ.
В таблице ААА есть поле Поле1, а в таблице ВВВ есть поле Поле2.
Такая конструкция будет работать:


ВВВ - OnPostDataItem()

WITH AAA DO BEGIN
Поле2 = ЗначениеЧегоТоТам;
...
END;

Т.е. компилятор даже не поймет, что мне нужно работать исключительно с полями таблицы ААА и что я по запаре вместо Поле1 написал Поле2...
ИМХО - нонсенс.
Старый 07.03.2010, 15:50   #2  
del_negrozzz is offline
del_negrozzz
Участник
 
35 / 10 (1) +
Регистрация: 11.07.2007
Никогда в своем коде не использую with. никакой практической пользы нет от него кроме нечитабельного кода и таких вот косяков при компиляции.
Старый 07.03.2010, 16:03   #3  
Romul is offline
Romul
Участник
 
186 / 11 (1) +
Регистрация: 26.12.2007
Цитата:
Сообщение от del_negrozzz Посмотреть сообщение
Никогда в своем коде не использую with. никакой практической пользы нет от него кроме нечитабельного кода и таких вот косяков при компиляции.
Аналогично.
Но в данном случае речь идет о стандартном пакетнике расчета амортизации. В нем и обнаружил такую странность поведения...
Старый 08.03.2010, 00:31   #4  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
регулярно использую with, если функция в качестве реки не имеет хоть сколько-нибудь похожей таблицы.
ибо натыкался. помню.
использую, например, в юнитах.
читабельность кода с with 100% повышается.

маленький совет при использовани with, case ets:
заканчивайте блоки примерно так:
END{With}, END{Case}
ибо кто-то пишет, а кто-то потом читает...
Старый 10.03.2010, 14:43   #5  
OntheJump is offline
OntheJump
Участник
 
165 / 10 (1) +
Регистрация: 31.10.2006
не знаю, мне WITH тоже не очень нравится - регулярно приходится PgUp делать чтобы посмотрить, что же там в WITH было Если тело функции большое, то этих операторов может быть несколько - немножко раздражает
Старый 10.03.2010, 15:12   #6  
GGNAME is offline
GGNAME
Участник
 
67 / 10 (1) +
Регистрация: 21.02.2010
Это скорее не нонсенс, а особенность компилятор, далеко не секрет, что первым делом переменная ищется в глобальных переменных, затем в локальных и видимо лишь потом просматриваются "with" и тп. Приоритеты, без них никак.
Считаю что "with" нельзя размазывать по огромным функциям и триггерам, ибо нечитабельно, но когда "with" содержит 5-10 строчек, смотрится весьма читабельно.
Старый 10.03.2010, 17:12   #7  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Согласен, преоритеты тут решают.

Не знаю, может я не тру программер, но я пользую F5 и прелесть WITH пропадает
Старый 19.03.2010, 13:20   #8  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Код:
ВВВ - OnPostDataItem()

WITH AAA DO BEGIN
Поле1 = Поле2;
...
END;
Всё компилятор поймет правильно(возможно я не понял)
Код:
AAA.Поле1 = Rec.Поле2;
Я использую With
Вот набрасаю пример, в табличке Item(Название может быть очень длинным), дела функцию, с параметром Рекорд типа Item
И в теле пишу
Код:
WITH recItemP DO BEGIN
 Сумма = (Цена*Количество)*Скидка;
 ... 
END
А вот как бы оно выглядело
Код:
recItemP.Сумма = (recItemP.СуммаЦена*recItemP.СуммаКоличество)*recItemP.СуммаСкидка;
WITH - конкурирует только с REC, если переменные на одиныковые таблицы(или одинаковые названия полей).
WITH приоритетней, чтоб работать внутри WITH с Rec нужно писать REC.FielnName.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:31.