Файл: Разработка конфигурации, реализующий учет хозяйственных товаров на складе.pdf
Добавлен: 28.06.2023
Просмотров: 52
Скачиваний: 3
Для Каждого ТекСтрокаТовары Из Товары Цикл
ОбластьТовары. Параметры. Заполнить (ТекСтрокаТовары);
КолВо = КолВо + 1;
ТабДок. Вывести (ОбластьТовары);
КонецЦикла;
// вывод области "Всего"
Область = Макет. ПолучитьОбласть ("Всего");
Область. Параметры. ИтогСумма = Товары. Итог ("Сумма");
СуммаДок = Область. Параметры. ИтогСумма;
СуммаНДС = СуммаДок - (СуммаДок/1.18);
Область. Параметры. СуммаНДС = СуммаНДС;
Область. Параметры. Заполнить (ЭтотОбъект);
ТабДок. Вывести (Область);
// вывод области "Сумма"
Область = Макет. ПолучитьОбласть ("Сумма");
Область. Параметры. СуммаДокумента = ЧислоПрописью (СуммаДок,, "Рубль, рубля, рублей, м, копейка, копейки, копеек, ж");
Область. Параметры. КолВо = КолВо;
Область. Параметры. Заполнить (ЭтотОбъект);
ТабДок. Вывести (Область);
ТабДок. ОтображатьСетку = Ложь;
ТабДок. Защита = Ложь;
ТабДок. ТолькоПросмотр = Ложь;
ТабДок. ОтображатьЗаголовки = Ложь;
ТабДок. Показать ();
КонецПроцедуры.
Документ Продажа товара включает дополнительные реквизиты в шапке документа: Фирма, Покупатель, Комментарий; в табличной части: Наименование, Количество, Цена, Сумма. Поле Наименование должно иметь кнопку выбора для выбора товара из справочника, поле Количество должно иметь кнопку выбора для вызова калькулятора. Значение поля Цена должно подставляться из справочника. Сумма в строке должна рассчитываться автоматически. Под табличной частью должна выводиться итоговая сумма по всем строкам. Должна формироваться печатная форма документа в виде расходной накладной. В печатных формах всех документов рассчитывается и указывается сумма НДС, общее количество наименований товара и сумма прописью. Документы должны иметь возможность записи без проведения и с проведением.
Текст процедур прописываем в модуле документа:
Процедура ТоварыНаименованиеПриИзменении (Элемент)
Строка=ЭлементыФормы. Товары. ТекущиеДанные;
Строка. Цена=Строка. Наименование. ЦенаПокупки;
КонецПроцедуры.
Процедура ТоварыКолВоПриИзменении (Элемент)
Строка=ЭлементыФормы. Товары. ТекущиеДанные;
Строка. Сумма=Строка. КолВо*Строка. Цена;
СуммаДок=Товары. Итог ("Сумма");
КонецПроцедуры
Процедура ПриОткрытии ()
Фирма=Константы. НаименованиеФирмы. Получить ();
КонецПроцедуры
Процедура Печать (Элемент)
ТабДок = Новый ТабличныйДокумент;
Макет = Документы. ПродажаТовара. ПолучитьМакет ("Печать");
// Заголовок
Область = Макет. ПолучитьОбласть ("Заголовок");
Область. Параметры. Заполнить (ЭтотОбъект);
ТабДок. Вывести (Область);
// Шапка
Шапка = Макет. ПолучитьОбласть ("Шапка");
Шапка. Параметры. Заполнить (ЭтотОбъект);
ТабДок. Вывести (Шапка);
// Товары
Область = Макет. ПолучитьОбласть ("ТоварыШапка");
ТабДок. Вывести (Область);
КолВо = 0;
ОбластьТовары = Макет. ПолучитьОбласть ("Товары");
Для Каждого ТекСтрокаТовары Из Товары Цикл
ОбластьТовары. Параметры. Заполнить (ТекСтрокаТовары);
КолВо = КолВо + 1;
ТабДок. Вывести (ОбластьТовары);
КонецЦикла;
// вывод области "Всего"
Область = Макет. ПолучитьОбласть ("Всего");
Область. Параметры. ИтогСумма = Товары. Итог ("Сумма");
СуммаДок = Область. Параметры. ИтогСумма;
СуммаНДС = СуммаДок - (СуммаДок/1.18);
Область. Параметры. СуммаНДС = СуммаНДС;
Область. Параметры. Заполнить (ЭтотОбъект);
ТабДок. Вывести (Область);
// вывод области "Сумма"
Область = Макет. ПолучитьОбласть ("Сумма");
Область. Параметры. СуммаДокумента = ЧислоПрописью (СуммаДок,, "Рубль, рубля, рублей, м, копейка, копейки, копеек, ж");
Область. Параметры. КолВо = КолВо;
Область. Параметры. Заполнить (ЭтотОбъект);
ТабДок. Вывести (Область);
ТабДок. ОтображатьСетку = Ложь;
ТабДок. Защита = Ложь;
ТабДок. ТолькоПросмотр = Ложь;
ТабДок. ОтображатьЗаголовки = Ложь;
ТабДок. Показать ();
КонецПроцедуры
Работа с журналами документов. Создаем 2 журнала: Документы по закупкам и Документы по продажам. Журналы должны включать дополнительные реквизиты Контрагент и Сумма по документу.
Работа с отчетами. Создаем 4 отчета: Прайс-лист, Остатки товаров на складе, Отчет по закупкам и Отчет по продажам. Отчёт Остатки товаров на складе должен иметь возможность детализации по отдельным товарам. Отчёты по закупкам и продажам должны формироваться за период с детализацией по контрагентам. Существует необходимость осуществления сложной обработки данных, которую очень сложно получить, непосредственно работая со справочниками, документами, регистрами и журналами, для выполнения такой обработки существует механизм запросов. Запросы мы используем при создании отчета Остатки, а остальные создаем с помощью схемы компоновки данных.
Рисунок 13 - Окно отчета Прайс - лист
Рисунок 14 - Окно отчета Отчет по закупкам
Рисунок 15 - Окно отчета Отчет по продажам
Отчет Остатки товаров на складе создали с помощью запроса, процедуру прописываем в модуле формы отчета.
Процедура КнопкаСформироватьНажатие (Кнопка)
ТабДок = Новый ТабличныйДокумент;
Макет = ЭтотОбъект. ПолучитьМакет ("Макет");
ОбластьМакета = Макет. ПолучитьОбласть ("Шапка");
ОбластьМакета. Параметры. ТекущаяДата = ТекущаяДата ();
ТабДок. Вывести (ОбластьМакета);
Запрос = Новый Запрос;
Если Товары. Наименование <> "" Тогда
Запрос. Текст = "
|Выбрать
| ОстаткиТовараОстатки. Товары,
| ОстаткиТовараОстатки. Товары. Наименование КАК Наименование,
| ОстаткиТовараОстатки. КолВоОстаток КАК Количество
| Из
| РегистрНакопления. ОстаткиТовара. Остатки КАК ОстаткиТовараОстатки
| Где
| ОстаткиТовараОстатки. Товары В (&Товары)
|";
Иначе
Запрос. Текст = "
|ВЫБРАТЬ
| ОстаткиТовараОстатки. Товары,
| ОстаткиТовараОстатки. Товары. Наименование КАК Наименование,
|ОстаткиТовараОстатки. КолВоОстаток КАК Количество
| Из
| РегистрНакопления. ОстаткиТовара. Остатки КАК ОстаткиТовараОстатки
|";
КонецЕсли;
Запрос. УстановитьПараметр ("Товары", Товары);
Результат = Запрос. Выполнить ();
Выборка = Результат. Выбрать ();
Пока Выборка. Следующий () Цикл
ОбластьМакета = Макет. ПолучитьОбласть ("Товар");
ОбластьМакета. Параметры. Товар = Выборка. Наименование;
ОбластьМакета. Параметры. Количество = Выборка. Количество;
ТабДок. Вывести (ОбластьМакета);
КонецЦикла;
ТабДок. Показать ();
КонецПроцедуры
Рисунок 16 - Окно отчета Остатки
Создание пользователей.
В системе 1С: Предприятие 8.2 для авторизации используется список пользователей, для разграничения полномочий мы создаем в объекте роли 2 пользователей и создаем 2 интерфейса, устанавливаем в каждом набор прав, для разрешения доступа только к необходимым объектам.
Для работы с конфигурацией мы создали двух пользователей. Первый пользователь - Иванов (Администратор) с полными правами и интерфейсом, а второй - Петров (менеджер) с ограниченными правами (нельзя редактировать константы) и с ограниченным интерфейсом (нет пункта Операции в главном меню).
Процедуры описываем в модуле объекта:
Процедура СтартПередСтартом (ТочкаМаршрутаБизнесПроцесса, Отказ)
НужноЗаписать = Ложь;
ЕСЛИ Счет. Пустая () ТОГДА
СчетОбъект = Документы. ЗаявкиПокупателя. СоздатьДокумент ();
СчетОбъект. Дата = ТекущаяДата ();
СчетОбъект. Записать ();
Счет = СчетОбъект. Ссылка;
НужноЗаписать = Истина;
КОНЕЦЕСЛИ;
ЕСЛИ РасходнаяНакладная. Пустая () ТОГДА
РасходнаяНакладнаяОбъект = Документы. ПродажаТовара. СоздатьДокумент ();
РасходнаяНакладнаяОбъект. Дата = ТекущаяДата ();
РасходнаяНакладнаяОбъект. Записать ();
РасходнаяНакладная = РасходнаяНакладнаяОбъект. Ссылка;
НужноЗаписать = Истина;
КОНЕЦЕСЛИ;
ЕСЛИ НужноЗаписать ТОГДА
Записать ();
КОНЕЦЕСЛИ;
СООБЩИТЬ ("Старт бизнес-процесса: " + """" + ЭтотОбъект. МетаДанные (). Синоним+"""");
КонецПроцедуры.
Процедура СчетОплаченПроверкаУсловия (ТочкаМаршрутаБизнесПроцесса, Результат)
Результат = Счет. ОплатаСчета;
КонецПроцедуры.
Процедура ВыпискаСчетаОбработкаИнтерактивнойАктивации (ТочкаМаршрутаБизнесПроцесса, Задача, СтандартнаяОбработка)
Счет. ПолучитьФорму ("ФормаДокумента"). Открыть ();
СтандартнаяОбработка=Ложь;
КонецПроцедуры.
Процедура ВыпискаСчетаПередИнтерактивнымВыполнением (ТочкаМаршрутаБизнесПроцесса, Задача, Отказ)
Если Счет. Товары. Количество () =0 тогда
Отказ=Истина;
КонецЕсли;
КонецПроцедуры.
Процедура ВыпискаНакладнойОбработкаИнтерактивнойАктивации (ТочкаМаршрутаБизнесПроцесса, Задача, СтандартнаяОбработка)
РасходнаяНакладная. ПолучитьФорму ("ФормаДокумента"). Открыть ();
СтандартнаяОбработка=Ложь;
КонецПроцедуры.
Процедура ВыпискаНакладнойПередИнтерактивнымВыполнением (ТочкаМаршрутаБизнесПроцесса, Задача, Отказ)
Если РасходнаяНакладная. Товары. Количество () =0 тогда
Отказ=Истина;
КонецЕсли;
КонецПроцедуры.
Процедура ОтгрузкаСоСкладаОбработкаИнтерактивнойАктивации (ТочкаМаршрутаБизнесПроцесса, Задача, СтандартнаяОбработка)
РасходнаяНакладная. ПолучитьФорму ("ФормаДокумента"). Открыть ();
СтандартнаяОбработка=Ложь;
КонецПроцедуры.
Процедура НормальноеЗавершениеПриЗавершении (ТочкаМаршрутаБизнесПроцесса, Отказ)
Сообщить ("Завершение бизнес-процесса: "+""""+ЭтотОбъект. Метаданные (). Синоним+"""");
КонецПроцедуры.
Процедура НетПриЗавершении (ТочкаМаршрутаБизнесПроцесса, Отказ)
Сообщить ("Досрочное завершение бизнес-процесса: "+""""+ЭтотОбъект. Метаданные (). Синоним+"""");
КонецПроцедуры.
В модуле обычного приложения определяем процедуры:
Процедура ПриНачалеРаботыСистемы ()
ПараметрыСеанса. ТекущийИсполнитель=Справочники. Сотрудники. НайтиПоКоду (ИмяПользователя ());
ПодключитьОбработчикОповещения ("ОбработчикОповещения");
КонецПроцедуры.
Процедура ОбработчикОповещения (ИмяСобытия, Параметр, Источник) Экспорт
Если ИмяСобытия="ЗаписьСчета" Тогда
Запрос=Новый Запрос;
Запрос. УстановитьПараметр ("Парам", Источник. Ссылка);
Запрос. Текст="ВЫБРАТЬ
|Задача. Ссылка
|Из
|БизнесПроцесс. ПродажаТовара КАК ПродажаТовара ЛЕВОЕ СОЕДИНЕНИЕ Задача. Задача. ЗадачиПоИсполнителю КАК Задача
|ПО ПродажаТовара. Ссылка=Задача. БизнесПроцесс
|ГДЕ (Задача. Выполнена=Ложь) и (ПродажаТовара. Счет=&Парам)";
Выборка=Запрос. Выполнить (). Выбрать ();
Пока Выборка. Следующий () Цикл
ТекущаяЗадача=Выборка. Ссылка. ПолучитьОбъект ();
Если ТекущаяЗадача. ТочкаМаршрута=БизнесПроцессы. ПродажаТовара. ТочкиМаршрута. ВыпискаСчета Тогда
ФормаСчета=ТекущаяЗадача. БизнесПроцесс. Счет. ПолучитьФорму ();
Если ФормаСчета. Открыта () =Истина Тогда
Если Вопрос ("Пометить задачу"""+ТекущаяЗадача. Наименование+"""как выполненную?",РежимДиалогаВопрос. ДаНет) =КодВозвратаДиалога. Да Тогда
ТекущаяЗадача. ВыполнитьЗадачу ();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ИмяСобытия="Списание" Тогда
Запрос=Новый Запрос;
Запрос. УстановитьПараметр ("Парам", Источник. Ссылка);
Запрос. Текст="ВЫБРАТЬ
|Задача. Ссылка
|Из
|БизнесПроцесс. ПродажаТовара КАК ПродажаТовара ЛЕВОЕ СОЕДИНЕНИЕ Задача. Задача. ЗадачиПоИсполнителю КАК Задача
|ПО ПродажаТовара. Ссылка=Задача. БизнесПроцесс
|ГДЕ (Задача. Выполнена=Ложь) и (ПродажаТовара. РасходнаяНакладная=&Парам)";
Выборка=Запрос. Выполнить (). Выбрать ();
Пока Выборка. Следующий () Цикл
ТекущаяЗадача=Выборка. Ссылка. ПолучитьОбъект ();
Если ТекущаяЗадача. ТочкаМаршрута=БизнесПроцессы. ПродажаТовара. ТочкиМаршрута. ВыпискаНакладной Тогда
ФормаДокумента=ТекущаяЗадача. БизнесПроцесс. РасходнаяНакладная. ПолучитьФорму ();