|   |   | 
| 
 | Получение данных строк Табличного поля | ☑ | ||
|---|---|---|---|---|
| 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) всё-таки думаю, что он на четырех форумах этот вопрос задал. Где-то раньше ответили, на остальных написал: всё сделал, спс.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |