|
Получение данных строк Табличного поля | ☑ | ||
---|---|---|---|---|
0
Валидатор
02.12.13
✎
12:52
|
Есть справочник номенклатура, у которого есть форма списка, на которой есть табличное поле: список. вот как мне циклом обойти все строки этого Списка? для каждого строка из ЭлементыФормы.Список. тут что только не ставил, не обходит все равно(
|
|||
1
Валидатор
02.12.13
✎
12:54
|
обычные формы
|
|||
2
roman844
02.12.13
✎
12:58
|
а для чего ты хочешь обойти этот список??? может просто тупо запрос к справочнику сделать.
|
|||
3
Валидатор
02.12.13
✎
12:59
|
(2) у каждого из элемента есть поле с числовым типом, и если допустим чилсо в этом поле от 1 до 10, то красить строку в красный цвет
|
|||
4
Wobland
02.12.13
✎
13:01
|
Процедура СоставПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки.ОсновноеСырьё Тогда ОформлениеСтроки.Шрифт=Новый Шрифт(ОформлениеСтроки.Шрифт, , , Истина); КонецЕсли; КонецПроцедуры |
|||
5
х86
02.12.13
✎
13:01
|
(4)приПолученииДанных
|
|||
6
roman844
02.12.13
✎
13:01
|
Процедура ДокументСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.ЦветФона = Новый Цвет(255, 0, 0); //красный КонецПроцедуры |
|||
7
Валидатор
02.12.13
✎
13:03
|
Там просто дополнительное условие есть, как раскрасить строку я знаю, просто цвет берется из РС, в котором следующие измерения:
От До Цвет (перечисление) То есть зашел я в РС, написал что от 1 до 10 цвет красный Потом зашел в карточку номенклатуры, и в нужный реквизит написал 9, записал карточку, и строка в форме списка покрасилась красным |
|||
8
х86
02.12.13
✎
13:11
|
(7)при начале работы системы таблицу цветов из РС пишешь в ТЗ типа кеша
при получении данных раскрашиваешь |
|||
9
Валидатор
02.12.13
✎
13:16
|
(8) в общих модулях при начале работы системы? писать запрос, и грузить в ТЗ результат запроса по цветам?
|
|||
10
Валидатор
02.12.13
✎
13:16
|
(8) так а если у меня есть 5 цветов, пользователь открыл РС, добавил 6й цвет, получается, чтобы строки раскрасились, ему перезаодить опять придется?
|
|||
11
Валидатор
02.12.13
✎
13:22
|
И если обходить 2мя циклами, первый:
Получаем наш РС, пихаем его в ТЗ второй: получаем наш список номенклатуры Для каждого СтрокаПервый из Первый Цикл Для каждого СтрокаВторой из Второй Цикл КонецЦикла; КонецЦикла; тут только будет проблема, в первом цикле у нас в ТЗ имеется 3 цвета, то есть 3 раза только ведь цикл пройдется? |
|||
12
roman844
02.12.13
✎
13:24
|
(11) второй цикл ненужен
|
|||
13
roman844
02.12.13
✎
13:25
|
Получаешь ТЗ из РС - Цвета
потом в процедурах ПриВыводеСтроки() или ПриПолученииДанных() по условиям раскрашиваешь свои строки. |
|||
14
Валидатор
02.12.13
✎
13:28
|
(13)
получаю запрос для цвета: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ттЦвета.ИнтервалОт, | ттЦвета.ИнтервалДо, | ттЦвета.Цвет |ИЗ | РегистрСведений.ттЦвета КАК ттЦвета"; Результат = Запрос.Выполнить(); ДанныеПоЦветамРС = Результат.Выгрузить(); Вот как мне потом получить строку, чтобы проверить ее на условие? |
|||
15
Валидатор
02.12.13
✎
13:34
|
Для Каждого Строка из Элемент.ТекущиеДанные Цикл
так получается? |
|||
16
Валидатор
02.12.13
✎
13:36
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | ттЦвета.ИнтервалОт, | ттЦвета.ИнтервалДо, | ттЦвета.Цвет |ИЗ | РегистрСведений.ттЦвета КАК ттЦвета"; Результат = Запрос.Выполнить(); ДанныеПоЦветамРС = Результат.Выгрузить(); Для Каждого Строка из Элемент.ТекущиеДанные Цикл КонецЦикла вот как в условии цикла проверять данные текущихданных на условие соответствия запроса? ведь для ТЗ тоже нужно будет цикл писать? |
|||
17
roman844
02.12.13
✎
13:37
|
а метод Найти() или НайтиСтроки() для ТЗ не предлагать???
|
|||
18
Валидатор
02.12.13
✎
13:40
|
(17) блин, что не так ищу? по сп вроде верно все
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ттЦвета.ИнтервалОт, | ттЦвета.ИнтервалДо, | ттЦвета.Цвет |ИЗ | РегистрСведений.ттЦвета КАК ттЦвета"; Результат = Запрос.Выполнить(); ДанныеПоЦветамРС = Результат.Выгрузить(); СтрокаОт = ДанныеПоЦветамРС.Найти(ДанныеПоЦветамРС.ИнтервалОТ, "ИнтервалОТ"); СтрокаПДо = ДанныеПоЦветамРС.Найти(ДанныеПоЦветамРС.ИнтервалДо, "ИнтервалДо"); СтрокаЦвет = ДанныеПоЦветамРС.Найти(ДанныеПоЦветамРС.Цвет, "Цвет"); |
|||
19
Wobland
02.12.13
✎
13:42
|
(18) _что_ ты ищешь?
|
|||
20
Валидатор
02.12.13
✎
13:44
|
(19) хочу найти строки, чтобы не писать цикл для ТЗ
|
|||
21
Wobland
02.12.13
✎
13:49
|
(20) что в строках ты хочешь найти?
|
|||
22
Валидатор
02.12.13
✎
13:51
|
(21) сделаем так:
1. у меня есть результат запрос в ТЗ, в котором указаны цвета и интервалы, при которых задаются цвета: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ттЦвета.ИнтервалОт, | ттЦвета.ИнтервалДо, | ттЦвета.Цвет |ИЗ | РегистрСведений.ттЦвета КАК ттЦвета"; Результат = Запрос.Выполнить(); ДанныеПоЦветамРС = Результат.Выгрузить(); 2. Дальше в процедуре ПриПолученииДанных я хочу проверить, если у строки в реквизите размер скидки есть число, которое входит в один из интервалов поиска моей ТЗ, то красим выбранную строку в цвет соответствующий |
|||
23
Валидатор
02.12.13
✎
13:52
|
(21) то есть
в ТЗ мы имеем: 1. от 10 до 20 красный 2. от 15 до 30 зеленый 3. от 40 до 50 желтый смотрим номенклатуру, у нее в поле размер скидки указано 16, значит строка в форме списка номенклатуры должна вся стать красной |
|||
24
roman844
02.12.13
✎
13:53
|
под цифрой 2 ошибка, иначе перекрываются отборы
|
|||
25
Wobland
02.12.13
✎
13:53
|
(23) а я за зелёный
|
|||
26
Валидатор
02.12.13
✎
13:53
|
(23) пардон, скидки не могут пересекаться, то есть где зеленый цвет там от 21 до 30)
|
|||
27
roman844
02.12.13
✎
13:53
|
*интервалы
|
|||
28
Wobland
02.12.13
✎
13:53
|
(26) ну так что ты будешь искать в ТЗ?
|
|||
29
Валидатор
02.12.13
✎
13:54
|
(28) ну мне из ТЗ соответствия нужно брать для условий, я так полагаю
|
|||
30
Wobland
02.12.13
✎
13:54
|
(29) что искать?
|
|||
31
Валидатор
02.12.13
✎
13:55
|
(28) то есть у меня в ТЗ есть от 1 до 10
я в процедуре приполученииданных проверяю Если Строка.РазмерСкидки > От и Строка.РазмерСкидки < ДО Тогда Красим строку КонецЕсли |
|||
32
Wobland
02.12.13
✎
13:56
|
Строка.РазмерСкидки будешь искать в ТЗ?
|
|||
33
Валидатор
02.12.13
✎
13:57
|
(32) нет, размер скидки ищу у Элемент.ТекущиеДанные
|
|||
34
roman844
02.12.13
✎
13:58
|
как вариант можно в ПриПолученииДанных в запрос вставлять парамеры своих ОТ и ДО и получать цвет и сразу окрашивать
|
|||
35
Wobland
02.12.13
✎
13:59
|
(34) один запрос лучше двух
|
|||
36
Валидатор
02.12.13
✎
13:59
|
(33) Элемент.ТекущаяСтрока.РазмерСкидки тут точнее
|
|||
37
roman844
02.12.13
✎
14:00
|
(35) и это правильно, просто хочу помочь человеку хоть как то решить задачу, ну а дальше я думаю он найдет истинное решение :)
|
|||
38
Wobland
02.12.13
✎
14:01
|
(36) ты хочешь найти в ТЗ строку, От которой больше твоего размера, и До которой меньше. так?
|
|||
39
Wobland
02.12.13
✎
14:01
|
(37) он и без нас хоть как-то делает. пусть хоть на мисте видит, как правильно ;)
|
|||
40
Валидатор
02.12.13
✎
14:03
|
(38) ну да, у меня данные в реквизите номенклатуры -15, а в ТЗ от 1 до 20, то есть 15 попадает в интервал, значит красим в цвет, который у нас для этого интервала (1-20) задан
|
|||
41
Wobland
02.12.13
✎
14:04
|
(40) дальше сам?
|
|||
42
Валидатор
02.12.13
✎
14:04
|
ВЫБРАТЬ
ттЦвета.ИнтервалОт, ттЦвета.ИнтервалДо, ттЦвета.Цвет ПОМЕСТИТЬ &Цвета ИЗ РегистрСведений.ттЦвета КАК ттЦвета ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Номенклатура.РазмерСкидки, Номенклатура.Ссылка, Цвета.ИнтервалОт, Цвета.ИнтервалДо, Цвета.Цвет ИЗ &Цвета КАК Цвета, Справочник.Номенклатура КАК Номенклатура вот как мне связать справочник и РС которые никак не связаны вообще |
|||
43
Валидатор
02.12.13
✎
14:05
|
(41) ничего нового по моей пробелмы как то я не увидел) все то, что было сделано так и осталось) вопрос как раскрашивать еще актуален)
|
|||
44
Wobland
02.12.13
✎
14:06
|
тогда (34)
|
|||
45
Валидатор
02.12.13
✎
14:07
|
(44) так а какие параметры я туда передам? запустался вообще блин короче
|
|||
46
Wobland
02.12.13
✎
14:08
|
Элемент.ТекущаяСтрока.РазмерСкидки?
|
|||
47
х86
02.12.13
✎
14:10
|
(43)поищи в типовых с толстым клиентом по приПолученииДанных
|
|||
48
Валидатор
02.12.13
✎
14:11
|
(46) как то так?
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ттЦвета.ИнтервалОт, | ттЦвета.ИнтервалДо, | ттЦвета.Цвет |ПОМЕСТИТЬ Цвет |ИЗ | РегистрСведений.ттЦвета КАК ттЦвета |ГДЕ | ттЦвета.ИнтервалОт = &ИнтервалОт | И ттЦвета.ИнтервалДо = &ИнтервалДо |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Номенклатура.РазмерСкидки, | Номенклатура.Ссылка, | Цвета.ИнтервалОт, | Цвета.ИнтервалДо, | Цвета.Цвет |ИЗ | Цвет КАК Цвета, | Справочник.Номенклатура КАК Номенклатура"; Запрос.УстановитьПараметр("ИнтервалОт",Элемент.ТекущаяСтрока.РазмерСкидки); Запрос.УстановитьПараметр("ИнтервалДо",Элемент.ТекущаяСтрока.РазмерСкидки); Результат = Запрос.Выполнить(); ДанныеПоЦветам = Результат.Выгрузить(); |
|||
49
Wobland
02.12.13
✎
14:13
|
нет
|
|||
50
Валидатор
02.12.13
✎
14:13
|
(48) теперь запрос вообще ничего не возвращает
|
|||
51
Валидатор
02.12.13
✎
14:13
|
(49) а как тогда?
|
|||
52
Wobland
02.12.13
✎
14:14
|
ещё разок
найти в ТЗ или в регистре строку, От которой больше твоего размера, и До которой меньше |
|||
53
Валидатор
02.12.13
✎
14:15
|
(52) так это же не в запросе тогда нужно делать?
|
|||
54
Валидатор
02.12.13
✎
14:15
|
точснее это в параметры надо походу указать
|
|||
55
Валидатор
02.12.13
✎
14:16
|
(54) или нет...(((
|
|||
56
Валидатор
02.12.13
✎
14:19
|
Тогда запрос нужен получается только на РС что ли? оО
|
|||
57
Wobland
02.12.13
✎
14:23
|
вижу проблески мыслительных процессов ;)
|
|||
58
Валидатор
02.12.13
✎
14:25
|
(57) да уже мозг кипит, ну сделал я запрос к РС:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ттЦвета.ИнтервалОт, | ттЦвета.ИнтервалДо, | ттЦвета.Цвет |ИЗ | РегистрСведений.ттЦвета КАК ттЦвета |ГДЕ | ттЦвета.ИнтервалОт > &ИнтервалОт | И ттЦвета.ИнтервалДо < &ИнтервалДо"; Запрос.УстановитьПараметр("ИнтервалОТ", Элемент.ТекущаяСтрока.РазмерСкидки); Запрос.УстановитьПараметр("ИнтервалДо", Элемент.ТекущаяСтрока.РазмерСкидки); Результат = Запрос.Выполнить(); ДанныеПоЦветамРС = Результат.Выгрузить(); тут пока правильно?))) |
|||
59
Валидатор
02.12.13
✎
14:26
|
хотя нетЮ не правильно
|
|||
60
Wobland
02.12.13
✎
14:30
|
Если бы я владел знанием, то шел бы по большой дороге. Единственная
вещь, которой я боюсь, - это узкие тропинки. Большая дорога совершенно ровна, но народ любит тропинки. |
|||
61
Валидатор
02.12.13
✎
14:35
|
с Запросом разобрался:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.РазмерСкидки |ПОМЕСТИТЬ ТабНоменклатура |ИЗ | Справочник.Номенклатура КАК Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТабНоменклатура.Ссылка, | ТабНоменклатура.РазмерСкидки, | ЕСТЬNULL(ттЦвета.Цвет, ""нету цвета для такого интервала"") КАК Цвет |ИЗ | ТабНоменклатура КАК ТабНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ттЦвета КАК ттЦвета | ПО ТабНоменклатура.РазмерСкидки >= ттЦвета.ИнтервалОт | И ТабНоменклатура.РазмерСкидки <= ттЦвета.ИнтервалДо"; Результат = Запрос.Выполнить(); ДанныеПоЦветамРС = Результат.Выгрузить(); как теперь сделать, чтобы они красились? циклом обходим запрос, и красим строки? |
|||
62
Kondarat
02.12.13
✎
14:45
|
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
МассивНоменклатуры = Новый Массив; Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл МассивНоменклатуры.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.РазмерСкидки |ПОМЕСТИТЬ ТабНоменклатура |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура В (&МассивНоменклатуры) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТабНоменклатура.Ссылка, | ТабНоменклатура.РазмерСкидки, | ЕСТЬNULL(ттЦвета.Цвет, ЗНАЧЕНИЕ(Перечисление.НаборЦветов.НетЦвета)) КАК Цвет |ИЗ | ТабНоменклатура КАК ТабНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ттЦвета КАК ттЦвета | ПО ТабНоменклатура.РазмерСкидки >= ттЦвета.ИнтервалОт | И ТабНоменклатура.РазмерСкидки <= ттЦвета.ИнтервалДо"; Запрос.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры); Результат = Запрос.Выполнить(); ДанныеПоЦветамРС = Результат.Выгрузить(); Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл НайденнаяСтрока = ДанныеПоЦветамРС.Найти(ОформлениеСтроки.ДанныеСтроки.Номенклатура,"Ссылка"); Если НайденнаяСтрока<>Неопределено Тогда ОформлениеСтроки.ЦветТекста = НайденнаяСтрока.Цвет; КОнецЕсли; КонецЦикла; КонецПроцедуры |
|||
63
Валидатор
02.12.13
✎
14:53
|
(62) поле не найдено ругается :
| Номенклатура В (&МассивНоменклатуры) вот тут |
|||
64
Kondarat
02.12.13
✎
14:55
|
| Номенклатура.Ссылка В (&МассивНоменклатуры)
|
|||
65
Валидатор
02.12.13
✎
14:58
|
(64) Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
МассивНоменклатуры.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура); КонецЦикла; тут он отбирает как группы еще, а как узазать, чтобы без групп было? в запросах ЭтоГруппа = Ложь, а тут? |
|||
66
Kondarat
02.12.13
✎
15:00
|
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Номенклатура = ОформлениеСтроки.ДанныеСтроки.Номенклатура; Если НЕ Номенклатура.ЭтоГруппа() Тогда МассивНоменклатуры.Добавить(Номенклатура); КонецЕсли; КонецЦикла; |
|||
67
Валидатор
02.12.13
✎
15:02
|
и еще вопрос, когда мы присваиваем цвет:
ОформлениеСтроки.ЦветТекста = НайденнаяСтрока.Цвет; у нас в Цветтекста тип - цвет а в найденная строка цвет - перечисления, поэтому цвет не пишется, как из перечисления сделать цвет? с преобразованием в строки и числа понятно, а вот с цветами нет( |
|||
68
Kondarat
02.12.13
✎
15:07
|
Создай соответствие цветов
|
|||
69
Валидатор
02.12.13
✎
15:09
|
(68) так а тип то как потом присвоить? какой фуункцией?
|
|||
70
Kondarat
02.12.13
✎
15:12
|
Ну типа:
СоответствиеЦветов = Новый Соответствие(); СоответствиеЦветов.Вставить(Перечисления.НаборЦветов.Красный, Новый Цвет(255,0,0)); СоответствиеЦветов.Вставить(Перечисления.НаборЦветов.Черный, Новый Цвет(0,0,0)); Потом: Если НайденнаяСтрока<>Неопределено Тогда ЦветСтроки = СоответствиеЦветов.Получить(НайденнаяСтрока.Цвет); ОформлениеСтроки.ЦветТекста = ЦветСтроки; КОнецЕсли; |
|||
71
Валидатор
02.12.13
✎
15:16
|
а в 1ске самой хранятся коды для сопоставлений? типа вон 255 0 0 и тд?
|
|||
72
Валидатор
02.12.13
✎
15:18
|
все, нашел, спс
|
|||
73
Валидатор
02.12.13
✎
15:22
|
{Справочник.Номенклатура.Форма.ФормаСписка.Форма(909)}: Метод объекта не обнаружен (ЭтоГруппа)
Если НЕ Номенклатура.ЭтоГруппа() Тогда почему летит ошибка? |
|||
74
Валидатор
02.12.13
✎
15:23
|
и когда я снимаю, к примеру просмотр иерархический, валится ошибка теперь: {Справочник.Номенклатура.Форма.ФормаСписка.Форма(958)}: Ошибка при установке значения атрибута контекста (ЦветТекста)
ОформлениеСтроки.ЦветТекста = ЦветСтроки; по причине: Несоответствие типов хоть и задал соответствие |
|||
75
Валидатор
02.12.13
✎
15:24
|
(74) исправил, спс всем, вроде работает
|
|||
76
Wobland
02.12.13
✎
15:59
|
я так и знал, что нужно больше молчать ;)
|
|||
77
hhhh
02.12.13
✎
16:22
|
(76) всё-таки думаю, что он на четырех форумах этот вопрос задал. Где-то раньше ответили, на остальных написал: всё сделал, спс.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |