Имя: Пароль:
1C
1C 7.7
v7: Присвоить значение строке в ТЗ
0 Patrio_
O_Muerte
 
03.07.12
09:08
Здарова други.
Треба помощь.
На форме есть ТЗ, с колонкой типа справочник.контрагент, при двойном нажатии на колонку открывается справочник контрагенты.
Необходимо, чтобы при выборе контрагента (элемент) форма справочника закрывалась и в текущую строку ТЗ в тыкнутую колонку устанавливалось выбранное значение.
1 Pro-tone
 
модератор
03.07.12
09:10
Если ТЗ.ТекущаяКолонка()="Контрагент" Тогда
ОткрытьПодбор,

затем

ОбработкаПодбора
2 1Сергей
 
03.07.12
09:16
Процедура ОбработкаТаблицыЗначенийНаФорме()

   ТекСтрока = ТЗ.ТекущаяСтрока();
   ТекКолонка = ТЗ.ТекущаяКолонка();
   
   Если (ТекСтрока=0) Тогда
       Возврат;
   КонецЕсли;
   ТЗ.ПолучитьСтрокуПоНомеру(ТС);
   
   Если (ТекКолонка = "Контрагент") Тогда

       СпрКонтрагенты = СоздатьОбъект("Справочник.Контрагенты");
       СпрКонтрагенты.НайтиЭлемент(ТЗ.Контрагент);

       Если СпрКонтрагенты.Выбрать("Выберите контрика", "")<>1 Тогда
           Возврат;
       КонецЕсли;
       
       ТЗ.Контрагент = СпрКонтрагенты.ТекущийЭлемент();
       
   КонецЕсли;

КонецПроцедуры
3 1Сергей
 
03.07.12
09:16
* ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрока);
4 dk
 
03.07.12
09:16
или еще проще

Спр = СоздОб("Спр.Контры")
Если Спр.Выбрать(...) = 1 тогда
   ТЗ.Контра = Спр.ТекущийЭл;
КонЕс
5 Patrio_
O_Muerte
 
03.07.12
09:16
Процедура ОбработатьНажатие()
   
   Если ТЗ.ТекущаяКолонка() = "Контрагент" Тогда
       ОткрытьПодбор("Справочник.Контрагенты","ДляВыбора",КонтФ,,);
   ИначеЕсли ТЗ.ТекущаяКолонка() = "Агент" Тогда
       
   ИначеЕсли ТЗ.ТекущаяКолонка() = "Статус" Тогда
       
   КонецЕсли;
   
КонецПроцедуры


Процедура ОбработкаПодбора(Эл,Конт)
   
   ТЗ.Контрагент = Эл.ТекущийЭлемент();
   
КонецПроцедуры


В ОбработкаПодбора() заходит, а значение неприсваивает.
6 Patrio_
O_Muerte
 
03.07.12
09:17
Эл.ТекущийЭлемент() в отладчике равен контрагенту, а ТЗ.Контрагент и после строки присваивания пустое.
7 Mikeware
 
03.07.12
09:17
(6) Значит, соотношение радиусов стремится к нулю...
8 dk
 
03.07.12
09:18
(6) проверь типизацию колонок ТЗ
9 Pro-tone
 
модератор
03.07.12
09:18
(6) тип колонки смотри )
10 1Сергей
 
03.07.12
09:19
(5) на строке спозиционироваться надо
11 viktor_vv
 
03.07.12
09:19
(10)+ Либо ТЗ.УстановитьЗначение().
12 Patrio_
O_Muerte
 
03.07.12
09:20
ТЗ.НоваяКолонка("Контрагент","Справочник.Контрагенты");
   ТЗ.НоваяКолонка("Агент","Справочник.КПКАгенты");
   ТЗ.НоваяКолонка("Статус");
13 Patrio_
O_Muerte
 
03.07.12
09:20
При открытии
14 Patrio_
O_Muerte
 
03.07.12
09:21
(10)Ок, попробую
15 Pro-tone
 
модератор
03.07.12
09:21
Перем ТекСтрокаТЗ;

Процедура ОбработатьНажатие()

   ТекСтрокаТЗ = ТЗ.ТекущаяСтрока();
   
   Если ТЗ.ТекущаяКолонка() = "Контрагент" Тогда
       ОткрытьПодбор("Справочник.Контрагенты","ДляВыбора",КонтФ,,);
   ИначеЕсли ТЗ.ТекущаяКолонка() = "Агент" Тогда
       
   ИначеЕсли ТЗ.ТекущаяКолонка() = "Статус" Тогда
       
   КонецЕсли;
   
КонецПроцедуры


Процедура ОбработкаПодбора(Эл,Конт)
   
   ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрокаТЗ);
   ТЗ.Контрагент = Эл.ТекущийЭлемент();
   
КонецПроцедуры
16 Patrio_
O_Muerte
 
03.07.12
09:32
Благодарю, заработало.
Тока там еще строку новую добавлять надо.
17 Mikeware
 
03.07.12
09:33
Я ж говорю, соотношение радиусов...
18 Patrio_
O_Muerte
 
03.07.12
09:33
(17)Евгений Ваганович, покиньте зал :)
19 Mikeware
 
03.07.12
09:35
(18) клоун тут один - топикстартер...
20 Андрей_Андреич
 
naïve
03.07.12
09:37
(19) Клоун клоуном, а сколько умники ему кода уже на халяву написали з а несколько лет?
21 Patrio_
O_Muerte
 
03.07.12
09:40
(20) Пост (5) был написан, до создания темы... это так к сведению...
22 Pro-tone
 
модератор
03.07.12
09:40
(16) то, как ты сформулировал добавлять ничего не надо
23 1Сергей
 
03.07.12
09:41
(16) по тех заданию надо было менять текущую
(22)+1
24 Patrio_
O_Muerte
 
03.07.12
09:41
А вот "умникам" можно только благодарность выразить, поскольку они относятся без нездорового снобизма к просьбам о помощи.
25 Patrio_
O_Muerte
 
03.07.12
09:45
(22)(23)Хм, возможно, я где то неправ, но при такой конструкции:

Процедура ПриОткрытии()
   
   ТЗ.НоваяКолонка("Контрагент","Справочник.Контрагенты");
   ТЗ.НоваяКолонка("Агент","Справочник.КПКАгенты");
   ТЗ.НоваяКолонка("Статус");
   
КонецПроцедуры


Процедура ОбработкаПодбора(Эл,Конт)
   
   ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрокаТЗ);
   ТЗ.Контрагент = Эл.ТекущийЭлемент();
   
КонецПроцедуры


Процедура ОбработатьНажатие()
   
   ТекСтрокаТЗ = ТЗ.ТекущаяСтрока();
   
   Если ТЗ.ТекущаяКолонка() = "Контрагент" Тогда
       ОткрытьПодбор("Справочник.Контрагенты","ДляВыбора",КонтФ,,);
   ИначеЕсли ТЗ.ТекущаяКолонка() = "Агент" Тогда
       
   ИначеЕсли ТЗ.ТекущаяКолонка() = "Статус" Тогда
       
   КонецЕсли;
   
КонецПроцедуры

Вот на этой строке:
ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрокаТЗ);
ошибка "Номер за пределами значения", Отладчик дает ТекСтрокаТЗ = 0.
Пришлось при открытии НоваяСтрока() и кнопку прикрутить НоваяСтрока().
26 1Сергей
 
03.07.12
09:48
лучше бы сделал как у меня
27 Pro-tone
 
модератор
03.07.12
09:48
(25) с самой верхней строчки посмотри код что я тебе написал в (15)
28 Pro-tone
 
модератор
03.07.12
09:49
переменную кто объявлять будет "ТекСтрокаТЗ" ?
29 Patrio_
O_Muerte
 
03.07.12
09:49
Перем КонтФ, ТекСтрокаТЗ;

Она у меня объявлена.
30 Patrio_
O_Muerte
 
03.07.12
09:50
Перем КонтФ, ТекСтрокаТЗ;

//*******************************************
Процедура Сформировать()
   
   ТЗ.НоваяСтрока()
   
КонецПроцедуры
                           


Процедура ПриОткрытии()
   
   ТЗ.НоваяКолонка("Контрагент","Справочник.Контрагенты");
   ТЗ.НоваяКолонка("Агент","Справочник.КПКАгенты");
   ТЗ.НоваяКолонка("Статус");
   
   ТЗ.НоваяСтрока();
   
КонецПроцедуры


Процедура ОбработкаПодбора(Эл,Конт)
   
   ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрокаТЗ);
   ТЗ.Контрагент = Эл.ТекущийЭлемент();
   
КонецПроцедуры


Процедура ОбработатьНажатие()
   
   ТекСтрокаТЗ = ТЗ.ТекущаяСтрока();
   
   Если ТЗ.ТекущаяКолонка() = "Контрагент" Тогда
       ОткрытьПодбор("Справочник.Контрагенты","ДляВыбора",КонтФ,,);
   ИначеЕсли ТЗ.ТекущаяКолонка() = "Агент" Тогда
       
   ИначеЕсли ТЗ.ТекущаяКолонка() = "Статус" Тогда
       
   КонецЕсли;
   
КонецПроцедуры
31 1Сергей
 
03.07.12
09:51
(29) смотри где она обнуляется
32 Patrio_
O_Muerte
 
03.07.12
09:52
Если я из этой конструкции убираю НоваяСтрока()
Получается ошибка.
33 Patrio_
O_Muerte
 
03.07.12
09:52
ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрокаТЗ);
{D:\УСТАНОВИТЬ СТАТУСЫ КОНТРАГЕНТОВ.ERT(25)}: Номер за пределами значения!
34 Pro-tone
 
модератор
03.07.12
09:52
читаем (0)

>На форме есть ТЗ, с колонкой типа справочник.контрагент, при двойном нажатии на колонку открывается справочник контрагенты.
Необходимо, чтобы при выборе контрагента (элемент) форма справочника закрывалась и в текущую строку ТЗ в тыкнутую колонку устанавливалось выбранное значение.

все тут поняли, что есть ТЗ заполненная строками, и ты хочешь щелкая по строке менять ее значение. Реализацию данного техзадания тебе тут написали )
35 Patrio_
O_Muerte
 
03.07.12
09:52
Это при двойном нажатии на контрагента.
36 1Сергей
 
03.07.12
09:53
(33) Получается, у тебя пустая ТЗ? ппц...
37 Pro-tone
 
модератор
03.07.12
09:54
ясное дело, если строк нет в ТЗ, то и обрабатывать нечего, я бы нарисовал кнопку на форме "+" и "-" - для добавления и удаления строк в ТЗ, и после того как ТЗ будет заполнена строками уже выполнять тот код, что в (15)
38 Patrio_
O_Muerte
 
03.07.12
09:54
(34):) Понятно.
(31) Вот прям тут: ТекСтрокаТЗ = ТЗ.ТекущаяСтрока()
Отладчик говорит, что ТЗ.ТекущаяСтрока() = 0.
39 Patrio_
O_Muerte
 
03.07.12
09:55
(36)Канешна пустая.
Он же памятник (с) )
Ага, так и сделал, спасибо за помощь.
Вопрос закрыт.
40 1Сергей
 
03.07.12
09:55
(38) оно и ясно. Я в (2) специально проверку сделал для этого случая.
41 Patrio_
O_Muerte
 
03.07.12
09:58
(40)Да, тоже вариант, сразу не посмотрел.
42 Pro-tone
 
модератор
03.07.12
09:59
Процедура ОбработкаТаблицыЗначенийНаФорме()

   ТекСтрока = ТЗ.ТекущаяСтрока();
   ТекКолонка = ТЗ.ТекущаяКолонка();
   
   Если (ТекСтрока=0) Тогда
       Предупреждение("Добавь строки-то сперва в ТЗ ё-мое!!!");
       Возврат;
   КонецЕсли;
   ТЗ.ПолучитьСтрокуПоНомеру(ТС);
   
   Если (ТекКолонка = "Контрагент") Тогда

       СпрКонтрагенты = СоздатьОбъект("Справочник.Контрагенты");
       СпрКонтрагенты.НайтиЭлемент(ТЗ.Контрагент);

       Если СпрКонтрагенты.Выбрать("Выберите контрика", "")<>1 Тогда
           Возврат;
       КонецЕсли;
       
       ТЗ.Контрагент = СпрКонтрагенты.ТекущийЭлемент();
       
   КонецЕсли;

КонецПроцедуры
43 Pro-tone
 
модератор
03.07.12
10:00
(40) минимально улучшил твой код (2) :D
44 1Сергей
 
03.07.12
10:10
(43) спс