8.х Проблема с чекбоксом

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

  1. TopicStarter Overlay
    Tverd
    Offline

    Tverd Опытный в 1С

    Регистрация:
    24 окт 2007
    Сообщения:
    56
    Симпатии:
    1
    Баллы:
    29
    Код:
    Для Каждого ТекСтрока Из ТабЗначСписок.Строки Цикл
    СправочникТекущий = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ТекСтрока.Код);
    Если Строка(СправочникТекущий.ВидДоговора)= "С покупателем" Тогда
    ФормаСправ = СправочникТекущий.ПолучитьФорму("ФормаЭлемента");
    ФормаСправ.ЭлементыФормы.КонтролироватьСуммуЗадолженности.Значение = Истина;
    Сообщить(ТекСтрока.Код);
    КонецЕсли;
    КонецЦикла;
    
    
    
    Код выше, перебирает строки табличного поля, и если реквизит "ВидДоговора" = "С покупателем", то должна ставиться галочка в поле КонтролироватьСуммуЗадолжености.
    Поле КонтролироватьСуммуЗадолжености имеет тип булево, и по идее при присвоении значения Истина, должна ставиться галочка.
    Причем напрямую в форме код типа:
    Код:
    ЭлементыФормы.КонтролироватьСуммуЗадолженности.Значение = Истина;
    
    
    
    работает, т.е. галочка ставится, а в моем случае оно принимает значение истина но галочка не ставится, соответственно оно сразу становится опять ложь.

    Подскажите где я туплю.
  2. Melanto
    Offline

    Melanto Опытный в 1С

    Регистрация:
    28 ноя 2007
    Сообщения:
    204
    Симпатии:
    0
    Баллы:
    26
    Пардон, бес попутал, фигню написала...
    Пришлось убить...

    Попробовала в своей конфе

    Код:
    Если Строка(ЭтотОбъект.ВидДоговора)= "С покупателем" Тогда 
    ФормаСправ = ЭтотОбъект.ПолучитьФорму("ФормаЭлемента");
    ФормаСправ.ЭлементыФормы.Флажок1.Значение = Истина;
    //Сообщить(ТекСтрока.Код);
    КонецЕсли;//КонецЦикла;
    
    Все работает, а у флажка что стоит в Данные?
  3. TopicStarter Overlay
    Tverd
    Offline

    Tverd Опытный в 1С

    Регистрация:
    24 окт 2007
    Сообщения:
    56
    Симпатии:
    1
    Баллы:
    29
    В Данных стоит реквизит КонтролироватьСуммуЗадолженности, имеющий тип булево.
  4. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Код:
    СправочникТекущий = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ТекСтрока.Код);  
    // лучше сразу хранить ссылку на справочник.
    
    см пример http://slil.ru/25686794
  5. TopicStarter Overlay
    Tverd
    Offline

    Tverd Опытный в 1С

    Регистрация:
    24 окт 2007
    Сообщения:
    56
    Симпатии:
    1
    Баллы:
    29
    Весь код такой:

    Код:
    ПострЗапр = Новый ПостроительЗапроса;
    ИсточникДанных = Новый ОписаниеИсточникаДанных(СправочникСписок);
    ПострЗапр.ИсточникДанных = ИсточникДанных;
    ТабЗначСписок = Новый ТаблицаЗначений;
    ТабЗначСписок = ПострЗапр.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    
    Для Каждого ТекСтрока Из ТабЗначСписок.Строки Цикл
    СправочникТекущий = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ТекСтрока.Код);
    Если Строка(СправочникТекущий.ВидДоговора)= "С покупателем" Тогда
    ФормаСправ = СправочникТекущий.ПолучитьФорму("ФормаЭлемента");
    ФормаСправ.ЭлементыФормы.КонтролироватьСуммуЗадолженности.Значение = Истина;
    Сообщить(ТекСтрока.Код);
    КонецЕсли;
    КонецЦикла;
    
    
    

    У меня такое ощущение что что-то не так с построителем запроса.
  6. TopicStarter Overlay
    Tverd
    Offline

    Tverd Опытный в 1С

    Регистрация:
    24 окт 2007
    Сообщения:
    56
    Симпатии:
    1
    Баллы:
    29
    Посмотрел пример, курю условия видимости и чекнутости чекбокса.
    Что-то мне подсказывает что собака может быть зарыта там.

    не там.
    Сейчас попытался изменить другие элементы управления формы - не получилось.
    Видимо что-то не так в коде.
  7. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Я те не правильно насоветовал - у тебя в том проблема, что ты в форме элемента справочника данные меняешь, но элемент не сохраняешь.

    Но лучше заменить

    Код:
    Для Каждого ТекСтрока Из ТабЗначСписок.Строки Цикл
    СправочникТекущий = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ТекСтрока.Код);
    Если Строка(СправочникТекущий.ВидДоговора)= "С покупателем" Тогда
    ФормаСправ = СправочникТекущий.ПолучитьФорму("ФормаЭлемента");
    ФормаСправ.ЭлементыФормы.КонтролироватьСуммуЗадолженности.Значение = Истина;
    Сообщить(ТекСтрока.Код);
    КонецЕсли;
    КонецЦикла;
    
    на
    Код:
    Для Каждого ТекСтрока Из ТабЗначСписок.Строки Цикл
    Если Строка(СправочникТекущий.ВидДоговора)= "С покупателем" Тогда
    СправочникТекущий = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ТекСтрока.Код);
    СправочникТекущий.КонтролироватьСуммуЗадолженности = Истина;
    СправочникТекущий.Записать();
    КонецЕсли;
    КонецЦикла;
    
    Код не проверял.
  8. TopicStarter Overlay
    Tverd
    Offline

    Tverd Опытный в 1С

    Регистрация:
    24 окт 2007
    Сообщения:
    56
    Симпатии:
    1
    Баллы:
    29
    Да, спасибо, вы правы.
    Осознал это когда начал уже извращаться.
    У Справочника по моему нет метода записать, а вот у формы есть :unsure:

    В результате получился такой вот уродец, но править не буду т.к. применение разовое.
    Код:
    
    ПострЗапр = Новый ПостроительЗапроса;
    ИсточникДанных = Новый ОписаниеИсточникаДанных(СправочникСписок); 
    ПострЗапр.ИсточникДанных = ИсточникДанных;
    ТабЗначСписок = Новый ТаблицаЗначений;
    ТабЗначСписок = ПострЗапр.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    
    Для Каждого ТекСтрока Из ТабЗначСписок.Строки Цикл
    СправочникТекущий = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ТекСтрока.Код);
    
    Попытка
    Если Строка(СправочникТекущий.ВидДоговора)= "С покупателем" Тогда
    ФормаСправ = СправочникТекущий.ПолучитьФорму("ФормаЭлемента");
    ЧекБокс = ФормаСправ.ЭлементыФормы.КонтролироватьСуммуЗадолженности;
    ЧекБокс.Значение = Истина;
    ФормаСправ.Записать();
    
    Сообщить(Строка(СправочникТекущий.ВидДоговора));
    Сообщить(ТекСтрока.Код);
    КонецЕсли;
    
    Исключение
    
    КонецПопытки;
    
    КонецЦикла;
    
    
    
    
  9. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Да, не доглядел - НайтиПоКоду() возвращает ссылку. А метод записать есть у объекта - его можно получить методом ПолучитьОбъект().

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