Как в скд суммировать итоги только по нескольким группировкам 1с
Данная публикация не охватывает абсолютно все случаи жизни и не является единственно правильной, или вообще правильной, для решения конкретно ваших задач. Здесь просто описан простой способ получения определенного результата в конкретных условиях. Возможно вам он тоже подойдет.
Для начинающего программиста создание отчетов на СКД зачастую является делом не тривиальным. И не только потому, что изучение СКД не входит в общий курс обучения программированию 1с, но и потому, что являясь достаточно разветвленной и самостоятельной подсистемой конфигуратора, имеет свои особенности. Многие рекомендуют изучать книгу Хрусталевой "Разработка сложных отчетов в 1с Предприятии. Система компоновки данных". Именно эта книга, и даже не вся, а только её начало, натолкнуло меня на путь решения задачи, которую до этого я безуспешно пытался решить в течении 2-х дней. Дело в понимании механизмов работы СКД.
Задача.
План выглядит годным, приступаем к реализации и на выходе получаем такую таблицу:
Обратите внимание, что общее количество заказанного и списанного по заявке не совпадает:
В общем случае так может быть, для этого отчет и делается, но не в этот раз. Также обратите внимание на то, что не совпадает запрошенное количество по конкретной заявке:
Убеждаемся в этом находя заявку, где количество списаний одно:
Да, для одного списания всё рассчитывается верно. Ошибка найдена: т.к заявка является группировкой, то для неё также рассчитывается ресурс "Количество по заявке". Становится понятно, что дело в том, что после отработки запрос фактически возвращает таблицу вида:
Таблица 1. Исходный запрос
Проект | Материал | Заказ | Списание | Кол-во заказ | Кол-во списание |
141218АСС | Брус | ДокументЗаказа | ДокументСписания№1 | 600 | 108 |
141218АСС | Брус | ДокументЗаказа | ДокументСписания№2 | 600 | 18 |
141218АСС | Брус | ДокументЗаказа | ДокументСписания№3 | 600 | 72 |
141218АСС | Брус | ДокументЗаказа | ДокументСписания№4 | 600 | 402 |
В этом месте начинаются поиски в интернете и придумывание способов вычислить сумму заказов в пределах одного проекта чтобы потом подставить её в вычисление ресурса с агрегатной функцией макс. или мин. или тому подобных вещей. В любом случае мы приходим к необходимости усложнения исходного запроса для того, чтобы поля детальных записей не дублировались, т.к. ресурсы вычисляются именно по детальным записям.
Решение.
Как обычно постое, реализуемое за 10 минут с перекурами, если точно (не примерно, а точно) знать что и как работает.
Как я писал в начале, система компоновки данных сложная и развита система внутри платформы. Это целый отдельный механизм. Одной из функциональных особенностей этой системы является механизм связей наборов данных:
Начав читать указанную выше книгу Хрусталевой, мы понимаем, что механизм связей наборов данных является чем-то вроде "внутреннего запроса СКД". Т.е. с помощью него можно соединить данные из нескольких источников по неким критериям в единую таблицу, при этом сами исходные данные будут рассматриваться отдельно друг от друга как самостоятельные.
Таблица 2. Документы заказа
Проект | Материал | Документ заказа | Кол-во заказ |
141218АСС | Брус | ДокументЗаказа | 600 |
и таблицу с документами списаний :
Таблица 3. Документы списаний
Номенклатура | Документ списания | Кол-во списание | Документ-Основание |
Брус | ДокументСписания№1 | 108 | ДокументЗаказа |
Брус | ДокументСписания№2 | 18 | ДокументЗаказа |
Брус | ДокументСписания№3 | 72 | ДокументЗаказа |
Брус | ДокументСписания№4 | 402 | ДокументЗаказа |
Ну и указать ресурсы:
Читайте также: