7.7 Надо научиться и разобраться

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

  1. TopicStarter Overlay
    Борис Бритва
    Offline

    Борис Бритва

    Регистрация:
    30 авг 2006
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    В двух словах предыстория: надо изучить и уже надо решать задачи. Опыт программирования имею, в 1С залез тока сегодня с утречка. И вот у меня задачка, нуно сделать отчет по продажам (изучаю комплексную). Примерно такого типа:
    -------------
    Отчет за период такой-то
    Клиент 1 - сумма за период
    Товар 1 - документ № - от такого-то - на сумму
    Товар 2 -..
    Клиент 2 -...
    .....
    -------------
    Покопавшись я нашел такую замечательную штуку как регистры, быстренько забил немного данных в базу и пробую их оттуда достать. Слазил посмотрел код в встроенном отчете "Отчет по клиентам" и понят, что разбирая на таком примере я буду неделю ковырятся.
    Собственно 1 вопрос таков: к какому регистру лучше сочинять запрос, чтоб получить нужный мне результат? Или надо к нескольким?

    Что-то подобное хочу научится уже к вечеру создавать.

    Вложения:

    • table.JPG
      table.JPG
      Размер файла:
      139,1 КБ
      Просмотров:
      161
  2. Vodovolfram
    Offline

    Vodovolfram

    Регистрация:
    30 авг 2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Если я не ошибаюсь то в комплексной есть такой регистр Взаиморасчеты - вот к нему и обращайся -по суммы :)
  3. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    Ну раз решил разобраться самостоятельно, то выкладывать пример не буду.
    Так то конструктором отчетов делается за 10 минут
    Посмотри регистр Продажи. Там ведется учет и в разрезе Номенклатуры и Покупателей
  4. TopicStarter Overlay
    Борис Бритва
    Offline

    Борис Бритва

    Регистрация:
    30 авг 2006
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Я чет не могу сообразить (видимо от обилия инфы, все утро ковырял code встроенных отчетов, а там наворочено..) - не совсем понимаю вот что:
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Товар = Регистр.Продажи.Номенклатура;
    |Покупатель = Регистр.Продажи.Покупатель;
    |";
    ..если написать например так, то что мы в "Товар" получаем? Набор товаров по событию (не знаю как по др написать) в регистре продаж? Как прально перебор "Покупатель - товар-товар" сделать? Вроде как еще нуно указать группировку для перебора, брр голова кругом.
  5. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    Воспользуйся конструктором отчетов. А потом проанализируй то что получится

    Вот что выдает конструктор
    Код:
    //*******************************************
    // Процедура генерации запроса Сформировать.
    //
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Номенклатура = Регистр.Продажи.Номенклатура;
    |Покупатель = Регистр.Продажи.Покупатель;
    |ТекущийДокумент = Регистр.Продажи.ТекущийДокумент;
    |Количество = Регистр.Продажи.Количество;
    |Функция КоличествоСумма = Сумма(Количество);
    |Группировка Покупатель;
    |Группировка Номенклатура;
    |"//}}ЗАПРОС;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    // Заполнение полей Покупатель
    Таб.ВывестиСекцию("Покупатель");
    Пока Запрос.Группировка(2) = 1 Цикл
    // Заполнение полей Номенклатура
    Таб.ВывестиСекцию("Номенклатура");
    КонецЦикла;
    КонецЦикла;
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
    КонецПроцедуры
    
    
    
  6. TopicStarter Overlay
    Борис Бритва
    Offline

    Борис Бритва

    Регистрация:
    30 авг 2006
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Блин, упростил до предела, но все равно не хочет работать.

    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;    
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Запрос)
    |Покупатель = Регистр.Продажи.Покупатель;   
    |Количество = Регистр.Продажи.Количество;
    |Функция КоличествоСумма = Сумма(Количество);
    |Группировка Покупатель;
    |";    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Запрос");
    Таб.ВывестиСекцию("Заголовок");
    Пока Запрос.Группировка(1) = 1 Цикл
    Таб.ВывестиСекцию("Покупатель");
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Отчет по продажам", "");    
    КонецПроцедуры
    
    
    В чем косяк то? Данные забиты в конфу норм, выше есть скрин чужого отчета с ними.
  7. TopicStarter Overlay
    Борис Бритва
    Offline

    Борис Бритва

    Регистрация:
    30 авг 2006
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    И еще если добавить в запрос такую крень:
    Код:
    |с (НачМесяца(ТекущаяДата())) по (КонМесяца(ТекущаяДата()));
    
    
    то ругается:
    Код:
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    {Отчет._последний.Форма.Модуль(24)}: Невозможно обращение к итогам после ТА
    
    
    
    ...
  8. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    Действительно будет ошибка. Регистры рассчитаны только до точки актуальности. Поэтому сделать надо так
    Код:
    ДатаНач = НачМесяца(ТекущаяДата());
    ДатаКон = Мин(НачМесяца(ТекущаяДата()), ПолучитьПозициюТА());
    ....
    |с ДатаНач по ДатаКон;
    
    

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