7.7 Цвет строки если...

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем SerzhM, 24 июн 2011.

  1. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    тис 77 Имеется задумка что бы при открытии подбора произошло следующее
    1)Если остаток меньше минимального или равно минимальному (задается в номенклатурной строке во вкладке дополнительно), окрасить строку в красный синий зеленый не важно
    2)Если имеется остаток с отрицательным знаком по цене или количеству( а в колонке цена стоит несколько т.е не сразу заметишь если только когда кончится товар, что там -1 или -3 штуки), окрасить тоже строку в какой нить цвет.
    Теперь вопрос как лучше это сделать(запрос какой что бы быстрее сработал и не тормозил систему, номенклатура где то 20000 строк), в какой процедуре это сделать, при открытии или еще где или это где то будет записываться храниться и обновляться. Ну и как раскрашивать строки по условию.
  2. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Начнем с конца - стандартных механизмов раскрашивания строк нет. Ну разве что отрицательное значение можно вывести красным (цвет текста).

    Единственный выход - использование внешних компонент.

    Имеет смысл продолжать?
  3. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Да имеет потому что я всеравно использую компоненту FormX.dll (из нее я юзаю горячую клавиши), знаю что через эт компоненту можно красить
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    И какие тогда проблемы? Раскрашивайте...
    Я бы использовал
    - если есть текстовая колонка в форме списка: процедуру расчета позиции в поле формура
    - или функцию расчета позиции (через реквизит за пределами формы)
  5. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
  6. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Спасибо буду юзать как пользоваться вк ФормХ
    Вопрос процедурный остался
    Код:
    Функция ПолучитьЦенуНоменклатуры(Номенклатура, ВозврЕдиница, ВозврЦена, ВозврВалюта)
    
    Если глВернутьЦену(Номенклатура, ТипЦен, ПолучитьДатуЦен(), ВозврЦена, ВозврЕдиница, ВозврВалюта) = 1 Тогда
    Возврат 1;
    Иначе
    Возврат 0;
    КонецЕсли;
    //Хочу добавить условие Если возврат цена будет отрицатеьлной, как это описать то что цена с минусом(а там их может быть 3 цены а одна из них отрицательная) 	
    КонецФункции // ПолучитьЦенуНоменклатуры()
    
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Выражайтесь правильно. Цена не может быть отрицательной

    // для глВернутьЦену возвращаемое значение:
    // 1 - если есть такая цена, пераметры цены заполнены
    // 0 - нет такой цены
    // -1 - есть только цены, помеченные на удаление

    наверное вы это имели ввиду.

    Не вижу смысра править стандартный код. Если цена помечена на удаление значит она не актуальна. Не так ли?
  8. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Извиняюсь наверное все таки нужно сравнивать количество, я просто не представляю как сделать правильно условие если

    Вложения:

  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В данном случае наличо ошибка в ведении РОЗНИЧНОГО учета.
    Отрицательного количества в принципе быть не может
  10. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Вот для этого мне и нужно. Если остаток пусть будет 6шт(он черного цвета), а цена стоит несколько и когда щелкаешь по цене там будет отрицательный остаток в шт по такой то цене. нужно что бы строчка номенклатуры сделалась красной и обратить на это внимание что бы исправить косяк. Потому что отрицательный остаток будет виден если положительный остаток =0 или отрицательный остаток > положительного.
  11. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Может если документы менять прошлой датой (хороший пример когда меняют цену в док переоценка вчерашним днем когда уже движеие товара по той цене было(мне то вам рассказывать)) Причем в дальнейшем делают переоценку розница отрицательных остатков. Делают ревизию, на основании ее делают списание тмц(а отрцательный остаток он же никогда не спишется, значит списывали нормальный в остатках товар). Что бы себя уберечь от ошибок оператора хочу сделать такой модулечек
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Смотрите процедуру глПолучитьРозничныйОстатокЦену она возвращает список значений....
  13. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Код:
    //Функция Раскраска()
    Если ТекНоменклатура.МинОстаток>ОстатокТекНоменклатуры Тогда
    Возврат "FONT["+ПолучитьЦвет(0,0,225)+"]"; // и BRUSH пробывал
    Иначе
    Возврат ""; //чтобы не раскрашивало
    КонецЕсли;
    //КонецФункции 
    Возврат ОстатокТекНоменклатуры;
    
    КонецФункции // ПолучитьОстатокЗаполнитьЦену()
    
    
    В Гм прописал загрузка FormX прописал функцию получить цвет
    Код:
    Функция ПолучитьЦвет(Красный = 0,Зеленый = 0,Синий = 0) Экспорт
    Возврат Макс(0,Синий)*65536 + Макс(0,Зеленый)*256 + Макс(0,Красный);
    КонецФункции
    
    
    Теперь количество стало белым и его не видно (Подбор из документа вызываю форму спарвчоника Номенклатура для подбора) функцию убираю все нормально красит черным и красным(отрицательные остатки)

    Может сделать не возврат"" а раскраску в черный цвет? тогда отрицательные остатки тож будут черным
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ОстатокТекНоменклатуры точно верный получаете? Отладчиком значение переменной смотрели?
  15. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Точно получаю все данные за исключением если ОстатокТекНоменклатуры это родитель
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А если так
    Код:
    Если ТекНоменклатура.МинОстаток>ОстатокТекНоменклатуры Тогда 
    Возврат "BRUSH["+ПолучитьЦвет(255,100,100)+"]"; 
    ИначеЕсли Ост = 0 Тогда 
    Возврат "BRUSH["+ПолучитьЦвет(255,255,100)+"]"; 
    КонецЕсли; 
    
    
  17. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    История повторяется, не красит стало количество опять белым и не видным
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Приведите код процедуры полностью.
  19. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Код:
    Функция ПолучитьОстатокЗаполнитьЦену()
    Перем ТовОстаток, ТовОстатокПоФирме, ТовЕдиница, ТовЦена, ТовВалюта;
    
    ОстатокТекНоменклатуры = "";
    ТекОстатокПоФирме      = "";
    ЦенаТекНоменклатуры    = "";
    ВалютаТекНоменклатуры  = "";
    ЕдиницаТекНоменклатуры = "";
    
    ТекНоменклатура = ТекущийЭлемент();
    
    Если (ТекНоменклатура.ЭтоГруппа() = 0)
    и (ПоказатьОстаткиЦену = 1)  Тогда        
    
    ЕдиницаТекНоменклатуры = ТекНоменклатура.ОсновнаяЕдиница;
    
    Если ЦенаВподборе = "Розница" Тогда
    Если (ТекНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга)
    или (ТекНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда
    
    // Для услуг и работ розничную цену берем из справочника 
    ОстатокТекНоменклатуры = "";
    РознТипЦен             = Константа.РозничныйТипЦен; 
    ВалютаТекНоменклатуры  = РознТипЦен.Валюта;
    Если РознТипЦен.Выбран() = 1 Тогда            
    ДатаЦен = ПолучитьДатуЦен();
    глВернутьЦену(ТекНоменклатура, РознТипЦен, ДатаЦен, ТовЦена, ТовЕдиница, ВалютаТекНоменклатуры);
    ЦенаТекНоменклатуры	   = глФРМ(ТовЦена);
    Иначе
    ЦенаТекНоменклатуры = 0;
    КонецЕсли; 
    
    Иначе	// не услуга и не работа, розничная цена
    
    ВалютаТекНоменклатуры  = глРубли;
    глПолучитьРозничныйОстатокЦену(ТекНоменклатура, ТекНоменклатура.ОсновнаяЕдиница, ОстаткиТМЦ, ТовОстаток, ТовЦена);
    СписокОст    = ЗначениеИзСтроки(ТовОстаток);
    СписокЦен    = ЗначениеИзСтроки(ТовЦена);
    РазмерСписка = СписокОст.РазмерСписка();
    Если РазмерСписка = 1 Тогда
    ОстатокТекНоменклатуры = СокрЛП(Формат(СписокОст.ПолучитьЗначение(1),"Ч014.3"));
    ЦенаТекНоменклатуры	   = глФРМ(СписокЦен.ПолучитьЗначение(1));
    ИначеЕсли РазмерСписка > 1 Тогда
    ТовОстаток = 0;
    Для Счетчик = 1 По РазмерСписка Цикл
    ТовОстаток = ТовОстаток + СписокОст.ПолучитьЗначение(Счетчик);
    КонецЦикла;
    ЦенаТекНоменклатуры    = "<Несколько>";
    ОстатокТекНоменклатуры = ?(ПустоеЗначение(ТовОстаток) = 1, "", СокрЛП(Формат(ТовОстаток,"Ч014.3")));
    КонецЕсли;
    
    //Сергей 1
    //Если ОстатокТекНоменклатуры<ТекНоменклатура.МинОстаток Тогда
    //Функция Раскраска()
    //     Если ОстатокТекНоменклатуры<ТекНоменклатура.МинОстаток Тогда
    //     Возврат "BRUSH["+ПолучитьЦвет(221,221,255)+"]"; //тут дело вкуса
    //     Иначе
    //     Возврат ""; //чтобы не раскрашивало
    //     КонецЕсли;
    //КонецФункции
    
    //2
    КонецЕсли; // Услуга или нет
    Иначе
    Если ЦенаВподборе = "ИзСправочника" Тогда
    Если ПолучитьЦенуНоменклатуры(ТекНоменклатура, ТовЕдиница, ТовЦена, ТовВалюта) = 1 Тогда
    ЦенаТекНоменклатуры	   = глФРМ(ТовЦена);
    ВалютаТекНоменклатуры  = СокрЛП(ТовВалюта);
    ЕдиницаТекНоменклатуры = ТовЕдиница;
    КонецЕсли;
    КонецЕсли;
    
    глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, ТекНоменклатура, ЕдиницаТекНоменклатуры, ОстаткиТМЦ, ТовОстаток, ТовОстатокПоФирме, Склад, Резервы, 1);
    
    Если ПоказыватьОстатокПоФирме = 1 Тогда
    ТекОстатокПоФирме = ?(ПустоеЗначение(ТовОстатокПоФирме) = 1, "", СокрЛП(Формат(ТовОстатокПоФирме,"Ч014.3")));
    КонецЕсли;
    ОстатокТекНоменклатуры = ?(ПустоеЗначение(ТовОстаток) = 1, "", СокрЛП(Формат(ТовОстаток,"Ч014.3")));
    
    КонецЕсли;
    КонецЕсли;
    //Сергей 1
    //Если ОстатокТекНоменклатуры<ТекНоменклатура.МинОстаток Тогда
    //Функция Раскраска()
    //Если ТекНоменклатура.МинОстаток>ОстатокТекНоменклатуры Тогда
    //Возврат "FONT["+ПолучитьЦвет(0,0,225)+"]"; //тут дело вкуса
    //Иначе
    //Возврат ""; //чтобы не раскрашивало
    //КонецЕсли;
    //КонецФункции  
    Если ТекНоменклатура.МинОстаток>ОстатокТекНоменклатуры Тогда 
    Возврат "BRUSH["+ПолучитьЦвет(255,100,100)+"]"; 
    ИначеЕсли ОстатокТекНоменклатуры = 0 Тогда 
    Возврат "BRUSH["+ПолучитьЦвет(255,255,100)+"]"; 
    КонецЕсли; 
    Возврат ОстатокТекНоменклатуры;
    
    КонецФункции // ПолучитьОстатокЗаполнитьЦену()
    
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Текстовая колонка у вас первая?

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