8.х Помогите найти физическую таблицу

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем AlenkaInt, 13 авг 2012.

  1. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Прочитала Молодым специалистам на заметку. Понравился пункт 2. - Если у вас нет четкого понимания вопроса, который вы хотите задать, скорее всего, даже если опытный товарищ умудрится на него ответить – ответ вы не поймете. Прямо про меня :)
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Так, на глаз вроде хорошо. Единственно в последнем запросе сами поля Приход и Расход выбирать не надо, они в нем не потребуются, потребуется только поле Оборот.

    Теперь постараюсь обЪяснить как получить нарастающие итоги (шаг 4):
    НАПРИМЕР у вас есть такие исходные данные:
    ПЕРИОД__________КОЛИЧЕСТВО
    01.01.2012__________10
    01.02.2012__________12
    01.03.2012__________5


    Для решения вашей задачи вам надо получить нарастающий остаток для каждой строки, т.е. результат у вас должен быть такой:
    ПЕРИОД_____ОСТАТОК ДО__КОЛИЧЕСТВО__ОСТАТОК ПОСЛЕ
    01.01.2012______0_________10___________10
    01.02.2012_____10_________12___________22
    01.03.2012_____22__________5___________27


    Такого результата можно добиться сделав левое соединение таблицы к самой себе, т.е. смотрите, соединяете исходные данные левым соединением, условие ставите на период:

    Код:
    ////////////////////////////////////////////////////////////////////////////////
    "ВЫБРАТЬ
    ИсходныеДанные.Период,
    ИсходныеДанныеКопия.Период КАК Период1,
    ИсходныеДанные.Количество,
    ИсходныеДанныеКопия.Количество КАК Количество1
    ИЗ
    ИсходныеДанные КАК ИсходныеДанные
    ЛЕВОЕ СОЕДИНЕНИЕ ИсходныеДанные КАК ИсходныеДанныеКопия
    ПО ИсходныеДанные.Период > ИсходныеДанныеКопия.Период"
    Если теперь посмотрите результат, то увидите такого вида выборку:
    ПЕРИОД________ПЕРИОД 1__КОЛИЧЕСТВО__КОЛИЧЕСТВО 1
    01.01.2012_______-_________10_____-
    01.02.2012__01.01.2012_____12_____10
    01.03.2012__01.01.2012_____5______10
    01.03.2012__01.02.2012_____5______12
    Советую взять бумажку и нарисовать и посмотреть как получаются такие данные.

    Теперь колонку ПЕРИОД1 мысленно уберите, и посмотрите на оставшиеся 3 колонки, если теперь мы сгруппируем данные по колонке ПЕРИОД, и по КОЛИЧЕСТВО, то получим начальный остаток на каждую дату.
    Код:
    "ВЫБРАТЬ
    ИсходныеДанные.Период,
    ИсходныеДанные.Количество,
    СУММА(ИсходныеДанныеКопия.Количество) КАК КоличествоДо
    ИЗ
    ИсходныеДанные КАК ИсходныеДанные
    ЛЕВОЕ СОЕДИНЕНИЕ ИсходныеДанные КАК ИсходныеДанныеКопия
    ПО ИсходныеДанные.Период > ИсходныеДанныеКопия.Период
    СГРУППИРОВАТЬ ПО
    ИсходныеДанные.Период,
    ИсходныеДанные.Количество"
    

    Чтобы получить конечный остаток, надо при группировке каждый раз прибавлять к начальному остатку Количество в этой строке выборки:
    Код:
    "ВЫБРАТЬ
    ИсходныеДанные.Период,
    ИсходныеДанные.Количество,
    СУММА(ЕСТЬNULL(ИсходныеДанныеКопия.Количество, 0)) КАК КоличествоДо
    СУММА(ЕСТЬNULL(ИсходныеДанныеКопия.Количество, 0)) + ИсходныеДанные.Количество КАК КоличествоПосле
    ИЗ
    ИсходныеДанные КАК ИсходныеДанные
    ЛЕВОЕ СОЕДИНЕНИЕ ИсходныеДанные КАК ИсходныеДанныеКопия
    ПО ИсходныеДанные.Период > ИсходныеДанныеКопия.Период
    СГРУППИРОВАТЬ ПО
    ИсходныеДанные.Период,
    ИсходныеДанные.Количество"
    

    Это был пример.
    Теперь сделайте то же самое, уже для вашего задания с вашими данными (последний запрос также помещаете во временную таблицу, и работаете уже с ней). При соединении и группировке таблиц учтите, что у вас есть еще и измерение Номенклатура.
  3. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Вот с номенклатурой пока непонятки. Делать буду без нее пока.
  4. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Сделала. Только почему в Оборотах(Количество) есть отрицательные числа.
    Код:
    ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(ТоварыНаСкладах.Период, ДЕНЬ) КАК Период,
    ТоварыНаСкладах.Номенклатура,
    ТоварыНаСкладах.ВидДвижения,
    ТоварыНаСкладах.ВНаличии
    ПОМЕСТИТЬ ИсходныеДанные
    ИЗ
    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    ;
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    СУММА(ВЫБОР
    КОГДА ИсходныеДанные.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
    ТОГДА ИсходныеДанные.ВНаличии
    ИНАЧЕ 0
    КОНЕЦ) КАК Приход,
    СУММА(ВЫБОР
    КОГДА ИсходныеДанные.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
    ТОГДА ИсходныеДанные.ВНаличии
    ИНАЧЕ 0
    КОНЕЦ) КАК Расход,
    ИсходныеДанные.Номенклатура КАК Номенклатура,
    ИсходныеДанные.Период КАК Период
    ПОМЕСТИТЬ ПриходРасход
    ИЗ
    ИсходныеДанные КАК ИсходныеДанные
    СГРУППИРОВАТЬ ПО
    ИсходныеДанные.Номенклатура,
    ИсходныеДанные.Период
    ;
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПриходРасход.Период КАК Период,
    ПриходРасход.Номенклатура,
    ПриходРасход.Приход - ПриходРасход.Расход КАК Оборот
    ПОМЕСТИТЬ Обороты
    ИЗ
    ПриходРасход КАК ПриходРасход
    ;
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Обороты.Период КАК Период,
    СУММА(ЕСТЬNULL(Обороты1.Оборот, 0)) КАК КоличествоДо,
    Обороты.Оборот,
    СУММА(ЕСТЬNULL(Обороты1.Оборот, 0)) + Обороты.Оборот КАК КоличествоПосле
    ИЗ
    Обороты КАК Обороты
    ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты1
    ПО Обороты.Период > Обороты1.Период
    СГРУППИРОВАТЬ ПО
    Обороты.Оборот,
    Обороты.Период
  5. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Стала анализировать результат. Почему то нет нулевых начальных остатков. Я беру выборку за все время, по идее должны быть нулевые начальные остатки.
  6. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Номенклатуру добавила. Решила сделать запрос с помощью виртуальной таблицы, чтобы посмотреть что должно получиться в результате. Получается как надо. Кроме полей Начальный и, соответственно, КонечныйОстаток. Где начальный правильный, то и конечный правильный.
  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    По дате выборку упорядочили?

    Покажите запрос.

    Не понял. Где неправильно? В выборке из виртуальной таблицы? Почему в виртуальной то не правильно?
  8. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Еще стала просматривать отчет. И как то странно получается. В последующие дни нач.остатки увеличиваются. На какие то совершенно не понятные цифры.
  9. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Например
    31.01 Женские ботфорты конечный остаток -76 шт.
    01.04 уже начальный 8 683, а конечный 8 632,
    02.04. начальный 9 596,7, конечный 9 593,7,
    05.04 начальный 13 633,4, конечный 13 628,4
    И так до 15 тысяч.

    Нет, в виртуальной правильно.
    Вот запрос.
    Код:
    ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(ТоварыНаСкладах.Период, ДЕНЬ) КАК Период,
    ТоварыНаСкладах.Номенклатура,
    ТоварыНаСкладах.ВидДвижения,
    ТоварыНаСкладах.ВНаличии
    ПОМЕСТИТЬ ИсходныеДанные
    ИЗ
    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    ;
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    СУММА(ВЫБОР
    КОГДА ИсходныеДанные.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
    ТОГДА ИсходныеДанные.ВНаличии
    ИНАЧЕ 0
    КОНЕЦ) КАК Приход,
    СУММА(ВЫБОР
    КОГДА ИсходныеДанные.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
    ТОГДА ИсходныеДанные.ВНаличии
    ИНАЧЕ 0
    КОНЕЦ) КАК Расход,
    ИсходныеДанные.Номенклатура КАК Номенклатура,
    ИсходныеДанные.Период КАК Период
    ПОМЕСТИТЬ ПриходРасход
    ИЗ
    ИсходныеДанные КАК ИсходныеДанные
    СГРУППИРОВАТЬ ПО
    ИсходныеДанные.Номенклатура,
    ИсходныеДанные.Период
    ;
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПриходРасход.Период КАК Период,
    ПриходРасход.Номенклатура,
    ПриходРасход.Приход - ПриходРасход.Расход КАК Оборот
    ПОМЕСТИТЬ Обороты
    ИЗ
    ПриходРасход КАК ПриходРасход
    ;
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Обороты.Период КАК Период,
    Обороты.Номенклатура,
    СУММА(ЕСТЬNULL(Обороты1.Оборот, 0)) КАК НачОстаток,
    СУММА(ЕСТЬNULL(Обороты1.Оборот, 0)) + Обороты.Оборот КАК КонОстаток,
    Обороты.Оборот
    ИЗ
    Обороты КАК Обороты
    ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты1
    ПО Обороты.Период > Обороты1.Период
    СГРУППИРОВАТЬ ПО
    Обороты.Оборот,
    Обороты.Период,
    Обороты.Номенклатура
    УПОРЯДОЧИТЬ ПО
    Период
    Я по дате не упорядочивала, я взяла за все время.
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Не видя данных - затрудняюсь сказать, что не так. Еще раз, последняя выборка по дате упорядочена?
    Нет, не правильно последний запрос. При соединении таблиц надо так же учитывать измерение номенклатура.
  11. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    По периоду или по дате?

    Вы имеете в ввиду на закладке Связи?
  12. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну в данном случае период и дата у вас это одно и то же. Я обновил пост.
    Еще раз: когда соединяете две таблицы в вашем случае нарастающие итоги ведь надо считать не просто произвольно по всей выборке, а в разрезе каждой позиции номенклатуры, т.е. нужно добавить еще одно условие соединения, так чтобы соединение происходило в том случае, если номенклатура в строках таблиц, участвующих в соединении, совпадает.

    И еще, если вы выбираете поле Номенклатура, то упорядочить нужно сначала по полю номенклатура, и только потом по периоду.

    да
  13. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Такое соединение называется внутренним? Когда я добавляю внутреннее соединение по номенклатуре, почему перове по периоду тоже становится внутренним.. Смотрю в отчет. Исчезли строчки номенклатуры, где нулевой начальный остаток.
    Вот последний запрос
    Код:
    ВЫБРАТЬ
    Обороты.Период КАК Период,
    Обороты.Номенклатура,
    СУММА(ЕСТЬNULL(Обороты1.Оборот, 0)) КАК НачОстаток,
    СУММА(ЕСТЬNULL(Обороты1.Оборот, 0)) + Обороты.Оборот КАК КонОстаток,
    Обороты.Оборот
    ИЗ
    Обороты КАК Обороты
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Обороты КАК Обороты1
    ПО Обороты.Период > Обороты1.Период
    И Обороты.Номенклатура = Обороты1.Номенклатура
    СГРУППИРОВАТЬ ПО
    Обороты.Оборот,
    Обороты.Период,
    Обороты.Номенклатура
    УПОРЯДОЧИТЬ ПО
    Период
    Но в остальном вроде правильно.. Надо сейчас разобраться, куда делись строчки.
  14. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Делаю по вашему совету на бумажке. До момента все понятно.

    Если теперь посмотрите результат, то увидите такого вида выборку:
    ПЕРИОД________ПЕРИОД 1__КОЛИЧЕСТВО__КОЛИЧЕСТВО 1
    01.01.2012_______-_________10_____-
    01.02.2012__01.01.2012_____12_____10
    01.03.2012__01.01.2012_____5______10
    01.03.2012__01.02.2012_____5______12
    Советую взять бумажку и нарисовать и посмотреть как получаются такие данные.

    Теперь колонку ПЕРИОД1 мысленно уберите, и посмотрите на оставшиеся 3 колонки, если теперь мы сгруппируем данные по колонке ПЕРИОД, и по КОЛИЧЕСТВО, то получим начальный остаток на каждую дату.
    У меня получилось так:
    Период Количество Количество1
    01.01.2012 10 -
    01.02.2012 12 10
    01.03.2012 5 22
    Так получается?
  15. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Нет. Тип соединения таблиц и условия соединения таблиц это разные вещи.

    Чтобы понять куда делись строчки вам надо посмотреть какие бывают типы соединения таблиц. (внутреннее, левое, полное). Посмотрите чем они отличаются, тогда вопрос "куда делись строчки" будет для вас решен.


    После группировки да, получается так. При условии использовании ЛЕВОГО соединения таблиц. Если вы используете ВНУТРЕННЕЕ соединение, результат будет немного другой.
  16. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Ааа, да, вы писали про условие.. Вот так можно?
    Код:
    ВЫБРАТЬ
    Обороты.Период КАК Период,
    Обороты.Номенклатура,
    СУММА(ЕСТЬNULL(Обороты1.Оборот, 0)) КАК НачОстаток,
    СУММА(ЕСТЬNULL(Обороты1.Оборот, 0)) + Обороты.Оборот КАК КонОстаток,
    Обороты.Оборот
    ИЗ
    Обороты КАК Обороты
    ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты1
    ПО (Обороты.Период > Обороты1.Период
    И Обороты.Номенклатура = Обороты1.Номенклатура)
    СГРУППИРОВАТЬ ПО
    Обороты.Оборот,
    Обороты.Период,
    Обороты.Номенклатура
    УПОРЯДОЧИТЬ ПО
    Период
  17. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Да.
    Точнее даже нужно.
  18. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Ну хоть что то начало получаться :) Пойду сдаваться!
  19. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Удачи.. :)


    З.Ы.
    Только 5-й шаг не забудьте, вам еще Приход-Расход и Остатки обЪединить надо.
  20. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    shurikvz!Большое спасибо! Я сдала эту задачу. Мне только стало немного стыдно.. Я ведь ее практически не решала. А меня теперь за умную считают.

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