1
0
mirror of https://github.com/kuzyara/Lock1C-cheet-sheet.git synced 2024-11-26 18:51:44 +02:00

Create УправлениеСтатусами.bsl

This commit is contained in:
nicolay kuznetsov 2019-12-26 11:19:29 +08:00 committed by GitHub
parent 7e4fc691eb
commit 6ca0334639
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,196 @@
Процедура ОбновитьСтатусРеализации(Документ, Статус) Экспорт
НачатьТранзакцию();
Попытка
БлокировкаОчереди = Новый БлокировкаДанных;
Блок = БлокировкаОчереди.Добавить("РегистрСведений.СтатусРеализации");
Блок.Режим = РежимБлокировкиДанных.Исключительный;
Блок.УстановитьЗначение("Документ", Документ);
БлокировкаОчереди.Заблокировать();
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Документ",Документ);
Запрос.УстановитьПараметр("Статус",Статус);
Запрос.Текст =
"ВЫБРАТЬ
| СтатусРеализацииСрезПоследних.Документ КАК Документ,
| СтатусРеализацииСрезПоследних.Статус КАК Статус,
| IsNull(СтатусРеализацииСрезПоследних.Документ.Контрагент.ПодключенКЭДО, FALSE) КАК ПодключенКЭДО
|ИЗ
| РегистрСведений.СтатусРеализации.СрезПоследних(, Документ = &Документ) КАК СтатусРеализацииСрезПоследних";
Рез = Запрос.Выполнить().Выбрать();
Записывать = Ложь;
Если Рез.Количество() > 0 Тогда
Рез.Следующий();
Если Рез.Статус <> Статус Тогда
Записывать = Истина;
КонецЕсли;
Если (Рез.Статус = Перечисления.СтатусЗаказа.Собран И Статус = Перечисления.СтатусЗаказа.ВРаботе)
ИЛИ (Рез.Статус = Перечисления.СтатусЗаказа.Отгружен И Статус = Перечисления.СтатусЗаказа.Собран)
ИЛИ (Рез.Статус = Перечисления.СтатусЗаказа.Доставлен И Статус = Перечисления.СтатусЗаказа.Собран) Тогда
ЭДОПодкючено = ?(ЗначениеЗаполнено(Рез.ПодключенКЭДО), Рез.ПодключенКЭДО, Ложь);
Если ЭДОПодкючено И Статус = Перечисления.СтатусЗаказа.Собран
И (Рез.Статус = Перечисления.СтатусЗаказа.Отгружен ИЛИ Рез.Статус = Перечисления.СтатусЗаказа.Доставлен) Тогда
ВидПечатнойФормы = "Utd";
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ВидПечатнойФормы", ВидПечатнойФормы);
Запрос.УстановитьПараметр("Документ", Документ);
Запрос.Текст = "ВЫБРАТЬ
| 1 КАК Представление
|ИЗ
| РегистрСведений.ЖурналДокументыЭДО КАК ЖурналДокументыЭДО
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ПО (РеализацияТоваровУслуг.Ссылка = &Документ
| И ЖурналДокументыЭДО.ДокументОтгрузки = РеализацияТоваровУслуг.Ссылка)
| И (ЖурналДокументыЭДО.ВидПечатнойФормы = &ВидПечатнойФормы)";
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
ПроверитьОтправитьВЭДОПоРасходномуОрдеру(Документ);
КонецЕсли;
КонецЕсли;
Записывать = Ложь;
КонецЕсли;
Иначе
Записывать = Истина;
КонецЕсли;
// Чибинин Я.Ф. 2017-04-25 номер карточки 309844 {
// отгрузка должна быть только одна
Если Статус = Перечисления.СтатусЗаказа.Отгружен
И НЕ ПроверитьДубльОтгрузки(Документ) Тогда
Записывать = Ложь;
КонецЕсли;
// Чибинин Я.Ф. 2017-04-25 }
Если Записывать Тогда
Запись = РегистрыСведений.СтатусРеализации.СоздатьМенеджерЗаписи();
Запись.Документ = Документ;
Запись.Статус = Статус;
Запись.Ответственный = ПараметрыСеанса.ТекущийПользователь;
Запись.Период = ТекущаяДатаНаСервере();
Запись.Записать(Истина);
СтрокиЗаказовСобытия.ОпубликоватьСтрокиЗаказовВОчередиСобытийПриИзмененииСтатусаРеализации(Документ);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстОшибки = ОписаниеОшибки();
ВызватьИсключение ТекстОшибки;
КонецПопытки;
КонецПроцедуры
// Чибинин Я.Ф. 2017-04-25 номер карточки 309844 {
Функция ПроверитьДубльОтгрузки(Документ) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СтатусРеализации.Документ
|ИЗ
| РегистрСведений.СтатусРеализации КАК СтатусРеализации
|ГДЕ
| СтатусРеализации.Документ = &Документ
| И СтатусРеализации.Статус = &Статус
| И СтатусРеализации.Документ ССЫЛКА Документ.РеализацияТоваровУслуг";
Запрос.УстановитьПараметр("Документ", Документ);
Запрос.УстановитьПараметр("Статус", Перечисления.СтатусЗаказа.Отгружен);
Результат = Запрос.Выполнить();
Возврат Результат.Пустой();
КонецФункции
// Чибинин Я.Ф. 2017-04-25 }
Процедура ПроверитьОтправитьВЭДОПоРасходномуОрдеру(Документ) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК РеализацияТоваров,
| РеализацияТоваровУслуг.Контрагент КАК Контрагент
|ПОМЕСТИТЬ втРеализацияТоваров
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &Ссылка
| И РеализацияТоваровУслуг.Контрагент.ПодключенКЭДО
| И РеализацияТоваровУслуг.Контрагент.ДатаПодключенияЭДО <> ДАТАВРЕМЯ(1, 1, 1)
| И РеализацияТоваровУслуг.Дата >= РеализацияТоваровУслуг.Контрагент.ДатаПодключенияЭДО
|
|ИНДЕКСИРОВАТЬ ПО
| РеализацияТоваров,
| Контрагент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втРеализацияТоваров.РеализацияТоваров КАК РеализацияТоваров,
| втРеализацияТоваров.Контрагент КАК Контрагент,
| КонтрагентыПечатныеФормы.ПечатнаяФорма КАК ПечатнаяФорма,
| КонтрагентыПечатныеФормы.Внешняя КАК Внешняя
|ИЗ
| втРеализацияТоваров КАК втРеализацияТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты.ПечатныеФормы КАК КонтрагентыПечатныеФормы
| ПО втРеализацияТоваров.Контрагент = КонтрагентыПечатныеФормы.Ссылка
| И (НЕ КонтрагентыПечатныеФормы.ПечатнаяФорма = ЗНАЧЕНИЕ(Перечисление.ВидыПечатныхФорм.ТН))
| И (НЕ КонтрагентыПечатныеФормы.ПечатнаяФорма = ЗНАЧЕНИЕ(Перечисление.ВидыПечатныхФорм.УКД))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЖурналДокументыЭДО КАК ЖурналДокументыЭДО
| ПО втРеализацияТоваров.РеализацияТоваров = ЖурналДокументыЭДО.ДокументОтгрузки
|ГДЕ
| ЖурналДокументыЭДО.ДокументОтгрузки ЕСТЬ NULL";
Запрос.УстановитьПараметр("Ссылка", Документ);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
//{Кривенков А.С. 25.12.2018 #466094
СчетФактураСсылка = УчетНДС.НайтиПодчиненныйДокумент(Документ, "СчетФактураВыданный");
Если НЕ ЗначениеЗаполнено(СчетФактураСсылка) Тогда
ДокументОбъект = Документ.ПолучитьОбъект();
Попытка
ДокументОбъект.СоздатьСчФ();
Исключение
ЗаписьЖурналаРегистрации("Ошибка создания СчФ", УровеньЖурналаРегистрации.Предупреждение, Метаданные.Документы.РеализацияТоваровУслуг, Документ, "Документ не отправлен по ЭДО, ошибка создания СчФ "+ОписаниеОшибки());
#Если Клиент Тогда
Сообщить("Документ не отправлен по ЭДО, ошибка создания СчФ!");
#КонецЕсли
Возврат;
КонецПопытки;
КонецЕсли;
//}Кривенков А.С. 25.12.2018 #466094
ВыборкаПечатныеФормы = РезультатЗапроса.Выбрать();
Пока ВыборкаПечатныеФормы.Следующий() Цикл
РеализацияЭДОПривилегированный.СобратьИОтправитьДанныеЧерезЭДОПолныеПрава(Документ, ВыборкаПечатныеФормы.Внешняя,, Строка(ВыборкаПечатныеФормы.ПечатнаяФорма));
КонецЦикла;
КонецЕсли;
КонецПроцедуры