8.х ДанныеФормыЭлементКоллекции

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем SergeV, 8 июл 2015.

  1. TopicStarter Overlay
    SergeV
    Offline

    SergeV

    Регистрация:
    26 фев 2011
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Пишу в модуле управляемой формы 8.3 такой код:
    При вызове обработчика СуммаВключаетНДСПриИзменении (клик на элемент флажок) получаю ошибку:
    Объясните пожалуйста, как может происходить эта ошибка, если я ничего не передаю на сервер в методе ПересчетСуммНДС() ?
    Отладчиком пройти не удается, доходит только до строки вызова ПересчетСуммНДС(), затем сразу падает в ошибку.
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    А это что такое: -стр.СуммаНДС ?
  3. TopicStarter Overlay
    SergeV
    Offline

    SergeV

    Регистрация:
    26 фев 2011
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Поле строки табличной части с минусом.
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    :Dвот чего-чего, а такое первый раз читаю
  5. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    А где у вас вызывается процедура Процедура ПересчетСуммНДС()? он же явно на неё ругается.
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    По умолчанию, в УФ, если не указана дирректива препроцессора, то считается, что выполнение идет на стороне сервера (по крайней мере раньше так было)
  7. TopicStarter Overlay
    SergeV
    Offline

    SergeV

    Регистрация:
    26 фев 2011
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    В обработчике СуммаВключаетНДСПриИзменении, как и написано в приведенном фрагменте кода.
  8. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Великолепный и исчерпывающий ответ.. тогда задам вопрос по другому.

    А почему у вас у процедуры не стоит предпроцессор где она обрабатывается на сервере или клиенте. Поставьте на клиенте должно заработать.
    Код:
    &НаКлиенте
    Процедура СуммаВключаетНДСПриИзменении(Элемент)
    ПересчетСуммНДС();
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ПересчетСуммНДС()
    для каждого стр из Объект.РасходыПрочие цикл
    стр.Сумма = стр.Сумма + ?(Объект.СуммаВключаетНДС, стр.СуммаНДС, -стр.СуммаНДС);
    конеццикла;
    КонецПроцедуры
  9. TopicStarter Overlay
    SergeV
    Offline

    SergeV

    Регистрация:
    26 фев 2011
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Я понимаю что если нет директивы, это равносильно НаСервере. Но интересует именно такой вариант вызова, когда клиент обращается к серверу.
  10. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Ну так ясно лошадь раз с рогами, сервер то не видит объект..
    Код:
    &НаКлиенте
    Процедура СуммаВключаетНДСПриИзменении(Элемент)
    ПересчетСуммНДС();
    КонецПроцедуры
    
    &НаСервере
    Процедура ПересчетСуммНДС()
    Объект = РеквизитФормыВЗначение("Объект");
    
    для каждого стр из Объект.РасходыПрочие цикл
    стр.Сумма = стр.Сумма + ?(Объект.СуммаВключаетНДС, стр.СуммаНДС, -стр.СуммаНДС);
    конеццикла;
    ЗначениеВДанныеФормы(Объект,Объект);
    КонецПроцедуры
  11. TopicStarter Overlay
    SergeV
    Offline

    SergeV

    Регистрация:
    26 фев 2011
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Вот в этом и был вопрос - почему сервер не видит объект ? почему нужно извращаться таким способом ?
    Объект = РеквизитФормыВЗначение("Объект");
    ...
    ЗначениеВДанныеФормы(Объект,Объект);
  12. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Ну так эт же ж в 1С писать надо.. клиент там сервер .. эх ностальгия по обычным формам у меня уже...

    P.S. Почитайте принципы клиент серверной работы платформы+заточка под тонкий и веб клиент, я думаю по этому.

    Ну а как человеку который на управляемых формах только неделю работает скажите мой вариант заработал? мне просто для профессиональной скажем так уверенности надо.
  13. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    по умолчанию код выполняется на сервере, если нет спец.команд препроцессору.
  14. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    У ТС вопрос почему тот самый сервер не видит Объекта..
  15. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Потому что в форме :)
  16. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Возможно если не указана директива компиляции, то это не просто "НаСервере", а "НаСервереБезКонтекста". ИМХО - просто нужно указать директиву. И всегда их указывать, а то потом мозг поломать можно ))))
  17. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    SergeV, мне кажется, Вы просто внесли изменение в конфигурацию и не обновили конфигурацию базы данных (F7). Или не перезапустили сеанс.
    --- Объединение сообщений, 8 июл 2015 ---
    В таком виде, как он есть, данный код не должен вызывать подобную ошибку.
  18. TopicStarter Overlay
    SergeV
    Offline

    SergeV

    Регистрация:
    26 фев 2011
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Ясно, вобщем так извращаться нам завещала 1С :)

    1-й вариант с директивой НаКлиенте работает.
    2-й вариант не работает, получаем ту же ошибку (в том числе и если заменить ЗначениеВДанныеФормы на ЗначениеВРеквизитФормы). По сути нет различия с моим первоначальным неправильным вариантом.
    Интересно, что такой код с вызовом сервера работает в некоторых случаях. А именно - если форма открыта и никаких изменений не было сделано, тогда сервер видит объект и код выполняется. Если были изменения, сервер теряет объект и получаем эту ошибку.
    --- Объединение сообщений, 8 июл 2015 ---
    Конфигурация была обновлена, открылся новый сеанс.
    --- Объединение сообщений, 8 июл 2015 ---
    Не получается. Сразу же, при попытке сохранения конфигурации ошибка "Переменная не определена (Объект)"
  19. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Уверяю Вас, дело вообще не в этой процедуре, которую Вы написали в первом сообщении.
    Смотрите другие процедуры, смотрите реквизиты формы.
    Где-то в какой-то другой процедуре у Вас передается реквизит формы или некая переменная, может, массив, в котором содержатся строки табличной части, или сама строка, которые Вы пытаетесь передать с клиента на сервер.
  20. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Еще бы я посоветовал повнимательнее почитать про основы взаимодействия объектов конфигурации в управляемом режиме.

Поделиться этой страницей