Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 07:57

помогите пожалуйста

Автор Dimon777, 12 авг 2013, 13:12

0 Пользователей и 1 гость просматривают эту тему.

Dimon777

здравствуйте! помогите пожалуйста. делаю подсвечивание документов, красным должники а желтым выделяются те документы на которых нет реализации, но есть заказ покупателя, планируемое поступление, есть приходн.касс.ордер или плат.поручение., а те документы у которых есть закрытие никак не подсвечиваю.
проблема вот в чем: без третьего запроса все работает, должники красные, остальные зеленые... но вот когда третий запрос то красный цвет не работает а подсвечивается все документы, на которых нет реализации желтым... в общем работает либо то, либо то... что делать в такой ситуации??? подскажите пожалуйста!!!

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
   
       
Если франВспомогательный.ПолучитьЗначениеНастройки(глЗначениеПеременной("глТекущийПользователь"),
        ПланыВидовХарактеристик.НастройкиПользователей.ЦветовоеВыделениеЛУРВ) Тогда
        ЦветВажноТусклый = Новый Цвет(255, 199, 204); // красный
        ЦветОсновнойЯркий = Новый Цвет(205, 250, 250); // зеленый
ЦветОсновнойТусклый = Новый Цвет( 255, 255, 0); // желтый

Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
            Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Сделка", ОформлениеСтроки.ДанныеСтроки.Ссылка);
            Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;             
            Запрос.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
                         | РасчетыСКонтрагентамиОстатки.Сделка,
                         | РасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК Сумма
                         |ПОМЕСТИТЬ Расчеты
                         |ИЗ
                         | РегистрНакопления.РасчетыСКонтрагентами.Остатки КАК РасчетыСКонтрагентамиОстатки
                         |;
                         |
                         |////////////////////////////////////////////////////////////////////////////////
                         |ВЫБРАТЬ
                         | Расчеты.Сделка,
                         | Расчеты.Сумма
                         |ИЗ
                         | Расчеты КАК Расчеты";
           Передано=Запрос.Выполнить().Выбрать();
   Если Передано.НайтиСледующий(Новый Структура("Сделка",ОформлениеСтроки.ДанныеСтроки.Ссылка)) тогда
    СуммаОстаток=Передано.Сумма;
     Иначе
   СуммаОстаток=0;
   КонецЕсли;
   
    Передано.Сбросить();

             Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СуммаДокумента <= СуммаОстаток Тогда
                  ОформлениеСтроки.ЦветФона = ЦветВажноТусклый;
             Иначе
                  ОформлениеСтроки.ЦветФона =  ЦветОсновнойЯркий;
             КонецЕсли;
КонецЦикла;




 
 
     
 
 
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
            Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Сделка", ОформлениеСтроки.ДанныеСтроки.Ссылка);
            Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;             
            Запрос.Текст=
  "ВЫБРАТЬ РАЗЛИЧНЫЕ
  | ПланируемыеПоступленияДенежныхСредствОстатки.СуммаВзаиморасчетовОстаток,
  | ПланируемыеПоступленияДенежныхСредствОстатки.Сделка,
  | ЗаказыПокупателейОстатки.ЗаказПокупателя,
  | ЗаказыПокупателейОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток1
  |ПОМЕСТИТЬ расчет1
  |ИЗ
  | РегистрНакопления.ПланируемыеПоступленияДенежныхСредств.Остатки КАК ПланируемыеПоступленияДенежныхСредствОстатки
  | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
  | ПО ПланируемыеПоступленияДенежныхСредствОстатки.Сделка = ЗаказыПокупателейОстатки.ЗаказПокупателя
  |;
  |
  |////////////////////////////////////////////////////////////////////////////////
  |ВЫБРАТЬ
  | расчет1.СуммаВзаиморасчетовОстаток,
  | расчет1.Сделка,
  | расчет1.ЗаказПокупателя,
  | расчет1.СуммаВзаиморасчетовОстаток1
  |ИЗ
  | расчет1 КАК расчет1" ;
   Передано=Запрос.Выполнить().Выбрать();
    Если Передано.НайтиСледующий(Новый Структура("Сделка",ОформлениеСтроки.ДанныеСтроки.Ссылка)) тогда
    СуммаОстаток=Передано.СуммаВзаиморасчетовОстаток;
     Иначе
   СуммаОстаток=0;
   КонецЕсли;
     
           Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СуммаДокумента <= СуммаОстаток Тогда
                  ОформлениеСтроки.ЦветФона = ЦветВажноТусклый;
             Иначе
                  ОформлениеСтроки.ЦветФона =  ЦветОсновнойЯркий;
             КонецЕсли;

КонецЦикла;
КонецЕсли;
 

  Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ЗаказПокупателя", ОформлениеСтроки.ДанныеСтроки.Ссылка);
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;             
    Запрос.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
                 | ВложенныйЗапрос.Сделка,
                 | ВложенныйЗапрос.СуммаВзаиморасчетовОстаток,
                 | ЗаказыПокупателейОстатки.ЗаказПокупателя,
                 | ЗаказыПокупателейОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток1
                 |ПОМЕСТИТЬ расчет2
                 |ИЗ
                 | РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
                 | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                 | РасчетыСКонтрагентамиОстатки.Сделка КАК Сделка,
                 | РасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
                 | ИЗ
                 | РегистрНакопления.РасчетыСКонтрагентами.Остатки КАК РасчетыСКонтрагентамиОстатки) КАК ВложенныйЗапрос
                 | ПО ЗаказыПокупателейОстатки.ЗаказПокупателя = ВложенныйЗапрос.Сделка
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 | расчет2.Сделка,
                 | расчет2.СуммаВзаиморасчетовОстаток,
                 | расчет2.ЗаказПокупателя,
                 | расчет2.СуммаВзаиморасчетовОстаток1
                 |ИЗ
                 | расчет2 КАК расчет2";
   Передано=Запрос.Выполнить().Выбрать();
   Если Передано.НайтиСледующий(Новый Структура("ЗаказПокупателя",ОформлениеСтроки.ДанныеСтроки.Ссылка)) тогда
    СуммаОстаток=Передано.СуммаВзаиморасчетовОстаток;
     Иначе
   СуммаОстаток=0;
   КонецЕсли;
   
    Передано.Сбросить();

     Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СуммаДокумента <= СуммаОстаток Тогда
  ОформлениеСтроки.ЦветФона = ЦветОсновнойТусклый;
     Иначе
  ОформлениеСтроки.ЦветФона =  ЦветОсновнойЯркий;
     КонецЕсли;
  КонецЦикла;   
 


КонецПроцедуры


MuI_I_Ika

Судя по всему у вас по результату третьего запроса все цвета перебиваются только на зеленый или желтый других не предусмотрено. Отсюда и проблема.

Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СуммаДокумента <= СуммаОстаток Тогда
                  ОформлениеСтроки.ЦветФона = ЦветОсновнойТусклый;
             Иначе
                  ОформлениеСтроки.ЦветФона =  ЦветОсновнойЯркий;
             КонецЕсли;


Нужно предусмотреть случай, когда будет оставаться красный цвет.

Еще было бы логично объединить 3 запроса в 1 и тогда вообще проблем не будет.

Dimon777

да я знаю что проблема в том что все цвета перебиваются... в том то и вопрос, как сделать так чтоб они не перебивались???

Dimon777

здравствуйте! помогите пожалуйста. делаю подсвечивание документов, красным должники а желтым выделяются те документы на которых нет реализации, но есть заказ покупателя, планируемое поступление, есть приходн.касс.ордер или плат.поручение., а те документы у которых есть закрытие никак не подсвечиваю.
проблема вот в чем: без третьего запроса все работает, должники красные, остальные зеленые... но вот когда третий запрос то красный цвет не работает а подсвечивается все документы, на которых нет реализации желтым... в общем работает либо то, либо то... что делать в такой ситуации??? подскажите пожалуйста!!!
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
   
       
Если франВспомогательный.ПолучитьЗначениеНастройки(глЗначениеПеременной("глТекущийПользователь"),
        ПланыВидовХарактеристик.НастройкиПользователей.ЦветовоеВыделениеЛУРВ) Тогда
        ЦветВажноТусклый = Новый Цвет(255, 199, 204); // красный
        ЦветОсновнойЯркий = Новый Цвет(205, 250, 250); // зеленый
         ЦветОсновнойТусклый = Новый Цвет( 255, 255, 0); // желтый
         
                Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
            МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
            Запрос = Новый Запрос;
            Запрос.УстановитьПараметр("Сделка", ОформлениеСтроки.ДанныеСтроки.Ссылка);
            Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;             
            Запрос.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
                         |    РасчетыСКонтрагентамиОстатки.Сделка,
                         |    РасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК Сумма
                         |ПОМЕСТИТЬ Расчеты
                         |ИЗ
                         |    РегистрНакопления.РасчетыСКонтрагентами.Остатки КАК РасчетыСКонтрагентамиОстатки
                         |;
                         |
                         |////////////////////////////////////////////////////////////////////////////////
                         |ВЫБРАТЬ
                         |    Расчеты.Сделка,
                         |    Расчеты.Сумма
                         |ИЗ
                         |    Расчеты КАК Расчеты";
           Передано=Запрос.Выполнить().Выбрать();
           Если Передано.НайтиСледующий(Новый Структура("Сделка",ОформлениеСтроки.ДанныеСтроки.Ссылка)) тогда
            СуммаОстаток=Передано.Сумма;
             Иначе
           СуммаОстаток=0;
           КонецЕсли;
           
            Передано.Сбросить();

             Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СуммаДокумента <= СуммаОстаток Тогда
                  ОформлениеСтроки.ЦветФона = ЦветВажноТусклый;
             Иначе
                  ОформлениеСтроки.ЦветФона =  ЦветОсновнойЯркий;
             КонецЕсли;
         КонецЦикла;
         
         
         
         
         
     
                 
         
         
            Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
            МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
            Запрос = Новый Запрос;
            Запрос.УстановитьПараметр("Сделка", ОформлениеСтроки.ДанныеСтроки.Ссылка);
            Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;             
            Запрос.Текст=
      "ВЫБРАТЬ РАЗЛИЧНЫЕ
      |    ПланируемыеПоступленияДенежныхСредствОстатки.СуммаВзаиморасчетовОстаток,
      |    ПланируемыеПоступленияДенежныхСредствОстатки.Сделка,
      |    ЗаказыПокупателейОстатки.ЗаказПокупателя,
      |    ЗаказыПокупателейОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток1
      |ПОМЕСТИТЬ расчет1
      |ИЗ
      |    РегистрНакопления.ПланируемыеПоступленияДенежныхСредств.Остатки КАК ПланируемыеПоступленияДенежныхСредствОстатки
      |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
      |        ПО ПланируемыеПоступленияДенежныхСредствОстатки.Сделка = ЗаказыПокупателейОстатки.ЗаказПокупателя
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |    расчет1.СуммаВзаиморасчетовОстаток,
      |    расчет1.Сделка,
      |    расчет1.ЗаказПокупателя,
      |    расчет1.СуммаВзаиморасчетовОстаток1
      |ИЗ
      |    расчет1 КАК расчет1" ;
       Передано=Запрос.Выполнить().Выбрать();
        Если Передано.НайтиСледующий(Новый Структура("Сделка",ОформлениеСтроки.ДанныеСтроки.Ссылка)) тогда
            СуммаОстаток=Передано.СуммаВзаиморасчетовОстаток;
             Иначе
           СуммаОстаток=0;
       КонецЕсли;
                 
           Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СуммаДокумента <= СуммаОстаток Тогда
                  ОформлениеСтроки.ЦветФона = ЦветВажноТусклый;
             Иначе
                  ОформлениеСтроки.ЦветФона =  ЦветОсновнойЯркий;
             КонецЕсли;
         
         КонецЦикла;
     КонецЕсли;
               
         
          Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
            МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
            Запрос = Новый Запрос;
            Запрос.УстановитьПараметр("ЗаказПокупателя", ОформлениеСтроки.ДанныеСтроки.Ссылка);
            Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;             
            Запрос.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
                         |    ВложенныйЗапрос.Сделка,
                         |    ВложенныйЗапрос.СуммаВзаиморасчетовОстаток,
                         |    ЗаказыПокупателейОстатки.ЗаказПокупателя,
                         |    ЗаказыПокупателейОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток1
                         |ПОМЕСТИТЬ расчет2
                         |ИЗ
                         |    РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
                         |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                         |            РасчетыСКонтрагентамиОстатки.Сделка КАК Сделка,
                         |            РасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
                         |        ИЗ
                         |            РегистрНакопления.РасчетыСКонтрагентами.Остатки КАК РасчетыСКонтрагентамиОстатки) КАК ВложенныйЗапрос
                         |        ПО ЗаказыПокупателейОстатки.ЗаказПокупателя = ВложенныйЗапрос.Сделка
                         |;
                         |
                         |////////////////////////////////////////////////////////////////////////////////
                         |ВЫБРАТЬ
                         |    расчет2.Сделка,
                         |    расчет2.СуммаВзаиморасчетовОстаток,
                         |    расчет2.ЗаказПокупателя,
                         |    расчет2.СуммаВзаиморасчетовОстаток1
                         |ИЗ
                         |    расчет2 КАК расчет2";
           Передано=Запрос.Выполнить().Выбрать();
           Если Передано.НайтиСледующий(Новый Структура("ЗаказПокупателя",ОформлениеСтроки.ДанныеСтроки.Ссылка)) тогда
            СуммаОстаток=Передано.СуммаВзаиморасчетовОстаток;
             Иначе
           СуммаОстаток=0;
           КонецЕсли;
           
            Передано.Сбросить();

             Если ОформлениеСтроки.ДанныеСтроки.Ссылка.СуммаДокумента <= СуммаОстаток Тогда
                  ОформлениеСтроки.ЦветФона = ЦветОсновнойТусклый;
             Иначе
                  ОформлениеСтроки.ЦветФона =  ЦветОсновнойЯркий;
             КонецЕсли;
          КонецЦикла;   
         

   
КонецПроцедуры


mixqn

Для начала надо исправить грубейшую ошибку - запрос в цикле, точнее аж в 3-х циклах. Запрос должен быть один и до цикла!!!
Добавлено: 14 авг 2013, 09:14


вообще, при более детальном рассмотрении кода оказывается, что запросы в цикле - это еще цветочки.
кроме того там:
1. нет отборов в запросах. тупо выбирается все, далее уже в коде проверяется на равенство текущей ссылке
2. непонятно для чего создаются временные таблицы, которые никак потом не используются
3. в условиях сравнения (для раскраски) получаются данные через точку, хотя их тоже следовало бы получать в запросе

boobzx

А что за база? Хочу попробовать сделать все в одном запросе:)

GRADUS

Цитата: mixqn от 14 авг 2013, 09:01
Для начала надо исправить грубейшую ошибку - запрос в цикле, точнее аж в 3-х циклах. Запрос должен быть один и до цикла!!!
Добавлено: 14 авг 2013, 09:14


вообще, при более детальном рассмотрении кода оказывается, что запросы в цикле - это еще цветочки.
кроме того там:
1. нет отборов в запросах. тупо выбирается все, далее уже в коде проверяется на равенство текущей ссылке
2. непонятно для чего создаются временные таблицы, которые никак потом не используются
3. в условиях сравнения (для раскраски) получаются данные через точку, хотя их тоже следовало бы получать в запросе

Я ему уже 3 раза это писал, он уверен, что менеджер временных таблиц ускоряет запрос :bleh:
И где то приводил реальный работающий пример, хоть и сделан через опу, но ничего не тележит.

А мой вопрос вот в чем, зачем постоянно плодить темы?

Dimon777

ну если у вас что-то получится скиньте) я вот мучаюсь не получается(

mixqn

Dimon777, зачем тему вторую создали?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск