![](/stc/img/evkova.png)
Разработка конфигурации «Учет реализации лекарственных препаратов через аптечную сеть» (Выбор комплекса задач автоматизации)
Содержание:
Введение
Цель данной работы является разработка конфигурации «Учет реализации лекарственных препаратов через аптечную сеть».
В процессе выполнения работы были рассмотрены такие вопросы, как:
- Описание объекта исследования.
- Описание существующей информационной системы.
- Обоснование необходимости модернизации ИС «1С: Предприятие 8.3».
- Анализ бизнес процессов и формирование функциональной структуры системы.
- Настройка самой информационной системы и ее тестирование.
В первой части описывается деятельность предприятия, рассматривается его организационная структура, анализируется программная и техническая архитектура информационной системы. Также в первой главе выделяется и обосновывается задача автоматизации. Кроме того, приводятся обоснования по программному, информационному и техническому обеспечению. В результате выбран язык программирования, а в результате выбора стратегии автоматизации определена автоматизация по участкам. Также определено, что существующая техническая архитектура в модернизации не нуждается.
Во второй главе описано информационное и программное обеспечение задачи, в том числе описана база данных, а также информационная модель, справочники и документы системы, описан контрольный пример реализации.
В заключении даны результаты работы, рассмотрена перспектива развития системы.
1 Аналитическая часть
1.1 Выбор комплекса задач автоматизации
Аптечная фирма ООО «Озерки» является предприятием малого бизнеса Организационно-правовая форма – общество с ограниченной ответственностью. Организовано с целью получения прибыли. Основной вид деятельности – реализация населению лекарственных препаратов, биологических добавок, парафармацевтической продукции, оптики и изделий медицинского назначения.
Аптечная фирма ООО «Озерки», предоставляет следующие услуги:
- Реализация населению готовых лекарственных средств по рецептам врача;
- Реализация населению лекарственных средств без рецепта врача;
- Реализация населению растительного сырья в заводской упаковке;
- Реализация населению изделий медицинского назначения, оптики и других товаров, разрешённых к отпуску из аптечных учреждений;
- Справочно-информационные услуги о наличии лекарственных средств;
- Оказание консультативной помощи населению в целях обеспечения ответственного самолечения;
- Продажа лекарственных средств и других товаров.
1.2 Характеристика документооборота, возникающего при решении задачи
Рассмотрим порядок системы финансовой и хозяйственной деятельности ООО «Озерки».
Главная задача бухгалтерского учета - обеспечение специалистов информацией, нужной для принятия решения. Данные решения касаются распределения и применения ограниченных экономических ресурсов: средств, территории, рабочей силы. От того, как мы распределяем и используем данные ресурсы, зависят всемирные сбережения, цены, зарплата, производство товаров и услуг, адекватность наших запасов продовольствия, качество транспортных систем, а также то, какие страны процветают, а какие - переживают регресс.
Программное обеспечение информационных систем предназначено для выполнения следующих задач:
- ведение каталога товаров: препаратов, добавок, лекарств;
- ведение справочника о поставщиках;
- ведение справочника об аптеках;
- аутентификация и идентификация пользователя;
- оформление и реализация лекарственных препаратов;
- печать чека, с информацией о дате, фармацевте и товарах;
- ведение справочника всех продаж с возможностью фильтрации;
- помощь в оформлении заказа;
- учет количества оставшегося товара;
- ведение справочника о приходных накладных;
- печать приходных накладных.
В связи с обнаруженными недостатками системы финансовой и хозяйственной деятельности аптеки, руководством ООО «Озерки» принято решение об автоматизации процессов учета финансовой и хозяйственной деятельности аптеки.
Как ожидается, в этом случае затрачиваемое менеджером время на подготовку отчетов значительно снизится за счет того, что он будет формироваться автоматически.
Проектируемая в рамках данной работы задача по автоматизации системы финансовой и хозяйственной деятельности ООО «Озерки» призвана занять одно из центральных мест в качестве базового инструмента для эффективной работы сотрудников компании. Автоматизация описываемого процесса позволит обрабатывать большее количество заказов за то же самое время, что и до автоматизации.
Разрабатываемая система должна удовлетворять следующим требованиям:
- Иметь систему регистрации пользователей;
- Предоставлять менеджеру полную информацию о продукции;
- Иметь удобную и быструю систему системы финансовой и хозяйственной деятельности;
- Учитывать скидки при расчете стоимости;
- Возможность просмотра истории заказов и отслеживание хода выполнения текущих;
- Обеспечивать конфиденциальность информации о клиентах и поставщиках.
- Возможность добавления, удаления и редактирования информации о продукции;
- Иметь систему поиска отчетов по дате и состоянию выполнения.
Рисунок 1.1 – Документооборот
1.3 Обоснование проектных решений по информационному обеспечению
При разработке системы должна использоваться реляционная модель базы данных. Реляционная модель данных некоторой предметной области представляет собой набор отношений изменяющихся во времени. При разработке информационной системы совокупность отношений позволяет хранить данные об объектах предметной области, моделировать связи между ними. При этом сами данные хранятся в таблицах [6]. Для удобства идентификации каждая таблица созданной базы данных обладает уникальным кодом.
В разрабатываемой информационной системе должно быть реализовано ведение классификаторов и справочников (с указанием их атрибутов).
2 Проектная часть
2.1 Характеристика разработанных справочников в среде 1С:Предприятие (справочники, константы, перечисления)
В качестве входной информации в системе используются следующие справочники:
- контрагенты (поставщики, клиент, прочие отношения) – этот справочник формируется на основе информации, предоставленной от контрагентов;
- номенклатура – этот справочник формируется на основе информации о товаре, его характеристиках и свойствах;
- склад – этот справочник формируется на основе информации о складах и местах хранения.
При учете контрагентов используются следующие данные:
В системе используются справочники, приведенные в табл. 2.1.
Таблица 2.1
Перечень используемых справочников
№ пп |
Название справочника |
Ответственный за ведение |
Средний объём справочника в записях |
среднюю частоту актуализации |
средний объем актуализации, % |
1 |
Контрагенты |
Менеджер |
100 |
1 раз в месяц |
10 |
2 |
Номенклатура |
Менеджер |
50 |
1 раз в месяц |
10 |
3 |
Склад |
Администратор |
50 |
1 раз в месяц |
10 |
Реквизиты справочников приведен в табл. 2.2.
Таблица 2.2
Реквизиты справочников
№ пп |
Наименование |
Перечень реквизитов |
---|---|---|
1 |
Контрагенты |
|
2 |
Номенклатура |
|
3 |
Склад |
|
В качестве оперативной информации используются такие таблицы, как:
- Контрагенты;
- Номенклатура;
- Заказ поставщикам;
- Приемка товаров;
- Поступление товаров;
- Реализация товаров;
- Перемещение товаров;
- Финансовые документы (ПКО,РКО,Счет на оплату и т.д.).
В таблице Контрагенты учитываются данные о фирмах – покупателях и поставщиках. В таблице Контактные лица приведены данные о сотрудниках предприятий - контрагентов. В таблице Реквизиты учитываются все реквизиты предприятий - контрагентов.
В остальных таблицах учитываются соответствующие их названию документы, формируемые при создании заказов на поставку фармацевтических товаров в аптечный пункт и их реализации клиентам.
В ходе деятельности разработанной системы формирования заказов на поставку фармацевтических товаров в аптечный пункт формируются следующие выходные документы:
- Заказ поставщику;
- Приемка товаров (Поступление товаров и услуг);
- Реализация товаров;
- Перемещение товаров;
- Финансовые документы;
Экранные формы данных документов приведены в Приложении, реквизиты в табл. 2.3.
Таблица 2.3
Реквизиты выходных документов
№ пп |
Наименование |
Реквизиты |
Таблицы, на основе которых формируется |
Частота формирования |
Способ доставки |
1 |
Заказы поставщикам |
|
|
По запросу |
Экранная и печатная форма |
2 |
Поступление товаров и услуг |
|
|
По запросу |
Экранная и печатная форма |
3 |
Реализация товаров и услуг |
|
|
По запросу |
Экранная и печатная форма |
4 |
Перемещение товаров |
|
|
По запросу |
Экранная и печатная форма |
2.2 Характеристика разработанных экранных форм документов в среде 1С:Предприятие
2.2.1 Описание документов, необходимых для получения исходной информации (разработка документов и регистров)
Рисунок 2.1
Рисунок 2.2
Рисунок 2.3
Рисунок 2.4
Рисунок 2.5
Рисунок 2.6
Рисунок 2.7
Рисунок 2.8
Рисунок 2.9
Рисунок 2.10
Рисунок 2.11
Рисунок 2.12
Рисунок 2.13
Рисунок 2.14
Рисунок 2.15
Рисунок 2.16
Рисунок 2.17
Рисунок 2.18
Рисунок 2.19
2.2.2 Описание разработанных форм отчетов, необходимых для отражения результатов решения задачи
Движение товаров
Отчет предназначен для анализа движения товаров на складах за произвольный период Рис. 2.20
Рисунок 2.20
Отчет по остаткам в разрезе серий
Отчет предназначен для анализа номенклатуры по складам в разрезе серий за произвольный период Рис. 2.21
Рисунок 2.21
Отчет по продажам
Отчет предназначен для анализа количества продаваемого товара, анализа выручки, анализа НДС за произвольный период Рис. 2.22
Рисунок 2.23
Ведомость по товарам на складах
Отчет предназначен для анализа информации о количественном движении и остатках товаров на складах предприятия Рис. 2.24
Рисунок 2.25
2.3 Описание реализации периодических расчетов в среде 1С:Предприятие
Регистры расчета - это прикладные объекты конфигурации. Они используются в механизме сложных периодических расчетов и служат для хранения записей о тех или иных видах расчета, которые необходимо выполнить, а также для хранения промежуточных данных и самих результатов выполненных расчетов
Структура
Связь с планом видов расчета
Периодичность
Подчинение регистратору
Связь с графиком времени
Перерасчеты
Уникальность записей
Механизмы, реализуемые регистром расчета
Формы регистра расчета
Функциональные возможности регистра расчета
Информация в регистре расчета хранится в виде записей, каждая из которых содержит значения измерений и соответствующие им значения ресурсов.
Измерения регистра описывают разрезы, в которых хранится информация, а ресурсы регистра непосредственно содержат хранимую информацию. Например, для регистра расчета Начисления, который имеет следующую структуру:
Рисунок 2.26
записи, хранимые в базе данных, будут выглядеть следующим образом:
Связь с планом видов расчета
Регистр расчета связан с одним из планов видов расчета, существующих в прикладном решении. Эта связь обуславливает наличие у каждой записи регистра поля Вид расчета, благодаря которому механизмы регистра могут отслеживать взаимное влияние записей расчета друг на друга.
Регистр расчета хранит данные не только в разрезе созданных измерений, но и в разрезе времени. Это является причиной существования у каждой записи регистра расчета еще одного обязательного поля - Период действия. При создании регистра расчета разработчик может указать минимальную периодичность, с которой записи будут заноситься в регистр:
Рисунок 2.28
Изменение состояния регистра расчета происходит, как правило, при проведении документа. Поэтому каждая запись регистра связана с определенным документом - регистратором и номером строки этого документа. Добавление записей в регистр, их изменение и удаление возможно только одновременно для всех записей, относящихся к одному документу.
Для регистра расчета может быть указана связь с графиком времени. График времени представляет собой регистр сведений, в котором содержится временная схема исходных данных, участвующих в расчетах. Измерениями этого графика могут быть, например, график работы и дата, а ресурсом – количество рабочих часов в этой дате. Тогда можно будет связать запись регистра расчета с каким-либо конкретным графиком работы и в дальнейшем, средствами встроенного языка получать информацию о количестве рабочих часов, необходимую для выполнения расчетов.
Например, график времени, имеющий следующую структуру:
Рисунок 2.29
может содержать информацию о количестве рабочих часов:
Перерасчеты
Регистр расчета может включать в себя специальные объекты - Перерасчеты:
Рисунок 2.31
В этих объектах система будет хранить информацию о том, какие записи регистра расчета утратили свою актуальность и подлежат перерасчету в результате работы механизмов зависимости по базовому периоду и вытеснения по периоду действия.
Система обеспечивает контроль уникальности записей, хранящихся в регистре расчета. Поэтому в регистре расчета не может находиться двух записей, относящихся к одной и той же строке одного и того же документа.
Механизмы, реализуемые регистром расчета
Вытеснение по периоду действия
Механизм вытеснения по периоду действия позволяет рассчитывать фактический период действия записи регистра расчета на основании анализа других записей, содержащихся в регистре.
В общем случае, запись регистра расчета содержит две даты, определяющие период, на который распространяется действие данной записи. Этот период называется периодом действия записи. Однако, если вид расчета, к которому относится данная запись, может быть вытеснен другим видом расчета, то период действия данной записи является лишь "запрашиваемым" периодом, то есть "мы хотим, чтобы запись действовала в этом периоде". Реально, фактический период действия данной записи можно будет определить лишь после анализа всех записей видов расчета, которые вытесняют данный вид расчета по периоду действия. Фактический период действия будет представлять собой набор периодов, являющихся подмножеством исходного периода действия данной записи. Если не будет найдено ни одной записи, вытесняющей данную по периоду действия, то фактический период действия данной записи будет равен ее периоду действия. Другим крайним случаем вытеснения по периоду действия является полное вытеснение данной записи другими записями. В этом случае фактический период действия записи будет отсутствовать.
Каждая запись регистра расчета содержит вид расчета, к которому она относится. Чтобы определить, какие записи должны вытеснять данную запись по периоду действия, регистр расчета использует связь с планом видов расчета, в котором описано взаимное влияние видов расчета друг на друга. Использование этой связи позволяет регистру расчета определять фактический период действия каждой записи.
Зависимость по базовому периоду
Механизм зависимости по базовому периоду позволяет получать значение базы для записи регистра расчета на основании анализа других записей, содержащихся в регистре.
База представляет собой числовое значение, которое должно быть использовано для расчета результата данной записи. База рассчитывается путем анализа результатов расчета других записей, от которых данная запись зависит по базовому периоду. Таким образом, в общем случае, запись регистра расчета содержит две даты, определяющие период, в котором нужно анализировать записи видов расчета, от которых данный вид расчета зависит по базе - базовый период. Использование связи с планом видов расчета позволяет регистру расчета определять виды расчета, от которых данный вид расчета зависит по базовому периоду.
Регистр расчета поддерживает два вида зависимости по базовому периоду:
зависимость по периоду действия;
зависимость по периоду регистрации.
В случае зависимости по периоду действия для получения базы будут выбираться те записи, для которых найдено пересечение их фактического периода действия с базовым периодом данной записи. Значение базы, которая будет получена от конкретной влияющей записи, в общем случае не равно результату, который содержит эта запись. База будет рассчитана пропорционально тому, какую часть от фактического периода влияющей записи составляет перекрывающийся, с указанным базовым периодом, участок. При этом будут использованы данные графика, связанного с этой записью.
В случае зависимости по периоду регистрации для получения базы будут выбираться результаты расчета тех записей, которые попадают в базовый период данной записи значением своего поля «Период регистрации».
Наиболее сложным вариантом зависимости по базовому периоду является случай, когда для вида расчета данной записи установлено свойство "Период действия является базовым периодом". Это свойство означает, что в качестве базового периода данной записи будет использоваться не базовый период, который указан в соответствующих полях записи, а фактический период действия записи, получаемый в результате работы механизма вытеснения по периоду действия и являющийся, в общем случае, набором некоторых периодов.
Формирование записей перерасчета
Механизм формирования записей перерасчета отслеживает факт появления в регистре записей, влияющих на результат расчета уже существующих записей. Возможность влияния новых записей на существующие определяется в результате анализа взаимного влияния видов расчета и на основании работы механизмов вытеснения по периоду действия и зависимости по базовому периоду.
Результатом работы механизма формирования записей перерасчета является набор записей перерасчета, содержащий информацию о том, какие записи регистра должны быть рассчитаны заново (перерасчитаны).
Функциональные возможности регистра расчета
Основными функциональными возможностями, которые предоставляет регистр расчета разработчику, являются:
выбор записей в заданном интервале по заданным критериям;
выбор записей по регистратору;
получение значения базы для записей регистра, удовлетворяющих заданному отбору;
получение данных графика для записей регистра, удовлетворяющих заданному отбору;
получение данных о записях, подлежащих перерасчету;
чтение, изменение и запись набора записей в регистр.
2.4 Описание созданной / откорректированной карты маршрута бизнес-процесса в среде 1С:Предприятие
Добавим в бизнес-процесс макет, типа Графическая карта.
В нем рисуем схематический процесс так, как он должен быть виден менеджеру.
Создавая карту для конкретного пользователя оставим список только те связи и задачи, про которые данный пользователь должен знать. В итоге из спрута на рисунке 2.32.
Рисунок 2.32
мы получаем простенькую схемку рисунка 2.33,
Рисунок 2.33
с которой под силу справиться даже самому отъявленному продажнику .
Ключевое условие - имена элементов задач и вложенных бизнес-процессов на двух картах должны совпадать.
Заголовки элементов можете оставить такими же как на основном процессе или изменить. После этого вставляем следующий блок:
Функция СформироватьКартуМаршрута(БизнесПроцесс, ИмяМакетаКарты)
Макет=БизнесПроцессы[БизнесПроцесс.Метаданные().Имя].ПолучитьМакет(ИмяМакетаКарты);
СписокТекущихТочекМаршрута=ПолучитьСписокТекущихТочекМаршрута(БизнесПроцесс);
Для Каждого Точка Из СписокТекущихТочекМаршрута Цикл
Попытка
Макет.ЭлементыГрафическойСхемы[Точка.Имя].ЦветРамки=WebЦвета.Черный;
Макет.ЭлементыГрафическойСхемы[Точка.Имя].Рамка=Новый Линия(ТипСоединительнойЛинии.Пунктир, 2);
Исключение
КонецПопытки;
КонецЦикла;
Возврат Макет;
КонецФункции
Функция ПолучитьСписокТекущихТочекМаршрута(БизнесПроцесс)
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗадачиОбработки.ТочкаМаршрута
|ИЗ
| Задача.ЗадачиОбработки КАК ЗадачиОбработки
|ГДЕ
| (НЕ ЗадачиОбработки.Выполнена)
| И ЗадачиОбработки.БизнесПроцесс = &БизнесПроцесс
|
|СГРУППИРОВАТЬ ПО
| ЗадачиОбработки.ТочкаМаршрута";
Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ТочкаМаршрута");
КонецФункции
Не забудьте в запросе поменять имя таблицы задач на используемую вами.
В форму, где хотим выводить маршрут вставляем объект типа ПолеГрафическойСхемы и для его обновления прописываем следующий код:
ЭлементыФормы.КартаМаршрута.УстановитьСхему(ПроцедурыЗаявокПользователя.СформироватьКартуМаршрута(Ссылка, "КартаДляМанагера"));
где Ссылка - ссылка на ваш бизнес-процесс, КартаДляМанагера - имя макета маршрута, куда мы поместили упрощенную карту.
В итоге получаем на форме упрощенную карту маршрута с выделенными жирным пунктиром текущими невыполненными задачами.
2.5 Описание разработанных подсистем в среде 1С:Предприятие
Информационная модель представляет собой схему движения входных, промежуточных и результативных потоков и функций предметной области. Кроме того, она объясняет, на основе каких входных документов и какой нормативно-справочной информации происходит выполнение функций по обработке данных и формирование конкретных выходных документов.
В качестве информационной модели будем использовать схему данных (ГОСТ 19.701-90). Схемы данных отображают путь данных при решении задач и определяют этапы обработки, а также различные применяемые носители данных. Схема данных состоит из следующих элементов:
- символов данных (символы данных могут также указывать вид носителя данных);
- символов линий, указывающих потоки данных между процессами и (или) носителями данных;
- символов процесса, который следует выполнить над данными (символы процесса могут также указывать функции, выполняемые вычислительной машиной);
- специальных символов, используемых для облегчения написания и чтения схемы.[1]
Весь цикл обработки информации можно разбить на два этапа:
- Прием, обработка и ввод первичной входящей информации (паспортные данные, реквизиты организаций и т.д.).
- Формирование документов (договора продаж и заказов на поставку фармацевтических товаров в аптечный пункт и т.д.).
Графическое представление информационной модели отражено на рис. 2.34.
Рисунок 2.34 - Информационная модель системы
2.6 Описание разработанного интерфейса пользователя в среде 1С:Предприятие (разработка управляемого интерфейса)
Основным действующим лицом в разработанной системе является сотрудник отдела. Дерево функций для пользователя представлено на рис. 2.35.
Рисунок 2.35 - Дерево функций системы сотрудника
Сценарии диалога, формирующийся на основе дерева функций, приведен на рис. 2.36.
Рисунок 2.36 - Сценарий диалога для пользователя
2.7 Контрольный пример реализации проекта в среде 1С:Предприятие и его описание
Для проверки правильности и целостности работы разработанного приложения был сделан контрольный пример работы приложения. Данные для этого контрольного примера были подобраны таким образом, чтобы охватить все функции и подсистемы разработанного приложения, проверить все алгоритмы, заложенные в него.
Реализация контрольного примера состоит из трех этапов:
- Ввод тестовой информации в справочники;
- ввод тестовых примеров движения товаров на складе;
- получение отчетов, отражающих изменение количества товаров на складе и позволяющих сделать анализ движений.
Первый этап реализации контрольного примера заключается во вводе тестовых данных в справочники системы. Тестовые данные были подобраны таким образом. Чтобы задействовать все справочники, как основные, так и хранящие дополнительную информацию.
Программа Аптека комплексно автоматизирует все зоны работы аптеки – работу с покупателями (Реализация товаров, документы возврата), складскую деятельность (заказ и поступление товаров, хранение товаров, перемещение товаров, инвентаризация, списание товаров), административную работу (ценообразование, отчетность перед руководством).
Справочники:
Номенклатура
В карточку новой позиции номенклатуры вводится следующая информация Рис. 2.37.
- Артикул. Артикул позиции номенклатуры.
- Рабочее наименование. Название товара или услуги, которое используется для быстрой визуальной идентификации номенклатуры в процессе работы с программой.
- Наименование для печати. Наименование товара и услуги, которое будет печататься во всех документах.
- Вид номенклатуры. Указывается вид, к которому следует отнести данную позицию номенклатуры. При выборе вида номенклатуры справочно указываются те параметры, которые характеризуют данный вид номенклатуры: тип номенклатуры (товар, услуга, тара, работа), использование характеристик, использование упаковок.
- Единица хранения. Единица измерения, в которой ведется учет складских остатков товаров и указывается количество номенклатуры в одной упаковке. Для заполнения единицы измерения используется справочник Классификатор единиц измерения.
- Качество. Можно указать градацию качества вводимой позиции. Для номенклатуры доступно три значения качества: Новый, Ограниченно годен, Не годен. При вводе новой номенклатурной позиции поле Качество по умолчанию заполняется значением Новый. Для каждой степени порчи товара нужно ввести новый элемент справочника Номенклатура. Программа запоминает связь качественного и бракованного товара. Установить связь можно в списке Товары другого качества. Перейти к списку можно с помощью команды панели навигации Подобные товары, далее закладка Товары другого качества.
- Вести учет по грузовой таможенной декларации (ГТД). Признак того, что для элемента номенклатуры необходимо вести учет по номерам ГТД.
- Группа номенклатуры. Группа, в которую входит данная позиция номенклатуры в соответствии с классификацией (иерархией) товаров в справочнике Номенклатура.
- Ценовая группа. Ценовая группа, в которую входит позиция номенклатуры, в соответствии с классификацией товаров по ценовым характеристикам.
Рисунок 2.37
На закладке Аптека описаны все необходимые реквизиты для описания признаков и свойств лекарственных препаратов Рис.2.38
Рисунок 2.38
Контрагенты
При вводе нового партнера необходимо указать его сокращенное юридическое наименование, рабочее наименование (как он будет представлен в списках для выбора), регламентированные регистрационные данные, ответственного менеджера. С помощью флагов устанавливаются типы бизнес-отношений (клиент, поставщик, конкурент, обслуживается торговыми представителями, перевозчки, прочие отношения). Возможно указание бизнес-региона, к которому относится партнер. К карточке партнера можно привязывать дополнительные файлы Рис. 2.39.
Рисунок 2.39
Склад
Справочник Склады (складские территории) предназначен для ведения списка тех складских территорий, в которых хранится товар. Складские территории могут быть разделены на складские помещения. Предусмотрена также возможность использования на складе адресного хранения товаров в складских ячейках Рис.2.40
Рисунок 2.40
Раздел Поступление товаров:
Заказ поставщику
Если для поставщика задано в системе единственное соглашение, то все параметры, определенные в соглашении, будут автоматически заполнены в документе рис. 2.10.
Если для поставщика задано в системе несколько соглашений, то поле Соглашение потребуется заполнить вручную из списка. Причем в форме выбора окажутся только те соглашения, которые действуют для указанного в заказе поставщика с не истекшими сроками действия.
Если с соглашений не оформлено, то в форме выбора с помощью команды Создать можно зарегистрировать новое соглашение.
Заказ поставщику может быть оформлен и без указания соглашения. В этом случае вся информация о ценах поставщика заполняется в заказе вручную и не запоминается. Информация о ценах поставщика регистрируется только в рамках оформленного соглашения с поставщиком.
Рисунок 2.41
Информация о том, какой принцип налогообложения использует поставщик при продаже товаров, определяется в поле Налогообложение:
- если поставщик находится на общей системе налогообложения и продает товары с учетом НДС, то на закладке Дополнительно указывается вариант Закупка облагается НДС. В этом случае для каждого товара будет указана та ставка НДС, которая зафиксирована в документе поставки от поставщика.
- если поставщик продает товары без НДС, то на закладке Дополнительно указывается вариант Закупка не облагается НДС. В этом случае, в качестве ставки НДС для товаров будет указано Без НДС.
При оформлении импортных поставок (операция Закупка по импорту) информация о налогообложении становится недоступной, в документах по импорту автоматически устанавливается Ставка НДС 0 %.
Поле Оплата заполняется автоматически в соответствии с указанной формой оплаты в соглашении с поставщиком:
Наличная – оплаты поставщику предполагается оформлять наличными;
Безналичная – оплаты поставщику предполагается оформлять путем перечисления денежных средств с расчетного счета;
Любая – предполагаемая форма оплаты поставщику не определена.
Фактическая оплата поставщику может быть произведена любым способом независимо от формы оплаты, указанной в соглашении.
Указание предполагаемой формы оплаты, а также расчетного счета и кассы необходимо для планирования выплат денежных средств по оформленным заказам поставщикам. Данная информация отображается в отчете Платежный календарь. Также эта информация используется как значение по умолчанию при оформлении заявок на расходование денежных средств и платежных документов на основании заказа поставщику.
Информация о товарах, услугах и многооборотной таре заполняется на странице Товары:
Вручную по кнопке Добавить,
Используя подбор товаров по кнопке Заполнить - Подобрать товары (Дополнить тарой)
Для оформления заказа поставщику на услугу обязательно должны быть заполнены в табличной части Товары поля: Подразделение-получатель, Статья расходов и Аналитика расходов, которые определяют дальнейший учет расходов, связанных с их приобретением.
Для работ обязательным для заполнения является поле Подразделение-получатель. Если расходы, связанные с приобретением работы, требуется отнести на статью расходов, то следует установить признак Списать на расходы.
При работе с заказом предусмотрена возможность просмотра всех документов, которые оформлены в процессе работы с заказом поставщику. Для просмотра связанных документов используется команда Структура подчиненности в панели навигации формы.
В краткой форме оперативная информация по заказу (итоговые суммы, взаиморасчеты, этапы оплаты, скидки по заказу) представлена в нижней части документа.
В заказе можно указать ту дату, к которой требуется получить товар от поставщика. Эта информация вводится в поле Желаемая дата поступления на странице Дополнительно. Причем если заказ поставщику оформляется по соглашению, то желаемая дата поступления заполняется автоматически на основании даты заказа и срока поставки, указанного в соглашении.
Для заполнения даты поступления используется функция Все действия - Заполнить дату поступления. Команда действует для выделенных строк табличной части документа. По умолчанию в качестве даты поступления указывается та дата, которая определена в заказе как желаемая дата поступления. При желании эту дату можно изменить и установить в качестве даты поступления произвольную. В том случае, если все товары по заказу поставщику будут поставлены одновременно, можно также использовать флаг Поступление одной датой и указать дату поставки для всех строк заказа.
Согласование заказа
После уточнения всех условий поставки заказ может считаться согласованным с поставщиком. Помимо этого, если условия выполнения заказа отличаются от условий соглашения, заказ должен быть согласован с руководством торгового предприятия (например, руководителем отдела закупок). Для согласования отклонений от условий соглашения менеджер по закупкам может запустить типовой бизнес-процесс Согласование закупки (команда в панели навигации заказа Согласование). При этом система автоматически направит уполномоченным сотрудникам (согласующим условия закупки) задачи по согласованию заказа и установит у заказа статус Согласован, а также заполнит поле Дата согласования при наличии положительного решения согласующих. Если хотя бы один из согласующих отклонил согласование заказа, то изменение статуса заказа не произойдет. Менеджеру по закупкам, который отправил заказ на согласование, должен будет проанализировать результаты согласования по заказу и отправить его на повторное согласование, запустив еще раз бизнес-процесс Согласование закупки после устранения полученных замечаний.
Приемка товаров
С помощью документов Приемка товаров можно автоматически загрузить электронные накладные в конфигурацию Рис.2.42.
Рисунок 2.42
Для этого необходимо нажать на верхней командной панели кнопку Загрузить накладные.
Откроется обработка по загрузке электронных накладных Рис.2.43.
Рисунок 2.43
С помощью загруженных документов Приемка товаров можно создавать документы Поступление товаров и услуг и Установка цен номенклатуры Рис. 2.44.
Рисунок 2.44
Документ Приемка товаров включает в себя табличную часть Товары Рис. 2.45, содержащую информацию о товарах, их количестве, цене производителя, наценки, ставки НДС, сумме НДС.
Рисунок 2.45
Поступление товаров и услуг
Документ Поступление товаров и услуг предназначен для регистрации финансового документа, которым сопровождается закупка товаров или прием товаров на комиссию Рис. 2.46. Оформляется ли закупка товаров или прием на комиссию определяется тем видом операции (Операция), который указан в документе.
В документе заполняется список поступивших товаров в соответствии с финансовым документом поставщика и их ценами.
Рисунок 2.46
На основании документа Поступление товаров и услуг можно создать бухгалтерские документы, отображенные на Рис. 2.47
Рисунок 2.47
Продажи и возвраты:
Реализация товаров и услуг
Документ Реализация товаров и услуг предназначен для регистрации финансового документа, которым сопровождается отгрузка товаров Рис.9. Оформляется ли отгрузка товаров (реализация), передача товаров на комиссию или отгрузка без перехода права собственности (реализация (товары в пути)) определяется тем видом операции (Операция), который указан в документе.
Вид операции заполняется автоматически в соответствии с установленным видом операции в соглашении с клиентом. Для оформления отгрузки с отложенным переходом права собственности (товары в пути) в соглашении с клиентом должен быть установлен флажок Возможна отгрузка без перехода права собственности.
Документы отгрузки товаров могут быть оформлены на основании ранее оформленных заказов клиентов или без указания заказа клиента. Документы отгрузки оформляются на основании тех заказов клиента, в которых установлен статус К отгрузке. Список этих заказов отображается на отдельной закладке Распоряжения на оформление.
В документе заполняется список отгружаемых товаров в соответствии и их цены. Цены в документе регистрируются в соответствии с теми ценами, которые заданы в заказе клиента или в соответствии с условиями, которые определены в указанном в документе соглашении с клиентом, если документ реализации оформляется без указания заказа. При проведении документа реализации контролируются цены продажи в соответствии с теми видами цен, которые определены в качестве минимальных и максимальных цен продажи в справочнике Виды цен.
Контроль срока оплаты при отгрузке товаров в кредит происходит в соответствии с теми датами по этапам оплаты кредит, которые указаны в заказе клиента, по которому оформляется документ реализации. Если документ реализации оформляется без заказа клиента, то для контроля оплаты в кредит используется та дата оплаты (Дата платежа), которая указана в документе реализации на странице Дополнительно. На основании документа Реализация товаров и услуг может быть выписан документ Счет на оплату для оплаты товаров, отгруженных в кредит.
Рисунок 2.48
На основании документа Реализация товаров и услуг можно создать бухгалтерские документы, отображенные на Рис. 2.49.
Рисунок 2.49
Документ «Возврат товаров от клиента»
Документ Возврат товаров от клиента предназначен для оформления возврата товаров, ранее проданных клиенту Рис.2.19. Кроме товаров с помощью данного документа производится и возврат тары. В программе предусмотрены следующие варианты оформления возврата товаров. Вариант оформления возврата определяется тем видом операции, который указан в документе.
- Возврат товаров от клиента. Возврат товаров от клиента может быть оформлен с указанием документа продажи (Реализация товаров и услуг) или без указания документа продажи. Сумма возвращенных товаров может быть учтена во взаиморасчетах с клиентом в качестве оплаты других продаж клиента с указанием или без указания конкретного заказа клиента.
- Возврат товаров от комиссионера. Возврат товаров от комиссионера оформляется с помощью документа Возврат товаров от клиента с указанием вида операции Возврат комиссионера. Возврат товаров от комиссионера может быть оформлен в любой момент времени: как до момента регистрации факта продажи товаров комиссионера (оформления документа Отчет комиссионера о продажах), так и после регистрации документа Отчет комиссионера о продажах. Информация о возвращенных товарах после регистрации факта продажи товаров комиссионером будет автоматически учтена при оформлении следующего отчета комиссионера о продажах. Сумма возвращенных товаров будет сторнирована и показана в отчете комиссионера в виде отрицательных значений.
- Возврат товаров от розничного покупателя. Возврат товаров от розничного покупателя оформляется в том случае, если покупатель возвращает товар, проданный в розницу, после закрытия кассовой смены. В документе указывается информация о том чеке ККМ, по которому была оформлена продажа товара в розницу. Возврат товаров от розничного покупателя оформляется с помощью документа Возврат товаров от клиента с указанием вида операции Возврат от розничного покупателя.
Любой из перечисленных видов возврата может быть оформлен по предварительно оформленной и согласованной заявке на возврат товаров. С помощью заявки на возврат можно планировать поступление возвращенных товаров на склад, а также оформлять операции по замене возвращаемых товаров.
Оформление фактического поступления возвращенных товаров на склад зависит от того, на какой склад возвращается товар.
- Если на складе, на который возвращается товар, используется ордерная схема при поступлении товара, то фактический прием товаров на склад оформляется с помощью документа Приходный ордер на товары.
- Если на складе ордерная схема при поступлении товаров не используется, то фактический прием товаров на склад будет оформлен при проведении документа Возврат товаров от клиента.
Если возврат производится от поставщика, ведущего не облагаемую НДС деятельность, то выставление счета-фактуры полученного от него не требуется для восстановления и принятия НДС к вычету по этому возврату. В этом случае в документе необходимо взвести флаг Получение счета-фактуры на возврат не требуется для дальнейшего принятия НДС к вычету. В этом случае в качестве счета-фактуры в книге покупок будет использоваться счет-фактура, выданный из документа реализации.
Рисунок 2.50
Учет жизненно-необходимых и важнейших лекарственных препаратов (ЖНВЛП):
Цены на ЖНВЛП
Регистр сведений ЖНВЛП предназначен для установки цен производителя на определенный препарат и максимальной наценки на этот товар Рис. 2.51.
Рисунок 2.51
Наценки организации на ЖНВЛП
Регистр сведений Наценки организации на ЖНВЛП предназначен для установки нижних и верхних порогов для всей организации и розничной наценки Рис. 2.52.
Рисунок 2.52
Склад:
Внутреннее товародвижение. Перемещение товаров.
Документ Перемещение товаров является финансовым документом с помощью которого оформляется перемещение товаров между складами предприятия Рис.2.53 Документ может быть распечатан по форме ТОРГ-13 (накладной на внутреннее перемещение). В документе указывается перечень перемещаемых товаров с указанием характеристики и серийного номера. При перемещении импортных товаров автоматически заполняется информация о номерах ГТД, которые были введены при поступлении товара.
Документ может быть оформлен на основании распоряжения на перемещение товара. Распоряжением на перемещение товаров является документ Заказ на перемещение с установленным статусом К выполнению.
При оформлении документа можно устанавливать различные статусы. Проведение документа с указанием различных статусов позволяет контролировать процесс отгрузки товаров со склада-отправителя и процесс приема товаров на склад-получатель. Фактическая отгрузка со склада-отправителя и поступление на склад-получатель зависит от того используется ли на складах ордерная схема поступления (отгрузки) товаров.
Рисунок 2.53
Пересчеты товаров
Документ Пересчет товаров используется для подбора товаров к пересчету, ввода фактического количества товарных остатков и работы с печатными формами Рис.2.54. По результатам пересчета оформляются соответствующие складские акты Оприходование излишков товаров, Списание недостач товаров, Пересортица товаров, Порча товаров.
Рисунок 2.54
Складские акты (излишки и недостачи)
Документ Рис.2.55 предназначен для получения регламентированных печатных форм Инвентаризационная опись (ИНВ-3) и Сличительная ведомость (ИНВ-19). Генерируется автоматически помощником оформления складских актов для каждой организации, для которой оформляются складские акты.
Алгоритм формирования печатных форм ИНВ-3 и ИНВ-19:
- выбираются все документы Пересчет товаров за указанный в документе Инвентаризационная опись период;
- отбираются товары из подобранных Пересчетов товаров, по которым определяются остатки товаров организаций на дату окончания периода - это количество выводится в поле Фактическое наличие,
- выбираются складские акты за период, указанный в документе Инвентаризационная опись;
- к фактическому количеству прибавляется или вычитается количество товаров, указанное в складских актах - это количество выводится в поле По данным бухгалтерского учета.
Рисунок 2.55
Отчеты:
Движение товаров
Отчет предназначен для анализа движения товаров на складах за произвольный период Рис. 2.56
Рисунок 2.56
Отчет по остаткам в разрезе серий
Отчет предназначен для анализа номенклатуры по складам в разрезе серий за произвольный период Рис. 2.57
Рисунок 2.57
Отчет по продажам
Отчет предназначен для анализа количества продаваемого товара, анализа выручки, анализа НДС за произвольный период Рис. 2.58
Рисунок 2.58
Ведомость по товарам на складах
Отчет предназначен для анализа информации о количественном движении и остатках товаров на складах предприятия Рис. 2.59
Рисунок 2.59
Заключение
В результате выполнения проекта была разработана автоматизированная информационная система для аптеки.
Для этого выполнены следующие этапы работы:
- рассмотрены характеристики функциональной структуры и подсистем типовой автоматизированной системы учета;
- выбрана среда разработки программного обеспечения;
- разработана функциональная структура автоматизированной информационной системы;
- построен алгоритм решения задачи автоматизированной информационной системы финансовой и хозяйственной деятельности;
- разработана база данных автоматизированной системы;
- произведено тестирование реализованных запросов к базе.
В аналитической части выполнен комплекс работ, которые направлены на обоснование необходимости автоматизации: определена сущность задачи, описаны основные свойства системы, дано описание всем существующим бизнес—процессам, рассмотрены вопросы, которые связаны с анализом существующих разработок в этой области. Также в первой главе обосновываются проектные решения по информационному, техническому, программному и технологическому обеспечению.
В результате проведенной работы выбрана стратегия автоматизации по участкам, кроме того, в результате анализа языков программирования и СУБД, представленных на рынке, как наилучший вариант определены Delphi и Access.
Как наилучший вариант принято решение о самостоятельной разработке информационной системы, так как компания располагает квалифицированными сотрудниками для разработки и внедрения данной информационной системы, кроме того, только в данном случае гарантируется соответствие программного продукта бизнес—процессам, происходящим на предприятии.
Проектная часть посвящена рассмотрению этапов жизненного цикла проекта. Далее дана характеристика информационной архитектуры разрабатываемого проекта, построена информационная модель задачи, проведено моделирование «сущность—связь» (ER—модель), описана структура полей таблиц базы данных, проанализированы все информационные потоки входной, оперативной, нормативно—справочной и результатной информации.
В процессе реализации проектных решений по программному обеспечению построены: дерево диалога (сценарий работы с системой), структурная схема пакета и ряд других компонент проекта, подробно раскрывающих сущность машинной реализации задачи.
Разработанная информационная система подлежит интеграции с уже существующими на предприятии программными комплексами, кроме того, несмотря на то, что разрабатывалась для конкретного предприятия, может быть использована и на других, аналогичных фирмах за счет своей универсальности с минимальными изменениями.
Библиографический список
- ГОСТ 2.105-95 ЕСКД. Общие требования к текстовым документам.
- ГОСТ 19.103-33 ЕСПД. Обозначение программ и программных документов.
- ГОСТ 19.701-90 ЕСПД. Схемы алгоритмов, программ, данных и систем.
- Агальцов В. П. Базы данных. - М.: Мир, 2002.
- Архангельский П.А. Программирование в Delphi 5. - M.: Наука, 2000.
- Бобровский С.И. Delphi 5. – М.: Питер, 2002.
- Гаевский A. Разработка программных приложений на Delphi 6. – М.: Киев, 2000.
- Гагарина Л.Г., Киселёв Д.В. Разработка и эксплуатация автоматизированных информационных систем. – М.: ИНФРА-М. 2007.
- Горев А., Макащарипов С., Владимиров Ю. Microsoft SQL. Server 6.5 для профессионалов. - СПб.: Питер, 1998.
- Дарахвелидзе П.Г. Программирование в DELPHI 5. - СПб.: Бином, 2000.
- Евдокимова В.В. Информационные системы в экономике. – СПб.: Питер 2007.
- Емельянова Н.З., Партыка Т.Л., Попов И.И. Основы построения автоматизированных информационных систем. – М.: ИНФРА-М. 2005.
- Зуев В. A. Turbo Pascal 6.0, 7.0. - М.: Москва, 1998.
- Карпова Т.С. Базы данных: модели, разработка. - СПб.: Питер, 2001.
- Коноплева Е.А., Хохлова О.А., Денисов А.В. Информационные технологии. – М.: Проспект. 2007.
- Немнюгин С.А. Программирование. – М.: Питер, 2000.
- Петров В.Н. Информационные системы. – СПб.: Питер, 2002.
- Романова М.В. Управление проектами. – М.: ИНФРА-М. 2007.
- Советов Б.Я., Цехановский В.В.- Базы данных. - М.: Высшая школа. 2005.
- Тиори Т., Фрай Дж. Проектирование структур баз данных: В 2-х кн. Пер. с англ. - М.: Мир, 1985.
- Угринович Н. Информатика и информационные технологии. Набор базовых знаний. - М.: Радио и связь, 2000.
- Харрингтон Дж. Проектирование реляционных баз данных. - М.:
- Ломакин В.К. Мировая экономика: Учебник для вузов. – М.: Финансы, ЮНИТИ, 2008.
- http://v8.1c.ru. 1С:Предприятие 8 [Электронный курс]
Приложение А - Листинг ПО
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ИнициализироватьДокумент(ДанныеЗаполнения);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаПроведения".
//
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
Документы.РеализацияУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ПродажиСервер.ОтразитьПродажи(ДополнительныеСвойства, Движения, Отказ);
ПродажиСервер.ОтразитьПродажиПоДисконтнымКартам(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийныхНомеров(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийУслуг(ДополнительныеСвойства, Движения, Отказ);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект),Отказ);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
МаркетинговыеАкцииСервер.ПроверитьЦеныСертификатов(
ЭтотОбъект,
"Услуги",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьЗаполнениеТабличнойЧастиСерийныеНомера(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьДвиженияСерийныхНомеров(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьОкончаниеАбсолютныхСроковДействияСертификатов(
ЭтотОбъект,
"Услуги",
Отказ,
);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаУдаленияПроведения".
//
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
КонецПроцедуры
// Процедура - обработчик события "ПередЗаписью".
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Справочники.СерийныеНомера.ОчиститьВДокументеНеиспользуемыеСерийныеНомера(Услуги, СерийныеНомера);
ОбщегоНазначенияРТСервер.УдалитьНеиспользуемыеСтрокиСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект));
ПроведениеСервер.УстановитьРежимПроведения(Проведен, РежимЗаписи, РежимПроведения);
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
ОбщегоНазначенияРТ.УстановитьНовоеЗначениеРеквизита(
ЭтотОбъект,
ОбработкаТабличнойЧастиУслугиКлиентСервер.ПолучитьСуммуДокумента(Услуги, ЦенаВключаетНДС),
"СуммаДокумента");
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
// Процедура - обработчик события "ПриКопировании".
//
Процедура ПриКопировании(ОбъектКопирования)
СкидкиРассчитаны = Ложь;
СкидкиНаценкиСервер.ОтменитьСкидки(ЭтотОбъект, "Услуги");
Серии.Очистить();
ИнициализироватьДокумент();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Инициализация и заполнение
// Инициализирует документ
//
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("Магазин")
И НЕ ЗначениеЗаполнено(Магазин) Тогда
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(ДанныеЗаполнения.Магазин,,Склад, Ответственный);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Организация")
И НЕ ЗначениеЗаполнено(Организация) Тогда
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ДанныеЗаполнения.Организация,,БанковскийСчетОрганизации);
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Магазин = ЗначениеНастроекПовтИсп.ПолучитьМагазинПоУмолчанию(Магазин);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(Магазин,,Склад, Ответственный);
Если ЗначениеЗаполнено(Склад) Тогда
Организация = Склад.Организация;
КонецЕсли;
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация,Ответственный);
Контрагент = ЗначениеНастроекПовтИсп.ПолучитьПокупателяПоУмолчанию(Контрагент, Ответственный);
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(Организация,,БанковскийСчетОрганизации);
Продавец = ЗначениеНастроекПовтИсп.ПолучитьПродавцаПоУмолчанию(Продавец, Ответственный);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Прочее
//Процедура формирует массив имен регистров для контроля проведения
//
Процедура СформироватьСписокРегистровДляКонтроля()
Массив = Новый Массив;
// При проведении выполняется контроль превышения остатков на складах
Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Массив.Добавить(Движения.УслугиНаСкладах);
Массив.Добавить(Движения.ДвиженияСерийныхНомеров);
КонецЕсли;
ДополнительныеСвойства.ДляПроведения.Вставить("РегистрыДляКонтроля", Массив);
ДополнительныеСвойства.ДляПроведения.Вставить("ПопыткиПродажПревышающихОстаток");
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ИнициализироватьДокумент(ДанныеЗаполнения);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаПроведения".
//
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
Документы.РеализацияУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ПродажиСервер.ОтразитьПродажи(ДополнительныеСвойства, Движения, Отказ);
ПродажиСервер.ОтразитьПродажиПоДисконтнымКартам(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийныхНомеров(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийУслуг(ДополнительныеСвойства, Движения, Отказ);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект),Отказ);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
МаркетинговыеАкцииСервер.ПроверитьЦеныСертификатов(
ЭтотОбъект,
"Услуги",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьЗаполнениеТабличнойЧастиСерийныеНомера(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьДвиженияСерийныхНомеров(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьОкончаниеАбсолютныхСроковДействияСертификатов(
ЭтотОбъект,
"Услуги",
Отказ,
);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаУдаленияПроведения".
//
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
КонецПроцедуры
// Процедура - обработчик события "ПередЗаписью".
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Справочники.СерийныеНомера.ОчиститьВДокументеНеиспользуемыеСерийныеНомера(Услуги, СерийныеНомера);
ОбщегоНазначенияРТСервер.УдалитьНеиспользуемыеСтрокиСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект));
ПроведениеСервер.УстановитьРежимПроведения(Проведен, РежимЗаписи, РежимПроведения);
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
ОбщегоНазначенияРТ.УстановитьНовоеЗначениеРеквизита(
ЭтотОбъект,
ОбработкаТабличнойЧастиУслугиКлиентСервер.ПолучитьСуммуДокумента(Услуги, ЦенаВключаетНДС),
"СуммаДокумента");
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
// Процедура - обработчик события "ПриКопировании".
//
Процедура ПриКопировании(ОбъектКопирования)
СкидкиРассчитаны = Ложь;
СкидкиНаценкиСервер.ОтменитьСкидки(ЭтотОбъект, "Услуги");
Серии.Очистить();
ИнициализироватьДокумент();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Инициализация и заполнение
// Инициализирует документ
//
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("Магазин")
И НЕ ЗначениеЗаполнено(Магазин) Тогда
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(ДанныеЗаполнения.Магазин,,Склад, Ответственный);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Организация")
И НЕ ЗначениеЗаполнено(Организация) Тогда
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ДанныеЗаполнения.Организация,,БанковскийСчетОрганизации);
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Магазин = ЗначениеНастроекПовтИсп.ПолучитьМагазинПоУмолчанию(Магазин);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(Магазин,,Склад, Ответственный);
Если ЗначениеЗаполнено(Склад) Тогда
Организация = Склад.Организация;
КонецЕсли;
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация,Ответственный);
Контрагент = ЗначениеНастроекПовтИсп.ПолучитьПокупателяПоУмолчанию(Контрагент, Ответственный);
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(Организация,,БанковскийСчетОрганизации);
Продавец = ЗначениеНастроекПовтИсп.ПолучитьПродавцаПоУмолчанию(Продавец, Ответственный);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Прочее
//Процедура формирует массив имен регистров для контроля проведения
//
Процедура СформироватьСписокРегистровДляКонтроля()
Массив = Новый Массив;
// При проведении выполняется контроль превышения остатков на складах
Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Массив.Добавить(Движения.УслугиНаСкладах);
Массив.Добавить(Движения.ДвиженияСерийныхНомеров);
КонецЕсли;
ДополнительныеСвойства.ДляПроведения.Вставить("РегистрыДляКонтроля", Массив);
ДополнительныеСвойства.ДляПроведения.Вставить("ПопыткиПродажПревышающихОстаток");
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ИнициализироватьДокумент(ДанныеЗаполнения);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаПроведения".
//
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
Документы.РеализацияУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ПродажиСервер.ОтразитьПродажи(ДополнительныеСвойства, Движения, Отказ);
ПродажиСервер.ОтразитьПродажиПоДисконтнымКартам(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийныхНомеров(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийУслуг(ДополнительныеСвойства, Движения, Отказ);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект),Отказ);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
МаркетинговыеАкцииСервер.ПроверитьЦеныСертификатов(
ЭтотОбъект,
"Услуги",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьЗаполнениеТабличнойЧастиСерийныеНомера(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьДвиженияСерийныхНомеров(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьОкончаниеАбсолютныхСроковДействияСертификатов(
ЭтотОбъект,
"Услуги",
Отказ,
);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаУдаленияПроведения".
//
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
КонецПроцедуры
// Процедура - обработчик события "ПередЗаписью".
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Справочники.СерийныеНомера.ОчиститьВДокументеНеиспользуемыеСерийныеНомера(Услуги, СерийныеНомера);
ОбщегоНазначенияРТСервер.УдалитьНеиспользуемыеСтрокиСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект));
ПроведениеСервер.УстановитьРежимПроведения(Проведен, РежимЗаписи, РежимПроведения);
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
ОбщегоНазначенияРТ.УстановитьНовоеЗначениеРеквизита(
ЭтотОбъект,
ОбработкаТабличнойЧастиУслугиКлиентСервер.ПолучитьСуммуДокумента(Услуги, ЦенаВключаетНДС),
"СуммаДокумента");
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
// Процедура - обработчик события "ПриКопировании".
//
Процедура ПриКопировании(ОбъектКопирования)
СкидкиРассчитаны = Ложь;
СкидкиНаценкиСервер.ОтменитьСкидки(ЭтотОбъект, "Услуги");
Серии.Очистить();
ИнициализироватьДокумент();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Инициализация и заполнение
// Инициализирует документ
//
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("Магазин")
И НЕ ЗначениеЗаполнено(Магазин) Тогда
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(ДанныеЗаполнения.Магазин,,Склад, Ответственный);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Организация")
И НЕ ЗначениеЗаполнено(Организация) Тогда
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ДанныеЗаполнения.Организация,,БанковскийСчетОрганизации);
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Магазин = ЗначениеНастроекПовтИсп.ПолучитьМагазинПоУмолчанию(Магазин);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(Магазин,,Склад, Ответственный);
Если ЗначениеЗаполнено(Склад) Тогда
Организация = Склад.Организация;
КонецЕсли;
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация,Ответственный);
Контрагент = ЗначениеНастроекПовтИсп.ПолучитьПокупателяПоУмолчанию(Контрагент, Ответственный);
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(Организация,,БанковскийСчетОрганизации);
Продавец = ЗначениеНастроекПовтИсп.ПолучитьПродавцаПоУмолчанию(Продавец, Ответственный);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Прочее
//Процедура формирует массив имен регистров для контроля проведения
//
Процедура СформироватьСписокРегистровДляКонтроля()
Массив = Новый Массив;
// При проведении выполняется контроль превышения остатков на складах
Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Массив.Добавить(Движения.УслугиНаСкладах);
Массив.Добавить(Движения.ДвиженияСерийныхНомеров);
КонецЕсли;
ДополнительныеСвойства.ДляПроведения.Вставить("РегистрыДляКонтроля", Массив);
ДополнительныеСвойства.ДляПроведения.Вставить("ПопыткиПродажПревышающихОстаток");
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ИнициализироватьДокумент(ДанныеЗаполнения);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаПроведения".
//
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
Документы.РеализацияУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ПродажиСервер.ОтразитьПродажи(ДополнительныеСвойства, Движения, Отказ);
ПродажиСервер.ОтразитьПродажиПоДисконтнымКартам(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийныхНомеров(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийУслуг(ДополнительныеСвойства, Движения, Отказ);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект),Отказ);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
МаркетинговыеАкцииСервер.ПроверитьЦеныСертификатов(
ЭтотОбъект,
"Услуги",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьЗаполнениеТабличнойЧастиСерийныеНомера(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьДвиженияСерийныхНомеров(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьОкончаниеАбсолютныхСроковДействияСертификатов(
ЭтотОбъект,
"Услуги",
Отказ,
);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаУдаленияПроведения".
//
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
КонецПроцедуры
// Процедура - обработчик события "ПередЗаписью".
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Справочники.СерийныеНомера.ОчиститьВДокументеНеиспользуемыеСерийныеНомера(Услуги, СерийныеНомера);
ОбщегоНазначенияРТСервер.УдалитьНеиспользуемыеСтрокиСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект));
ПроведениеСервер.УстановитьРежимПроведения(Проведен, РежимЗаписи, РежимПроведения);
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
ОбщегоНазначенияРТ.УстановитьНовоеЗначениеРеквизита(
ЭтотОбъект,
ОбработкаТабличнойЧастиУслугиКлиентСервер.ПолучитьСуммуДокумента(Услуги, ЦенаВключаетНДС),
"СуммаДокумента");
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
// Процедура - обработчик события "ПриКопировании".
//
Процедура ПриКопировании(ОбъектКопирования)
СкидкиРассчитаны = Ложь;
СкидкиНаценкиСервер.ОтменитьСкидки(ЭтотОбъект, "Услуги");
Серии.Очистить();
ИнициализироватьДокумент();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Инициализация и заполнение
// Инициализирует документ
//
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("Магазин")
И НЕ ЗначениеЗаполнено(Магазин) Тогда
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(ДанныеЗаполнения.Магазин,,Склад, Ответственный);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Организация")
И НЕ ЗначениеЗаполнено(Организация) Тогда
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ДанныеЗаполнения.Организация,,БанковскийСчетОрганизации);
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Магазин = ЗначениеНастроекПовтИсп.ПолучитьМагазинПоУмолчанию(Магазин);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(Магазин,,Склад, Ответственный);
Если ЗначениеЗаполнено(Склад) Тогда
Организация = Склад.Организация;
КонецЕсли;
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация,Ответственный);
Контрагент = ЗначениеНастроекПовтИсп.ПолучитьПокупателяПоУмолчанию(Контрагент, Ответственный);
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(Организация,,БанковскийСчетОрганизации);
Продавец = ЗначениеНастроекПовтИсп.ПолучитьПродавцаПоУмолчанию(Продавец, Ответственный);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Прочее
//Процедура формирует массив имен регистров для контроля проведения
//
Процедура СформироватьСписокРегистровДляКонтроля()
Массив = Новый Массив;
// При проведении выполняется контроль превышения остатков на складах
Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Массив.Добавить(Движения.УслугиНаСкладах);
Массив.Добавить(Движения.ДвиженияСерийныхНомеров);
КонецЕсли;
ДополнительныеСвойства.ДляПроведения.Вставить("РегистрыДляКонтроля", Массив);
ДополнительныеСвойства.ДляПроведения.Вставить("ПопыткиПродажПревышающихОстаток");
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ИнициализироватьДокумент(ДанныеЗаполнения);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаПроведения".
//
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
Документы.РеализацияУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ПродажиСервер.ОтразитьПродажи(ДополнительныеСвойства, Движения, Отказ);
ПродажиСервер.ОтразитьПродажиПоДисконтнымКартам(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийныхНомеров(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийУслуг(ДополнительныеСвойства, Движения, Отказ);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект),Отказ);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
МаркетинговыеАкцииСервер.ПроверитьЦеныСертификатов(
ЭтотОбъект,
"Услуги",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьЗаполнениеТабличнойЧастиСерийныеНомера(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьДвиженияСерийныхНомеров(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьОкончаниеАбсолютныхСроковДействияСертификатов(
ЭтотОбъект,
"Услуги",
Отказ,
);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаУдаленияПроведения".
//
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
КонецПроцедуры
// Процедура - обработчик события "ПередЗаписью".
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Справочники.СерийныеНомера.ОчиститьВДокументеНеиспользуемыеСерийныеНомера(Услуги, СерийныеНомера);
ОбщегоНазначенияРТСервер.УдалитьНеиспользуемыеСтрокиСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект));
ПроведениеСервер.УстановитьРежимПроведения(Проведен, РежимЗаписи, РежимПроведения);
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
ОбщегоНазначенияРТ.УстановитьНовоеЗначениеРеквизита(
ЭтотОбъект,
ОбработкаТабличнойЧастиУслугиКлиентСервер.ПолучитьСуммуДокумента(Услуги, ЦенаВключаетНДС),
"СуммаДокумента");
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
// Процедура - обработчик события "ПриКопировании".
//
Процедура ПриКопировании(ОбъектКопирования)
СкидкиРассчитаны = Ложь;
СкидкиНаценкиСервер.ОтменитьСкидки(ЭтотОбъект, "Услуги");
Серии.Очистить();
ИнициализироватьДокумент();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Инициализация и заполнение
// Инициализирует документ
//
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("Магазин")
И НЕ ЗначениеЗаполнено(Магазин) Тогда
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(ДанныеЗаполнения.Магазин,,Склад, Ответственный);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Организация")
И НЕ ЗначениеЗаполнено(Организация) Тогда
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ДанныеЗаполнения.Организация,,БанковскийСчетОрганизации);
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Магазин = ЗначениеНастроекПовтИсп.ПолучитьМагазинПоУмолчанию(Магазин);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(Магазин,,Склад, Ответственный);
Если ЗначениеЗаполнено(Склад) Тогда
Организация = Склад.Организация;
КонецЕсли;
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация,Ответственный);
Контрагент = ЗначениеНастроекПовтИсп.ПолучитьПокупателяПоУмолчанию(Контрагент, Ответственный);
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(Организация,,БанковскийСчетОрганизации);
Продавец = ЗначениеНастроекПовтИсп.ПолучитьПродавцаПоУмолчанию(Продавец, Ответственный);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Прочее
//Процедура формирует массив имен регистров для контроля проведения
//
Процедура СформироватьСписокРегистровДляКонтроля()
Массив = Новый Массив;
// При проведении выполняется контроль превышения остатков на складах
Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Массив.Добавить(Движения.УслугиНаСкладах);
Массив.Добавить(Движения.ДвиженияСерийныхНомеров);
КонецЕсли;
ДополнительныеСвойства.ДляПроведения.Вставить("РегистрыДляКонтроля", Массив);
ДополнительныеСвойства.ДляПроведения.Вставить("ПопыткиПродажПревышающихОстаток");
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ИнициализироватьДокумент(ДанныеЗаполнения);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаПроведения".
//
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
Документы.РеализацияУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ПродажиСервер.ОтразитьПродажи(ДополнительныеСвойства, Движения, Отказ);
ПродажиСервер.ОтразитьПродажиПоДисконтнымКартам(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийныхНомеров(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийУслуг(ДополнительныеСвойства, Движения, Отказ);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект),Отказ);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
МаркетинговыеАкцииСервер.ПроверитьЦеныСертификатов(
ЭтотОбъект,
"Услуги",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьЗаполнениеТабличнойЧастиСерийныеНомера(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьДвиженияСерийныхНомеров(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьОкончаниеАбсолютныхСроковДействияСертификатов(
ЭтотОбъект,
"Услуги",
Отказ,
);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаУдаленияПроведения".
//
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
КонецПроцедуры
// Процедура - обработчик события "ПередЗаписью".
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Справочники.СерийныеНомера.ОчиститьВДокументеНеиспользуемыеСерийныеНомера(Услуги, СерийныеНомера);
ОбщегоНазначенияРТСервер.УдалитьНеиспользуемыеСтрокиСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект));
ПроведениеСервер.УстановитьРежимПроведения(Проведен, РежимЗаписи, РежимПроведения);
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
ОбщегоНазначенияРТ.УстановитьНовоеЗначениеРеквизита(
ЭтотОбъект,
ОбработкаТабличнойЧастиУслугиКлиентСервер.ПолучитьСуммуДокумента(Услуги, ЦенаВключаетНДС),
"СуммаДокумента");
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
// Процедура - обработчик события "ПриКопировании".
//
Процедура ПриКопировании(ОбъектКопирования)
СкидкиРассчитаны = Ложь;
СкидкиНаценкиСервер.ОтменитьСкидки(ЭтотОбъект, "Услуги");
Серии.Очистить();
ИнициализироватьДокумент();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Инициализация и заполнение
// Инициализирует документ
//
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("Магазин")
И НЕ ЗначениеЗаполнено(Магазин) Тогда
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(ДанныеЗаполнения.Магазин,,Склад, Ответственный);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Организация")
И НЕ ЗначениеЗаполнено(Организация) Тогда
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ДанныеЗаполнения.Организация,,БанковскийСчетОрганизации);
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Магазин = ЗначениеНастроекПовтИсп.ПолучитьМагазинПоУмолчанию(Магазин);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(Магазин,,Склад, Ответственный);
Если ЗначениеЗаполнено(Склад) Тогда
Организация = Склад.Организация;
КонецЕсли;
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация,Ответственный);
Контрагент = ЗначениеНастроекПовтИсп.ПолучитьПокупателяПоУмолчанию(Контрагент, Ответственный);
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(Организация,,БанковскийСчетОрганизации);
Продавец = ЗначениеНастроекПовтИсп.ПолучитьПродавцаПоУмолчанию(Продавец, Ответственный);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Прочее
//Процедура формирует массив имен регистров для контроля проведения
//
Процедура СформироватьСписокРегистровДляКонтроля()
Массив = Новый Массив;
// При проведении выполняется контроль превышения остатков на складах
Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Массив.Добавить(Движения.УслугиНаСкладах);
Массив.Добавить(Движения.ДвиженияСерийныхНомеров);
КонецЕсли;
ДополнительныеСвойства.ДляПроведения.Вставить("РегистрыДляКонтроля", Массив);
ДополнительныеСвойства.ДляПроведения.Вставить("ПопыткиПродажПревышающихОстаток");
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ИнициализироватьДокумент(ДанныеЗаполнения);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаПроведения".
//
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
Документы.РеализацияУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ПродажиСервер.ОтразитьПродажи(ДополнительныеСвойства, Движения, Отказ);
ПродажиСервер.ОтразитьПродажиПоДисконтнымКартам(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийныхНомеров(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийУслуг(ДополнительныеСвойства, Движения, Отказ);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект),Отказ);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
МаркетинговыеАкцииСервер.ПроверитьЦеныСертификатов(
ЭтотОбъект,
"Услуги",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьЗаполнениеТабличнойЧастиСерийныеНомера(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьДвиженияСерийныхНомеров(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьОкончаниеАбсолютныхСроковДействияСертификатов(
ЭтотОбъект,
"Услуги",
Отказ,
);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаУдаленияПроведения".
//
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
КонецПроцедуры
// Процедура - обработчик события "ПередЗаписью".
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Справочники.СерийныеНомера.ОчиститьВДокументеНеиспользуемыеСерийныеНомера(Услуги, СерийныеНомера);
ОбщегоНазначенияРТСервер.УдалитьНеиспользуемыеСтрокиСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект));
ПроведениеСервер.УстановитьРежимПроведения(Проведен, РежимЗаписи, РежимПроведения);
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
ОбщегоНазначенияРТ.УстановитьНовоеЗначениеРеквизита(
ЭтотОбъект,
ОбработкаТабличнойЧастиУслугиКлиентСервер.ПолучитьСуммуДокумента(Услуги, ЦенаВключаетНДС),
"СуммаДокумента");
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
// Процедура - обработчик события "ПриКопировании".
//
Процедура ПриКопировании(ОбъектКопирования)
СкидкиРассчитаны = Ложь;
СкидкиНаценкиСервер.ОтменитьСкидки(ЭтотОбъект, "Услуги");
Серии.Очистить();
ИнициализироватьДокумент();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Инициализация и заполнение
// Инициализирует документ
//
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("Магазин")
И НЕ ЗначениеЗаполнено(Магазин) Тогда
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(ДанныеЗаполнения.Магазин,,Склад, Ответственный);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Организация")
И НЕ ЗначениеЗаполнено(Организация) Тогда
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ДанныеЗаполнения.Организация,,БанковскийСчетОрганизации);
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Магазин = ЗначениеНастроекПовтИсп.ПолучитьМагазинПоУмолчанию(Магазин);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(Магазин,,Склад, Ответственный);
Если ЗначениеЗаполнено(Склад) Тогда
Организация = Склад.Организация;
КонецЕсли;
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация,Ответственный);
Контрагент = ЗначениеНастроекПовтИсп.ПолучитьПокупателяПоУмолчанию(Контрагент, Ответственный);
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(Организация,,БанковскийСчетОрганизации);
Продавец = ЗначениеНастроекПовтИсп.ПолучитьПродавцаПоУмолчанию(Продавец, Ответственный);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Прочее
//Процедура формирует массив имен регистров для контроля проведения
//
Процедура СформироватьСписокРегистровДляКонтроля()
Массив = Новый Массив;
// При проведении выполняется контроль превышения остатков на складах
Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Массив.Добавить(Движения.УслугиНаСкладах);
Массив.Добавить(Движения.ДвиженияСерийныхНомеров);
КонецЕсли;
ДополнительныеСвойства.ДляПроведения.Вставить("РегистрыДляКонтроля", Массив);
ДополнительныеСвойства.ДляПроведения.Вставить("ПопыткиПродажПревышающихОстаток");
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Процедура - обработчик события "ОбработкаЗаполнения".
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ИнициализироватьДокумент(ДанныеЗаполнения);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаПроведения".
//
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
Документы.РеализацияУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ПродажиСервер.ОтразитьПродажи(ДополнительныеСвойства, Движения, Отказ);
ПродажиСервер.ОтразитьПродажиПоДисконтнымКартам(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийныхНомеров(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДвиженияСерийУслуг(ДополнительныеСвойства, Движения, Отказ);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
ОбработкаТабличнойЧастиУслугиСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект),Отказ);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
МаркетинговыеАкцииСервер.ПроверитьЦеныСертификатов(
ЭтотОбъект,
"Услуги",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьЗаполнениеТабличнойЧастиСерийныеНомера(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьДвиженияСерийныхНомеров(
ЭтотОбъект,
"Услуги",
"СерийныеНомера",
Отказ
);
МаркетинговыеАкцииСервер.ПроверитьОкончаниеАбсолютныхСроковДействияСертификатов(
ЭтотОбъект,
"Услуги",
Отказ,
);
КонецПроцедуры
// Процедура - обработчик события "ОбработкаУдаленияПроведения".
//
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
СформироватьСписокРегистровДляКонтроля();
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
КонецПроцедуры
// Процедура - обработчик события "ПередЗаписью".
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Справочники.СерийныеНомера.ОчиститьВДокументеНеиспользуемыеСерийныеНомера(Услуги, СерийныеНомера);
ОбщегоНазначенияРТСервер.УдалитьНеиспользуемыеСтрокиСерий(ЭтотОбъект,Документы.РеализацияУслуг.ПараметрыУказанияСерий(ЭтотОбъект));
ПроведениеСервер.УстановитьРежимПроведения(Проведен, РежимЗаписи, РежимПроведения);
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
ОбщегоНазначенияРТ.УстановитьНовоеЗначениеРеквизита(
ЭтотОбъект,
ОбработкаТабличнойЧастиУслугиКлиентСервер.ПолучитьСуммуДокумента(Услуги, ЦенаВключаетНДС),
"СуммаДокумента");
ДополнительныеСвойства.Вставить("Отказ", Отказ);
КонецПроцедуры
// Процедура - обработчик события "ПриКопировании".
//
Процедура ПриКопировании(ОбъектКопирования)
СкидкиРассчитаны = Ложь;
СкидкиНаценкиСервер.ОтменитьСкидки(ЭтотОбъект, "Услуги");
Серии.Очистить();
ИнициализироватьДокумент();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Инициализация и заполнение
// Инициализирует документ
//
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("Магазин")
И НЕ ЗначениеЗаполнено(Магазин) Тогда
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(ДанныеЗаполнения.Магазин,,Склад, Ответственный);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Организация")
И НЕ ЗначениеЗаполнено(Организация) Тогда
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ДанныеЗаполнения.Организация,,БанковскийСчетОрганизации);
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Магазин = ЗначениеНастроекПовтИсп.ПолучитьМагазинПоУмолчанию(Магазин);
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПродажиПоУмолчанию(Магазин,,Склад, Ответственный);
Если ЗначениеЗаполнено(Склад) Тогда
Организация = Склад.Организация;
КонецЕсли;
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация,Ответственный);
Контрагент = ЗначениеНастроекПовтИсп.ПолучитьПокупателяПоУмолчанию(Контрагент, Ответственный);
БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(Организация,,БанковскийСчетОрганизации);
Продавец = ЗначениеНастроекПовтИсп.ПолучитьПродавцаПоУмолчанию(Продавец, Ответственный);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Прочее
//Процедура формирует массив имен регистров для контроля проведения
//
Процедура СформироватьСписокРегистровДляКонтроля()
Массив = Новый Массив;
// При проведении выполняется контроль превышения остатков на складах
Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Массив.Добавить(Движения.УслугиНаСкладах);
Массив.Добавить(Движения.ДвиженияСерийныхНомеров);
КонецЕсли;
ДополнительныеСвойства.ДляПроведения.Вставить("РегистрыДляКонтроля", Массив);
ДополнительныеСвойства.ДляПроведения.Вставить("ПопыткиПродажПревышающихОстаток");
КонецПроцедуры
- Разработка регламента выполнения процесса исследования качества готовой продукции.
- Иван Иванович Машков «Синие сливы»
- Баланс и отчетность (Понятие и значение бухгалтерского баланса)
- Учет труда и заработной платы (Системы и формы оплаты труда)
- Бухгалтерский баланс организации и порядок его составления (Понятие и значение бухгалтерского баланса)
- Анализ методов диагностики агрессивности.
- Теоретические основы формирования системы оплаты труда на предприятии
- Подходы к управлению человеческими ресурсами
- Бухгалтерская отчетность организации, порядок ее составления и анализ
- Денежная эмиссия (Сущность и порядок денежной эмиссии)
- Средства товарной экспертизы (выбрать из ОКП) товаров (Общая характеристика средств товарной экспертизы и методы проведения экспертизы непродовольственных товаров)
- Анализ конкурентов на рынке и определение собственной конкурентоспособности на примере ООО «Просто-К».