7.7 Обход ТЗ

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

  1. TopicStarter Overlay
    igorekkrav
    Offline

    igorekkrav Опытный в 1С

    Регистрация:
    29 апр 2010
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    26
    Добрый день . Подскажите как можно обработать ТаблицуЗначнией следующим образом:

    ТЗ

    Код Компания Значение1 Значение2
    1 Арбалет 20.12.11 20.09.12
    2 Арбалет 22.12.11 21.09.12
    3 Арбалет 25.12.11 21.09.12
    4 Сезон 20.12.11 20.09.12
    5 Сезон 22.12.11 21.09.12
    6 Сезон 25.12.11 21.09.12
    7 Охота 22.12.11 21.09.12
    8 Охота 25.12.11 21.09.12

    Нужно обойти эту ТЗ и получить значения Код(3) Код(6) Код(8). Вообщем именно последних компаний. Как можно написать такой цикл или условия
  2. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    откуда заполнилось тз
    что с этими рез потом делать
  3. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Вам нужно получить строку с указанным кодом или код, на котором "заканчивается" контрагент?
  4. TopicStarter Overlay
    igorekkrav
    Offline

    igorekkrav Опытный в 1С

    Регистрация:
    29 апр 2010
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    26
    Нужно получить Значения1 и Значение 2. Именно последних строк каждой компании.

    ТЗ из запроса.
    Мне нужны Значения1 и Значение 2. Именно последних строк каждой компании.
  5. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    чтобы потом что...
  6. TopicStarter Overlay
    igorekkrav
    Offline

    igorekkrav Опытный в 1С

    Регистрация:
    29 апр 2010
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    26
    В отчет их вывести
  7. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    хех, в какой момент

    отчет давай
  8. TopicStarter Overlay
    igorekkrav
    Offline

    igorekkrav Опытный в 1С

    Регистрация:
    29 апр 2010
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    26
    Код:
     Процедура Сформировать()    
    
    Перем Запрос, ТекстЗапроса, Таб;  
    ТекДата = ТекущаяДата();
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса="";
    ТекстЗапроса=ТекстЗапроса+"
    |ПЕРИОД С ВыбНачПериода По ВыбКонПериода;";
    ТекстЗапроса=ТекстЗапроса+"
    |Владелец = Справочник.ХКК.Владелец;   
    |ТекущийЭлемент = Справочник.ХКК.ТекущийЭлемент; 
    |Менеджер = Справочник.ХКК.Владелец.Менеджер;
    |ДатаКонтакта = Справочник.ХКК.ДатаКонтакта;
    |ДатаКонтакта1 = Справочник.ХКК.ДатаКонтакта1; 
    //|Группировка ТекущийЭлемент упорядочить по ТекущийЭлемент.ДатаКонтакта без групп;   
    |Группировка ТекущийЭлемент упорядочить по ТекущийЭлемент.Владелец без групп;
    |Условие(Менеджер в ВыбМенеджер); 
    |Условие(Владелец в ВыбВладелец); 
    |"//}}ЗАПРОС                    
    
    ; 
    
    
    
    
    
    Если рд = 1 Тогда      
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (ДатаКонтакта1 в ТекДата);
    |";
    КонецЕсли;  
    
    
    
    Если ВыбНачПериода > ВыбКонПериода Тогда
    Предупреждение("Неверно выбран период!");
    Возврат;
    КонецЕсли;
    
    
    Если ПустоеЗначение(ВыбНачПериода) <> 1 Тогда 
    ТекстЗапроса=ТекстЗапроса+"
    |Условие((ДатаКонтакта1>=ВыбНачПериода)И(ДатаКонтакта1<=ВыбКонПериода));
    |";
    КонецЕсли;  
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    
    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");   
    Если (ПустоеЗначение(ВыбМенеджер) <> 1) и  (рд = 1) Тогда
    Таб.ИсходнаяТаблица("Сегодня");
    ИначеЕсли (ПустоеЗначение(ВыбМенеджер) <> 1) и (ПустоеЗначение(рд2)=1) Тогда 
    Таб.ИсходнаяТаблица("ОтборПоМенеджеру");	
    ИначеЕсли рд = 1 Тогда 
    Таб.ИсходнаяТаблица("СегодняМенеджеры");    
    ИначеЕсли рд2 = 1 Тогда 
    Таб.ИсходнаяТаблица("Незвонили");
    Иначе
    Таб.ИсходнаяТаблица("Сформировать");
    КонецЕсли;
    
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    
    ПредЭлемент = "";
    ТекЭлемент = "";
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Компания");
    ТЗ.НоваяКолонка("Менеджер"); 
    ТЗ.НоваяКолонка("ДатаКонтакта"); 
    ТЗ.НоваяКолонка("ДатаСЛКонтакта"); 
    
    
    Пока Запрос.Группировка(1) = 1 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.Компания = Запрос.Владелец;
    ТЗ.Менеджер = Запрос.Менеджер; 
    ТЗ.ДатаКонтакта = Запрос.ДатаКонтакта;
    ТЗ.ДатаСлКонтакта = Запрос.ДатаКонтакта1;
    Менеджер = ТЗ.Менеджер;
    КонецЦикла;
    
    
    //   ТЗ.ВыбратьСтроки();
    //  Пока ТЗ.ПолучитьСтроку()=1 Цикл
    // ТекЭлемент = ТЗ.ТекущийЭлемент(); 
    // Менеджер = ТЗ.Менеджер;
    // Компания = ТЗ.Компания;
    // ДатаКонт = ТЗ.ДатаКонтакта;
    // Если ПустоеЗначение(ПредЭлемент)  = 0 Тогда
    // Если  ТекЭлемент.ТЗ.ДатаКонтакта <> ПредЭлемент.ТЗ.ДатаСлКонтакта   Тогда  
    // Сообщить (""+ПредЭлемент+"");
    // КонецЕсли; 
    // ПредЭлемент = ТЗ.ТекущийЭлемент();  
    // КонецЕсли;  
    // Если ТЗ.ДатаКонтакта  >  ТЗ.ДатаСлКонтакта Тогда
    // Таб.ВывестиСекцию("Прошлые");	  
    // КонецЕсли;
    // КонецЦикла;
    
    
    Для к=2 По ТЗ.КоличествоСтрок() Цикл 
    Компания = ТЗ.ПолучитьЗначение(к, "Компания");
    Менеджер = ТЗ.ПолучитьЗначение(к, "Менеджер");
    КомпанияПредыдущая = ТЗ.ПолучитьЗначение(к - 1, "Компания");
    КомпанияТекущая = ТЗ.ПолучитьЗначение(к, "Компания");
    
    
    Если КомпанияТекущая = КомпанияПредыдущая  Тогда     
    ДатаПредыдущая = ТЗ.ПолучитьЗначение(к - 1, "ДатаКонтакта");
    ДатаТекущая = ТЗ.ПолучитьЗначение(к, "ДатаКонтакта"); 
    ДатаТекущая1 = ТЗ.ПолучитьЗначение(к, "ДатаСЛКонтакта"); 
    ДатаПредыдущая1 = ТЗ.ПолучитьЗначение(к - 1, "ДатаСЛКонтакта");  
    КонецЕсли; 
    
    
    Если (ПустоеЗначение(ДатаПредыдущая1)=0) и   (ДатаПредыдущая1 <>  ДатаТекущая) и (рд2=1) или (ПустоеЗначение(ВыбМенеджер)<>1)  Тогда             
    Таб.ВывестиСекцию("Рабочая");             
    КонецЕсли;     
    ДатаПредыдущая1 = 0; 
    КонецЦикла;                       
    
    
    
    
    
    
    //Если КомпанияТекущая <> КомпанияПредыдущая Тогда	                                                                   
    //КонецЕсли;       
    
    
    //	ТЗ.ВыбратьСтроки();
    //    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    //    Если ТЗ.НомерСтроки  > 1 Тогда
    //       Если  ТЗ.ДатаКонтакта <> ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки - 1, "ДатаСлКонтакта")   Тогда  
    //           Сообщить (""+ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки - 1, "НомерСтроки")+"");
    //      КонецЕсли; 
    //   КонецЕсли;
    //   КонецЦикла;
    
    
    Пока Запрос.Группировка(1) = 1 Цикл
    сегодня = Запрос.ДатаКонтакта1;   
    рабочая = Запрос.ДатаКонтакта1;  
    
    
    
    Если (ПустоеЗначение(рд2)=1) и (ТекДата  >  Запрос.ДатаКонтакта1) Тогда
    Таб.ВывестиСекцию("Прошлые");
    ИначеЕсли (ПустоеЗначение(рд2)=1) и (ТекДата  <  Запрос.ДатаКонтакта1) Тогда
    Таб.ВывестиСекцию("Сегодня"); 				      
    
    ИначеЕсли (ПустоеЗначение(рд2)=1) и (ТекДата  =  Запрос.ДатаКонтакта1) Тогда
    
    Таб.ВывестиСекцию("Рабочая");	 	
    КонецЕсли;                         
    КонецЦикла;   
    
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);   
    Таб.Показать("Сформировать", "");
    КонецПроцедуры
    
    На зеленые поля не обращай внимания.Вообще в нем очень трудно будет разобраться
  9. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    угу, и теперь что ты хочешь выводить в отчет

    только по русски
  10. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Я бы на вашем месте Создал "СписокЗначений", и заполнил его при заполнении ТЗ , нужными вами значениями , где "Представление" является компания...


    А потом просто :
    Код:
    <ВашСписок>.Получить(<Компания>);
    
    
    
  11. TopicStarter Overlay
    igorekkrav
    Offline

    igorekkrav Опытный в 1С

    Регистрация:
    29 апр 2010
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    26
    А чем он будет лучше ТЗ ?
  12. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Тем , что решит вашу задачу...

    В начале :
    Код:
    Список = СоздатьОбъект("СписокЗначений");
    
    
    Там где идет обход запроса..

    Код:
    Если ПустоеЗначение(Список.Получить(Запрос.Владелец))  = 1 Тогда
    Список.ДобавитьЗначение(Запрос.ДатаКонтакта,Запрос.Владелец);
    ИначеЕсли Список.Получить(Запрос.Владелец) < Запрос.ДатаКонтакта Тогда
    Список.Установить(Запрос.Владелец,Запрос.ДатаКонтакта);
    КонецЕсли;
    
    
    
    Вот вы получить список последних значений...
  13. TopicStarter Overlay
    igorekkrav
    Offline

    igorekkrav Опытный в 1С

    Регистрация:
    29 апр 2010
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    26
    Спасибо!!! Пойду попробовать!!!
  14. TopicStarter Overlay
    igorekkrav
    Offline

    igorekkrav Опытный в 1С

    Регистрация:
    29 апр 2010
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    26
    Его потом в ТЗ нужны выгрузить?
    Как можно посмотреть значения с помощью
    Код:
    Сообщить
    
  15. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Код:
    Для Сч = 1 По Список.РазмерСписка()  Цикл
    Сообщить(Список.ПолучитьЗначение(Сч));
    КонецЦикла; 
    
    
  16. TopicStarter Overlay
    igorekkrav
    Offline

    igorekkrav Опытный в 1С

    Регистрация:
    29 апр 2010
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    26
    А как получить само представление? У меня только значение выходит
  17. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Второй параметр вам нужен.
  18. TopicStarter Overlay
    igorekkrav
    Offline

    igorekkrav Опытный в 1С

    Регистрация:
    29 апр 2010
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    26
    Вот так у меня выводит

    6286 02.02.11
    6286 03.03.11
    6286 04.03.11

    Я думал что будет

    НазваниеКомпании 02.02.11

    Код:
     Если ПустоеЗначение(Список.Получить(Запрос.Владелец))  = 1 Тогда
    Список.ДобавитьЗначение(Запрос.ДатаКонтакта1,Запрос.Владелец);
    ИначеЕсли Список.Получить(Запрос.Владелец) < Запрос.ДатаКонтакта1 Тогда
    Список.Установить(Запрос.Владелец,Запрос.ДатаКонтакта1);
    КонецЕсли;
    
    
    
    Вывожу так

    Код:
     стр = "";
    Для Сч = 1 По Список.РазмерСписка()  Цикл
    Знач2 = Список.ПолучитьЗначение(Сч,стр);
    КонецЦикла; 
    

    Или список значений хранит только в таком виде?
  19. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Список хранит ссылку на элемент справочника. Выводит, я так понимаю, код. Значит у справочника стоит основное представление В виде кода. Так попробуйте:
    Код:
    Сообщить(Знач2.Наименование);
    
  20. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Хотя не так. Недосмотрел. Список хранит дату.
    Либо при выводе ищите элемент справочника по коду, либо в представление списка заносите наименование компании.

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