8.х Выборка документов

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

  1. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, уважаемы специалисты. Подскажите пожалуйста, как правильно сделать. Есть задача: сделать обработку, которая выбирает все документы одного вида(например, Оказание Услуги), которые являются проведенными и в некотором интервале дат. Даты задаются в форме. Я поместил два поля ввода, соответственно назвал их "Начало" и "конец". В обработчике написал код:
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Вставить содержимое обработчика.
    Выборка=Документы.ОказаниеУслуги.Выбрать(ЭлементыФормы.Начало, ЭлементыФормы.Конец);
    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Дата);
    КонецЦикла;
    КонецПроцедуры
    
    
    При выполнении в режиме Предприятия получил ошибку:
    Ошибка при вызове метода контекста (Выбрать): Несоответствие типов (параметр номер '1')
    Выборка=Документы.ОказаниеУслуги.Выбрать(ЭлементыФормы.Начало, ЭлементыФормы.Конец);
    . Как правильно надо сделать? и как указать в параметрах отбора признак проведения документа?
  2. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |	РеализацияТоваровУслуг.Ссылка
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг");
    Запрос.УстановитьПараметр(ДатаНач, ДатаНач);
    Запрос.УстановитьПараметр(ДатаКон, ДатаКон);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Ссылка.Дата);
    КонецЦикла;
    
    КонецПроцедуры
    
    
  3. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    688
    Симпатии:
    8
    Баллы:
    29
    а хде параметры в запросе?


    Никак.
    <Отбор> (необязательный)
    Тип: Структура. Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры - значение отбора по этому полю. В качестве полей для отбора могут задаваться только поля "Дата" и реквизиты документа, для которых в конфигураторе признак индексирования установлен в значение "Индексировать" или в значение "Индексировать с доп. упорядочиванием".

    Лучше запрос, но только правильный

    Код:
    "ВЫБРАТЬ
    |	РеализацияТоваровУслуг.Дата
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |	РеализацияТоваровУслуг.Проведен
    |	И РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаН И &ДатаК"
    
  4. Наташа
    Offline

    Наташа Опытный в 1С

    Регистрация:
    14 авг 2010
    Сообщения:
    1.442
    Симпатии:
    2
    Баллы:
    29
    ЭлементыФормы.Начало - это поле ввода на форме, а передавать нужно значение, которое в этом поле : )
    Пишите ЭлементыФормы.Начало.Значение ; )
  5. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    я так тоже делал - запросом. В этом случае, как я понимаю, я получаю таблицу значений. Эту таблицуя вывел на формув табличное поле. Наформе есть поле выора с действиями над документом. Выбранному документу надо или отменить проведение или пометить на удаление.В выборке эти свойства устанавливаются - видно в форме.А как сделать так, чтоб для документа, проведенного в системе это установилось тоже?Например, если я отменил проведение, то это бы не только в результате запроса с документом произошло. А то получается, если я вывел результат запроса, выбрал в табличном поле документ, поставил значение свойства Проведен=Ложь и заново выполню запрос, то я получу на экране тот же документ со значением Проведен=Истина. Надо же, чтоб этого не происходило,чтоб документ с отменой проведения в выборку не попал...
    Код:
    НоваяСтрока=ЭлементыФормы.СписокДокументов.ТекущаяСтрока;
    Если (НоваяСтрока.Проведен=Истина) И (ЭлементыФормы.Действие.Значение="Проведение") Тогда 
    Сообщить("Документ Был проведен ранее")                        
    Иначе
    Если (Не НоваяСтрока.Проведен=Истина) И (ЭлементыФормы.Действие.Значение="Проведение") Тогда
    НоваяСтрока.Проведен=Истина;
    //НовыйДок=Документы.РеализацияТоваровУслуг.НайтиПоНомеру(НоваяСтрока.Номер).ПолучитьОбъект();
    //НовыйДок.Проведен=Истина;
    Сообщить("Выбрано проведение документа");
    КонецЕсли;
    КонецЕсли;
    Если (НоваяСтрока.Проведен=Истина) И (ЭлементыФормы.Действие.Значение="ОтменаПроведения") Тогда 
    //НовыйДок=Документы.РеализацияТоваровУслуг.НайтиПоНомеру(НоваяСтрока.Номер).ПолучитьОбъект();
    //НовыйДок.Проведен=Ложь;	
    Сообщить("Выбрана отмена проведения");
    НоваяСтрока.Проведен=Ложь;
    Иначе
    Если (Не НоваяСтрока.Проведен=Истина) И (ЭлементыФормы.Действие.Значение="ОтменаПроведения") Тогда
    //ВыбраннаяСтрока.Проведен=Ложь;
    Сообщить("документ не был проведен");
    КонецЕсли;
    КонецЕсли;
    
    Если (НоваяСтрока.ПометкаНаУдаление=Истина) И (ЭлементыФормы.Действие.Значение="ПометкаУдаления") Тогда 
    Сообщить("Документ ранее был помечен на удаление");	
    Иначе                                
    Если (Не НоваяСтрока.ПометкаНаУдаление=Истина) И (ЭлементыФормы.Действие.Значение="ПометкаУдаления") Тогда
    Сообщить("Выбрана пометка на удаление документа");
    НоваяСтрока.ПометкаНаУдаление=Истина;
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры
    
    Вот этим кодом я пытался проводить действия с выбранными запросом документами...ЭлементыФормы.Действие - это список выбора



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

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Процедура СборДанныхНажатие(Элемент)

    ДатаЗаказов=КонецДня(ТекущаяДата());

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЗаказПокупателя.Ссылка,
    | ЗаказПокупателя.Номер
    |ИЗ
    | Документ.ЗаказПокупателя КАК ЗаказПокупателя
    |ГДЕ
    | (ЗаказПокупателя.Дата МЕЖДУ &ДатаН И &ДатаК)
    | И (ЗаказПокупателя.Проведен)";

    Запрос.УстановитьПараметр("ДатаН", ДатаЗаказов);
    Запрос.УстановитьПараметр("ДатаК", ДатаЗаказов);

    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Ссылка.Дата + " " + Выборка.Ссылка.нрСтатусЗаказа);
    КонецЦикла;

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

    В сообщении ничего не выводится.

    Если в запросе убираю условие с датой, то все документы выводятся за всё время. в чём проблема?
  7. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Ну, все правильно.
    Вы выбираете документы за период. А период по сути - одна секунда - 15.07.2015 23:59:59.
    Видимо, нет документов с такой датой.
    ProfforG нравится это.
  8. ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Спасибо, всё получилось!

    Процедура СборДанныхНажатие(Элемент)
    ДатаЗаказов=ТекущаяДата();
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЗаказПокупателя.Ссылка,
    | ЗаказПокупателя.Номер
    |ИЗ
    | Документ.ЗаказПокупателя КАК ЗаказПокупателя
    |ГДЕ
    | (ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаКонец)
    | И (ЗаказПокупателя.Проведен)";

    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаЗаказов));
    Запрос.УстановитьПараметр("ДатаКонец", КонецДня(ДатаЗаказов));

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Ссылка.Дата);
    КонецЦикла;
    КонецПроцедуры

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