Отчет называется: "Складской учет МПЗ за период"!!! Он выдает только конечные суммы за весь период! Мне необходимо сделать так, чтобы он выдовал сумму за каждый день а потом отдельно сумму за весь период! вот как-то так!
ТекРасшифровка = СоздатьОбъект("СписокЗначений");
Расшифровка.Выгрузить(ТекРасшифровка);
Если ВыводитьОстаткиСЦенами =1 Тогда
Если (Группировки.Пометка(Группировки.НайтиЗначение("МПЗ")) = 0) Тогда
Предупреждение("Отчет по остаткам МПЗ со стоимотью может быть сформирован
|только при условии, что отмечена группировка ""МПЗ""!",5);
Возврат;
КонецЕсли;
КонецЕсли;
Заголовок = "";
СписокГруппировок = СоздатьОбъект("СписокЗначений");
Запрос = СоздатьОбъект("Запрос");
Если ПроверкаДат() = 0 Тогда
Возврат;
ИначеЕсли ДатаКон >= ПолучитьДатуТА() Тогда
ПериодПо = "";
ПериодДляШапкиОтчета = Формат(ДатаНач, "Д ДДММГГГГ") + " - " + Формат(ПолучитьДатуТА(), "Д ДДММГГГГ") + " " + ПолучитьВремяТА(,,);
Иначе
ПериодДляШапкиОтчета = ПериодСтр(ДатаНач, ДатаКон);
ПериодПо = " по ДатаКон";
КонецЕсли;
// Андрей Пономарёв
ПриВыбореЕдОстатков();
// Конец А П
Если ПоказатьОстатки.ТекущаяСтрока() = 2 Тогда
Текст = "//{{ЗАПРОС(Складской учет свободного остатка МПЗ)
// |Период с ДатаНач" + ПериодПо + ";
|Период с ДатаНач по ДатаКон;
|ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
|МестоХранения = Регистр.МестаХранения.МестоХранения, Регистр.Резервы.МестоХранения;
|МПЗ = Регистр.МестаХранения.МПЗ, Регистр.Резервы.Номенклатура;
//|КоэфОбъБРез = Регистр.Резервы.Номенклатура.ОсновнаяЕдиницаИзмерения.КоэфОбБетонаОбр;
//|КоэфОбъИРез = Регистр.Резервы.Номенклатура.ОсновнаяЕдиницаИзмерения.КоэффициентОбр;
|Владелец = Регистр.МестаХранения.Владелец;
|Качество = Регистр.МестаХранения.Качество;
|ТекДок = Регистр.МестаХранения.ТекущийДокумент;";
Если ВыбЕдИзм = 2 Тогда
Текст = Текст + "
|Количество = Регистр.МестаХранения.ОбъемИзд;";
//|Резерв = (Регистр.Резервы.Количество * КоэфОбъИРез);";
ИначеЕсли ВыбЕдИзм = 3 Тогда
Текст = Текст + "
|Количество = Регистр.МестаХранения.ОбъемБет;";
//|Резерв = (Регистр.Резервы.Количество * КоэфОбъБРез);";
Иначе//Если ВыбЕдИзм = 1 Тогда
Текст = Текст + "
|Количество = Регистр.МестаХранения.Количество;
|Резерв = Регистр.Резервы.Количество;";
КонецЕсли;
//Текст = Текст + "
//";
Иначе
Текст = "//{{Запрос(Складской учет МПЗ)
|Период с ДатаНач"+ ПериодПо + ";
|ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
|МестоХранения = Регистр.МестаХранения.МестоХранения;
|МПЗ = Регистр.МестаХранения.МПЗ;
|Владелец = Регистр.МестаХранения.Владелец;
|Качество = Регистр.МестаХранения.Качество;
|ТекДок = Регистр.МестаХранения.ТекущийДокумент; ";
Если ВыбЕдИзм = 2 Тогда
Текст = Текст + "
|Количество = Регистр.МестаХранения.ОбъемИзд;"
ИначеЕсли ВыбЕдИзм = 3 Тогда
Текст = Текст + "
|Количество = Регистр.МестаХранения.ОбъемБет;"
Иначе//Если ВыбЕдИзм = 1 Тогда
Текст = Текст + "
|Количество = Регистр.МестаХранения.Количество;"
КонецЕсли;
КонецЕсли;
// определяем количество и значения функций, и их условия
Текст = Текст + ?(ВыводитьНачОст = 1, "Функция КолНачОст = НачОст(Количество);", "");
Текст = Текст + ?(ВыводитьПриход = 1, "Функция КолПриход = Приход(Количество);", "");
Текст = Текст + ?(ВыводитьРасход = 1, "Функция КолРасход = Расход(Количество);", "");
Текст = Текст + ?(ВыводитьКонОст = 1, "Функция КолКонОст = КонОст(Количество);", "");
//Текст = Текст + ?(ВыводитьВсеДаты = 1, "Функция ВсеДаты = ВсеДаты(Количество);", ""); // Дима Федосеев
Если ПоказатьОстатки.ТекущаяСтрока() = 2 Тогда
Текст = Текст + ?(ВыводитьКонОст = 1, "Функция РезКонОст = КонОст(Резерв);", "");
КонецЕсли;
Если ПоказатьОстатки.ТекущаяСтрока() = 2 Тогда
Текст = Текст + "Условие (Владелец = ПустойКонтрагент);"
Иначе
УстановитьУсловиеЗапроса(4, ФлажокУсловие4, МоноУсловие4, СписокУсловие4, "Владелец", Текст, Заголовок);
КонецЕсли;
Если Прав(Заголовок, 19) = "Выбранные условия: " Тогда
Заголовок = Заголовок + "нет.";
Иначе
Заголовок = Заголовок + ".";
КонецЕсли;
ПозМПЗ = СписокГруппировок.НайтиЗначение("МПЗ");
Если (ВидОтчета = 2) и (ПоказатьОстатки.ТекущаяСтрока() >= 3) Тогда
Если (ПозМПЗ = 0) Тогда
Предупреждение("Не выбрана группировка МПЗ!");
Возврат;
КонецЕсли;
КонецЕсли;
Запрос.Выполнить(Текст);
ИнформацияОСуммах = ""; // текст информации над таблицей
ТекстПредупреждения = ""; // текст предупреждения под таблицей
ЕстьПредупреждение = 0;
Если ВидОтчета = 2 Тогда
ПредставлениеПоказатьОстатки = "";
ПоказатьОстатки.ПолучитьЗначение(ПоказатьОстатки.ТекущаяСтрока(),ПредставлениеПоказатьОстатки);
Заголовок = Заголовок + РазделительСтрок + "Остаток на конец периода: " + ПредставлениеПоказатьОстатки + ".";
КонецЕсли;
// Для получения остатков с ценами.
Если ВыводитьОстаткиСЦенами = 1 Тогда
ТипЦеныДляМатериаловСтр = ?(ТипЦеныДляМатериалов.ТекущаяСтрока() = 1, "Отпускная","Покупная");
Если ТипыСуммы.ТекущаяСтрока() = 1 Тогда
ИнформацияОСуммах = "Стоимость в валюте " + глРубли;
ИначеЕсли ТипыСуммы.ТекущаяСтрока() = 2 Тогда
ИнформацияОСуммах = "Стоимость в валюте " + ТипЦеныДляНоменклатуры.Валюта;
КонецЕсли;
// строка действия, описание см выше.
Действие = СформироватьТаблицуОстатковСЦенами(СписокОстМПЗ)+" ";
ПредставлениеТипыСуммы = "";
ТипыСуммы.ПолучитьЗначение(ТипыСуммы.ТекущаяСтрока(),ПредставлениеТипыСуммы);
Заголовок = Заголовок + РазделительСтрок + "Стоимость: " + ПредставлениеТипыСуммы + ".";
КонецЕсли;
// Андрей Пономарёв
Если ВыбЕдИзм=2 Тогда
Заголовок = Заголовок + " в м3 изд.";
ИначеЕсли ВыбЕдИзм=3 Тогда
Заголовок = Заголовок + " в м3 бет.";
Иначе
Заголовок = Заголовок + " в баз. ед.изм.";
КонецЕсли;
// Конец А П
Если (ТипЗначенияСтр(Таб) <> "Таблица") или (Обновить = 0) Тогда
Таб = СоздатьОбъект("Таблица");
Иначе
Таб.Очистить();
КонецЕсли;
Таб.ВывестиСекцию("Заголовок|Показатель");
Если ВыводитьНачОст = 1 Тогда
Таб.ПрисоединитьСекцию("Заголовок|НачОст");
КонецЕсли;
Если ВыводитьПриход = 1 Тогда
Таб.ПрисоединитьСекцию("Заголовок|Приход");
КонецЕсли;
Если ВыводитьРасход = 1 Тогда
Таб.ПрисоединитьСекцию("Заголовок|Расход");
КонецЕсли;
// Андрей Пономарёв
Если ПоказатьОстатки.ТекущаяСтрока() = 2 Тогда
ЗаголовокГрафыКонОст = "Остаток на конец";
Таб.ПрисоединитьСекцию("Заголовок|КонОст");
ЗаголовокГрафыКонОст = "Резерв";
Таб.ПрисоединитьСекцию("Заголовок|КонОст");
Если ВыводитьКонОст = 1 Тогда
ЗаголовокГрафыКонОст = "Свободный остаток на конец";
Таб.ПрисоединитьСекцию("Заголовок|КонОст");
КонецЕсли;
Иначе
// Конец А П
Если ВыводитьКонОст = 1 Тогда
ЗаголовокГрафыКонОст = "Остаток на конец";
Таб.ПрисоединитьСекцию("Заголовок|КонОст");
КонецЕсли;
КонецЕсли;
Если ВыводитьВсеДаты = 1 Тогда // Дима Федосеев
Таб.ПрисоединитьСекцию("Заголовок|ВсеДаты"); // Дима Федосеев
КонецЕсли; // Дима Федосеев
Если глЗначениеПоУмолчанию("ФиксироватьСтрокиШапкиОтчета") = 1 Тогда
ФиксСтрок = Таб.ВысотаТаблицы();
Иначе
ФиксСтрок = 0;
КонецЕсли;
Если ВидОтчета = 2 Тогда
Если ПоказатьОстатки.ТекущаяСтрока() = 2 Тогда
//ЗаголовокГрафыКонОст = "Резерв";
//Таб.ПрисоединитьСекцию("Заголовок|КонОст");
ИначеЕсли ПоказатьОстатки.ТекущаяСтрока() = 5 Тогда
ЗаголовокГрафыКонОст = "Мин. остаток";
Таб.ПрисоединитьСекцию("Заголовок|КонОст");
// Вывод графы с разницей
ЗаголовокГрафыКонОст = "Остаток на конец минус мин. остаток";
Таб.ПрисоединитьСекцию("Заголовок|КонОст");
КонецЕсли;
Если ВыводитьОстаткиСЦенами = 1 Тогда
Таб.ПрисоединитьСекцию("Заголовок|КонОстСумма");
Таб.Область(Таб.ВысотаТаблицы(),5).Текст = "Остаток";
КонецЕсли;
КонецЕсли;
ИтогСуммаВсего = 0;
Если ВыводитьНачОст = 1 Тогда
КолТекОст = Запрос.КолНачОст;
КонецЕсли;
Если ВыводитьКонОст = 1 Тогда
ИтогоКолОст = 0; // для отрицательных остатков
КонецЕсли;
ТаблицаОтчета = СоздатьОбъект("ТаблицаЗначений");
Для Сч = 1 По СписокГруппировок.РазмерСписка() Цикл
НаименГруппировки = СписокГруппировок.ПолучитьЗначение(Сч);
ТаблицаОтчета.НоваяКолонка(НаименГруппировки);
КонецЦикла;
ТаблицаОтчета.НоваяКолонка("НомерГруппировки", "Число", 1);
ТаблицаОтчета.НоваяКолонка("ПолноеНаименование", "Строка");
ТаблицаОтчета.НоваяКолонка("Порядок", "Строка");
Если НомерГруппировкиМПЗ = 1 Тогда
ЗапомнитьСтрокуИзСправочника(СписокМПЗизЗапроса);
КонецЕсли;
Пока Запрос.Группировка(1) = 1 Цикл
ЗапомнитьСтроку(1);
Если НомерГруппировкиМПЗ = 2 Тогда
ЗапомнитьСтрокуИзСправочника(СписокМПЗизЗапроса);
КонецЕсли;
Если КоличествоГруппировок = 1 Тогда
Продолжить;
КонецЕсли;
Пока Запрос.Группировка(2) = 1 Цикл
ЗапомнитьСтроку(2);
Если НомерГруппировкиМПЗ = 3 Тогда
ЗапомнитьСтрокуИзСправочника(СписокМПЗизЗапроса);
КонецЕсли;
Если КоличествоГруппировок = 2 Тогда
Продолжить;
КонецЕсли;
Пока Запрос.Группировка(3) = 1 Цикл
ЗапомнитьСтроку(3);
Если НомерГруппировкиМПЗ = 4 Тогда
ЗапомнитьСтрокуИзСправочника(СписокМПЗизЗапроса);
КонецЕсли;
Если КоличествоГруппировок = 3 Тогда
Продолжить;
КонецЕсли;
Пока Запрос.Группировка(4) = 1 Цикл
ЗапомнитьСтроку(4);
Если НомерГруппировкиМПЗ = 5 Тогда
ЗапомнитьСтрокуИзСправочника(СписокМПЗизЗапроса);
КонецЕсли;
Если КоличествоГруппировок = 4 Тогда
Продолжить;
КонецЕсли;
Пока Запрос.Группировка(5) = 1 Цикл
ЗапомнитьСтроку(5);
Если НомерГруппировкиМПЗ = 6 Тогда
ЗапомнитьСтрокуИзСправочника(СписокМПЗизЗапроса);
КонецЕсли;
Если КоличествоГруппировок = 5 Тогда
Продолжить;
КонецЕсли;
Пока Запрос.Группировка(6) = 1 Цикл
ЗапомнитьСтроку(6);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Если (ПоказатьОстатки.ТекущаяСтрока() = 3) или (ПоказатьОстатки.ТекущаяСтрока() = 5) Тогда
Если СписокМПЗизЗапроса.РазмерСписка() = 0 Тогда
ЗапомнитьСтрокуИзСправочника(СписокМПЗизЗапроса);
КонецЕсли;
КонецЕсли;
СтрокаСортировки = "";
Для Сч = 1 По СписокГруппировок.РазмерСписка() Цикл
НаименГруппировки = СписокГруппировок.ПолучитьЗначение(Сч);
Если НаименГруппировки = "МПЗ" Тогда
СтрокаСортировки = СтрокаСортировки + "Порядок,ПолноеНаименование,";
КонецЕсли;
СтрокаСортировки = СтрокаСортировки + НаименГруппировки;
Если Сч < СписокГруппировок.РазмерСписка() Тогда
СтрокаСортировки = СтрокаСортировки + ",";
КонецЕсли;
КонецЦикла;
КоличествоСтрок = ТаблицаОтчета.КоличествоСтрок();
Для СчСтрок = 0 По КоличествоСтрок - 1 Цикл
НомерСтроки = КоличествоСтрок - СчСтрок;
ТаблицаОтчета.ПолучитьСтрокуПоНомеру(НомерСтроки);
Если ТаблицаОтчета.НомерГруппировки = НомерГруппировкиМПЗ Тогда
Если ТипЗначенияСтр(ТаблицаОтчета.МПЗ) = "Справочник" Тогда
Если (ТаблицаОтчета.МПЗ.Вид() = "Материалы") или (ТаблицаОтчета.МПЗ.Вид() = "Номенклатура")Тогда
МинОстаток = ТаблицаОтчета.МПЗ.МинОстаток;
Иначе
МинОстаток = 0;
КонецЕсли;
ТаблицаОтчета.МинОстаток = МинОстаток;
КонецЕсли;
Если ТаблицаОтчета.КолКонОст - ТаблицаОтчета.МинОстаток > 0 Тогда
ТаблицаОтчета.УдалитьСтроку(НомерСтроки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если (ВыводитьОстаткиСЦенами = 1) или (ПоказатьОстатки.ТекущаяСтрока() = 4) или (ПоказатьОстатки.ТекущаяСтрока() = 5) Тогда
КоличествоСтрок = ТаблицаОтчета.КоличествоСтрок();
Для Сч = 1 По КоличествоГруппировок Цикл
КонОстСумма = 0;
КолКонОст = 0;
МинОстаток = 0;
Для СчСтрок = 1 По КоличествоСтрок Цикл
НомерСтроки = КоличествоСтрок - СчСтрок + 1;
ТаблицаОтчета.ПолучитьСтрокуПоНомеру(НомерСтроки);
Если (ТаблицаОтчета.НомерГруппировки > НомерПоследнейГруппировки) или (ТаблицаОтчета.НомерГруппировки < НомерПоследнейГруппировки - 1) Тогда
Продолжить;
КонецЕсли;
Если ТаблицаОтчета.НомерГруппировки <> НомерПоследнейГруппировки Тогда
ТаблицаОтчета.КонОстСумма = КонОстСумма;
ТаблицаОтчета.КолКонОст = КолКонОст;
ТаблицаОтчета.МинОстаток = МинОстаток;
КонОстСумма = 0;
КолКонОст = 0;
МинОстаток = 0;
Иначе
ТекНаименГруппировки = СписокГруппировок.ПолучитьЗначение(ТаблицаОтчета.НомерГруппировки);
Наимен = ТаблицаОтчета.ПолучитьЗначение(НомерСтроки, ТекНаименГруппировки);
Если (ТекНаименГруппировки = "МПЗ") или (ТекНаименГруппировки = "Владелец") Тогда
Если Наимен.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КонОстСумма = КонОстСумма + ТаблицаОтчета.КонОстСумма;
КолКонОст = КолКонОст + ТаблицаОтчета.КолКонОст;
МинОстаток = МинОстаток + ТаблицаОтчета.МинОстаток;
КонецЕсли;
ТаблицаОтчета.ВыбратьСтроки();
Пока ТаблицаОтчета.ПолучитьСтроку() = 1 Цикл
Если ПоказатьОстатки.ТекущаяСтрока() = 4 Тогда
Если ТаблицаОтчета.КолКонОст >= 0 Тогда
Продолжить;
КонецЕсли;
ИначеЕсли ПоказатьОстатки.ТекущаяСтрока() = 5 Тогда
Если (ТаблицаОтчета.КолКонОст - ТаблицаОтчета.МинОстаток) >= 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
(15) Это пример того, как в угоду "универсальности" (Последний писк! Водопровод и канализация в обной трубе!) достаточно простую вещь доводят до непотребного вида, имхо. Заметь, там еще и авторы разные. Кукрыниксы, блин.
(3) А поподробнее СП почитайте или ЖКК - что такое группировки и какие есть предопеделенные
Вкратце так:
Группировка
Устанавливает порядок выборки информации.
Синтаксис:
Группировка <ИмяГруппировки>|<ПредопредГруппировка>
[Упорядочить по <Порядок>[, <Порядок>]*]
[Без Упорядочивания][Без Групп][Все [ВошедшиеВЗапрос]];
<ПредопредГруппировка>
Ключевое слово одной из встроенных предопределенных группировок языка запросов. По этому имени можно будет обращаться к значению группировки из вызывающего программного модуля. Возможные значения приведены ниже.
День
Неделя
Месяц
Квартал
Год
Группировки по дате, дают возможность накапливать значения по документам за конкретный период (на каждый день, неделю, месяц и т. д.). В запросе может присутствовать несколько группировок такого типа.
а как еще сделать, чтобы он дни ставил, например у меня период с 1.09.09 по 5.09.09 нужно,чтобы в одном столбце была дата 1.09.09, во втором 2.09.09 в третьем 3.09.09 и так далее!!!!
что-то у меня ваще не получается. пробую создать Группировка День,а он вообще ни как не реагирует!! может у кого есть код уже с тем, чтобы все даты периода выводил? Он выводит мне данные за этот период!! но он не выводит по каждому дню!! он даже не добовляет новые столбцы каждого дня периода!
работало 2-а программиста!! потом им отказались платить и поставили мне задачу разобраться!! хотя я им говорил, что не шарю!! подкорректировать могу, а что касается глобальных изменений, то я на это не обучался, а им пофиг!!! они согласны работать без этого главное не платить программистам!!
Если Группировки.НайтиЗначение("День") = 0 Тогда
Группировки.ВставитьЗначение(1,"День","По дням");
КонецЕсли;
КонецПроцедуры //УправлениеСпискомГруппировок()
и
Если НаименГруппировки = "День" Тогда
Таб.присоединитьСекцию("ВсеДаты|ВсеДаты")
КонецЕсли;
Выводит таблицу, но очень странно. большинство значений смещены и даты не указываются, а так же количество прибавленных столбцов совсем не соответствует количеству дат заданного периода