Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Дек 2017, 13:05
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Запрос на две даты из регистра  (Прочитано 6569 раз)

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

Оффлайн 3030

  • *
  • Сообщений: 29
  • РЕПУТАЦИЯ: 1
  • КПД: 3%
  • Регистрация: 2012-11-08
  • Сайт: 
  • Профессия: Ученик 1С
Здравствуйте снова! В общем такую задачу придумал. Надо взять из регистра сведений данные за одну дату, данные за другую дату (даты выбираются пользователем), сравнить значения и вывести те данные, где произошли изменения. Например - Значения Цена и Номенклатура, вывести то, где Цена изменилась. Как начинающий погромист, я пошел скорее всего неправильным путем:
Одним запросом заполнил таблицу значений на первую дату:
ТаблицаЗначенийНаПервуюДату = Новый ТаблицаЗначений;
ЗапросНаПервуюДату = Новый Запрос;
ЗапросНаПервуюДату.Текст = "ВЫБРАТЬ
                           | ЦеныСрезПоследних.Цена,
                           | ЦеныСрезПоследних.Номенклатура,
                           | ЦеныСрезПоследних.Период
                           |ИЗ
                           | РегистрСведений.Цены.СрезПоследних(&Дата1, ) КАК ЦеныСрезПоследних
                           |
                           |УПОРЯДОЧИТЬ ПО
                           | ЦеныСрезПоследних.Период";
ЗапросНаПервуюДату.УстановитьПараметр("Дата1",ЭлементыФормы.Дата1.Значение);
РезультатНаПервуюДату = ЗапросНаПервуюДату.Выполнить();
ТаблицаЗначенийНаПервуюДату = РезультатНаПервуюДату.Выгрузить();

Вторым запросом заполнил таблицу значений на вторую дату:
ТаблицаЗначенийНаВторуюДату = Новый ТаблицаЗначений;
ЗапросНаВторуюДату = Новый Запрос;
ЗапросНаВторуюДату.Текст = "ВЫБРАТЬ
                           | ЦеныСрезПоследних.Цена,
                           | ЦеныСрезПоследних.Номенклатура,
                           | ЦеныСрезПоследних.Период
                           |ИЗ
                           | РегистрСведений.Цены.СрезПоследних(&Дата2, ) КАК ЦеныСрезПоследних
                           |
                           |УПОРЯДОЧИТЬ ПО
                           | ЦеныСрезПоследних.Период";
ЗапросНаВторуюДату.УстановитьПараметр("Дата2", ЭлементыФормы.Дата2.Значение);
РезультатНаВторуюДату = ЗапросНаВторуюДату.Выполнить();
ТаблицаЗначенийНаВторуюДату = РезультатНаВторуюДату.Выгрузить();

Создал третью таблицу значений и пытаюсь в ней сравнивать первые две таблицы:
ТаблицаЗначенийОбщая = Новый ТаблицаЗначений;

ТаблицаЗначенийНаПервуюДату.ВыбратьСтроку();
ТаблицаЗначенийНаВторуюДату.ВыбратьСтроку();
Для Каждого Строка ИЗ ТаблицаЗначенийНаПервуюДату Цикл
Для Каждого Строка ИЗ ТаблицаЗначенийНаВторуюДату Цикл
Если ТаблицаЗначенийНаПервуюДату.Колонки.Цена <> ТаблицаЗначенийНаВторуюДату.Колонки.Цена ТОГДА
СтрокаТаблицаЗначенийОбщая = ТаблицаЗначенийОбщая.Добавить();
КонецЕсли;
КонецЦикла;
КонецЦикла;

И получается такой вопрос: что-то не получается у меня вывести эту общую таблицу, а второе - я подозреваю, что это можно как то сделать одним запросом с условием, но как, догадаться не могу((
Прикрепляю конфигурацию (1с 8.1), отчет, в котором творится это непотребство - "Выгрузка".


Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
А что вы хотите  добавлять в вашу общую таблицу значений???

Оффлайн 3030

  • *
  • Сообщений: 29
  • РЕПУТАЦИЯ: 1
  • КПД: 3%
  • Регистрация: 2012-11-08
  • Сайт: 
  • Профессия: Ученик 1С
А что вы хотите  добавлять в вашу общую таблицу значений???

Ну вот смотрите: например, на 22 число цены 1, 2, 3, а на 23 число цены уже будут 1, 6, 3. Хочу, чтобы вывелось то, что изменилось, то есть в данном случае цена - 6 и номеклатура, ей соответствующая. Как то так)

Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
Ну тогда это должно выглядеть как то так

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

Оффлайн 3030

  • *
  • Сообщений: 29
  • РЕПУТАЦИЯ: 1
  • КПД: 3%
  • Регистрация: 2012-11-08
  • Сайт: 
  • Профессия: Ученик 1С
или я туплю (что очень высоковероятно), но ругается на слово "поместить"

Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
Выложи текст выдаваемой ошибки

Оффлайн 3030

  • *
  • Сообщений: 29
  • РЕПУТАЦИЯ: 1
  • КПД: 3%
  • Регистрация: 2012-11-08
  • Сайт: 
  • Профессия: Ученик 1С
{Отчет.выгрузка1.Форма.ФормаОтчета(42)}: Ошибка при вызове метода контекста (Выполнить): {(5, 2)}: Синтаксическая ошибка "Поместить"
<<?>>Поместить ПерваяДата
   Результат = Запрос.Выполнить().Выгрузить();
по причине:
{(5, 2)}: Синтаксическая ошибка "Поместить"
<<?>>Поместить ПерваяДата

Добавлено: 26 Ноя 2012, 14:25

извиняюсь, это я затупил, просто перепечатал, а не конструктором сделал) Сейчас помучаю конструктор и скажу результат)

Последний раз редактировалось: 3030; 26 Ноя 2012, 14:25

Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
Выложи текст запроса. У тя где то синтакситческая ошикба. Запрос с помощью конструктора делали??

Оффлайн 3030

  • *
  • Сообщений: 29
  • РЕПУТАЦИЯ: 1
  • КПД: 3%
  • Регистрация: 2012-11-08
  • Сайт: 
  • Профессия: Ученик 1С
Новая ошибка нашлась! Вот такой вот запрос (конструкторный):
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | ЦеныСрезПоследних.Период,
               | ЦеныСрезПоследних.Номенклатура,
               | ЦеныСрезПоследних.Цена
               |ПОМЕСТИТЬ ПерваяДата
               |ИЗ
               | РегистрСведений.Цены.СрезПоследних(&Дата1, ) КАК ЦеныСрезПоследних
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | ЦеныСрезПоследних.Период,
               | ЦеныСрезПоследних.Номенклатура,
               | ЦеныСрезПоследних.Цена
               |ПОМЕСТИТЬ ВтораяДата
               |ИЗ
               | РегистрСведений.Цены.СрезПоследних(&Дата2, ) КАК ЦеныСрезПоследних
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | ПерваяДата.Цена КАК ПерваяЦена,
               | ПерваяДата.Номенклатура,
               | ПерваяДата.Период,
               | ВтораяДата.Цена КАК ВтораяЦена
               |ПОМЕСТИТЬ ИтоговаяТаблица
               |ИЗ
               | ПерваяДата КАК ПерваяДата
               | ПОЛНОЕ СОЕДИНЕНИЕ ВтораяДата КАК ВтораяДата
               | ПО ПерваяДата.Номенклатура = ВтораяДата.Номенклатура
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | ИтоговаяТаблица.ПерваяЦена,
               | ИтоговаяТаблица.Номенклатура,
               | ИтоговаяТаблица.Период КАК Период,
               | ИтоговаяТаблица.ВтораяЦена
               |ИЗ
               | ИтоговаяТаблица КАК ИтоговаяТаблица
               |ГДЕ
               | ИтоговаяТаблица.ПерваяЦена <> ИтоговаяТаблица.ВтораяЦена
               |
               |УПОРЯДОЧИТЬ ПО
               | ИтоговаяТаблица.Период";
Запрос.УстановитьПараметр("Дата1", ЭлементыФормы.Дата1);
Запрос.УстановитьПараметр("Дата2", ЭлементыФормы.Дата2);
Результат = Запрос.Выполнить().Выгрузить();
вот такая вот ошибка:

{Отчет.выгрузка2.Форма.ФормаОтчета(51)}: Ошибка при вызове метода контекста (Выполнить): {(7, 2)}: Ошибка обработки представления "РегистрСведений.Цены.СрезПоследних:Несоответствие типов (параметр номер ""1"")"
<<?>>РегистрСведений.Цены.СрезПоследних(&Дата1, ) КАК ЦеныСрезПоследних
   Результат = Запрос.Выполнить().Выгрузить();
по причине:
{(7, 2)}: Ошибка обработки представления "РегистрСведений.Цены.СрезПоследних:Несоответствие типов (параметр номер ""1"")"
<<?>>РегистрСведений.Цены.СрезПоследних(&Дата1, ) КАК ЦеныСрезПоследних

Оффлайн mixqn

  • Администратор
  • *****
  • Сообщений: 1346
  • РЕПУТАЦИЯ: 166
  • КПД: 12%
  • Who is John Galt?
  • Регистрация: 2012-08-15
  • Сайт: 3gmaster.net
  • Профессия: Программист 1С
Новая ошибка нашлась
ну логично. вы пытаетесь вместо даты передать в запрос элемент формы
Запрос.УстановитьПараметр("Дата1", ЭлементыФормы.Дата1);
Запрос.УстановитьПараметр("Дата2", ЭлементыФормы.Дата2);

Добавлено: 26 Ноя 2012, 14:44

передавать надо не элемент формы, а его значение. смотрите, что указано в свойствах элементов формы - есть там пункт такой "Данные" - там указано имя реквизита, связанного с элементом формы. вот это самое имя вам и надо использовать в коде. ну или, если уж на то пошло, можно и через элементы формы, как у вас (хотя это через одно место...), но тогда надо еще дописать ".Значение"


 

Запрос Параметры для "ИЗ"

Автор БерезинРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 2998
Последний ответ 15 Май 2013, 23:27
от Березин
Что быстрее: Загрузить табличную часть в запрос и там добавить колонки, или пробежаться циклом по ТЧ и добавить значения в колонки

Автор ZeedРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 985
Последний ответ 11 Июл 2016, 09:00
от vitasw
Запрос по обработке "Согласование заявок"

Автор DenielAkreedРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 687
Последний ответ 29 Сен 2016, 02:39
от DenielAkreed
8.2 Бух. Запрос с условием "комментарий содержит текст"

Автор bolobolРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 13
Просмотров: 16548
Последний ответ 02 Сен 2011, 01:14
от bolobol
Ошибка "Построенный запрос к СУБД использует слишком много таблиц"

Автор Marta_LiРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 10
Просмотров: 8056
Последний ответ 03 Дек 2012, 14:04
от MuI_I_Ika

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
177 Сообщений
ilyay ilyay
69 Сообщений
oleg-x
48 Сообщений
alex0402
46 Сообщений
AIFrame
46 Сообщений
andron81_81
41 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
Golickoff Golickoff
31 Сообщений
BuhRust
30 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 779
  • Точка Скрытых: 0
  • Точка Пользователей: 12
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal