8.х Проблема с табличным полем

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

  1. TopicStarter Overlay
    Shakal--
    Offline

    Shakal--

    Регистрация:
    29 янв 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Пишу ИБ для обслуживания абонентов радиоточки. Опыта в разработке немного, поэтому часто сталкиваюсь со сложностями. Сейчас проблема - при выводе в табличное поле (таблица значений) вывод срабатывает два раза.
    Порядок действий следующий - ищется абонент по введённому параметру, найденые абоненты выводятся в табличное поле, пользователь выбирает нужного абонента и данные об оплате и заявках на ремонт выводятся в два других табличных поля. Всё это проходит отлично, но когда процедура вывода доходит до КонецПроцедуры, то снова прыгает на вывод (в середину кода) и выводит повторно. Для выбора абонента использую колонку с флажком и процедуру ПриИзменении.

    Собственно сама процедура:
    Код:
    Процедура РезулвыбПриИзменении(Элемент)
    Если ЭлементыФормы.Резул.ТекущаяСтрока.выб = Истина Тогда
    Для Каждого стр из Резул Цикл
    Если НЕ стр.Ном = ЭлементыФормы.Резул.ТекущаяСтрока.Ном Тогда
    стр.выб = Ложь;                   
    КонецЕсли;
    КонецЦикла;
    
    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ
    |    КлієнтиОплата.НомерСтроки,
    |    КлієнтиОплата.ДатаНач,
    |    КлієнтиОплата.Нач,
    |    КлієнтиОплата.ОппНач,
    |    КлієнтиОплата.ДатаОп,
    |    КлієнтиОплата.Оп,
    |    КлієнтиОплата.ОппОп,
    |    Клієнти.Переплата
    |ИЗ
    |    Справочник.Клієнти.Оплата КАК КлієнтиОплата
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Клієнти КАК Клієнти
    |        ПО КлієнтиОплата.Ссылка = Клієнти.Ссылка
    |ГДЕ
    |    Клієнти.Код = &Код";
    
    
    Запрос.УстановитьПараметр("Код", ЭлементыФормы.Резул.ТекущаяСтрока.ОР);
    Рез = Запрос.Выполнить().Выбрать();                           
    Пока Рез.Следующий() Цикл
    ЭлементыФормы.Оплата.ДобавитьСтроку();                      // С ЭТОЙ СТРОКИ НАЧИНАЕТСЯ ПОВТОР
    Тек = ЭлементыФормы.Оплата.ТекущаяСтрока;
    Если НЕ Рез.Оп = "" Тогда
    Тек.Ном = Рез.НомерСтроки;
    Тек.ДатаНачисления = Рез.ДатаНач;
    Тек.СуммаНачисления = Рез.Нач;
    Тек.ОператорНач = Рез.ОппНач;
    Тек.ДатаПогаш = Рез.ДатаОп;
    Тек.СуммаПогаш = Рез.Оп;
    Тек.ОператорПогас = Рез.ОппОп;
    
    Иначе
    
    Тек.Ном = Рез.НомерСтроки;
    Тек.ДатаНачисления = Рез.ДатаНач;
    Тек.СуммаНачисления = Рез.Нач;
    Тек.ОператорНач = Рез.ОппНач;
    КонецЕсли;
    КонецЦикла;
    ЗапРем = Новый Запрос();
    ЗапРем.Текст = "ВЫБРАТЬ
    |    КлієнтиРемонтСп.НомерСтроки,
    |    КлієнтиРемонтСп.ДатаПод,
    |    КлієнтиРемонтСп.ОппПрин,
    |    КлієнтиРемонтСп.ДатаИсп,
    |    КлієнтиРемонтСп.ОппСдал,
    |    КлієнтиРемонтСп.Причина,
    |    Клієнти.Код
    |ИЗ
    |    Справочник.Клієнти.РемонтСп КАК КлієнтиРемонтСп
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Клієнти КАК Клієнти
    |        ПО КлієнтиРемонтСп.Ссылка = Клієнти.Ссылка
    |ГДЕ
    |    Клієнти.Код = &Код";
    
    ЗапРем.УстановитьПараметр("Код", ЭлементыФормы.Резул.ТекущаяСтрока.ОР);
    ЭлементыФормы.Панель1.ТекущаяСтраница = ЭлементыФормы.Панель1.Страницы.Ремонт;
    Если Справочники.Клієнти.НайтиПоКоду(ЭлементыФормы.Резул.ТекущаяСтрока.ОР).Ремонт = Истина Тогда
    ЭлементыФормы.Заявка.Доступность = Ложь;
    ЭлементыФормы.Сдача.Доступность = Истина;
    Иначе ЭлементыФормы.Заявка.Доступность = Истина;
    ЭлементыФормы.Сдача.Доступность = Ложь;
    КонецЕсли;
    РезРем = ЗапРем.Выполнить().Выбрать();
    Пока РезРем.Следующий() Цикл
    ЭлементыФормы.Рем.ДобавитьСтроку();
    ТС = ЭлементыФормы.Рем.ТекущаяСтрока;
    ТС.ДатаПр = РезРем.ДатаПод;
    ТС.ОператорПр = РезРем.ОппПрин;
    ТС.ДатаСдачи = РезРем.ДатаИсп;
    ТС.ОператорСдачи = РезРем.ОппСдал;
    ТС.Причина = РезРем.Причина;
    КонецЦикла
    КонецЕсли;
    ЭлементыФормы.Панель1.ТекущаяСтраница = ЭлементыФормы.Панель1.Страницы.Оплата;
    ЭлементыФормы.Резул.ТекущаяСтрока.выб = Ложь;
    КонецПроцедуры
    
    
    
    И, подскажите пожалуйста, как избавится от флажка, чтобы абонент выбирался просто нажатием на его строку?
    Не судите за индийский код, я новичок :)
    Заранее благодарен!
  2. wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    проще всего тебе поступить так, как реализовано в типовой торговле в арм или форме списка номенклатуры. а вместо флажка используй процедуру ПриАктивизацииСтроки() таб поля
  3. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    вы сами для себя приведите код в читаемый вид и может проблема сама решится
    лично мне читать переменные вида Тек, Рез, Оп, стр и Резул не очень хочется
  4. GreenFox
    Offline

    GreenFox

    Регистрация:
    19 фев 2009
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    У Вас идет запрос к табличной части справочника, в левом соединении с самим элементом справочника, так вот если у Вас в табличной части 2 или более записи, то и в результате в выборке результата запроса Вы получите 2 или более строчки, тоесть цикл исполнится 2 и более раз.

    И вообще для регистрации оплат надо использовать Регистр Накопления.
  5. TopicStarter Overlay
    Shakal--
    Offline

    Shakal--

    Регистрация:
    29 янв 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Всем спасибо за ответы. Благодаря вам проблема решена :)

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