Диплом: Автоматизация расчетов с поставщиками и подрядчиками в ООО «Городской супермаркет»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
87
АктСверки = Документы.АктСверкиВзаиморасчетов.СоздатьДокумент();
// Заполняем шапку
АктСверки.Дата = ТекущаяДатаСеанса();
АктСверки.Организация = Организация;
АктСверки.ДатаНачала = Объект.Период.ДатаНачала;
АктСверки.ДатаОкончания = Объект.Период.ДатаОкончания;
АктСверки.Комментарий = "Создан автоматически обработкой по формированию актов
сверки";
АктСверки.Контрагент = Контрагент;
АктСверки.ВалютаДокумента = Объект.Валюта;
Если Договор <> Неопределено Тогда
АктСверки.ДоговорКонтрагента = Договор;
АктСверки.ВалютаДокумента = Договор.ВалютаВзаиморасчетов;
КонецЕсли;
АктСверки.Заполнить(Неопределено);
// Заполняем ТЧ
Результат = ЗаполнитьПоДаннымБухгалтерскогоУчета(Истина, АктСверки);
АктСверки.ПредставительОрганизации =
ПолучитьПредставителяОрганизации(АктСверки.Организация);
Если Объект.ФормироватьПустыеАкты Тогда
// Прододим документ не зависимо от того, есть в нем данные или нет
ВыполнитьПроведениеДокумента(АктСверки);
Иначе
Если АктСверки.ПоДаннымКонтрагента.Количество() > 0 ИЛИ
АктСверки.ПоДаннымОрганизации.Количество() > 0 Тогда
// Если никаких взаиморасчетов по организации с контрагентом нет,
отказываемся от записи
ВыполнитьПроведениеДокумента(АктСверки);
88
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьПроведениеДокумента(АктСверки)
Попытка
АктСверки.Записать(РежимЗаписиДокумента.Проведение);
СтрокаТЧ = Объект.АктыСверки.Добавить();
СтрокаТЧ.АктСверки = АктСверки.Ссылка;
ЗаполнитьСтрокуТЧ(СтрокаТЧ.НомерСтроки);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура СформироватьАктыСверкиЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ОтправитьАктыСверкиПоПочте(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьПредставителяОрганизации(Организация)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
89
| ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо КАК
ФизическоеЛицо
|ИЗ
| РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(
| ,
| СтруктурнаяЕдиница = &Организация
| И ОтветственноеЛицо =
ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)) КАК
ОтветственныеЛицаОрганизацийСрезПоследних";
Запрос.УстановитьПараметр("Организация", Организация);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.ФизическоеЛицо;
Иначе
Возврат Справочники.ФизическиеЛица.ПустаяСсылка();
КонецЕсли;
КонецФункции
#КонецОбласти
#Область ОтправкаПисем
&НаКлиенте
Процедура ОтправитьАктыСверкиПоПочте(Команда)
// Проверка заполнения данных
СоответствиеОшибок = Новый Соответствие;
Если НЕ ЗначениеЗаполнено(Объект.АдресОтправкиПротоколаРассылки) Тогда
90
СоответствиеОшибок.Вставить("Объект.АдресОтправкиПротоколаРассылки", 'Поле
"Адрес отправки протокола рассылки" не заполнено');
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Объект.ТекстПисьма) Тогда
СоответствиеОшибок.Вставить("Объект.Текст письма", 'Поле "Текст письма" не
заполнено');
КонецЕсли;
Если Объект.АктыСверки.Количество() = 0 Тогда
СоответствиеОшибок.Вставить("Объект.АктыСверки", "Перед отправкой необходимо
заполнить таблицу актов сверки!");
КонецЕсли;
Если СоответствиеОшибок.Количество() > 0 Тогда
Для каждого ЭлементСоответствия Из СоответствиеОшибок Цикл
СообщитьОбОшибке(ЭлементСоответствия.Значение,
ЭлементСоответствия.Ключ);
КонецЦикла;
Возврат;
КонецЕсли;
ПроверитьНаличиеЭлектроннойПочты();
Если НЕ ПроверитьНаличиеВыбранныхЭлементов() Тогда
Сообщить("Ошибка в e-mail");
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый
ОписаниеОповещения("ОтправитьПечатныеФормыПоПочтеНастройкаУчетнойЗаписиПредложена",
ЭтотОбъект);
Если
ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСоо
бщениями") Тогда
МодульРаботаСПочтовымиСообщениямиКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент");
91
МодульРаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправ
киПочты(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура
ОтправитьПечатныеФормыПоПочтеНастройкаУчетнойЗаписиПредложена(УчетнаяЗаписьНастроена,
ДополнительныеПараметры) Экспорт
Если УчетнаяЗаписьНастроена <> Истина Тогда
Возврат;
КонецЕсли;
КоличествоПисем = ОтправитьПочтуНаСервере();
Сообщить("Рассылка актов завершена. Проверьте протокол рассылки, который дожен прийти
на указанный почтовый ящик);
КонецПроцедуры
&НаСервере
Функция ОтправитьПочтуНаСервере()
КоличествоПисем = 0;
ТаблицаУчетныхЗаписей =
РаботаСПочтовымиСообщениями.ДоступныеУчетныеЗаписи(Истина, , Ложь); // получим учетную
запись для текущего пользователя
Если ТаблицаУчетныхЗаписей.Количество() = 0 Тогда // если для текущего пользователя нет
учетной записи, попробуем получить системную
ТаблицаУчетныхЗаписей =
РаботаСПочтовымиСообщениями.ДоступныеУчетныеЗаписи(Истина, , Истина);
КонецЕсли;
92
// если нет вообще доступных учетных записей - отказываемся от отправки, выдаем ошибку
Если ТаблицаУчетныхЗаписей.Количество() = 0 Тогда
Сообщить("Нет доступных учетных записей! Отправка невозможна!");
Возврат 0;
КонецЕсли;
УчетнаяЗапись = ТаблицаУчетныхЗаписей[0].Ссылка; // берем первую найденную доступную
учетную запись
ИменаМакетов = Новый Массив;
Для каждого ЭлементСписка Из Объект.СписокПечатныхФорм Цикл
ИменаМакетов.Добавить(ЭлементСписка.Значение);
КонецЦикла;
ПараметрыПечати = Новый Структура("ФормироватьСтандартноеОписаниеПисьма", Ложь);
ФорматыСохранения = Новый Массив;
Для каждого ЭлементСписка Из Объект.СписокФорматовСохранения Цикл
ФорматыСохранения.Добавить(ЭлементСписка.Значение);
КонецЦикла;
ДополнительныеПараметры = Новый Структура("УпаковатьВАрхив,ФорматыСохранения",
Ложь, ФорматыСохранения);
// Заполняем параметры письма
ПараметрыПисьма = Новый Структура();
ПараметрыПисьма.Вставить("Копии", Новый Массив);
ПараметрыПисьма.Вставить("СлепыеКопии", Новый Массив);
ПараметрыПисьма.Вставить("Важность", ВажностьИнтернетПочтовогоСообщения.Обычная);
МассивПолучателей = Новый Массив;
ПолучателиСообщения = Новый Массив;
ПараметрыПисьма.Вставить("Кому", МассивПолучателей);
93
ПараметрыПисьма.Вставить("ПолучателиСообщения", ПолучателиСообщения);
ПараметрыПисьма.Вставить("Тема", "");
ПараметрыПисьма.Вставить("Тело", "");
ПараметрыПисьма.Вставить("Вложения", Новый Соответствие);
ПараметрыПисьма.Вставить("ОбрабатыватьТексты", Истина);
ПараметрыПисьма.Вставить("УведомитьОДоставке", Ложь);
ПараметрыПисьма.Вставить("УведомитьОПрочтении", Ложь);
ПараметрыПисьма.Вставить("ТипТекста",
Перечисления.ТипыТекстовЭлектронныхПисем.HTML);
Для каждого СтрокаТЧ Из Объект.АктыСверки Цикл
Если НЕ СтрокаТЧ.Пометка Тогда
Продолжить;
КонецЕсли;
МассивАдресов = СтрРазделить(СтрокаТЧ.ЭлектроннаяПочта, ";");
Для каждого Адрес Из МассивАдресов Цикл
НаименованиеКонтрагента = СтрокаТЧ.Контрагент.НаименованиеПолное;
МассивПолучателей.Очистить();
МассивПолучателей.Добавить(Новый Структура("Адрес,Представление",
Адрес, НаименованиеКонтрагента));
ПараметрыПисьма.Кому = МассивПолучателей;
ПолучателиСообщения.Очистить();
ПолучателиСообщения.Добавить(Новый
Структура("ИсточникКонтактнойИнформации,Адрес,Представление",
СтрокаТЧ.Контрагент, Адрес, НаименованиеКонтрагента));
ПараметрыПисьма.ПолучателиСообщения = ПолучателиСообщения;
ПараметрыПисьма.Тема = "Акт сверки за период " + Объект.Период + " от " +
СтрокаТЧ.АктСверки.Организация +
94
?(ЗначениеЗаполнено(СтрокаТЧ.Договор), " по договору " + СтрокаТЧ.Договор,
"");
Подпись = ПолучитьПодпись();
// Формирование текста письма
Если Объект.СписокПечатныхФорм.Количество() > 1 Тогда
// Если выбраны две печатные формы, то в текст письма выводим текст
для акта сверки с печатью
ТекстПисьма = Объект.ТекстПисьмаАктаСПечатью;
Иначе
Если Объект.СписокПечатныхФорм[0].Значение = "АктСверки" Тогда
ТекстПисьма = Объект.ТекстПисьмаАктаБезПечати;
Иначе
ТекстПисьма = Объект.ТекстПисьмаАктаСПечатью;
КонецЕсли;
КонецЕсли;
ПараметрыПисьма.Тело = ТекстПисьма + "
|" + Подпись;
// Формирование вложений
ПечатныеФормы = Новый Массив;
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СтрокаТЧ.АктСверки);
Для каждого ИмяМакета Из ИменаМакетов Цикл
ПечатныеФормыОбъекта =
УправлениеПечатью.СформироватьПечатныеФормыДляБыстройПечати("Документ.АктСверкиВзаимо
расчетов",
"АктСверки",
МассивОбъектов,
ПараметрыПечати);
Если ПечатныеФормыОбъекта <> Неопределено Тогда
95
Если ИмяМакета = "АктСверкиСПечатьюИПодписью" Тогда
ИндексТабличногоДокумента = 0;
Для каждого ТабличныйДокумент Из
ПечатныеФормыОбъекта.ТабличныеДокументы Цикл
УправлениеПечатьюБП.ДобавитьФаксимилеВФоне(ТабличныйДокумент.Значение,
ПечатныеФормыОбъекта.ОбъектыПечати[ИндексТабличногоДокумента].Значение);
КонецЦикла;
КонецЕсли;
ПечатныеФормы.Добавить(ПечатныеФормыОбъекта);
КонецЕсли;
КонецЦикла;
ПараметрыПисьмаДляВложений = Неопределено;
ПараметрыПисьмаДляВложений =
ОтправкаПочтовыхСообщений.ПараметрыЭлектронногоПисьма(ПечатныеФормы,
"Документ.АктСверкиВзаиморасчетов",
ДополнительныеПараметры);
ПараметрыПисьма.Вложения = ПараметрыПисьмаДляВложений.Вложения;
Попытка
РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись,
ПараметрыПисьма);
КоличествоПисем = КоличествоПисем + 1;
Исключение
Сообщить(ОписаниеОшибки() + "
|Контрагенту " + НаименованиеКонтрагента + " на адрес " + Адрес + "
не было отправлено письмо!");
КонецПопытки;
КонецЦикла;
КонецЦикла;
Возврат КоличествоПисем;
96
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьПодпись()
Подпись =
БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("Подпись");
Если НЕ ЗначениеЗаполнено(Подпись) Тогда
Возврат "";
КонецЕсли;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(Подпись);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеHTML);
ЭлементыР = ДокументDOM.ПолучитьЭлементыПоИмени("p");
Если ЭлементыР.Количество() > 0 Тогда
Возврат ЭлементыР[0].ТекстовоеСодержимое;
Иначе
Возврат "";
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПроверитьНаличиеЭлектроннойПочты()
Для каждого СтрокаТЧ Из Объект.АктыСверки Цикл
Если СтрокаТЧ.Пометка И НЕ ЗначениеЗаполнено(СтрокаТЧ.ЭлектроннаяПочта) Тогда
СтрокаТЧ.Пометка = Ложь;

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Agile-методология в управлении проектами на примере ООО «Ресурсный центр «Академия КлассИнфо»
Aвтoмaтизaция пpoцecca вeдeния инфopмaциoннoй бaзы o дoлжнocтяx и вaкaнcияx c укaзaниeм тpeбoвaний к уpoвню знaний и нaвыкoв кaндидaтoв для гpуппы кaдpoв вoйcкoвoй чacти 3474»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
Cовершенствование управления рентабельности предприятия (на примере гуипп «бендерская типография «полиграфист»)
Event - менеджмент: реализация проекта (на примере ООО "АГРОПАК")