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

Внешний отчет на выборку

Автор sail, 10 янв 2014, 17:03

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

sail

Помогите мне пожалуйста, нужно срочно. Создаю отчет на выборку. Нужно из справочника "Контрагенты "выбрать тех контрагентов у которых есть договора с наименованием "Саночистка". В диалоге задается период и дата договоров должна быть из этого периода. Еще проблема в том, что наименования пользователи вводили по-разному: кто саночистка, кто сан.оч и др., поэтому договор по наименованию должет отбираться по первым 3-м символам. Спасибо за помощь. Выложу свой код и внешний отчет прикреплю.

Процедура Сформировать()
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица");
   Таб.ВывестиСекцию("Шапка1");   
   
   спрк=создатьобъект("Справочник.Контрагенты");
   спрд=создатьобъект("Справочник.Договора");   
   [size=78%]  [/size][/size]
    спрк.ВыбратьЭлементы();   
   пока спрк.получитьэлемент()<>0 цикл 
            
      спрд.ИспользоватьВладельца(спрк.ТекущийЭлемент());
      спрд.выбратьЭлементы(); 
   
      Пока спрд.ПолучитьЭлемент() <> 0 Цикл
         Если спрд.ПометкаУдаления() = 1 тогда
            продолжить;
         КонецЕсли;   
      если (спрд.Наименование ="Саночистка") и (спрд.ДатаДоговора>=ВыбДатаНач) и (спрд.ДатаДоговора<=ВыбДатаКон)  тогда
            договор = спрд.Код;        
            датадог= спрд.ДатаДоговора;
       
      конецесли;
      конецЦикла;   
      [/size]
      Таб.ВывестиСекцию("Строка1");
   КонецЦикла    
      
таб.опции(0,0,0);
   Таб.Показать();
КонецПроцедуры




Процедура ПриОткрытии()
   ВыбДатаНач = НачМесяца(РабочаяДата());
   ВыбДатаКон = КонМесяца(РабочаяДата());
КонецПроцедуры

sail

Все так сложно, если никто не отвечает? Мне уже к понедельнику нужно. Подскажите хот в каком направлении двигаться. Может тут надо запрос на выборку создать.

pavl_vs

Цитата: sail от 11 янв 2014, 13:00
Все так сложно, если никто не отвечает? Мне уже к понедельнику нужно. Подскажите хот в каком направлении двигаться. Может тут надо запрос на выборку создать.
Вы не назвали конфигурацию. В моей (тоже не назову) справочник "Договоры" подчинен справочнику "Организации", а не "Контрагенты", что мне кажется более логичным.

1. Проверьте подчиненность.
2. Посмотрите состав реквизитов Контрагента; может есть ОсновнойДоговор (т.е у меня один и тот же договор могут выполнять разные контрагенты и, с другой стороны, одному контрагенту можно "назначить" несколько договоров: будет несколько строк на одного и того же контрагента, но в каждой строке свой ОсновнойДоговор).

Если коротко, то в моем варианте Ваша обработка работает без привлечения внутреннего (подчиненного) цикла; а отбор по наименованию (ОсновногоДоговора) я выполнил не по равенству, а по фрагменту строки (метод "Найти").

Alex56

Может вам это нужно критерии отбора. http://howknow1c.ru/programmirovanie-1c/kriterii-otbora-1s.html

Критерии отбора 1С

Критерии отбора 1С

Если у документа есть поле (реквизит), то по его значению можно отобрать все документы, в которых он встречается.

Это легко сделать с помощью запроса.

Вопросы начинаются, когда мы хотим отобрать разные документы по одному значению. Например, у нас есть контрагент (хороший парень) и мы хотим посмотреть все документы, которые были с ним оформлены - и отгрузки, и платежки.

1.kriterii-otbora-1s.png

Как это сделать?

Критерии отбора 1С

Критерии отбора 1С позволяют искать разные объекты 1С - справочники, документы - по значению.

Например в разных документах есть поле Контрагент. Мы можем сделать критерий отбора 1С ПоискПоКонтрагенту и находить любые документы, в которых указан определенный контрагент.

Критерии отбора 1С находятся в дереве объектов конфигурации в ветке Общие/Критерии отбора 1С.

2.kriterii-otbora-1s.png

В свойствах нужно указать тип значения, которое будем искать. Например - справочник контрагенты (если будем искать контрагента) или справочник договоры контрагентов (если будем искать договор).

3.kriterii-otbora-1s.png

После этого на закладке Состав нужно выбрать список справочников и документов, в которых нужно искать.

4.kriterii-otbora-1s.png

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

Для работы пользователя с критерием отбора 1С нужно создать хотя бы одну форму. Критерии отбора 1С будут доступны во всех выбранных в Составе документов по кнопке Перейти, поэтому для работы нужна форма.

5.kriterii-otbora-1s.png

Использование критериев отбора 1С

После создания критерия отбора 1С его можно использовать в коде программ на языке 1С.

Рассмотрим пример:

  • Мы создали критерий отбора 1С
  • В типе мы указали Справочник.Контрагенты
  • В составе указали все документы, установив галочки на реквизиты шапки этих документов с названием Контрагент.

В тексте программы на языке 1С мы можем запрограммировать поиск всех документов по контрагенту следующим способом:
СписокДокументовКонтрагента = КритерииОтбора.ДокументыКонтрагента.Найти( ИскомыйКонтрагент );

Аналогичный поиск можно сделать через запрос со следующим текстом:

Запрос = Новый Запрос();
Запрос.ТекстЗапроса = "ВЫБРАТЬ Ссылка ИЗ КритерийОтбора. ДокументыКонтрагента( &ИскомыйКонтрагент )";
Запрос.УстановитьПараметр("ИскомыйКонтрагент", ИскомыйКонтрагент);


Проголосовать за этот пост:

loading.gif Загрузка...

Posted in Программирование 1С Tagged Объекты 1С

Нужно постоянно трудиться.

sail

Спасибо всем за участие. Я разобралась сама.:zebzdr:

Теги:

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

Рейтинг@Mail.ru

Поиск