Файл: Разработка регламента выполнения процесса «Складской учет..pdf
Добавлен: 16.06.2023
Просмотров: 209
Скачиваний: 3
СОДЕРЖАНИЕ
1 Построение бизнес-процессов «как есть»
1.1 Описание предметной области. Постановка задачи
1.2 Выбор средства для моделирования бизнес-процессов
1.3 Моделирование бизнес-процессов «как есть»
2 Построение бизнес-процессов «как должно быть»
2.1 Предлагаемые мероприятия по улучшению бизнес-процессов
2.2 Моделирование бизнес-процессов «как должно быть»
Список использованной литературы
Приложение А - Проектирование системы
А.1 Проектирование пользовательского интерфейса
Задать цены на номенклатуру товаров
Сформировать ведомость поступления товаров
Сформировать ведомость реализации товаров
Приложение Б – Код модуля объекта документа “Расходная накладная”.
|
Листинг 1 – Модуль объекта |
|
Процедура ОбработкаПроведения(Отказ, Режим) Запрос=Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяПереченьНоменклатуры.Номенклатура, | СУММА(РасходнаяНакладнаяПереченьНоменклатуры.Количество) КАК Количество, | РасходнаяНакладнаяПереченьНоменклатуры.Цена, | РасходнаяНакладнаяПереченьНоменклатуры.Сумма, | РасходнаяНакладнаяПереченьНоменклатуры.ИтоговаяСумма |ПОМЕСТИТЬ Док |ИЗ | Документ.РасходнаяНакладная.ПереченьНоменклатуры КАК РасходнаяНакладнаяПереченьНоменклатуры |ГДЕ | РасходнаяНакладнаяПереченьНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяПереченьНоменклатуры.Номенклатура, | РасходнаяНакладнаяПереченьНоменклатуры.Цена, | РасходнаяНакладнаяПереченьНоменклатуры.Сумма, | РасходнаяНакладнаяПереченьНоменклатуры.ИтоговаяСумма |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Док.Номенклатура КАК Номенклатура, | ТоварыНаСкладеОстатки.Партия КАК Партия, | Док.Количество КАК Количество, | Док.Цена КАК Цена, | Док.Сумма КАК Сумма, | Док.ИтоговаяСумма КАК ИтоговаяСумм, | ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ТоварыНаСкладеОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ТоварыНаСкладеОстатки.Склад КАК Склад, | ТоварыНаСкладеОстатки.СтавкаНДС КАК СтавкаНДС |ИЗ | Док КАК Док | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки( | &МоментВремени, | Номенклатура В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | Док.Номенклатура | ИЗ | Док КАК Док)) КАК ТоварыНаСкладеОстатки | ПО Док.Номенклатура = ТоварыНаСкладеОстатки.Номенклатура | |УПОРЯДОЧИТЬ ПО | ТоварыНаСкладеОстатки.Партия УБЫВ |ИТОГИ | МАКСИМУМ(Количество), | СУММА(КоличествоОстаток) |ПО | Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); РезультатЗапроса=Запрос.Выполнить(); ВыборкаИтогов=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Движения.ТоварыНаСкладе.Записывать = Истина; Пока ВыборкаИтогов.Следующий() Цикл Если ВыборкаИтогов.Количество>ВыборкаИтогов.КоличествоОстаток Тогда Сообщить("Товара "+ВыборкаИтогов.Номенклатура+" в наличии только "+ ВыборкаИтогов.КоличествоОстаток+" шт. Документ """+Ссылка+""" не проведен!"); Отказ=Истина; Продолжить; Иначе НадоСписать=ВыборкаИтогов.Количество; Выборка=ВыборкаИтогов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() И НадоСписать<>0 Цикл СписатьСПартии=МИН(НадоСписать, Выборка.КоличествоОстаток); Если Выборка.КоличествоОстаток > 0 Тогда СуммаСписания=СписатьСПартии*Выборка.СуммаОстаток/Выборка.КоличествоОстаток; Иначе CуммаСписания=Выборка.СуммаОстаток; КонецЕсли; НадоСписать=НадоСписать-СписатьСПартии; Движение=Движения.ТоварыНаСкладе.ДобавитьРасход(); Движение.Период=Дата; Движение.Номенклатура=Выборка.Номенклатура; Движение.Партия=Выборка.Партия; Движение.Количество=СписатьСПартии; Движение.Стоимость=СуммаСписания; Движение.Сумма=СписатьСПартии*Выборка.Цена; РаботаСоСправочниками.СтрокаВЧисло(Выборка.СтавкаНДС); Движение.ИтоговаяСумма= (РаботаСоСправочниками.СтрокаВЧисло(Выборка.СтавкаНДС)/100+1)*СписатьСПартии*Выборка.Цена; Движение.Цена=Выборка.Цена; Движение.СтавкаНДС = Выборка.СтавкаНДС; Движение.Склад=Выборка.Склад; КонецЦикла; КонецЕсли; КонецЦикла; КонецПроцедуры |
Приложение Г – Функции и процедуры конфигурации
|
Листинг 2 – Модуль “РаботаСоСправочниками” |
|
Функция АктуальнаяЗакупочнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры); ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор); Возврат ЗначенияРесурсов.ЗакупочнаяЦена; КонецФункции Функция АктуальнаяРозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры); ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор); Возврат ЗначенияРесурсов.РозничнаяЦена; КонецФункции Функция ПоставщикНоменклатуры(АктуальнаяДата, ЭлементНоменклатуры) Экспорт Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры); ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор); Возврат ЗначенияРесурсов.Поставщик; КонецФункции Функция СтрокаВЧисло(Знач Строка, Знач Пусто = 0, Знач Ошибка = 0) Экспорт Перем Результат, НомерСимвола, МаксНомерСимвола, ТекущийСимвол, Алфавит , Отрицательное, ЕстьДробнаяЧасть; Если Не ПустаяСтрока(Строка) Тогда Строка = СокрЛП(Строка); МаксНомерСимвола = СтрДлина(Строка); // Определяем знак числа и удаляем его из исходной строки. ТекущийСимвол = Лев(Строка, 1); Алфавит = "+-"; Если Найти(Алфавит, ТекущийСимвол) > 0 Тогда Строка = Сред(Строка, 2); МаксНомерСимвола = МаксНомерСимвола - 1; Отрицательное = (ТекущийСимвол = "-"); Иначе Отрицательное = Ложь; КонецЕсли; // С начала исходной строки определяем последовательность максимальной длины, // конторая может быть распознана как число. НомерСимвола = 1; Алфавит = "0123456789 .," + Символы.НПП; Пока НомерСимвола <= МаксНомерСимвола Цикл ТекущийСимвол = Сред(Строка, НомерСимвола, 1); Если Найти(Алфавит, ТекущийСимвол) = 0 Тогда Прервать; КонецЕсли; НомерСимвола = НомерСимвола + 1; КонецЦикла; // Удаляем правую часть строки, которая не участвует в распознавании. Если НомерСимвола <= МаксНомерСимвола Тогда Строка = Лев(Строка, НомерСимвола - 1); МаксНомерСимвола = НомерСимвола - 1; КонецЕсли; Если МаксНомерСимвола > 0 Тогда // Очищаем строку слева и справа от пробельных символов. Алфавит = " " + Символы.НПП; Пока Найти(Алфавит, Лев(Строка, 1)) > 0 Цикл Строка = Сред(Строка, 2); МаксНомерСимвола = МаксНомерСимвола - 1; КонецЦикла; Пока Найти(Алфавит, Прав(Строка, 1)) > 0 Цикл Строка = Лев(Строка, МаксНомерСимвола - 1); МаксНомерСимвола = МаксНомерСимвола - 1; КонецЦикла; // Определяем максимальное количество цифр справа, которые могут быть // распознаны как дробная часть НомерСимвола = МаксНомерСимвола; Алфавит = "012345679"; Пока НомерСимвола >= 1 Цикл ТекущийСимвол = Сред(Строка, НомерСимвола, 1); Если Найти(Алфавит, ТекущийСимвол) = 0 Тогда Прервать; КонецЕсли; НомерСимвола = НомерСимвола - 1; КонецЦикла; Если НомерСимвола > 0 Тогда // Для строки "123,456": "456" - дробная часть // Для строки "1,123,456": "456" - последняя триада целой части Если Найти(".,", ТекущийСимвол) > 0 И Не (МаксНомерСимвола - НомерСимвола = 3 И МаксНомерСимвола >= 9 И Сред(Строка, НомерСимвола - 4, 1) = ТекущийСимвол) Тогда Строка = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Лев(Строка, НомерСимвола - 1), ".", ""), ",", ""), " ", ""), Символы.НПП, "") + "." + Сред(Строка, НомерСимвола + 1); Иначе Строка = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Строка, ".", ""), ",", ""), " ", ""), Символы.НПП, ""); КонецЕсли; КонецЕсли; Строка = ?(Отрицательное, "-", "") + Строка; КонецЕсли; КонецЕсли; Если ПустаяСтрока(Строка) Тогда Результат = Пусто; Иначе Попытка Результат = Число(Строка); Исключение Результат = Ошибка; КонецПопытки; КонецЕсли; Возврат Результат; КонецФункции // СтрокаВЧисло() |