Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кто-то понимает смысл этого кода?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Vofka
В запросе есть условие:

|    (&ФильтрКлиент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
|            ИЛИ НЕ &ФильтрКлиент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
|                И ВЗ_ИсточникДанных.Клиент = &ФильтрКлиент)


Не будет ли оно работать точно так же, если из него удалить 2 верхние строки? Или же это условие аналогично такому:

|    ((&ФильтрКлиент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
|            ИЛИ (НЕ &ФильтрКлиент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
|                И ВЗ_ИсточникДанных.Клиент = &ФильтрКлиент))


?
Acid
здесь идет проверка на тип выбранного значения для составного реквизита. лучше не убирать.
Vofka
Реквизит не составной. Я так понял, что в записимости от заданного параметра будет выполняться это
|(&ФильтрКлиент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))

либо это
|НЕ &ФильтрКлиент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
|                И ВЗ_ИсточникДанных.Клиент = &ФильтрКлиент
Zaval
Вернет Истину, если фильтр пуст, иначе - результат сравнения.

Что не так?
ЗЫ. Я еще сегодня кофе не пил - могу буксовать немного)))
Acid
ВЗ_ИсточникДанных

что там?

Vofka
Цитата(Acid @ 13.07.12, 10:09) необходимо зарегистрироваться для просмотра ссылки
что там?

Там находится список клиентов.

Цитата(Zaval @ 13.07.12, 10:08) необходимо зарегистрироваться для просмотра ссылки
Вернет Истину, если фильтр пуст, иначе - результат сравнения.

Я так и понял (пост №3) smile.gif .

Но почему было не написать условие через ВЫБОР (это мысли вслух, а не призыв стелепатировать мысли автора кода smile.gif ):
|ВЫБОР КОГДА
|   &ФильтрКлиент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) ТОГДА
|      ВЗ_ИсточникДанных.Клиент = &ФильтрКлиент
|   ИНАЧЕ
|      ИСТИНА
|КОНЕЦ

По-моему так нагляднее получается.
Zaval
Цитата(Vofka @ 13.07.12, 9:50) необходимо зарегистрироваться для просмотра ссылки
Не будет ли оно работать точно так же, если из него удалить 2 верхние строки? Или же это условие аналогично такому:


По моему, оно такое и есть - И имеет приоритет перед ИЛИ, скобки не нужны.
Acid
это да. это код от 1С? дык они похоже студентов писать садят...
Zaval
Цитата(Vofka @ 13.07.12, 10:14) необходимо зарегистрироваться для просмотра ссылки
По-моему так нагляднее получается.


А не тормознее ли? Еще Выбора звать)
Наглядность, в сущности, дело привычки.
Vofka
Цитата(Acid @ 13.07.12, 10:20) необходимо зарегистрироваться для просмотра ссылки
это код от 1С?

Нет, от "продвинутых 1Снегов" smile.gif

Цитата(Zaval @ 13.07.12, 10:21) необходимо зарегистрироваться для просмотра ссылки
А не тормознее ли? Еще Выбора звать)

Это от многих факторов может зависеть (от конкретного запроса, от количества записей в результате запроса, от железа, от сети и т.п.) и однозначного ответа на этот вопрос, наверное, нету. И с таким подходом вообще получается, что можно везде писать вместо ВЫБОР КОГДА подобные инструкции через ИЛИ.

Цитата(Zaval @ 13.07.12, 10:21) необходимо зарегистрироваться для просмотра ссылки
Наглядность, в сущности, дело привычки.

Наглядность - это культура разработки, которая помимо прочего так же говорит о уровне разработчика. А всё что написано не наглядно в простонародье зовется говнокод smile.gif
Zaval
smile.gif Цикл, написанный одной строкой, тоже наглядностью не блещет.
Vofka
Цитата(Zaval @ 13.07.12, 10:43) необходимо зарегистрироваться для просмотра ссылки
smile.gif Цикл, написанный одной строкой, тоже наглядностью не блещет.

Интересно чем же он вообще блещет smile.gif ? Без примера конкретного цикла, который можно замерять у себя на машине - вариант "бОльшая производительность" не принимаю smile.gif .

Выборка = Запрос.Выполнить().Выборать();
Пока Выборка.Следущий() Цикл Ля-ля-ля; ля-ля-ля; как же приятно читать такой код; ля-ля-ля; КонецЦикла;

smile.gif
pablo
Большая производительность при записи цикла одной строкой обусловлена меньшим количеством вызовов интрепретатора языка 1С.
Vofka
Цитата(pablo @ 13.07.12, 10:57) необходимо зарегистрироваться для просмотра ссылки
Большая производительность при записи цикла одной строкой обусловлена меньшим количеством вызовов интрепретатора языка 1С.

Это понятно. Но в большинстве случаях (я так думаю) этой производительности вы не почувствуете.
pablo
Чтобы почуствовать производительность нужна разница во времени выполнения хотя бы пару секунд. При фактическом времени вызова интерпретатора менее 1 мс нужен цикл с числом итераций более 2000, а такое количество в большинстве случаев не нужно smile.gif
Vofka
Цитата(pablo @ 13.07.12, 11:51) необходимо зарегистрироваться для просмотра ссылки
Чтобы почуствовать производительность нужна разница во времени выполнения хотя бы пару секунд.

Это чтобы почувствовать программисту. А пользователь и 10 секундной разницы может не заметить.

Цитата(pablo @ 13.07.12, 11:51) необходимо зарегистрироваться для просмотра ссылки
При фактическом времени вызова интерпретатора менее 1 мс нужен цикл с числом итераций более 2000, а такое количество в большинстве случаев не нужно smile.gif

Это в теории.
А теперь проведем тест. Есть у нас

а = 0;
СчетчикИтераций = 0;
Пока СчетчикИтераций <= 10000 Цикл
    СчетчикИтераций = СчетчикИтераций + 1;
    Состояние(СчетчикИтераций);
    а = (а + 1) / 3 * 2;
    ОбработкаПрерыванияПользователя();
КонецЦикла;


и

а = 0;
СчетчикИтераций = 0;
Пока СчетчикИтераций <= 10000 Цикл СчетчикИтераций = СчетчикИтераций + 1; Состояние(СчетчикИтераций); а = (а + 1) / 3 * 2; ОбработкаПрерыванияПользователя(); КонецЦикла;


Замер производился 3 раза. В левой колонке первый вариант, в правой второй. Итоговые цифры залиты желтым цветом:



Я не пожертвую читабельностью за эти милисекунды.

Утверждать на глаз или по теоретическим материалам о производительности конкретного кода - это пальцем в небо.
logist
Цитата(Vofka @ 13.07.12, 17:56) необходимо зарегистрироваться для просмотра ссылки
Утверждать на глаз или по теоретическим материалам о производительности конкретного кода - это пальцем в небо.

Можно "вскрыть" исходный текст модуля, и увидеть что на каждую строку присутствует некий обработчик команды, вероятно поэтому код написанный в одну строку срабатывает чуть быстрее поскольку выполняется в одном обработчике.
Ardi
Серьёзные пацаны полагают что быстрый отчет - это отчет который формируется быстрее чем за двое суток.

Это сейчас пользователи разбаловались -
Цитата
ААААА, почему я должна ждать отчет целых 8 секунд??? Раньше было гораздо быстрее.
MATEVI
А еще говорят что без комментариев и пробелов размер файло конфы уменьшается...
Vofka
Цитата(logist @ 13.07.12, 22:05) необходимо зарегистрироваться для просмотра ссылки
Можно "вскрыть" исходный текст модуля, и увидеть что на каждую строку присутствует некий обработчик команды, вероятно поэтому код написанный в одну строку срабатывает чуть быстрее поскольку выполняется в одном обработчике.

Я, честно говоря, не понял о чем речь.
logist
Цитата(Vofka @ 14.07.12, 12:10) необходимо зарегистрироваться для просмотра ссылки
Я, честно говоря, не понял о чем речь.

Вот так выглядит исходный текст модуля (на примере одной функции):
Функция ВернутьСчет(ВидПеречисленияПрочего)
    Перем СчетВернуть;
    //9 618    {1,2892},        --- 2 892 ---
    //9 619    {3,0},        ВидПеречисленияПрочего
    //9 620    {2,4},        Перечисления
    //9 621    {12,350},        ИмпВидыРасчетовСФилиалами
    //9 622    {12,434},        НалогамИСборам
    //9 623    {33,0},        ВидПеречисленияПрочего = Перечисления.ИмпВидыРасчетовСФилиалами.НалогамИСборам
    //9 624    {40,9632},        Если
    Если ВидПеречисленияПрочего = Перечисления.ИмпВидыРасчетовСФилиалами.НалогамИСборам Тогда
        //9 625    {1,2893},        --- 2 893 ---
        //9 626    {3,1},        СчетВернуть
        //9 627    {2,8},        ПланыСчетов
        //9 628    {12,33},        Хозрасчетный
        //9 629    {12,435},        РасчётыПоНалогам
        //9 630    {16,0},        <П1> = <П2>   присвоить
        СчетВернуть = ПланыСчетов.Хозрасчетный.РасчётыПоНалогам;
        //9 631    {39,9652},        безусловный переход к строке 9 652
        //9 632    {1,2894},        --- 2 894 ---
        //9 633    {3,0},        ВидПеречисленияПрочего
        //9 634    {2,4},        Перечисления
        //9 635    {12,350},        ИмпВидыРасчетовСФилиалами
        //9 636    {12,290},        РасчетыМеждуФилиалами
        //9 637    {33,0},        ВидПеречисленияПрочего = Перечисления.ИмпВидыРасчетовСФилиалами.РасчетыМеждуФилиалами
        //9 638    {40,9646},        Если
    ИначеЕсли ВидПеречисленияПрочего = Перечисления.ИмпВидыРасчетовСФилиалами.РасчетыМеждуФилиалами Тогда
        //9 639    {1,2895},        --- 2 895 ---
        //9 640    {3,1},        СчетВернуть
        //9 641    {2,8},        ПланыСчетов
        //9 642    {12,33},        Хозрасчетный
        //9 643    {12,293},        РасчётыМеждуФилиалами
        //9 644    {16,0},        <П1> = <П2>   присвоить
        СчетВернуть = ПланыСчетов.Хозрасчетный.РасчётыМеждуФилиалами;
        //9 645    {39,9652},        безусловный переход к строке 9 652
    Иначе
        //9 646    {1,2897},        --- 2 897 ---
        //9 647    {3,1},        СчетВернуть
        //9 648    {2,8},        ПланыСчетов
        //9 649    {12,33},        Хозрасчетный
        //9 650    {12,436},        РасчётыПоТекущимОперациям
        //9 651    {16,0},        <П1> = <П2>   присвоить
        СчетВернуть = ПланыСчетов.Хозрасчетный.РасчётыПоТекущимОперациям;
    КонецЕсли;
    //9 652    {1,2898},        --- 2 898 ---
    //9 653    {1,2900},        --- 2 900 ---
    //9 654    {3,1},        СчетВернуть
    //9 655    {17,0},        будет возвращено значение <П1>
    //9 656    {45,0},        Возврат
    Возврат СчетВернуть;
    //9 657    {39,9658},        переход в конец процедуры
    //9 658    {1,2902},        --- 2 902 ---
    //9 659    {22,0},
КонецФункции
Vofka
Цитата(logist @ 14.07.12, 12:57) необходимо зарегистрироваться для просмотра ссылки
Вот так выглядит исходный текст модуля (на примере одной функции):

Я всеравно ничего не понял.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.