Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа_1C__2_1.doc
Скачиваний:
19
Добавлен:
10.05.2015
Размер:
543.23 Кб
Скачать

2.20 Отчет по остаткам на складе.

Мы ввели кучу приходных накладных. Теперь нам интересно знать, что на каком складе лежит. Сделаем отчет.

  1. Отчет "ОстаткиНаСкладе";

  2. Вставим в экранную форму два элемента диалога;

  3. Первый: поле ввода "ВыбДата" тип Дата;

  4. Второй: поле ввода "ВыбСклад" тип С.Склады;

  5. Соответственно приставим к ним текстовые поля с надписью, что есть что (вообще это удобно делать через меню Вставить командой "Элемент диалога...", либо аналогичной кнопкой из панели инструментов) ;

  6. В модуле пропишем процедуру: Процедура ПриОткрытии()   ВыбДата=РабочаяДата(); // РабочаяДата – дата, на которую установлена в данный момент 1С. КонецПроцедуры

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

  8. Теперь создаем шаблон для печатной таблицы;

  9. Загружаем 1С:Предприятие;

Смотрим, что нам покажет отчет на разные даты по разным складам.