
Отчет по остаткам на складе.
Мы ввели кучу приходных накладных. Теперь нам интересно знать, что на каком складе лежит. Сделаем отчет.
Отчет "ОстаткиНаСкладе";
Вставим в экранную форму два элемента диалога;
Первый: поле ввода "ВыбДата" тип Дата;
Второй: поле ввода "ВыбСклад" тип С.Склады;
Соответственно приставим к ним текстовые поля с надписью, что есть что (вообще это удобно делать через меню Вставить командой "Элемент диалога...", либо аналогичной кнопкой из панели инструментов) ;
В модуле пропишем процедуру: Процедура ПриОткрытии() ВыбДата=РабочаяДата(); // РабочаяДата – дата, на которую установлена в данный момент 1С. КонецПроцедуры
Заполним процедуру Сформировать(). Эта процедура вызывается одноименной кнопкой [Сформировать]. Там она прописана в поле "Формула";Процедура Сформировать() ТабЗн=СоздатьОбъект("ТаблицаЗначений"); // создаем динамическую 2-х мерную таблицу ТабЗн.НоваяКолонка("Товар","Справочник.Номенклатура"); ТабЗн.НоваяКолонка("Сорт","Справочник.Сорт"); ТабЗн.НоваяКолонка("Ост","Число",17,2); // указываем какие колонки будет содержать наша динимическая таблица РегОст=СоздатьОбъект("Регистр.ОстаткиТоваров"); // создаем в памяти копию регистра остатков РегОст.ВременныйРасчет(1); // указываем, что из этого регистра нам, возможно, надо будет получить данные // на момент времени отличный от текущего РассчитатьРегистрыНа(ВыбДата); // указываем на какой момент времени надо получить данные из регистров РегОст.ВыбратьИтоги(); // открываем выборку итогов из регистра (на указанный момент времени) Пока РегОст.ПолучитьИтог()=1 Цикл // получаем очередной итог ТСклад=РегОст.Склад; Если ТСклад=ВыбСклад Тогда // если текущий итог по выбранному складу ТабЗн.НоваяСтрока(); // добавляем в динамическую таблицу новую строку ТабЗн.Товар=РегОст.Товар; ТабЗн.Сорт=РегОст.Сорт; ТабЗн.Ост=РегОст.Количество; // заполняем поля д. таблицы КонецЕсли; КонецЦикла; РегОст=""; // убираем из памяти копию регистра. Она нам больше не нужна СтрокаН=0; ТабЗн.ВыбратьСтроку(СтрокаН,"Просмотр содержимого таблицы"); // Это мы делаем, чтобы просмотреть содержимое динамической таблицы // у нас будут строки с одинаковым товаром и сортом, они возникли из-за // наличия измерения "Партия" нам надо их объединить ТабЗн.Свернуть("1,2","3"); // методом Свернуть() мы объединяем строки у которых содержимое // в колонках 1 и 2 одинаковое, а колонку 3 мы суммируем СтрокаН=0; ТабЗн.ВыбратьСтроку(СтрокаН,"Просмотр содержимого таблицы"); // смотрим что получилось. Строки у нас идут вразнобой ТабЗн.Сортировать("1+,2+"); // отсортируем их. сперва сортируем по убыванию колонку 1, // а внутри нее, тоже по убыванию, колонку "Сорт" СтрокаН=0; ТабЗн.ВыбратьСтроку(СтрокаН,"Просмотр содержимого таблицы"); // смотрим на результат Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.ВывестиСекцию("Шапка"); ТТовар="@#$%&"; // такого товара у нас, надеюсь, не будет ТабЗн.ВыбратьСтроки(); // открываем выборку строк из д. таблицы Пока ТабЗн.ПолучитьСтроку()=1 Цикл Товар=ТабЗн.Товар; Тов=СокрЛП(Товар.Код)+" ("+СокрЛП(Товар.Наименование)+")"; Сорт=ТабЗн.Сорт; Ост=ТабЗн.Ост; Ед=Строка(Товар.ЕдИзм); Если ТТовар<>Товар Тогда // если товар из д. таблицы не совпадает с переменной ТТовар Таб.ВывестиСекцию("Товар"); // выводим эту секцию таблицы для печати ТТовар=Товар; Иначе // товар совпадает, только сорт другой Таб.ВывестиСекцию("Сорт"); // выводим эту секцию КонецЕсли; КонецЦикла; Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(1,100,1); Таб.Показать(""); КонецПроцедуры
Теперь создаем шаблон для печатной таблицы;
Загружаем 1С:Предприятие;
Смотрим, что нам покажет отчет на разные даты по разным складам;