1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| &НаСервере
Процедура ПереместитьШиныНаСервере()
// Перемещение строк из ТЧ 'Шины' в другой документ с учетом текущего пробега
// Запрос для получения текущего пробега, с исключением списанных позиций
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШиныСпецтехникиСрезПоследних.ЗаводскойНомер КАК ЗаводскойНомер,
| ЕСТЬNULL(ШиныСпецтехникиСрезПоследних.Пробег, 0) + ЕСТЬNULL(СУММА(ПараметрыПутевыхЛистовОбороты.ПробегОборот), 0) КАК Пробег
|ИЗ
| РегистрСведений.ШиныСпецтехники.СрезПоследних(, Спецтехника = &Спецтехника) КАК ШиныСпецтехникиСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПараметрыПутевыхЛистов.Обороты(, , День, Спецтехника = &Спецтехника) КАК ПараметрыПутевыхЛистовОбороты
| ПО ШиныСпецтехникиСрезПоследних.ДатаУстановки <= ПараметрыПутевыхЛистовОбороты.Период
|ГДЕ
| ШиныСпецтехникиСрезПоследних.ДатаСписания = ДАТАВРЕМЯ(1, 1, 1)
| И ШиныСпецтехникиСрезПоследних.Регистратор.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ШиныСпецтехникиСрезПоследних.ЗаводскойНомер,
| ШиныСпецтехникиСрезПоследних.Пробег";
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
Запрос.УстановитьПараметр("Спецтехника", Объект.Спецтехника);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
СоответствиеПробег = Новый Соответствие;
Пока Выборка.Следующий() Цикл
Ключ = Строка(Выборка.ЗаводскойНомер);
СоответствиеПробег.Вставить(Ключ, Выборка.Пробег);
КонецЦикла;
ТабИсходная = Объект.Шины.Выгрузить();
ОтборТаб = Новый Структура("Переместить", Истина);
СтрокиДляПеремещения = ТабИсходная.НайтиСтроки(ОтборТаб);
Если НЕ ЗначениеЗаполнено(ДокументНазначения) Тогда
Сообщить("Необходимо выбрать спецтехнику назначения!");
Возврат;
КонецЕсли;
Если СтрокиДляПеремещения.Количество() = 0 Тогда
Сообщить("Необходимо выбрать строки для перемещения!");
Возврат;
КонецЕсли;
Для Каждого Строка Из СтрокиДляПеремещения Цикл
Если Строка.Списать Тогда
Сообщить("Нельзя перемещать списанные позиции!");
Возврат;
КонецЕсли;
КонецЦикла;
// Перемещение
ДокОбъект = ДокументНазначения.ПолучитьОбъект();
Для Каждого Строка Из СтрокиДляПеремещения Цикл
НоваяСтрока = ДокОбъект.Шины.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
Ключ = Строка(Строка.ЗаводскойНомер);
Пробег = СоответствиеПробег.Получить(Ключ);
Если Пробег <> Неопределено Тогда
НоваяСтрока.Пробег = Пробег;
Иначе
НоваяСтрока.Пробег = 0;
КонецЕсли;
// Запись истории
Запись = ЗаписьИсторииШины(Объект.Спецтехника, Строка.ДатаУстановки, Пробег);
Если ПустаяСтрока(Строка.История) Тогда
НоваяСтрока.История = Запись;
Иначе
НоваяСтрока.История = Строка.История + "; " + Запись;
КонецЕсли;
НоваяСтрока.ДатаУстановки = ТекущаяДатаСеанса();
НоваяСтрока.Переместить = Ложь;
КонецЦикла;
// Записываем и проводим документ
Объект.Шины.Загрузить(ТабИсходная.Скопировать(Новый Структура("Переместить", Ложь)));
Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение));
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
ДокументНазначения = Документы.Автозапчасти.ПустаяСсылка();
Сообщить("Перемещение выполнено!");
КонецПроцедуры
&НаКлиенте
Процедура ПереместитьШины(Команда)
ОчиститьСообщения();
ПереместитьШиныНаСервере();
КонецПроцедуры
&НаСервере
Функция ЗаписьИсторииШины(Спецтехника, ДатаУстановки, Пробег)
ПробегДляИстории = ?(Пробег = Неопределено, 0, Пробег);
Возврат Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy")
+ " Перемещено с " + Спецтехника
+ ", пред.дата " + Формат(ДатаУстановки, "ДФ=dd.MM.yyyy")
+ ", на пробеге " + Строка(ПробегДляИстории) + " км.";
КонецФункции |