на первый
заказ
Магистерская диссертация на тему: Проектирование и разработка автоматизированной системы учета оптовых и розничных продаж
Введение
4 главаИсходя из поставленных требований, на разрабатываемом информационном портале должно быть два вида пользователей - покупатели и администраторы. Администратор может управлять товарами - добавлять, удалять и редактировать товары. Добавление товаров производится в личном кабинете администратора, а для редактирования и удаления товара необходимо найти товар в общем каталоге либо нажать соответствующую кнопку на странице товара. Вторая основная функция администратора - управление пользователями. Администратор может удалять пользователей, а также подтверждать или отклонять созданные ими заказы. Перед подтверждением или отклонением заказа администратор может совершить звонок клиенту и обсудить все необходимые детали: способ доставки и оплаты при подтверждении заказа или причину отказа при отклонении заказа. Покупатель, как и администратор, может производить поиск необходимого товара в каталоге, а также заказывать товары. Для того чтобы заказать товары, покупателю необходимо добавить товары в корзину и создать заявку, которая будет просмотрена администратором. Покупателю необходимо дождаться звонка администратора и договориться с ним о способе оплаты и доставки товаров (если это не было оговорено ранее). Пользователь может выставлять на продажу б/у товары, купленные ранее на данном портале портала. Для этого ему необходимо найти аналогичный товар в каталоге товаров и заполнить форму с указанием того, в каком состоянии находится б/у товар. Кроме того, пользователи могут выбрать один из товаров в каталоге и добавить к нему фотографии (например, фотографию только что распакованного купленного товара). На рисунке 2.1 приведена диаграмма вариантов использования для информационного портала.
Рисунок 2.1 - Диаграмма вариантов использования для информационного портала
1.1 Проектирование базы данных
В процессе проектирования баз данных выделяют три основных этапа: концептуальное, логическое и физическое проектирование.
Концептуальное (инфологическое) проектирование базы данных - процесс создания модели используемой информации, не зависящей от любых физических аспектов ее представления [14].
Цель инфологического моделирования - обеспечение наиболее естественных для человека способов сбора и представления той информации, которую предполагается хранить в создаваемой базе данных. В связи с этим инфологическую модель данных пытаются строить по аналогии с естественным языком. Основными конструктивными элементами инфологических моделей являются сущности, связи между ними и их свойства (атрибуты) [15].
Взаимодействие элементов разрабатываемой системы можно кратко описать следующим образом: пользователи могут регистрироваться в системе, добавлять товары в корзину, создавать заказы, оставлять отзывы на товары, комментировать отзывы других покупателей (комментарий может быть публичным или скрытым), добавлять фотографии к товарам, размещать б/у товары на продажу. Администратор может удалять пользователей, удалять отзывы и комментарии, создавать, редактировать и удалять товары. Администратор также имеет возможность удалять загруженные фотографии.
В модели разрабатываемого интернет-портала выделим следующие сущности и атрибуты:
- Пользователь (идентификатор_пользователя, имя, электронный адрес, пароль, изображение (аватар), адрес, номер_телефона, дополнительный_номер_телефона, корзина, права_администратора);
- Товар (идентификатор_товара, название, описание, цена, изображение);
- Группа_товара (идентификатор_группы, название, описание);
- Б/У_товар (идентификатор_товара, изображение, состояние, цена, описание, дата_добавления);
- Фото (идентификатор_фото, изображение, дата_добавления);
- Заказ (идентификатор_заказа, корзина_товаров, статус_заказа, дата_создания);
- Отзыв (идентификатор_отзыва, текст_отзыва, оценка);
- Комментарий (идентификатор_комментария, текст_комментария, приватность).
- Новость (идентификатор_новости, краткое_описание_новости, полное_описание_новости)
Одним из распространенных средств построения инфологических моделей является так называемая модель "сущность-связь" (Entity-Relationship Model) [16]. На рис. 2.1 показана ЕR-модель данных информационного портала. В нотации Баркера сущность представляется прямоугольником, содержащим внутри себя имя сущности, список имен атрибутов (возможно, неполный) и указатели ключевых атрибутов (знак "#" перед именем атрибута). Все связи являются бинарными и представляются линиями с двумя концами (соединяющими сущности), для которых должно быть определено имя, степень множественности и степень обязательности. Для множественной связи линия присоединяется к прямоугольнику сущности в трех точках, а для одиночной связи - в одной точке. При обязательной связи рисуется непрерывная линия до середины связи, при необязательной - пунктирная линия.
Рисунок 2.1 - ЕR-модель данных информационного портала
Преобразуем концептуальную модель данных в логическую. Выделим первичные (РК) и вторичные (FК) ключевые атрибуты. Связь "один ко многим" обозначим цифрой "1" и буквой "М". На рисунке 2.2 представлена логическая модель данных.
Рисунок 2.2 - Логическая модель данных информационного портала
Для создания базы данных портала была использована реляционная база данных SQLite.
База данных сайта состоит из восьми таблиц:
- users (пользователи);
- items (товары);
- groups (категории товаров);
- orders (заказы);
- reviews (отзывы);
- comments (комментарии);
- extraphotos (фотографии);
- notifications (новости);
- myitems (б/у товары).
В табл. 2.1 показаны поля таблицы users (пользователи). Таблица users имеет ключевое поле id - идентификатор пользователя, уникальное ненулевое поле email, ненулевые поля name (имя пользователя), password_digest (закодированный пароль), phone (телефон), а также поля remember_token, avatar, address, extra_phone (дополнительный телефон), cart (корзина), admin (поле типа bool, определяющее, является ли пользователь администратором). Необходимо отметить, что кроме рассматриваемых полей таблиц макрос timestamps добавляет еще два столбца, created_at и updated_at. Эти столбцы автоматически управляются Active Record, в случае, если они существуют.
Таблица 2.1 - Структура таблицы users (пользователи)
Название поля
Тип поля
Параметры
Описание
идентификатор пользователя
имя
эл. адрес
зашифрованный пароль
применяется при работе с сессиями
изображение
адрес
номер телефона
доп. номер телефона
корзина
права администратора
дата создания
дата обновления
Покупатели после добавления товаров в корзину могут сделать заказ в интернет-магазине. Структура таблицы orders (заказы) показана в таблице 2.2. У таблицы Orders имеются поля id (идентификатор заказа, ключевое поле), cart (корзина товара), user_id (идентификатор пользователя), done (поле, определяющее статус заказа: "принят" или "в ожидании проверки").
Таблица 2.2 - Структура таблицы orders(заказы)
Название поля
Тип поля
Параметры
Описание
идентификатор заказа
корзина товаров
идентификатор пользователя
статус заказа
дата создания
дата обновления
Организация работы с корзиной товаров будет рассмотрена далее при описании алгоритмов работы сайта. Каждый товар имеет уникальный идентификатор (ключевое поле), название, описание, цену, идентификатор группы и изображение. Структура таблицы товаров представлена в таблице 2.3.
Таблица 2.3 - Структура таблицы items (товары)
Название поля
Тип поля
Параметры
Описание
идентификатор товара
название
описание
цена
идентификатор группы, которой принадлежит товар
изображение
дата создания
дата обновления
Каждый товар относится к какой-либо группе товаров: компьютеры и комплектующие, бытовая техника, телефоны и т.д. Таблица 2.4 содержит список полей таблицы groups, их типы и описание.
Таблица 2.4 - Структура таблицы groups (категории товаров)
Название поля
Тип поля
Параметры
Описание
идентификатор категории
название
описание
дата создания
дата обновления
Информационный портал дает возможность покупателям добавлять отзывы к товарам, а также комментировать отзывы других пользователей. В таблицах 2.5 и 2.6 приведены поля таблиц reviews (отзывы) и comments (комментарии). Обе таблицы имеют поля id (идентификатор записи), text (текст отзыва или комментария), user_id (идентификатор пользователя, создавшего запись). Кроме того, в таблице reviews имеется поле mark типа "целое", в котором хранится оценка товара от 1 до 5, а также поле item_id, определяющее, к какому товару относится отзыв.
Таблица 2.5 - Структура таблицы reviews (отзывы)
Название поля
Тип поля
Параметры
Описание
идентификатор отзыва
текст комментария
идентификатор пользователя
идентификатор товара
оценка
дата создания
дата обновления
В таблице comments имеется поле cprivate типа bool, которое определяет, будет ли виден комментарий всем пользователям портала или только пользователю, к отзыву которому был оставлен комментарий, а также поле review_id - идентификатор отзыва, к которому был сделан комментарий.
Таблица 2.6 - Структура таблицы comments (комментарии)
Название поля
Тип поля
Параметры
Описание
идентификатор комментария
текст комментария
идентификатор пользователя
идентификатор отзыва
приватность
дата создания
дата обновления
На сайте реализована возможность загружать дополнительные фото для товаров. Таблица 2.7 демонстрирует структуру таблицы extraphotos (загруженные фото).
Таблица 2.7 - Структура таблицы extraphotos
Название поля
Тип поля
Параметры
Описание
идентификатор фото
изображение
идентификатор пользователя
идентификатор товара
дата создания
дата обновления
Пользователи имеют возможность разместить на сайте информацию о купленных ранее товарах, которые необходимо продать. Данные об этих товарах хранятся в таблице myitems. Поля таблицы myitems: id (идентификатор б/у товара, picture (изображение товара), user_id (идентификатор пользователя), item_id (идентификатор аналогичного товара в каталоге товаров интернет-портала), status (поле, определяющее состояние товара: отличное, хорошее, удовлетворительное и т.п.), price (цена), description (краткое описание - комментарий пользователя-продавца).
Таблица 2.8 - Структура таблицы myitems (б/у товары)
Название поля
Тип поля
Параметры
Описание
идентификатор фото
изображение
идентификатор пользователя
идентификатор товара в каталоге новых товаров
состояние б/у товара
цена
краткое описание
дата создания
дата обновления
Администратор может размещать новости для информирования пользователей о наступающих акциях или, например, об обновление ассортимента магазина. Таблица notifications имеет поля: title (краткой описание новости), description (полное описание новости).
Таблица 2.9 - Структура таблицы notifications (новости)
Название поля
Тип поля
Параметры
Описание
идентификатор новости
краткое описание
полное описание
дата создания
дата обновления
1.2 Проектирование структуры информационного портала
Знакомство пользователя с порталом начинается с главной страницы (приложение А). С главной страницы можно перейти к списку товаров (приложение Б), к странице контактов (приложение В), а также осуществить вход или регистрацию, если пользователь еще не зарегистрирован.
Покупатель может заказывать товары и просматривать информацию о них в корзине, заходить в личный кабинет (приложение Г). Кроме того, со страницы описания товара пользователь может перейти к добавлению нового фото или созданию б/у товара.
Администратор также имеет свой личный кабинет, из которого осуществляется переход к созданию нового товара, управлению пользователями и заказами (приложение Д).
На рисунке 2.3 показана структура разрабатываемого информационного портала.
1.3 Проектирование интерфейсов информационного портала
Оглавление
- Введение- Выводы
- Список литературы
- Приложение
Заключение
//SettingsStorage.ХранилищеВариантовОтчетов.Form.ФормаЗагрузки.Help.xml//Subsystem.Маркетинг.Subsystem.М.Help.xml
//Subsystem.Продажи.Subsystem.МаркетинговыеМероприятия.xml
ТекДокум=ДанныеСтроки.Ссылка;
Если ТекДокум=Неопределено Тогда
Возврат;
КонецЕсли;
ОформлениеСтроки.Ячейки.ЕДРПОУ.Значение = ТекДокум.Контрагент.ЕДРПОУ;
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ПоступлениеТоваров.Ссылка КАК Ссылка,
| ПоступлениеТоваров.СуммаДокумента КАК Сумма
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
|ГДЕ
| ПоступлениеТоваров.Проведен И
| ПоступлениеТоваров.ДокументОснование = &ВыбОснование
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| КассовыйОрдер.Ссылка КАК Ссылка,
| КассовыйОрдер.Сумма КАК Сумма
|ИЗ
| Документ.КассовыйОрдер КАК КассовыйОрдер
|ГДЕ
| КассовыйОрдер.Проведен И
| КассовыйОрдер.ДокументСделка = &ВыбОснование
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| ПоступлениеДопРасходов.Ссылка КАК Ссылка,
| ПоступлениеДопРасходов.СуммаДокумента КАК Сумма
|ИЗ
| Документ.ПоступлениеДопРасходов КАК ПоступлениеДопРасходов
|ГДЕ
| ПоступлениеДопРасходов.Проведен И
| ПоступлениеДопРасходов.ДокументОснование.Ссылка = &ВыбОснование";
Запрос.УстановитьПараметр("ВыбОснование",ТекДокум);
ТаблДоков=Запрос.Выполнить().Выгрузить();
СуммаПодчиненных = ТаблДоков.Итог("Сумма");
Если СуммаПодчиненных = ТекДокум.СуммаДокумента Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.БледноЗеленый;
ИначеЕсли СуммаПодчиненных > 0 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.СветлоРозовый;
КонецЕсли;
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.СуммаДокумента.Значение=Формат(ДанныеСтроки.Ссылка.Товары.Итог("СуммаВсего")
+ДанныеСтроки.Ссылка.Услуги.Итог("СуммаВсего"),"ЧЦ=15; ЧДЦ=2");
КонецПроцедуры
// ПРОДАЖИ
НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Докум.Ссылка);
НаборЗаписей.Прочитать();
Для каждого Запись Из НаборЗаписей Цикл
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
КонецЦикла;
Для Каждого ТекСтрокаТовары Из Докум.Товары Цикл
Если ТекСтрокаТовары.КоличествоФакт>0 Тогда
Движения=РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
Движения.Отбор.Регистратор.Установить(Докум.Ссылка);
Продажи = Движения.Добавить();
Продажи.Период = Докум.Дата;
Продажи.ПодразделениеКомпании=Докум.ПодразделениеКомпании;
Бла-бла-бла
Движения.Записать(Ложь);
КонецЕсли;
КонецЦикла;
//Оплаты
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ВзаиморасчетыКомпанииОстатки.СуммаОстаток КАК Сумма
|ИЗ
| РегистрНакопления.ВзаиморасчетыКомпании.Остатки(, ) КАК ВзаиморасчетыКомпанииОстатки
|ГДЕ
| ВзаиморасчетыКомпанииОстатки.Сделка = &ВыбСделка";
Запрос.УстановитьПараметр("ВыбСделка",Докум.ДокументОснование);
ТаблОплат=Запрос.Выполнить().Выгрузить();
//ТаблОплат.Свернуть("","Сумма");
Если ТаблОплат.Количество()>0 Тогда
ПоступилаОплата=?((-1)*ТаблОплат[0].Сумма>0,(-1)*ТаблОплат[0].Сумма,0);
Иначе
ПоступилаОплата=0;
КонецЕсли;
Предоплата=0;
Если Докум.СуммаДокумента>ПоступилаОплата Тогда
Предупреждение("Поступившая оплата "+Формат(ПоступилаОплата,"ЧЦ=10; ЧДЦ=2")
+Символы.ПС+"Нужна предоплата в сумме "+Формат(Докум.СуммаДокумента,"ЧЦ=10; ЧДЦ=2")
+Символы.ПС+"Отгрузка на сумму больше предоплаты - нарушение договора!");
КонецЕсли;
// функция сохраняет рабочую конфигурацию в файл, в случае успеха возвращает Истина
// параметры:
// Логин - имя пользователя с правами на админисирирование БД
// Пароль - строка пароля
// ИмяФайла - полное имя файла для сохранения конфигурации, не обязательно.
// по умолчанию использует каталог временных файлов и имя 1Cv8.сf
функция СохранитьТекущуюКонфигурацию (Логин, Пароль, ИмяФайла="") экспорт
результат = Ложь;
Если ИмяФайла = "" Тогда
ИмяФайла = КаталогВременныхФайлов() + "1Cv8.сf";
КонецЕсли;
СтрокаБазы = СтрокаСоединенияИнформационнойБазы();
Если Лев(СтрокаБазы, 5) = "File=" Тогда
// файловый вариант
СтрокаБазы = Сред(СтрокаБазы, 6, СтрДлина(СтрокаБазы) - 6);
Иначе
// серверный вариант пока не готов...
// может кто допишет?
возврат Ложь;
КонецЕсли;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Сигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Иначе
Сигнатура = "";
КонецЕсли;
СтрокаЗапуска = """" + КаталогПрограммы() + "1cv8.exe"" CONFIG /F " + СтрокаБазы
+ ?(Логин = "", "", " /N " + Логин)
+ ?(Пароль = "", "", " /Р " + Пароль) + " /DumpDBCfg """ + ИмяФайла + """";
// КомандаСистемы (СтрокаЗапуска); не работает!!!!! из-за кавычек в параметрах
// приходиться идти кругом...
// зато можно избежать черного окошка
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run(СтрокаЗапуска, 0, Истина);
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
НоваяСигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Если Сигнатура <> НоваяСигнатура Тогда
Результат = Истина;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЗаписатьКонфигурациюВФайл(ИмяФайла="")
Результат = Ложь;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Если ВыбФайл.ЭтоКаталог() Тогда
ИмяФайла="";
КонецЕсли;
КонецЕсли;
Попытка
Массив = ПользователиИнформационнойБазы.ПолучитьПользователей();
Логин = "";
Пароль = "";
Если Массив.Количество() > 0 тогда
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Логин = Пользователь.Имя;
Если Пользователь.ПарольУстановлен Тогда
// тут нужно получить пароль, лучше интерактивно
// но лично мне это совсем не нужно
Предупреждение("У Вас установлен пароль, этот режим сейчас не доступен");
Возврат Ложь;
КонецЕсли
КонецЕсли;
Результат = СохранитьТекущуюКонфигурацию(Логин, Пароль, ИмяФайла);
Если не Результат Тогда
Предупреждение("Конфигурация не сохранена");
Иначе
Сообщить("Конфигурация успешно сохранена в файл: " + ИмяФайла);
КонецЕсли;
Исключение
Предупреждение("У Вас не достаточно прав для сохранения конфигурации");
Возврат Ложь;
КонецПопытки;
Возврат Результат;
КонецФункции
Функция НовПрм(П, Стр) Экспорт
Стр.Вставить("___Родитель", П);
Возврат Стр;
КонецФункции
//Ищет свойство сначала в структуре П, а затем во всех ее родительских структурах
Функция Прм(П, Свойство) Экспорт
Перем Р;
Если П.Свойство(Свойство, Р) Тогда
Возврат Р;
КонецЕсли;
Если П.Свойство("___Родитель", Р) Тогда
Возврат Прм(Р, Свойство);
КонецЕсли;
Возврат Неопределено;
КонецФункции
роцедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ОтраженоВОперУчете = Истина;
ОтражатьВБухгалтерскомУчете = Истина;
ОтражатьВНалоговомУчете = Истина;
Если НЕ ДокументОснование = Неопределено Тогда
ЭлементыФормы.Проект.Значение = ДокументОснование.Проект;
КонецЕсли;
КонецПроцедуры // ПередОткрытием()
ТекДокум=ДанныеСтроки.Ссылка;
Если ТекДокум=Неопределено Тогда
Возврат;
КонецЕсли;
ОформлениеСтроки.Ячейки.ЕДРПОУ.Значение = ТекДокум.Контрагент.ЕДРПОУ;
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ПоступлениеТоваров.Ссылка КАК Ссылка,
| ПоступлениеТоваров.СуммаДокумента КАК Сумма
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
|ГДЕ
| ПоступлениеТоваров.Проведен И
| ПоступлениеТоваров.ДокументОснование = &ВыбОснование
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| КассовыйОрдер.Ссылка КАК Ссылка,
| КассовыйОрдер.Сумма КАК Сумма
|ИЗ
| Документ.КассовыйОрдер КАК КассовыйОрдер
|ГДЕ
| КассовыйОрдер.Проведен И
| КассовыйОрдер.ДокументСделка = &ВыбОснование
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| ПоступлениеДопРасходов.Ссылка КАК Ссылка,
| ПоступлениеДопРасходов.СуммаДокумента КАК Сумма
|ИЗ
| Документ.ПоступлениеДопРасходов КАК ПоступлениеДопРасходов
|ГДЕ
| ПоступлениеДопРасходов.Проведен И
| ПоступлениеДопРасходов.ДокументОснование.Ссылка = &ВыбОснование";
Запрос.УстановитьПараметр("ВыбОснование",ТекДокум);
ТаблДоков=Запрос.Выполнить().Выгрузить();
СуммаПодчиненных = ТаблДоков.Итог("Сумма");
Если СуммаПодчиненных = ТекДокум.СуммаДокумента Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.БледноЗеленый;
ИначеЕсли СуммаПодчиненных > 0 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.СветлоРозовый;
КонецЕсли;
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.СуммаДокумента.Значение=Формат(ДанныеСтроки.Ссылка.Товары.Итог("СуммаВсего")
+ДанныеСтроки.Ссылка.Услуги.Итог("СуммаВсего"),"ЧЦ=15; ЧДЦ=2");
КонецПроцедуры
// ПРОДАЖИ
НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Докум.Ссылка);
НаборЗаписей.Прочитать();
Для каждого Запись Из НаборЗаписей Цикл
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
КонецЦикла;
Для Каждого ТекСтрокаТовары Из Докум.Товары Цикл
Если ТекСтрокаТовары.КоличествоФакт>0 Тогда
Движения=РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
Движения.Отбор.Регистратор.Установить(Докум.Ссылка);
Продажи = Движения.Добавить();
Продажи.Период = Докум.Дата;
Продажи.ПодразделениеКомпании=Докум.ПодразделениеКомпании;
Бла-бла-бла
Движения.Записать(Ложь);
КонецЕсли;
КонецЦикла;
//Оплаты
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ВзаиморасчетыКомпанииОстатки.СуммаОстаток КАК Сумма
|ИЗ
| РегистрНакопления.ВзаиморасчетыКомпании.Остатки(, ) КАК ВзаиморасчетыКомпанииОстатки
|ГДЕ
| ВзаиморасчетыКомпанииОстатки.Сделка = &ВыбСделка";
Запрос.УстановитьПараметр("ВыбСделка",Докум.ДокументОснование);
ТаблОплат=Запрос.Выполнить().Выгрузить();
//ТаблОплат.Свернуть("","Сумма");
Если ТаблОплат.Количество()>0 Тогда
ПоступилаОплата=?((-1)*ТаблОплат[0].Сумма>0,(-1)*ТаблОплат[0].Сумма,0);
Иначе
ПоступилаОплата=0;
КонецЕсли;
Предоплата=0;
Если Докум.СуммаДокумента>ПоступилаОплата Тогда
Предупреждение("Поступившая оплата "+Формат(ПоступилаОплата,"ЧЦ=10; ЧДЦ=2")
+Символы.ПС+"Нужна предоплата в сумме "+Формат(Докум.СуммаДокумента,"ЧЦ=10; ЧДЦ=2")
+Символы.ПС+"Отгрузка на сумму больше предоплаты - нарушение договора!");
КонецЕсли;
// функция сохраняет рабочую конфигурацию в файл, в случае успеха возвращает Истина
// параметры:
// Логин - имя пользователя с правами на админисирирование БД
// Пароль - строка пароля
// ИмяФайла - полное имя файла для сохранения конфигурации, не обязательно.
// по умолчанию использует каталог временных файлов и имя 1Cv8.сf
функция СохранитьТекущуюКонфигурацию (Логин, Пароль, ИмяФайла="") экспорт
результат = Ложь;
Если ИмяФайла = "" Тогда
ИмяФайла = КаталогВременныхФайлов() + "1Cv8.сf";
КонецЕсли;
СтрокаБазы = СтрокаСоединенияИнформационнойБазы();
Если Лев(СтрокаБазы, 5) = "File=" Тогда
// файловый вариант
СтрокаБазы = Сред(СтрокаБазы, 6, СтрДлина(СтрокаБазы) - 6);
Иначе
// серверный вариант пока не готов...
// может кто допишет?
возврат Ложь;
КонецЕсли;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Сигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Иначе
Сигнатура = "";
КонецЕсли;
СтрокаЗапуска = """" + КаталогПрограммы() + "1cv8.exe"" CONFIG /F " + СтрокаБазы
+ ?(Логин = "", "", " /N " + Логин)
+ ?(Пароль = "", "", " /Р " + Пароль) + " /DumpDBCfg """ + ИмяФайла + """";
// КомандаСистемы (СтрокаЗапуска); не работает!!!!! из-за кавычек в параметрах
// приходиться идти кругом...
// зато можно избежать черного окошка
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run(СтрокаЗапуска, 0, Истина);
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
НоваяСигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Если Сигнатура <> НоваяСигнатура Тогда
Результат = Истина;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЗаписатьКонфигурациюВФайл(ИмяФайла="")
Результат = Ложь;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Если ВыбФайл.ЭтоКаталог() Тогда
ИмяФайла="";
КонецЕсли;
КонецЕсли;
Попытка
Массив = ПользователиИнформационнойБазы.ПолучитьПользователей();
Логин = "";
Пароль = "";
Если Массив.Количество() > 0 тогда
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Логин = Пользователь.Имя;
Если Пользователь.ПарольУстановлен Тогда
// тут нужно получить пароль, лучше интерактивно
// но лично мне это совсем не нужно
Предупреждение("У Вас установлен пароль, этот режим сейчас не доступен");
Возврат Ложь;
КонецЕсли
КонецЕсли;
Результат = СохранитьТекущуюКонфигурацию(Логин, Пароль, ИмяФайла);
Если не Результат Тогда
Предупреждение("Конфигурация не сохранена");
Иначе
Сообщить("Конфигурация успешно сохранена в файл: " + ИмяФайла);
КонецЕсли;
Исключение
Предупреждение("У Вас не достаточно прав для сохранения конфигурации");
Возврат Ложь;
КонецПопытки;
Возврат Результат;
КонецФункции
Функция НовПрм(П, Стр) Экспорт
Стр.Вставить("___Родитель", П);
Возврат Стр;
КонецФункции
//Ищет свойство сначала в структуре П, а затем во всех ее родительских структурах
Функция Прм(П, Свойство) Экспорт
Перем Р;
Если П.Свойство(Свойство, Р) Тогда
Возврат Р;
КонецЕсли;
Если П.Свойство("___Родитель", Р) Тогда
Возврат Прм(Р, Свойство);
КонецЕсли;
Возврат Неопределено;
КонецФункции
роцедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ОтраженоВОперУчете = Истина;
ОтражатьВБухгалтерскомУчете = Истина;
ОтражатьВНалоговомУчете = Истина;
Если НЕ ДокументОснование = Неопределено Тогда
ЭлементыФормы.Проект.Значение = ДокументОснование.Проект;
КонецЕсли;
КонецПроцедуры // ПередОткрытием()
ТекДокум=ДанныеСтроки.Ссылка;
Если ТекДокум=Неопределено Тогда
Возврат;
КонецЕсли;
ОформлениеСтроки.Ячейки.ЕДРПОУ.Значение = ТекДокум.Контрагент.ЕДРПОУ;
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ПоступлениеТоваров.Ссылка КАК Ссылка,
| ПоступлениеТоваров.СуммаДокумента КАК Сумма
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
|ГДЕ
| ПоступлениеТоваров.Проведен И
| ПоступлениеТоваров.ДокументОснование = &ВыбОснование
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| КассовыйОрдер.Ссылка КАК Ссылка,
| КассовыйОрдер.Сумма КАК Сумма
|ИЗ
| Документ.КассовыйОрдер КАК КассовыйОрдер
|ГДЕ
| КассовыйОрдер.Проведен И
| КассовыйОрдер.ДокументСделка = &ВыбОснование
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| ПоступлениеДопРасходов.Ссылка КАК Ссылка,
| ПоступлениеДопРасходов.СуммаДокумента КАК Сумма
|ИЗ
| Документ.ПоступлениеДопРасходов КАК ПоступлениеДопРасходов
|ГДЕ
| ПоступлениеДопРасходов.Проведен И
| ПоступлениеДопРасходов.ДокументОснование.Ссылка = &ВыбОснование";
Запрос.УстановитьПараметр("ВыбОснование",ТекДокум);
ТаблДоков=Запрос.Выполнить().Выгрузить();
СуммаПодчиненных = ТаблДоков.Итог("Сумма");
Если СуммаПодчиненных = ТекДокум.СуммаДокумента Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.БледноЗеленый;
ИначеЕсли СуммаПодчиненных > 0 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.СветлоРозовый;
КонецЕсли;
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.СуммаДокумента.Значение=Формат(ДанныеСтроки.Ссылка.Товары.Итог("СуммаВсего")
+ДанныеСтроки.Ссылка.Услуги.Итог("СуммаВсего"),"ЧЦ=15; ЧДЦ=2");
КонецПроцедуры
// ПРОДАЖИ
НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Докум.Ссылка);
НаборЗаписей.Прочитать();
Для каждого Запись Из НаборЗаписей Цикл
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
КонецЦикла;
Для Каждого ТекСтрокаТовары Из Докум.Товары Цикл
Если ТекСтрокаТовары.КоличествоФакт>0 Тогда
Движения=РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
Движения.Отбор.Регистратор.Установить(Докум.Ссылка);
Продажи = Движения.Добавить();
Продажи.Период = Докум.Дата;
Продажи.ПодразделениеКомпании=Докум.ПодразделениеКомпании;
Бла-бла-бла
Движения.Записать(Ложь);
КонецЕсли;
КонецЦикла;
//Оплаты
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ВзаиморасчетыКомпанииОстатки.СуммаОстаток КАК Сумма
|ИЗ
| РегистрНакопления.ВзаиморасчетыКомпании.Остатки(, ) КАК ВзаиморасчетыКомпанииОстатки
|ГДЕ
| ВзаиморасчетыКомпанииОстатки.Сделка = &ВыбСделка";
Запрос.УстановитьПараметр("ВыбСделка",Докум.ДокументОснование);
ТаблОплат=Запрос.Выполнить().Выгрузить();
//ТаблОплат.Свернуть("","Сумма");
Если ТаблОплат.Количество()>0 Тогда
ПоступилаОплата=?((-1)*ТаблОплат[0].Сумма>0,(-1)*ТаблОплат[0].Сумма,0);
Иначе
ПоступилаОплата=0;
КонецЕсли;
Предоплата=0;
Если Докум.СуммаДокумента>ПоступилаОплата Тогда
Предупреждение("Поступившая оплата "+Формат(ПоступилаОплата,"ЧЦ=10; ЧДЦ=2")
+Символы.ПС+"Нужна предоплата в сумме "+Формат(Докум.СуммаДокумента,"ЧЦ=10; ЧДЦ=2")
+Символы.ПС+"Отгрузка на сумму больше предоплаты - нарушение договора!");
КонецЕсли;
// функция сохраняет рабочую конфигурацию в файл, в случае успеха возвращает Истина
// параметры:
// Логин - имя пользователя с правами на админисирирование БД
// Пароль - строка пароля
// ИмяФайла - полное имя файла для сохранения конфигурации, не обязательно.
// по умолчанию использует каталог временных файлов и имя 1Cv8.сf
функция СохранитьТекущуюКонфигурацию (Логин, Пароль, ИмяФайла="") экспорт
результат = Ложь;
Если ИмяФайла = "" Тогда
ИмяФайла = КаталогВременныхФайлов() + "1Cv8.сf";
КонецЕсли;
СтрокаБазы = СтрокаСоединенияИнформационнойБазы();
Если Лев(СтрокаБазы, 5) = "File=" Тогда
// файловый вариант
СтрокаБазы = Сред(СтрокаБазы, 6, СтрДлина(СтрокаБазы) - 6);
Иначе
// серверный вариант пока не готов...
// может кто допишет?
возврат Ложь;
КонецЕсли;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Сигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Иначе
Сигнатура = "";
КонецЕсли;
СтрокаЗапуска = """" + КаталогПрограммы() + "1cv8.exe"" CONFIG /F " + СтрокаБазы
+ ?(Логин = "", "", " /N " + Логин)
+ ?(Пароль = "", "", " /Р " + Пароль) + " /DumpDBCfg """ + ИмяФайла + """";
// КомандаСистемы (СтрокаЗапуска); не работает!!!!! из-за кавычек в параметрах
// приходиться идти кругом...
// зато можно избежать черного окошка
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run(СтрокаЗапуска, 0, Истина);
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
НоваяСигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Если Сигнатура <> НоваяСигнатура Тогда
Результат = Истина;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЗаписатьКонфигурациюВФайл(ИмяФайла="")
Результат = Ложь;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Если ВыбФайл.ЭтоКаталог() Тогда
ИмяФайла="";
КонецЕсли;
КонецЕсли;
Попытка
Массив = ПользователиИнформационнойБазы.ПолучитьПользователей();
Логин = "";
Пароль = "";
Если Массив.Количество() > 0 тогда
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Логин = Пользователь.Имя;
Если Пользователь.ПарольУстановлен Тогда
// тут нужно получить пароль, лучше интерактивно
// но лично мне это совсем не нужно
Предупреждение("У Вас установлен пароль, этот режим сейчас не доступен");
Возврат Ложь;
КонецЕсли
КонецЕсли;
Результат = СохранитьТекущуюКонфигурацию(Логин, Пароль, ИмяФайла);
Если не Результат Тогда
Предупреждение("Конфигурация не сохранена");
Иначе
Сообщить("Конфигурация успешно сохранена в файл: " + ИмяФайла);
КонецЕсли;
Исключение
Предупреждение("У Вас не достаточно прав для сохранения конфигурации");
Возврат Ложь;
КонецПопытки;
Возврат Результат;
КонецФункции
Функция НовПрм(П, Стр) Экспорт
Стр.Вставить("___Родитель", П);
Возврат Стр;
КонецФункции
//Ищет свойство сначала в структуре П, а затем во всех ее родительских структурах
Функция Прм(П, Свойство) Экспорт
Перем Р;
Если П.Свойство(Свойство, Р) Тогда
Возврат Р;
КонецЕсли;
Если П.Свойство("___Родитель", Р) Тогда
Возврат Прм(Р, Свойство);
КонецЕсли;
Возврат Неопределено;
КонецФункции
роцедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ОтраженоВОперУчете = Истина;
ОтражатьВБухгалтерскомУчете = Истина;
ОтражатьВНалоговомУчете = Истина;
Если НЕ ДокументОснование = Неопределено Тогда
ЭлементыФормы.Проект.Значение = ДокументОснование.Проект;
КонецЕсли;
КонецПроцедуры // ПередОткрытием()
ТекДокум=ДанныеСтроки.Ссылка;
Если ТекДокум=Неопределено Тогда
Возврат;
КонецЕсли;
ОформлениеСтроки.Ячейки.ЕДРПОУ.Значение = ТекДокум.Контрагент.ЕДРПОУ;
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ПоступлениеТоваров.Ссылка КАК Ссылка,
| ПоступлениеТоваров.СуммаДокумента КАК Сумма
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
|ГДЕ
| ПоступлениеТоваров.Проведен И
| ПоступлениеТоваров.ДокументОснование = &ВыбОснование
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| КассовыйОрдер.Ссылка КАК Ссылка,
| КассовыйОрдер.Сумма КАК Сумма
|ИЗ
| Документ.КассовыйОрдер КАК КассовыйОрдер
|ГДЕ
| КассовыйОрдер.Проведен И
| КассовыйОрдер.ДокументСделка = &ВыбОснование
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| ПоступлениеДопРасходов.Ссылка КАК Ссылка,
| ПоступлениеДопРасходов.СуммаДокумента КАК Сумма
|ИЗ
| Документ.ПоступлениеДопРасходов КАК ПоступлениеДопРасходов
|ГДЕ
| ПоступлениеДопРасходов.Проведен И
| ПоступлениеДопРасходов.ДокументОснование.Ссылка = &ВыбОснование";
Запрос.УстановитьПараметр("ВыбОснование",ТекДокум);
ТаблДоков=Запрос.Выполнить().Выгрузить();
СуммаПодчиненных = ТаблДоков.Итог("Сумма");
Если СуммаПодчиненных = ТекДокум.СуммаДокумента Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.БледноЗеленый;
ИначеЕсли СуммаПодчиненных > 0 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.СветлоРозовый;
КонецЕсли;
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ОформлениеСтроки.Ячейки.СуммаДокумента.Значение=Формат(ДанныеСтроки.Ссылка.Товары.Итог("СуммаВсего")
+ДанныеСтроки.Ссылка.Услуги.Итог("СуммаВсего"),"ЧЦ=15; ЧДЦ=2");
КонецПроцедуры
// ПРОДАЖИ
НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Докум.Ссылка);
НаборЗаписей.Прочитать();
Для каждого Запись Из НаборЗаписей Цикл
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
КонецЦикла;
Для Каждого ТекСтрокаТовары Из Докум.Товары Цикл
Если ТекСтрокаТовары.КоличествоФакт>0 Тогда
Движения=РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
Движения.Отбор.Регистратор.Установить(Докум.Ссылка);
Продажи = Движения.Добавить();
Продажи.Период = Докум.Дата;
Продажи.ПодразделениеКомпании=Докум.ПодразделениеКомпании;
Бла-бла-бла
Движения.Записать(Ложь);
КонецЕсли;
КонецЦикла;
//Оплаты
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ВзаиморасчетыКомпанииОстатки.СуммаОстаток КАК Сумма
|ИЗ
| РегистрНакопления.ВзаиморасчетыКомпании.Остатки(, ) КАК ВзаиморасчетыКомпанииОстатки
|ГДЕ
| ВзаиморасчетыКомпанииОстатки.Сделка = &ВыбСделка";
Запрос.УстановитьПараметр("ВыбСделка",Докум.ДокументОснование);
ТаблОплат=Запрос.Выполнить().Выгрузить();
//ТаблОплат.Свернуть("","Сумма");
Если ТаблОплат.Количество()>0 Тогда
ПоступилаОплата=?((-1)*ТаблОплат[0].Сумма>0,(-1)*ТаблОплат[0].Сумма,0);
Иначе
ПоступилаОплата=0;
КонецЕсли;
Предоплата=0;
Если Докум.СуммаДокумента>ПоступилаОплата Тогда
Предупреждение("Поступившая оплата "+Формат(ПоступилаОплата,"ЧЦ=10; ЧДЦ=2")
+Символы.ПС+"Нужна предоплата в сумме "+Формат(Докум.СуммаДокумента,"ЧЦ=10; ЧДЦ=2")
+Символы.ПС+"Отгрузка на сумму больше предоплаты - нарушение договора!");
КонецЕсли;
// функция сохраняет рабочую конфигурацию в файл, в случае успеха возвращает Истина
// параметры:
// Логин - имя пользователя с правами на админисирирование БД
// Пароль - строка пароля
// ИмяФайла - полное имя файла для сохранения конфигурации, не обязательно.
// по умолчанию использует каталог временных файлов и имя 1Cv8.сf
функция СохранитьТекущуюКонфигурацию (Логин, Пароль, ИмяФайла="") экспорт
результат = Ложь;
Если ИмяФайла = "" Тогда
ИмяФайла = КаталогВременныхФайлов() + "1Cv8.сf";
КонецЕсли;
СтрокаБазы = СтрокаСоединенияИнформационнойБазы();
Если Лев(СтрокаБазы, 5) = "File=" Тогда
// файловый вариант
СтрокаБазы = Сред(СтрокаБазы, 6, СтрДлина(СтрокаБазы) - 6);
Иначе
// серверный вариант пока не готов...
// может кто допишет?
возврат Ложь;
КонецЕсли;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Сигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Иначе
Сигнатура = "";
КонецЕсли;
СтрокаЗапуска = """" + КаталогПрограммы() + "1cv8.exe"" CONFIG /F " + СтрокаБазы
+ ?(Логин = "", "", " /N " + Логин)
+ ?(Пароль = "", "", " /Р " + Пароль) + " /DumpDBCfg """ + ИмяФайла + """";
// КомандаСистемы (СтрокаЗапуска); не работает!!!!! из-за кавычек в параметрах
// приходиться идти кругом...
// зато можно избежать черного окошка
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run(СтрокаЗапуска, 0, Истина);
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
НоваяСигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Если Сигнатура <> НоваяСигнатура Тогда
Результат = Истина;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЗаписатьКонфигурациюВФайл(ИмяФайла="")
Результат = Ложь;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Если ВыбФайл.ЭтоКаталог() Тогда
ИмяФайла="";
КонецЕсли;
КонецЕсли;
Попытка
Массив = ПользователиИнформационнойБазы.ПолучитьПользователей();
Логин = "";
Пароль = "";
Если Массив.Количество() > 0 тогда
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Логин = Пользователь.Имя;
Если Пользователь.ПарольУстановлен Тогда
// тут нужно получить пароль, лучше интерактивно
// но лично мне это совсем не нужно
Предупреждение("У Вас установлен пароль, этот режим сейчас не доступен");
Возврат Ложь;
КонецЕсли
КонецЕсли;
Результат = СохранитьТекущуюКонфигурацию(Логин, Пароль, ИмяФайла);
Если не Результат Тогда
Предупреждение("Конфигурация не сохранена");
Иначе
Сообщить("Конфигурация успешно сохранена в файл: " + ИмяФайла);
КонецЕсли;
Исключение
Предупреждение("У Вас не достаточно прав для сохранения конфигурации");
Возврат Ложь;
КонецПопытки;
Возврат Результат;
КонецФункции
Функция НовПрм(П, Стр) Экспорт
Стр.Вставить("___Родитель", П);
Возврат Стр;
КонецФункции
//Ищет свойство сначала в структуре П, а затем во всех ее родительских структурах
Функция Прм(П, Свойство) Экспорт
Перем Р;
Если П.Свойство(Свойство, Р) Тогда
Возврат Р;
КонецЕсли;
Если П.Свойство("___Родитель", Р) Тогда
Возврат Прм(Р, Свойство);
КонецЕсли;
Возврат Неопределено;
КонецФункции
роцедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ОтраженоВОперУчете = Истина;
ОтражатьВБухгалтерскомУчете = Истина;
ОтражатьВНалоговомУчете = Истина;
Если НЕ ДокументОснование = Неопределено Тогда
ЭлементыФормы.Проект.Значение = ДокументОснование.Проект;
КонецЕсли;
КонецПроцедуры // ПередОткрытием()
Заключение
В рамках данной работы была создана система учета оптовых и розничных продаж. Программный продукт разработан на базе платформы "1С:Предпритие 8.0" в типовой конфигурации "Бухгалтерия предприятия".
Целями создания системы являлись:
- автоматизация бухгалтерского и управленческого учета оптовых и розничных продаж;
- минимизация ошибок бухгалтерского и управленческого учета оптовых и розничных продаж;
- автоматическая генерация учетной документации.
Созданная система удовлетворяет всем требованиям, сформулированным в техническом задании. Система автоматизирует работу организации оптовой и розничной торговли в аспекте бухгалтерского и управленческого учета.
Система сохраняет все функциональные возможности типовой конфигурации "1С:Бухгалтерия 8.0", дополнив её новыми возможностями для ведения учета на предприятиях оптовой и розничной торговли. Разработанная система точно соответствует положению о бухгалтерском учете, которое строго регламентирует весь документооборот, корреспонденции всех бухгалтерских проводок, печатные документы и т.д.
Система предназначена для следующих классов пользователей:
- работник склада,
- логистик,
- менеджер по продажам,
- бухгалтер,
- оператор,
- руководитель.
В системе реализованы следующие функции:
- управление продажами;
- управление поставками;
- планирование продаж и закупок;
- управление складскими запасами;
- управление заказами покупателей;
- анализ товарооборота предприятия;
- анализ эффективности торговой деятельности;
- учет хозяйственной деятельности нескольких организаций в единой информационной базе;
- учет "от документа" и типовые операции;
- партионный учет (ФИФО, ЛИФО, по средней себестоимости);
- складской учет;
- учет торговых операций;
- учет операций с денежными средствами;
- возможность сдачи отчетности в электронном виде;
- возможность обновления форм отчетности через Интернет.
Для тестирование разработанной системы использовалось средство "1С:Автоматическое тестирование конфигураций".
Система проходила тестирование на условных и реальных данных.
Итоги тестирования показали, что система функционирует корректно и в соответствии с требованиями технического задания. Созданные документы проводятся и формируют проводки. Отчеты выявляют реальную зависимость в системе товарооборота, анализируют информацию.
или зарегистрироваться
в сервисе
удобным
способом
вы получите ссылку
на скачивание
к нам за прошлый год