Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
619889.rtf
Скачиваний:
36
Добавлен:
14.05.2015
Размер:
15.86 Mб
Скачать
    1. 2.3 Описание новой модели бизнес-процесса

Сначала логистом, с помощью документа «УстановкаМинимальныхОстатков» определяются параметры торговой точки: минимальные остатки и емкость полок для каждой позиции номенклатуры. Минимальные остатки заполняются при помощи нажатия на кнопку «Заполнить минимальные остатки», предварительно заполнив форму. В поле «Номер» автоматически формируется номер документа. В поле «Организация» пользователь выбирает соответственно организацию «СемьСот». В полях «Дата начала» и «Дата конца» указывается период, за который рассчитываются минимальные остатки. В Поле «На полке» указывается количество товара, которое помещается на полках в торговой точке. В полях «Откуда» и «Куда» указываются места хранения (склады). Количество периодов программно установлено 15 дней. Справа, в списке номенклатуры, устанавливается галочка над нужной позицией.

Минимальные остатки рассчитываются программно исходя из скорости продаж товара за предыдущий период. Результаты расчета записываются в регистр сведений «МинимальныеОстатки» при помощи нажатия на кнопку «Записать минимальные остатки». Структура документа «УстановкаМинимальныхОстатков» представлена на рисунке 12.

Рисунок 12 Структура документа «УстановкаМинимальныхОстатков»

Структура регистра сведений «МинимальныеОстатки» представлена и рисунке 13.

Рисунок 13 Структура регистра «МинимальныеОстатки»

На рисунке 14 и рисунке 15 соответственно, представлены пустая и заполненная формы документа «УстановкаМинимальныхОстатков». Программный код для данного документа представлен в Приложении Б.

Рисунок 14 – Пустая форма документа «УстановкаМинимальныхОстатков»

Далее логист создает отчет «ЗаказНаНеделю». Отчет «ЗаказНаНеделю» служит для определения потребности товара в торговой точке на неделю.

Рисунок 15 – Заполненная форма документа «УстановкаМинимальныхОстатков»

Для анализа используются данные из регистра «МинимальныеОстатки», сведения о сформированных ранее, но еще не проведенных документах «ВнутреннийЗаказ». Результатом работы отчета «ЗаказНаНеделю» является автоматическое создание документа «ВнутреннийЗаказ».

Документ «Внутренний заказ» предназначен для оформления потребности в товарах на складах и в подразделениях предприятия. В соответствии с этим различаются заказы со складов и из подразделений. Использование подсистемы внутренних заказов может быть отключено путем снятия флага «Использовать внутренние заказы» в настройках параметров учета. В этом случае данный документ ввести нельзя. Различают следующие виды внутренних заказов:

- заказ на склад. Этот вид заказа отражает потребность в товарах на каком-либо складе предприятия, например, в случае отсутствия товара в магазине, либо когда количество товара становится меньше уровня минимального запаса. Исполнение заказа осуществляется документом «Перемещение товаров».

- заказ в подразделение. Этот вид заказа отражает потребность какого-либо подразделения (цеха) в материалах или полуфабрикатах необходимых для производства продукции, работ, услуг. Исполнение заказа данного вида осуществляется документом «Требование-накладная». Если установлен вид заказа «В подразделение», закладка «Тара» отсутствует.

Для внутреннего заказа могут быть зарезервированы позиции номенклатуры как из текущего остатка на любом из складов (оптовом или розничном), входящих в состав компании, так и размещены в заказах поставщикам, заказах на производство или внутренних заказах. В графе «Размещение» можно указать склад (оптовый или розничный), на котором необходимо зарезервировать товар или заказ, при поступлении товаров по которому произойдет автоматическое резервирование по заказу. При этом по одному заказу товар может быть зарезервирован на нескольких складах и размещен в нескольких заказах. Параметры резервирования и размещения товара могут быть заполнены автоматически при помощи нажатия на кнопку «Заполнить и провести». После проведения заказа можно откорректировать схему размещения и резервирования по заказу с помощью документа «Резервирование товаров».

При распределении позиций номенклатуры по заказам поставщикам учитывается предполагаемая дата отгрузки («Отгрузка») по документу «Внутренний заказ» и предполагаемая дата поступления («Поступление») по документу «Заказ поставщику». Дата поступления должна быть меньше даты отгрузки (товар должен поступить раньше, чем его предполагается отгрузить). Нажав на кнопку «Анализ» можно получить подробный отчет о состоянии внутреннего заказа.

Форма отчета «ЗаказНаНеделю» представлена рисунке 16. Исходный программный код отчета «ЗаказНаНеделю» представлен в Приложении Б.

Рисунок 16 – Отчет «ЗаказНаНеделю»

Форма документа «ВнутреннийЗаказ» представлена на рисунке 17.

Рисунок 17 – Документ «Внутренний заказ»

Работа логиста далее заключается в анализе сформированных документов «ВнутреннийЗаказ», корректировке данных по определенным позициям, если того требует работа с клиентом (например, планируется закупка товара в большом объеме, что не было рассчитано по скоростям продаж). После сделанных уточнений на основании документа «ВнутреннийЗаказ» формируется документ «ПеремещениеТоваров».

Документ «Перемещение товаров» предназначен для оформления передачи номенклатурных позиций между различными складами: оптовыми, розничными, неавтоматизированными торговыми точками.

В поле «Отправитель» указывается склад, с которого производится списание товара, а в поле «Получатель» указывается тот склад, на который поступает товар.

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

Изменение розничных цен в неавтоматизированной торговой точке производится документом «Переоценка товаров в рознице».

Если товар перемещается на розничный склад, то при проведении документа выполняется проверка установки розничных цен на товар для этого розничного склада. Если розничные цены не установлены, выдается соответствующее сообщение, а документ не проводится. Розничные цены на товары для розничного назначаются документом «Переоценка товаров в рознице», который можно создать непосредственно из документа «Перемещение товаров», нажав на кнопку «Переоценка».

Перемещение товаров производится для выполнения определенного внутреннего заказа, то этот заказ необходимо указать в табличной части в колонке «Внутренний заказ». В одном документе перемещения можно указать несколько различных внутренних заказов, которые удовлетворяют определенным условиям - в качестве заказчика в документе должен быть выбран склад, указанный в перемещении в качестве склада-получателя.

Если товары перемещаются для выполнения внутреннего заказа, то их можно перемещать из свободного остатка на складе-отправителе или из резерва на складе-отправителе под этот внутренний заказ. Способ списания товара (возвратной тары) под выполнение внутреннего заказа определяется заполнением колонки «Документ-резерва». Если документ резерва не указан, то это означает перемещение из свободного остатка. Если указан внутренний заказ, то это означает перемещение из резерва по внутреннему заказу, причем в колонке «Документ-резерва» может быть выбран только внутренний заказ, указанный в колонке «Внутренний заказ». В связи с этим существует ограничение: для выполнения внутреннего заказа нельзя перемещать неотфактурованные товары или товары, зарезервированные под другие заказы.

Документ «Перемещение товаров» можно ввести на основании документа «Внутренний заказ». При этом будет предложено выбрать склад, с которого необходимо переместить товары (возвратную тару). Табличные части «Товары» и «Тара» будут заполнены неисполненной частью внутреннего заказа с учетом остатков этих товаров (возвратной тары) на выбранном складе-отправителе (в свободном остатке и в резерве под выбранный внутренний заказ).

При автоматическом заполнении табличных частей «Товары» и «Тара» в документе «Перемещение товаров» по кнопке «Заполнить по внутреннему заказу» или «Добавить по внутреннему заказу» также учитываются остатки товаров на складе-отправителе.

Форма документа «ПеремещениеТоваров» представлена на рисунке 18.

Рисунок 18 – Документ «перемещение товаров»

Таким образом, дополнение штатных документов «ВнутреннийЗаказ» и «ПеремещениеТоваров» специально разработанным документом «УстановкаМинимальныхОстатков» и отчетом «ЗаказНаНеделю» позволило в значительной степени автоматизировать трудоемкую работу менеджера по планированию поставок товара в торговые точки.

Заключение

В работе было проведено моделирование основных бизнес-процессов компании ООО «СемьСот», которое позволило проанализировать не только, как работает предприятие в целом, но и как оно взаимодействует с внешними организациями, заказчиками и поставщиками, а также как организована деятельность на каждом отдельно взятом рабочем месте. Построить полноценные модели бизнес-процессов помогло исследование организационной структуры предприятия, которое выявило отсутствие отдела маркетинга в компании, что является определенным недостатком и, возможно, мешает дальнейшему развитию компании. Построение моделей бизнес-процессов было выполнено с помощью Case-средства Rational Rose. Для каждого из них была построена диаграмма активности и проведен анализ. По результатам анализа были выявлены недостатки, а также намечены пути их решения. В работе был предложен и реализован один из вариантов автоматизации бизнес-процесса «Распределение товаров по торговым точкам». Автоматизация производилась путём доработки существующей конфигурации «Управление торговлей» информационной системы 1С:Предприятие. В конфигурацию были добавлены два документа, которые позволили упростить рассмотренный бизнес-процесс.

Автоматизация бизнес-процесса «Распределение товара по торговым точкам» позволила:

- сократить время на выполнение бизнес-процесса;

- получать исчерпывающую информацию о продажах, остатках, заказах;

- минимизировать ошибки в распределении;

- повысить рациональность распределения товара.

Тем не менее, как показал анализ моделей бизнес-процессов, в компании это не единственный процесс, имеющий недостатки. Существует множество вариантов автоматизации и аспектов, требующих доработки.

Список использованных источников

  1. Елиферов В.Г. Бизнес-процессы: регламентация и управление: учебное пособие [для студентов вузов] / В. Г. Елиферов, В. В. Репин ; Ин-т экономики и финансов "Синергия". - М. : ИНФРА-М, 2011. - 319 с.

  2. Андерсен Б. Бизнес-процессы. Инструменты совершенствования / Б. Андерсен ; [пер. с англ. С. В. Ариничева ; под науч. ред. Ю.П. Адлера]. - 5-е изд. - М. : Стандарты и качество, 2008. - 272 с. : ил. - (Практический менеджмент).

  3. Репин В.В. Бизнес-процессы компании: построение, анализ, регламентация / В. В. Репин. - М. : Стандарты и качество, 2007. - 240 с. : ил. - (Деловое совершенство).

  4. Реинжиниринг бизнес-процессов: учебник [для студ. экон. вузов магистерского уровня] / Н. М. Абдикеев, Т. П. Данько, С. В. Ильдеменов, А. Д. Киселев ; под ред. Н. М. Абдикеева, Т. П. Данько ; Высш. Школа МBA ; РЭА им. Г. В. Плеханова. - 2-е изд.,испр. - М. : Эксмо, 2009. - 592 с. - (Полный курс МВА).

  5. Калянов, Г.Н. Моделирование, анализ, реорганизация и автоматизация бизнес-процессов: ученое пособие для студ. вузов, обуч. по спец. 080801 "Прикладная информатика" и др. экон. спец. / Г. Н. Калянов. - М. : Финансы и статистика, 2009. - 240с.

  6. Моделирование бизнес-процессов [Электронный ресурс]: мет. материалы / Разработка Скриптов, режим доступа: http://www.script-coding.com

  7. Современный менеджмент: учебник для студентов вузов / [авт. кол.: А. И. Базилевич, А. О. Блинов, Л. А. Вдовенко и др.] ; под ред. М. М. Максимцова, В. Я. Горфинкеля. - М. : Вузовский учебник : ИНФРА-М, 2012. - 299 с.

  8. Логистика. Интеграция и оптимизация логистических бизнес-процессов в цепях поставок: [учебник для студ. вузов] / В. В. Дыбская, Е. И. Зайцев, В. И. Сергеев, А. Н. Стерлигова ; Под ред. В. И. Сергеева. - М. : Эксмо, 2008. - 944 с. - (Полный курс МВА).

  9. Леоненков А.В. Объектно-ориентированный анализ и проектирование с использованием UML и IBM Rational Rose: учебное пособие / А. В. Леоненков; Интернет-Ун-т Информ. Технологий (ИНТУИТ). - М. : ИНТУИТ : БИНОМ. ЛЗ, 2009. - 320 с. : ил. - (Основы информационных технологий).

  10. Трофимов С.А. CASE-технологии: практическая работа в Rational Rose / С.А.Трофимов. - 2-е изд. - М. : БИНОМ, 2008. - 284с. : ил.

  11. Типовые организационные структуры предприятий [Электронный ресурс]: мет. материалы / Корпоративный менеджмент, режим доступа: http://www.cfin.ru

  12. Разработка организационной структуры [Электронный ресурс]: мет. материалы / Папирян Г.А. Менеджмент в индустрии гостеприимства, режим доступа: http://tourlib.net/books_tourism/papiran_men13.htm

  13. Бизнес-процессы [Электронный ресурс]: мет. материалы / бизнес-инжиниринговые технологии http://www.betec.ru

  14. Резник, С. Д. Персональный менеджмент: учебник для студентов вузов / С. Д. Резник, В. В. Бондаренко, Ф. Е. Удалов ; под ред. С. Д. Резника. - 4-е изд.,перераб. и доп. - М. : ИНФРА-М, 2012. - 559 с. - (Высшее образование).

  15. Резник Г.А. Введение в маркетинг: учеб. пособие для студентов вузов / Г. А. Резник. - 2-е изд..перераб. и доп. - М. : ИНФРА-М, 2012. - 202 с.

  16. Калянов Г.Н. Моделирование и автоматизация бизнес-процессов: ученое пособие для студ. вузов, обуч. по спец. 080801 "Прикладная информатика" и др. экон. спец. / Г. Н. Калянов. - М. : Финансы и статистика, 2008. - 240с.

  17. Ощенко И. 1С:Предприятие. Торговля и склад для начинающих: экспресс-курс / И. Ощенко. - СПб. : БХВ-Петербург, 2010. - 256 с. : ил.

  18. Усиков, Тарас Николаевич. 1С:Предприятие. Эффективное программирование / Т. Н. Усиков. - 2-е изд., стереотип. - М. : Новое знание, 2006. - 446 с. : ил.

  19. Закон РФ от 07.02.1992 N 2300-1 (ред. от 18.07.2011) "О защите прав потребителей" (с изм. и доп., вступающими в силу с 29.09.2011)

  20. Томпсон, Кит. Автоматизация продаж [Текст] : умный подход / К. Томпсон ; [пер. с англ. В. Давыдов]. - М. : Вершина, 2008. - 272 с.

  21. Шустикова Т. Б. 1С:Предприятие 8.0. Управление торговлей [Текст] / Т. Б. Шустикова. - М. : НТС Пресс, 2008. - 284, [4] с. : ил. - (Самоучитель).

  22. Филимонова Е.В. Практическая работа в 1С : Предприятие 8.0. Настройка, конфигурирование, программирование и эксплуатация [Текст] : учебное пособие / Е. В. Филимонова. - Ростов н/Д : Феникс, 2009. - 384 с. : ил. - (Библиотека бухгалтера и аудитора).

  23. Михайлов С.Е. 1С-программирование как дважды два [Текст] : самоучитель / С. Е. Михайлов. - СПб. : Тритон, 2009. - 173 с. : ил.

  24. Дубянский В.М. 1С: Предприятие. Конфигурирование и администрирование для начинающих [Текст]: экспресс-курс / В. М. Дубянский. - СПб.: БХВ-Петербург, 2008. - 176 с.

  25. Программирование в среде 1С:Предприятие [Текст] : учебная программа курса по спец. 220100 Вычислительные машины, комплексы, системы и сети / сост. С. М. Семенов. - Владивосток : Изд-во ВГУЭС, 2010. - 12 с.

Приложение А

(справочное)

Диаграммы активности бизнес-процессов

Рисунок А.1 – Диаграмма активности бизнес-процесса «Заказ и закупка товара»

Рисунок А.2 – Диаграмма активности бизнес-процесса «Распределение товара по торговым точкам»

Рисунок А.3 – Диаграмма активности бизнес-процесса «Реализация товара через интернет»

Рисунок А.4 – Диаграмма активности бизнес-процесса «Прием товара на гарантийное обслуживание»

Рисунок А.5 – Диаграмма активности бизнес-процесса «Инвентаризация»

Рисунок А.6 – Диаграмма активности для бизнес-процесса «Обучение персонала»

Приложение Б

(справочное)

Исходный код документа «УстановкаМинимальныхОстатков»

Перем ДлинаПериода;

Перем Табл;

Процедура УстановитьРегистрМинимальныеОстатки(Товар,МинОст,ПомещаетсяНаПолке)

ЗаписьМинОст=РегистрыСведений.МинимальныеОстатки.СоздатьМенеджерЗаписи();

ЗаписьМинОст.Номенклатура=Товар;

ЗаписьМинОст.Склад=Куда;

ЗаписьМинОст.МинимальныйОстаток=МинОст;

ЗаписьМинОст.ПомещаетсяНаПолке=ПомещаетсяНаПолке;

ЗаписьМинОст.Записать();

КонецПроцедуры

Процедура ЗаполнитьМинимальныеОстатки()

Для Каждого Выборка Из Ресурсы Цикл

Если Выборка.МинимальныйОстаток<>Выборка.МинимальныйОстатокНовый Тогда

УстановитьРегистрМинимальныеОстатки(Выборка.Номенклатура,Выборка.МинимальныйОстатокНовый,Выборка.ПомещаетсяНаПолке);

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Процедура ЗаполнитьПомещаетсяНаПолке()

Для Каждого Выборка Из Ресурсы Цикл

УстановитьРегистрМинимальныеОстатки(Выборка.Номенклатура,Выборка.МинимальныйОстаток,Выборка.ПомещаетсяНаПолке);

КонецЦикла;

КонецПроцедуры

Функция ПолучитьПомещаетсяНаПолке(Товар)

РегМинОст=РегистрыСведений.МинимальныеОстатки;

Отбор=Новый Структура(«Номенклатура,Склад»,Товар,Куда);

РесурсыРегистра=РегМинОст.Получить(Отбор);

ПомещаетсяНаПолке=РесурсыРегистра.ПомещаетсяНаПолке;

Возврат ПомещаетсяНаПолке;

КонецФункции

Функция ПолучитьМинимальныйОстаток(Товар)

РегМинОст=РегистрыСведений.МинимальныеОстатки;

Отбор=Новый Структура(«Номенклатура,Склад»,Товар,Куда);

РесурсыРегистра=РегМинОст.Получить(Отбор);

МинимальныйОстаток=РесурсыРегистра.МинимальныйОстаток;

Возврат МинимальныйОстаток;

КонецФункции

Процедура КнопкаУстановитьФлажкиНажатие(Элемент)

Спс.ЗаполнитьПометки(Истина);

КонецПроцедуры

Процедура КнопкаСнятьФлажкиНажатие(Элемент)

Спс.ЗаполнитьПометки(Ложь);

КонецПроцедуры

Процедура ПриОткрытии()

ДлинаПериода=1;

Если ЭтоНовый() Тогда // проверить объект на то, что он еще не внесен в ИБ

КоличествоПериодов=15;

ДатаКонца=ТекущаяДата();

ДатаКонцаПриИзменении(««);

Откуда=Справочники.Склады.НайтиПоНаименованию(«Главный склад»);

Куда=Справочники.Склады.НайтиПоНаименованию(«Народный»);

Организация=ПолучитьОсновнуюОрганизацию(глЗначениеПеременной

(«глТекущийПользователь»));

КонецЕсли;

Если Ресурсы.Количество()>0 Тогда

СписокГрупп=Новый СписокЗначений;

Для Каждого Выборка Из Ресурсы Цикл

Если СписокГрупп.НайтиПоЗначению(Выборка.Номенклатура.Родитель.Код)=Неопределено Тогда

СписокГрупп.Добавить(Выборка.Номенклатура.Родитель.Код);

КонецЕсли;

КонецЦикла;

КонецЕсли;

Запрос=Новый Запрос;

Запрос.Текст=«ВЫБРАТЬ

| Номенклатура.Ссылка,

| Номенклатура.ЭтоГруппа

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| Номенклатура.ЭтоГруппа = &ЭтоГруппа

|

|УПОРЯДОЧИТЬ ПО

| Номенклатура.Наименование»;

Запрос.УстановитьПараметр(«ЭтоГруппа»,Истина);

Результат=Запрос.Выполнить();

Выборка=Результат.Выбрать();

Пока Выборка.Следующий() Цикл

Если Не Выборка.Ссылка.Родитель.Пустая() Тогда

Продолжить;

КонецЕсли;

ИмеетсяВСпискеГрупп=Ложь;

Если Ресурсы.Количество()>0 Тогда

Если СписокГрупп.НайтиПоЗначению(Выборка.Ссылка.Код)<>Неопределено Тогда

ИмеетсяВСпискеГрупп=Истина;

КонецЕсли;

КонецЕсли;

Спс.Добавить(Выборка.Ссылка,,ИмеетсяВСпискеГрупп);

КонецЦикла;

КонецПроцедуры

Процедура СпсВыбор(Элемент, ЭлементСписка)

ЭлементСписка.Пометка=Не ЭлементСписка.Пометка;

КонецПроцедуры

Процедура Кнопка1Нажатие(Элемент)

Если Ресурсы.Количество()>0 Тогда

Режим = РежимДиалогаВопрос.ДаНет;

Ответ = Вопрос(«Табличная часть будет очищена, продолжить?», Режим, 0);

Если Ответ = КодВозвратаДиалога.Нет Тогда

Возврат;

КонецЕсли;

КонецЕсли;

Если Откуда.Пустая() Тогда

Предупреждение(«Нужно выбрать склад откуда»);

Возврат;

КонецЕсли;

Если Куда.Пустая() Тогда

Предупреждение(«Нужно выбрать склад куда»);

Возврат;

КонецЕсли;

ВыбГруппы=Новый СписокЗначений;

Для Каждого ТекГруппа Из Спс Цикл

Если ТекГруппа.Пометка Тогда

ВыбГруппы.Добавить(ТекГруппа.Значение);

КонецЕсли;

КонецЦикла;

Если ВыбГруппы.Количество()=0 Тогда

Предупреждение(«Нужно выбрать хотя бы одну группу»);

Возврат;

КонецЕсли;

Если ДатаКонца=Дата(1,1,1) Тогда

Предупреждение(«Нужно определить конечную дату»);

Возврат;

КонецЕсли;

Ресурсы.Очистить();

Табл=Новый ТаблицаЗначений;

Запрос=Новый Запрос;

Запрос.Текст=«ВЫБРАТЬ

| Номенклатура.Ссылка,

| Номенклатура.ЭтоГруппа

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| НЕ Номенклатура.ЭтоГруппа

| И Номенклатура.Ссылка В ИЕРАРХИИ(&ВыбГруппы)»;

Запрос.УстановитьПараметр(«ВыбГруппы»,ВыбГруппы);

Результат=Запрос.Выполнить();

ТаблицаНоменклатуры=Результат.Выгрузить();

МассивНоменклатуры=ТаблицаНоменклатуры.ВыгрузитьКолонку(«Ссылка»);

Запрос1=Новый Запрос;

Запрос1.Текст=«ВЫБРАТЬ

| РеализацияТоваровУслугТовары.Ссылка,

| РеализацияТоваровУслугТовары.Номенклатура,

| РеализацияТоваровУслугТовары.Количество,

| РеализацияТоваровУслугТовары.Ссылка.Дата,

| РеализацияТоваровУслугТовары.Ссылка.Проведен,

| РеализацияТоваровУслугТовары.Ссылка.Склад

|ИЗ

| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары

|ГДЕ

| РеализацияТоваровУслугТовары.Ссылка.Проведен

| И РеализацияТоваровУслугТовары.Ссылка.Склад = &Склад

| И РеализацияТоваровУслугТовары.Номенклатура В(&МассивНоменклатуры)

| И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца»;

Запрос1.УстановитьПараметр(«Склад»,Куда);

Запрос1.УстановитьПараметр(«МассивНоменклатуры»,МассивНоменклатуры);

Запрос1.УстановитьПараметр(«ДатаНачала»,ДатаНачала);

Запрос1.УстановитьПараметр(«ДатаКонца»,ДатаКонца);

Результат1=Запрос1.Выполнить();

Выборка=Результат.Выбрать();

Выборка1=Результат1.Выбрать();

Табл.Колонки.Добавить(«НомерСтроки»);

Для инд=1 По КоличествоПериодов Цикл

Табл.Колонки.Добавить();

КонецЦикла;

НомСтр=0;

Пока Выборка.Следующий() Цикл

НоваяСтрока=Ресурсы.Добавить();

НомСтр=НомСтр+1;

НоваяСтрока.Номенклатура=Выборка.Ссылка;

НоваяСтрока.МинимальныйОстаток=ПолучитьМинимальныйОстаток(Выборка.Ссылка);

НоваяСтрока.ПомещаетсяНаПолке=ПолучитьПомещаетсяНаПолке(Выборка.Ссылка);

НоваяСтрока.МинимальныйОстатокНовый=0;

НоваяСтрокаТабл=Табл.Добавить();

НоваяСтрокаТабл.НомерСтроки=НоваяСтрока.НомерСтроки;

Для инд=1 По КоличествоПериодов Цикл

НоваяСтрокаТабл[инд]=0;

КонецЦикла;

Выборка1.Сбросить();

СтруктураПоиска=Новый Структура(«Номенклатура»);

СтруктураПоиска.Номенклатура=Выборка.Ссылка;

Пока Выборка1.НайтиСледующий(СтруктураПоиска) Цикл

ДатаДокумента=Выборка1.Дата;

НомерПериода=Цел((ДатаДокумента-ДатаНачала)/86400/ДлинаПериода)+1;

СтрокаТабл=Табл[НомСтр-1];

СтрокаТабл[НомерПериода]=СтрокаТабл[НомерПериода]+Выборка1.Количество;

КонецЦикла;

КонецЦикла;

НомСтр=0;

Для Каждого Выборка Из Ресурсы Цикл

НомСтр=НомСтр+1;

Максимальное=0;

Для инд=1 По КоличествоПериодов Цикл

СтрокаТабл=Табл[НомСтр-1];

Если СтрокаТабл[инд]>Максимальное Тогда

Максимальное=СтрокаТабл[инд];

КонецЕсли;

КонецЦикла;

Выборка.МинимальныйОстатокНовый=Максимальное;

КонецЦикла;

КонецПроцедуры

Процедура Кнопка2Нажатие(Элемент)

ЗаполнитьМинимальныеОстатки();

КонецПроцедуры

Процедура Кнопка3Нажатие(Элемент)

Если Ресурсы.Количество()>0 Тогда

Режим = РежимДиалогаВопрос.ДаНет;

Ответ = Вопрос(«Табличная часть будет очищена, продолжить?», Режим, 0);

Если Ответ = КодВозвратаДиалога.Нет Тогда

Возврат;

КонецЕсли;

КонецЕсли;

ВыбГруппы=Новый СписокЗначений;

Для Каждого ТекГруппа Из Спс Цикл

Если ТекГруппа.Пометка Тогда

ВыбГруппы.Добавить(ТекГруппа.Значение);

КонецЕсли;

КонецЦикла;

Если ВыбГруппы.Количество()=0 Тогда

Предупреждение(«Нужно выбрать хотя бы одну группу»);

Возврат;

КонецЕсли;

Ресурсы.Очистить();

Табл=Новый ТаблицаЗначений;

Запрос=Новый Запрос;

Запрос.Текст=«ВЫБРАТЬ

| Номенклатура.Ссылка,

| Номенклатура.ЭтоГруппа

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| Номенклатура.ЭтоГруппа = &ЭтоГруппа

| И Номенклатура.Ссылка В ИЕРАРХИИ(&СписокГрупп)»;

Запрос.УстановитьПараметр(«ЭтоГруппа»,Ложь);

Запрос.УстановитьПараметр(«СписокГрупп»,ВыбГруппы);

Результат=Запрос.Выполнить();

Выборка=Результат.Выбрать();

Пока Выборка.Следующий() Цикл

НоваяСтрока=Ресурсы.Добавить();

НоваяСтрока.Номенклатура=Выборка.Ссылка;

НоваяСтрока.МинимальныйОстаток=ПолучитьМинимальныйОстаток(Выборка.Ссылка);

НоваяСтрока.ПомещаетсяНаПолке=ПолучитьПомещаетсяНаПолке(Выборка.Ссылка);

КонецЦикла;

КонецПроцедуры

Процедура Кнопка4Нажатие(Элемент)

ЗаполнитьПомещаетсяНаПолке();

КонецПроцедуры

Процедура ДатаКонцаПриИзменении(Элемент)

Если КоличествоПериодов>15 Тогда

Предупреждение(«Количество периодов должно быть не более 15»);

КоличествоПериодов=15;

КонецЕсли;

ДатаНачала=ДатаКонца-(ДлинаПериода*КоличествоПериодов-1)*86400;

КонецПроцедуры

Процедура ОсновныеДействияФормыДействие(Кнопка)

ТабДок=Новый ТабличныйДокумент;

Отчет(ТабДок);

КонецПроцедуры

Процедура Отчет(ТабДок) Экспорт

//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ(Отчет)

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Макет = Документы.УстановкаМинимальныхОстатков.ПолучитьМакет(«Отчет»);

Запрос = Новый Запрос;

Запрос.Текст =

«ВЫБРАТЬ

| УстановкаМинимальныхОстатков.Дата,

| УстановкаМинимальныхОстатков.ДатаНачала,

| УстановкаМинимальныхОстатков.ДатаКонца,

| УстановкаМинимальныхОстатков.Откуда,

| ПРЕДСТАВЛЕНИЕ(УстановкаМинимальныхОстатков.Откуда),

| УстановкаМинимальныхОстатков.Куда,

| ПРЕДСТАВЛЕНИЕ(УстановкаМинимальныхОстатков.Куда),

| УстановкаМинимальныхОстатков.КоличествоПериодов,

| УстановкаМинимальныхОстатков.Ресурсы.(

| Номенклатура,

| ПРЕДСТАВЛЕНИЕ(УстановкаМинимальныхОстатков.Ресурсы.Номенклатура),

| МинимальныйОстаток,

| МинимальныйОстатокНовый,

| ПомещаетсяНаПолке

| )

|ИЗ

| Документ.УстановкаМинимальныхОстатков КАК УстановкаМинимальныхОстатков

|ГДЕ

| УстановкаМинимальныхОстатков.Ссылка = &Ссылка»;

Запрос.УстановитьПараметр(«Ссылка»,Ссылка);

Результат = Запрос.Выполнить();

ОбластьЗаголовок = Макет.ПолучитьОбласть(«Заголовок»);

ОбластьПодвал = Макет.ПолучитьОбласть(«Подвал»);

ОбластьШапкаТаблицы = Макет.ПолучитьОбласть(«ШапкаТаблицы»);

ОбластьПодвалТаблицы = Макет.ПолучитьОбласть(«ПодвалТаблицы»);

ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть(«Детали»);

РесурсыОбластьШапкаТаблицы = Макет.ПолучитьОбласть(«РесурсыШапкаТаблицы»);

РесурсыОбластьПодвалТаблицы = Макет.ПолучитьОбласть(«РесурсыПодвалТаблицы»);

РесурсыОбластьДетальныхЗаписей = Макет.ПолучитьОбласть(«РесурсыДетали»);

ТабДок.Очистить();

ТабДок.Вывести(ОбластьЗаголовок);

ТабДок.Вывести(ОбластьШапкаТаблицы);

ТабДок.НачатьАвтогруппировкуСтрок();

ВыборкаДетали = Результат.Выбрать();

Пока ВыборкаДетали.Следующий() Цикл

ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);

ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());

ТабДок.НачатьГруппуСтрок();

ТабДок.Вывести(РесурсыОбластьШапкаТаблицы);

ТабДок.НачатьАвтогруппировкуСтрок();

РесурсыВыборкаДетали = ВыборкаДетали.Ресурсы.Выбрать();

Пока РесурсыВыборкаДетали.Следующий() Цикл

РесурсыОбластьДетальныхЗаписей.Параметры.Заполнить(РесурсыВыборкаДетали);

ТабДок.Вывести(РесурсыОбластьДетальныхЗаписей, РесурсыВыборкаДетали.Уровень());

КонецЦикла;

ТабДок.ЗакончитьАвтогруппировкуСтрок();

ТабДок.Вывести(РесурсыОбластьПодвалТаблицы);

ТабДок.ЗакончитьГруппуСтрок();

КонецЦикла;

ТабДок.ЗакончитьАвтогруппировкуСтрок();

ТабДок.Вывести(ОбластьПодвалТаблицы);

ТабДок.Вывести(ОбластьПодвал);

ТабДок.Показать();

//}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ

КонецПроцедуры

Процедура ОрганизацияПриИзменении(Элемент)

//УстановитьНомерДокумента(ЭтотОбъект);

КонецПроцедуры

Процедура РесурсыПриПолученииДанных(Элемент, ОформленияСтрок)

Для Каждого Строка из ОформленияСтрок Цикл

Строка.Ячейки.Главный.Значение=ПолучитьОстаток(Строка.Ячейки.Номенклатура.Значение,Откуда,

ТекущаяДата());

Строка.Ячейки.Народный.Значение=ПолучитьОстаток(Строка.Ячейки.Номенклатура.Значение,Куда,

ТекущаяДата());

Строка.Ячейки.КолВоВУпаковке.Значение=ПолучитьЕдиницуИзмерения

(Строка.Ячейки.Номенклатура.Значение);

Если Табл.Количество()>0 Тогда

НомерСтрокиВТабл=Строка.Ячейки.НомерСтроки.Значение-1;

Если НомерСтрокиВТабл=Неопределено Тогда

Возврат;

КонецЕсли;

Для инд=1 По Табл.Колонки.Количество()-1 Цикл

Строка.Ячейки[«К»+инд].Значение=Табл[НомерСтрокиВТабл][инд];

КонецЦикла;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Процедура РесурсыПередУдалением(Элемент, Отказ)

Табл.Удалить(Элемент.ТекущаяСтрока.НомерСтроки-1);

КонецПроцедуры

Табл=Новый ТаблицаЗначений;

Приложение В

(справочное)

Исходный код отчета «ЗаказНаНеделю»

Перем СпсИндекс;

Перем МинимальныйОстатокРасчетный;

Перем ПомещаетсяНаПолке;

Функция ПолучитьОстатокНаСкладе(Товар,Склад)

Остаток=0;

Отбор=Новый Структура;

Если Не Склад=Неопределено Тогда

Отбор.Вставить(«Склад»,Склад);

КонецЕСли;

Отбор.Вставить(«Номенклатура»,Товар);

ТабОстатков=РегистрыНакопления.ТоварыНаСкладах.Остатки(,Отбор,»Номенклатура»,»Количество»);

Если ТабОстатков.Количество()>0 Тогда

Если ТабОстатков.Количество()>1 Тогда

ТабОстатков.Свернуть(«Номенклатура»,»Количество»);

КонецЕсли;

Остаток=ТабОстатков.Получить(0).Количество;

КонецЕсли;

Возврат Остаток;

КонецФункции

Функция ПолучитьРезерв(Товар,Склад)

Остаток=0;

Отбор=Новый Структура;

Если Не Склад=Неопределено Тогда

Отбор.Вставить(«Склад»,Склад);

КонецЕСли;

Отбор.Вставить(«Номенклатура»,Товар);

ТабОстатков=РегистрыНакопления.ТоварыВРезервеНаСкладах.Остатки(ТекущаяДата(),Отбор,»Номенклатура»,»Количество»);

Если ТабОстатков.Количество()>0 Тогда

Остаток=ТабОстатков.Получить(0).Количество;

КонецЕсли;

Возврат Остаток;

КонецФункции

Процедура ДобавитьДокумент(Парам)

Форма=Документы.ВнутреннийЗаказ.ПолучитьФормуВыбора(,ЭтаФорма);

Если Парам=1 Тогда

Форма.РежимВыбора = Истина;

Форма.ЗакрыватьПриВыборе=Ложь;

КонецЕсли;

Форма.Открыть();

КонецПроцедуры

Процедура ОбработкаВыбора(ЗначениеВыбора,Источник)

Если ЗначениеВыбора<>Неопределено Тогда

Спс.Добавить(ЗначениеВыбора);

КонецЕсли;

КонецПроцедуры

Процедура УдалитьДокумент(Элемент)

Если СпсИндекс<>Неопределено Тогда

Спс.Удалить(СпсИндекс);

КонецЕсли;

КонецПроцедуры

Процедура УдалитьДокументы(Элемент)

Спс.Очистить();

КонецПроцедуры

Функция Окр1(Требуется,Коэф)

Если Требуется=0 Тогда

Возврат 0;

КонецЕсли;

Округл=Окр(Требуется/Коэф);

Возврат Округл;

КонецФункции

Процедура ПолучитьРесурсы(Товар,МинимальныйОстаток,ПомещаетсяНаПолке)

РегМинОст=РегистрыСведений.МинимальныеОстатки;

Отбор=Новый Структура(«Номенклатура,Склад»,Товар,Куда);

Ресурсы=РегМинОст.Получить(Отбор);

МинимальныйОстаток=Ресурсы.МинимальныйОстаток;

ПомещаетсяНаПолке=Ресурсы.ПомещаетсяНаПолке;

КонецПроцедуры

Процедура КнопкаСформироватьНажатие(Кнопка)

ВыбТовар=Новый СписокЗначений;

Для Каждого ЭлСпс Из СписокГрупп Цикл

Если ЭлСпс.Пометка Тогда

ВыбТовар.Добавить(ЭлСпс.Значение);

КонецЕсли;

КонецЦикла;

Если ВыбТовар.Количество()=0 Тогда

Предупреждение(«Нужно выбрать хотя бы одну группу»);

Возврат;

КонецЕсли;

Если Спс.Количество()>0 Тогда

Запрос=Новый Запрос;

ТекстЗапроса=«ВЫБРАТЬ

| ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура,

| СУММА(ВнутреннийЗаказТовары.Количество) КАК Количество

|ИЗ

| Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары

|ГДЕ

| ВнутреннийЗаказТовары.Ссылка В(&Спс)

| И ВнутреннийЗаказТовары.Номенклатура В ИЕРАРХИИ(&ВыбТовар)

|

|СГРУППИРОВАТЬ ПО

| ВнутреннийЗаказТовары.Номенклатура»;

Запрос.УстановитьПараметр(«Спс»,Спс);

Запрос.УстановитьПараметр(«ВыбТовар»,ВыбТовар);

Запрос.Текст=ТекстЗапроса;

Результат=Запрос.Выполнить();

Табл=Результат.Выгрузить();

КонецЕсли;

Запрос= Новый Запрос;

ТекстЗапроса=«ВЫБРАТЬ

| Номенклатура.Ссылка

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| Номенклатура.ЭтоГруппа = &Ложь

| И Номенклатура.Ссылка В ИЕРАРХИИ(&ВыбТовар)»;

Запрос.УстановитьПараметр(«Ложь»,Ложь);

Запрос.УстановитьПараметр(«ВыбТовар»,ВыбТовар);

Запрос.Текст=ТекстЗапроса;

Результат=Запрос.Выполнить();

Док=Документы.ВнутреннийЗаказ.СоздатьДокумент();

Док.Организация=ПолучитьОсновнуюОрганизацию(глЗначениеПеременной(«глТекущийПользователь»));;

Док.Ответственный=глЗначениеПеременной(«глТекущийПользователь»);

Док.Дата=ТекущаяДата();

Док.УстановитьНовыйНомер();

Док.Заказчик=Куда;

Выборка=Результат.Выбрать();

Пока Выборка.Следующий() Цикл

Товар=Выборка.Ссылка;

УжеПеремещено=0;

Если Спс.Количество()>0 Тогда

НайденнаяСтрока=Табл.Найти(Товар,»Номенклатура»);

Если НайденнаяСтрока<>Неопределено Тогда

УжеПеремещено=НайденнаяСтрока.Количество;

КонецЕсли;

КонецЕсли;

ОстатокКуда=ПолучитьОстатокНаСкладе(Товар,Куда)+УжеПеремещено;

ПолучитьРесурсы(Товар,МинимальныйОстатокРасчетный,ПомещаетсяНаПолке);

Если УчитыватьРезерв Тогда

ОстатокКуда=ОстатокКуда-ПолучитьРезерв(Товар,Куда);

КонецЕсли;

Если ОперативныйЗаказ Тогда

Если ОстатокКуда>=МинимальныйОстатокРасчетный * 0.3 Тогда

Продолжить;

КонецЕсли;

КонецЕсли;

ОстатокОткуда=ПолучитьОстатокНаСкладе(Товар,Откуда);

Если УчитыватьРезерв Тогда

ОстатокОткуда=ОстатокОткуда-ПолучитьРезерв(Товар,Откуда);

КонецЕсли;

Если Не ВключатьНулевыеПозиции Тогда

Если ОстатокОткуда<=0 Тогда

Продолжить;

КонецЕсли;

КонецЕсли;

ДолжноБыть=Макс(МинимальныйОстатокРасчетный,ПомещаетсяНаПолке);

ТребуетсяПереместитьВШтуках=ДолжноБыть-ОстатокКуда;

Если (ОстатокОткуда>0) и (ОстатокКуда=0) и (МинимальныйОстатокРасчетный=0) Тогда

ТребуетсяПереместитьВШтуках=1;

КонецЕсли;

Если ТребуетсяПереместитьВШтуках>0 Тогда

НовСтр=Док.Товары.Добавить();

НовСтр.Номенклатура=Товар;

НовСтр.Размещение=Откуда;

НовСтр.ЕдиницаИзмерения=Товар.ЕдиницаХраненияОстатков;

НовСтр.Коэффициент=Товар.ЕдиницаХраненияОстатков.Коэффициент;

НовСтр.Затребовано=ТребуетсяПереместитьВШтуках;

КолВоВУпаковке=ПолучитьЕдиницуИзмерения(Товар);

ПотребностьВУпаковках=Окр1(ТребуетсяПереместитьВШтуках,КолВоВУпаковке);

ПотребностьВШтуках=ПотребностьВУпаковках * КолВоВУпаковке;

Если ОстатокКуда<МинимальныйОстатокРасчетный Тогда

Если ОстатокОткуда>=ПотребностьВШтуках Тогда

НовСтр.Количество=ПотребностьВШтуках;

Иначе

НовСтр.Количество=ОстатокОткуда;

КонецЕсли;

Иначе

Если ПотребностьВШтуках+ОстатокКуда<=ПомещаетсяНаПолке Тогда

СвободныйОстаток=ПомещаетсяНаПолке-МинимальныйОстатокРасчетный;

Если СвободныйОстаток>0 Тогда

Если ПотребностьВШтуках / СвободныйОстаток > 0.5 Тогда

Если ОстатокОткуда>=ПотребностьВШтуках Тогда

НовСтр.Количество=ПотребностьВШтуках;

Иначе

НовСтр.Количество=ОстатокОткуда;

КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецЕсли;

Если (ОстатокКуда=0) и (МинимальныйОстатокРасчетный=0) Тогда

НовСтр.Затребовано=ПотребностьВШтуках;

Если ОстатокОткуда>=ПотребностьВШтуках Тогда

НовСтр.Количество=ПотребностьВШтуках;

Иначе

НовСтр.Количество=ОстатокОткуда;

КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецЦикла;

Если Док.Товары.Количество()>0 Тогда

Док.Записать();

Док.ПолучитьФорму().Открыть();

КонецЕсли;

КонецПроцедуры

Процедура Кнопка1Нажатие(Элемент)

ДобавитьДокумент(0);

КонецПроцедуры

Процедура Кнопка2Нажатие(Элемент)

ДобавитьДокумент(1);

КонецПроцедуры

Процедура СпсПриАктивизацииСтроки(Элемент)

Если Элемент.ТекущаяСтрока<>Неопределено Тогда

СпсИндекс=Спс.Индекс(Элемент.ТекущаяСтрока);

Иначе

СпсИндекс=Неопределено;

КонецЕсли;

КонецПроцедуры

Процедура ПриОткрытии()

Откуда=Справочники.Склады.НайтиПоНаименованию(«Главный склад»);

Куда=Справочники.Склады.НайтиПоНаименованию(«Народный»);

Запрос=Новый Запрос;

Запрос.Текст=«ВЫБРАТЬ

| Номенклатура.Ссылка,

| Номенклатура.ЭтоГруппа

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| Номенклатура.ЭтоГруппа = &ЭтоГруппа

|

|УПОРЯДОЧИТЬ ПО

| Номенклатура.Наименование»;

Запрос.УстановитьПараметр(«ЭтоГруппа»,Истина);

Результат=Запрос.Выполнить();

Выборка=Результат.Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.Ссылка.Родитель.Пустая() Тогда

СписокГрупп.Добавить(Выборка.Ссылка,,Ложь);

КонецЕсли;

КонецЦикла;

УчитыватьРезерв=Истина;

КонецПроцедуры

Процедура СписокГруппВыбор(Элемент, ЭлементСписка)

ЭлементСписка.Пометка=Не ЭлементСписка.Пометка;

КонецПроцедуры

Процедура КнопкаУстановитьФлажкиНажатие(Элемент)

СписокГрупп.ЗаполнитьПометки(Истина);

КонецПроцедуры

Процедура КнопкаСнятьФлажкиНажатие(Элемент)

СписокГрупп.ЗаполнитьПометки(Ложь);

КонецПроцедуры

СпсИндекс=Неопределено;

Размещено на Allbest.ru

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]