Снова новичек просит помощи. Цены и товар.

Тема в разделе "1C и всё что с ней связано", создана пользователем NocturnalMortum, 19 май 2010.

  1. NocturnalMortum

    NocturnalMortum Гость

    Доброго времени суток уважаемые специалисты. Не могу справится с задачей. Задача такова: нужно за определенный промежуток времени получить сколько и на какую сумму было продано определенного товара, как в единицах так и группами (к примеру 1 процессор Intel I3 или вся продукция Intel). У меня не получается привязаться по ТМЦ. Прошу помощи. Вот мой код(ВыбНоменклатура реквизит):
    Код ( (Unknown Language)):
       
    Запрос=СоздатьОбъект("Запрос");
    ТЗ.УдалитьСтроки(); 
    ТЗ.НоваяКолонка("ТМЦ");
    ТЗ.НоваяКолонка("Цена");
    ТЗ.НоваяКолонка("Количество");
    ТЗ.НоваяКолонка("Сумма");

    РегТовары = СоздатьОбъект("Регистр.Продажи");
    РегТовары.ВыбратьДвижения(НачДата, КонДата);
    Пока РегТовары.ПолучитьДвижение() = 1 Цикл
    //если ВыбНоменклатура=РегТовары.ТМЦ тогда
    ТЗ.НоваяСтрока();
    ТЗ.ТМЦ=РегТовары.ТМЦ;
    ТЗ.Цена=РегТовары.ПродСтоимость;
    ТЗ.Количество=РегТовары.Количество;
    ТЗ.Сумма=РегТовары.Количество*РегТовары.ПродСтоимость;
    //КонецЕсли;
    КонецЦикла;
    за ранее благодарен.
     
  2. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    А за позднее?
    Любезный, вопрос в чем?
    Вот, скажем, для чего вы создаете объект "Запрос", если потом его не используете?
     
  3. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Ну группы выбрать через движения очень сложно. Проще запросом. В принципе конструктор запроса за тебя почти всю работу сделает.
    получится что-то вроде.

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "Период С НачДата по КонДата;
    |Товар = Регистр.Продажи.ТМЦ;
    |Сум = Регистр.Товары.ПродСтоимость;
    |Кол = Регистр.Товары.Количество;
    |Группировка Товар;
    |Функция КолВо = Сумма(Кол);
    |Функция ИтСумма = Сумма(Сум);";
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");
    Пока запрос.Группировка(1) = 1 Цикл
    Таб.ВывестиСекцию("СтрокаГруппы");
    Если (Запрос.товар.ЭтоГруппа() = 0) и (Запрос.КолВо <>0) Тогда
    Цена = Запрос.ИтСумма/Запрос.КолВо;
    Иначе
    Цена = 0;
    КОнецЕсли;
    Таб.Вывести("СтрокаЭлемента");

    КонецЦикла;
    Таб.ВывестиСекцию("Итого");
    Таб.Опции(0,0,0,0);
    Таб.Показать("Таблица","");
     
  4. NocturnalMortum

    NocturnalMortum Гость

    Что же вы все со своим "поздним" то =)) Запрос остался, забыл удалить... пробовал и запросом делать. Вопрос в том что мне нужно по выбранной номенклатуре получить сколько продано это номенклатуры и по какой цене за период времени. Не получается у меня сам фильтр по номенклатуре. Все продажи выводит, а по одному или группе товаров не получается.
     
  5. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Добавить в запрос условие

    Условие (Товар в ВыбНоменклатура);

    ВыбНоменклатура вывести на форму .

    для регистра - читай УстановитьФильтр()
     
  6. NocturnalMortum

    NocturnalMortum Гость

    Мой запрос выглядел один в один как Ваш, только в условии стояло "="... и не работал так же как не работает Ваш =) Может я забыл где нибудь что нибудь указать? Руки то растут из района мозгов (а они находятся далеко не в голове =)))
     
  7. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Покажи полный текст запроса.

    а лучше выложи внешнюю обработку
     
  8. NocturnalMortum

    NocturnalMortum Гость

    ТекстЗапроса =
    "
    |Период с (НачДата) по (КонДата);
    |Количество = Регистр.Продажи.Количество;
    |Стоимость=Регистр.Продажи.ПродСтоимость;
    |ТМЦ = Регистр.Продажи.ТМЦ;
    |Группировка ТМЦ;
    |Условие (ТМЦ=ВыбНоменклатура);
    |Функция Сумма = Сумма(Стоимость);
    ";
     
  9. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    А выполнить Запрос не забыл ?
     
  10. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    1) лучше не называй результат выполнения функции аналогично самой функции.
    2) а количество суммовать не надо?
    3) " = " в условии ищет четкое соответствие, а " в " ищет вхождение в том числе и в иерархию.
    4) Ставь переменные измерений в запросе аналогично их положению в регистре - они не зря стоят в таком порядке.

    а так всё вроде правильно - может у тебя выбноменклатура обнуляется, или объявлена в модуле как переменная? проверь отладчиком перед звыполнением запроса чему равно её значение.

    Забыл ;-(
     
  11. NocturnalMortum

    NocturnalMortum Гость

    да, выполнил. Внешняя обработка:

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");
    Запрос.Выполнить(ТекстЗапроса);
    Пока запрос.Группировка(1) = 1 Цикл
    Таб.ВывестиСекцию("Строка");
    Товар=Запрос.ТМЦ;
    Стоимость=Запрос.Стоимость;
    Кол=Запрос.Количество;
     
  12. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    А вот эту реплику автор заметил, даже отметил, что уже отвечали подобным образом, только тогда было "за раннее", а теперь "за ранее".
    Естественно, подобное вызывает желание сотворить каламбур.
    И что, не подвигло заглянуть в учебник пятого класса, чтобы понять, как грамотно написать?
    Хоть и НОВИЧЕК, но непростительно писать так безграмотно
     
  13. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Лучше сохрани отчет в внешнюю обработку, переименуй в txt и выложи на форуме, а то испорченый телефон получается. Условие однозначно должно отрабатывать, ошибка похоже не в запросе. Конфа ТИС типовая?
     
  14. NocturnalMortum

    NocturnalMortum Гость

    Прошу прощения за мою безграмотность. Мой русский язык испорчен "албанским" и другими пагубными влияниями интернета. Я вижу для многих это принципиально. Впредь постараюсь синтаксических ошибок не допускать. Теперь по делу. Количество пока суммировать не надо, так как там есть и штуки и метры и упаковки, получится черти что... Проблема в том что Запрос формируется только по группам товаров, т.е. на отдельно выбранный товар он мне ничего не выдает. Конфигурация типовая. Как и просили прикрепляю *.тхт фаил.
     

    Вложения:

    • 4.txt
      Размер файла:
      33 КБ
      Просмотров:
      14
  15. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Всё он тебе дает - просто ты поставил вывод строчки в таблицу перед тем как определил переменные ТМЦ, колво, сумма и т.д. Разумеется на момент вывода строчки они пустые , а если выбрана группа товаров - то выводятся вообще данные с предыдущей позиции запроса.


    ещё один совет - нафиг тебе что-то переназначать переменным? Вставляй в таблицу непосредственно Запрос.товар, Запрос.Колво
     
  16. NocturnalMortum

    NocturnalMortum Гость

    Спасибо за помощь, впредь буду внимательнее... Теперь у меня появилась еще одна проблема, не могу получить покупную цену по этому же товару, когда начинаю формировать отчет выдает ошибку "Значение не представляет агрегатный объект (ТипНоменклатуры):8". Кстати я забыл Вам сказать что отчет внешний. Может я не из того регистра пытаюсь получить значение? Вот код:

    ТекстЗапроса = "Период С НачДата по КонДата;
    |Товар = Регистр.Продажи.ТМЦ;
    |Сум = Регистр.Продажи.ПродСтоимость;
    |Кол = Регистр.Продажи.Количество;
    |ПостТовар=Регистр.ПартииНаличие.ТМЦ;
    |ПостЦена=Регистр.ПартииНаличие.СуммаБух;
    |Группировка Товар;
    |Группировка ПостТовар;
    |Функция КолВо = Сумма(Кол);
    |Функция ИтСумма = Сумма(Сум);
    |Функция ПриходС = Приход(ПостЦена);
    |Условие ((Товар.ТипНоменклатуры <> Перечисление.ТипыНоменклатуры.Услуга) И (Товар.ТипНоменклатуры <> Перечисление.ТипыНоменклатуры.Работа));";
    Если ВыбНоменклатура.Выбран()=1 Тогда
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (Товар в ВыбНоменклатура);
    |";
    ТекстЗапроса=ТекстЗапроса+"
    |Условие (ПостТовар в Товар );
    |";
    КонецЕсли;
    Запрос.Выполнить(ТекстЗапроса);
     
  17. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Замени на
    |Условие ((Товар.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Услуга) И
    (Товар.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Работа));";
     
  18. NocturnalMortum

    NocturnalMortum Гость

    Такая же ошибка...
     
  19. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Запрос не понимает явное направление в тексте запроса на ссылочные данные конфигурации типа Перечисление.Тип.ВотТакой или Константа.БлаБлаБла.

    Перед выполнением запроса создай переменную, в которую пропиши нужное тебе значение, её же поставь и в условие.
     
  20. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Странно !
    Я родной, а потом свой кусок кода проверил в запросе на реальной базе (ТиС9.54), вставив его в отчет "ДинамикаПродаж". :)
    Родной, потому что поленился посмотреть устройство справочника (Там ТипНоменклатуры отсутствует, а ВидНоменклатуры есть)

    Может, у него измерение ТМЦ имеет не тип "Справочник.Номенклатура", а просто "Справочник" ?
     
Загрузка...
Похожие Темы - Снова новичек просит
  1. DoberGroup
    Ответов:
    0
    Просмотров:
    23
  2. vasnas
    Ответов:
    0
    Просмотров:
    959
  3. Antigo
    Ответов:
    4
    Просмотров:
    1.053
  4. freescape
    Ответов:
    0
    Просмотров:
    1.178
  5. 1ive
    Ответов:
    4
    Просмотров:
    3.186

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