1
&НаСервере
2
Процедура ЗаполнитьЗаказыПоРасходнымНакладным_3с(МассивНомеровНакладных)
3
4
5
ДокОбъект = РеквизитФормыВЗначение(
“Объект”);
6
Префикс =
“”;
7
ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(ДокОбъект , Истина, Префикс);
8
МассивНомеровСПрефиксами = Новый Массив;
9
Для каждого НомерНакладной
Из МассивНомеровНакладных
Цикл
10
НомерНакладной = Префикс + СтроковыеФункцииКлиентСервер.ДополнитьСтроку(НомерНакладной, 11 – СтрДлина(Префикс),
“0”,
“Слева”);
11
МассивНомеровСПрефиксами.Добавить(НомерНакладной);
12
КонецЦикла;
13
14
15
ТЗЗапасы = Объект.Запасы.Выгрузить();
16
ТЗЗапасы.Свернуть(
“Номенклатура, Характеристика, ЕдиницаИзмерения, ПрослеживаемыйТовар, ПрослеживаемыйКомплект, УчитыватьВНУ, СтавкаНДС”,
“Количество, Сумма, Всего”);
17
Объект.Запасы.Загрузить(ТЗЗапасы);
18
19
Запрос = Новый Запрос;
20
Запрос.Текст =
21
“ВЫБРАТЬ
22
| 0 КАК НомерЗапроса,
23
| РасходнаяНакладная.Ссылка КАК Ссылка,
24
| РасходнаяНакладнаяЗапасы.Номенклатура КАК Номенклатура,
25
| РасходнаяНакладнаяЗапасы.Характеристика КАК Характеристика,
26
| РасходнаяНакладнаяЗапасы.Заказ КАК Заказ,
27
| МАКСИМУМ(РасходнаяНакладнаяЗапасы.НомерСтроки) КАК НомерСтроки,
28
| СУММА(РасходнаяНакладнаяЗапасы.Количество) КАК Количество
29
|ПОМЕСТИТЬ ВТРасходныеНакладные
30
|ИЗ
31
| Документ.РасходнаяНакладная КАК РасходнаяНакладная
32
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Запасы КАК РасходнаяНакладнаяЗапасы
33
| ПО (РасходнаяНакладнаяЗапасы.Ссылка = РасходнаяНакладная.Ссылка)
34
|ГДЕ
35
| РасходнаяНакладная.Организация = &Организация
36
| И РасходнаяНакладная.Номер В(&МассивНомеров)
37
|СГРУППИРОВАТЬ ПО
38
| РасходнаяНакладная.Ссылка,
39
| РасходнаяНакладнаяЗапасы.Номенклатура,
40
| РасходнаяНакладнаяЗапасы.Характеристика,
41
| РасходнаяНакладнаяЗапасы.Заказ
42
|;
43
|////////////////////////////////////////////////////////////////////////////////
44
|ВЫБРАТЬ
45
| 1 КАК НомерЗапроса,
46
| ПеремещениеЗапасовЗапасы.НомерСтроки КАК НомерСтроки,
47
| ПеремещениеЗапасовЗапасы.Номенклатура КАК Номенклатура,
48
| ПеремещениеЗапасовЗапасы.Характеристика КАК Характеристика,
49
| ПеремещениеЗапасовЗапасы.Количество КАК Количество,
50
| ПеремещениеЗапасовЗапасы.ЗаказПокупателя КАК ЗаказПокупателя
51
|ПОМЕСТИТЬ ВТДанныеТЧ
52
|ИЗ
53
| &тзЗапасы КАК ПеремещениеЗапасовЗапасы
54
|;
55
|////////////////////////////////////////////////////////////////////////////////
56
|ВЫБРАТЬ
57
| 2 КАК НомерЗапроса,
58
| ВТДанныеТЧ.НомерСтроки КАК НомерСтроки,
59
| ВТДанныеТЧ.Номенклатура КАК Номенклатура,
60
| ВТДанныеТЧ.Характеристика КАК Характеристика,
61
| ВТДанныеТЧ.Количество КАК Количество,
62
| ВТДанныеТЧ.ЗаказПокупателя КАК ЗаказПокупателяТекущий,
63
| ВТДанныеТЧ.НомерСтроки КАК КоличествоДублей,
64
| ВТРасходныеНакладные.Заказ КАК ЗаказПокупателя,
65
| ВТРасходныеНакладные.НомерСтроки КАК НомерСтрокиНакладной,
66
| ВТРасходныеНакладные.Ссылка КАК РасходнаяНакладная
67
|ИЗ
68
| ВТДанныеТЧ КАК ВТДанныеТЧ
69
| ЛЕВОЕ СОЕДИНЕНИЕ ВТРасходныеНакладные КАК ВТРасходныеНакладные
70
| ПО ВТДанныеТЧ.Номенклатура = ВТРасходныеНакладные.Номенклатура
71
| И ВТДанныеТЧ.Характеристика = ВТРасходныеНакладные.Характеристика
72
| И ВТДанныеТЧ.Количество = ВТРасходныеНакладные.Количество
73
|ИТОГИ
74
| КОЛИЧЕСТВО(КоличествоДублей)
75
|ПО
76
| НомерСтроки
77
|;
78
|////////////////////////////////////////////////////////////////////////////////
79
|ВЫБРАТЬ
80
| 3 КАК НомерЗапроса,
81
| ВТРасходныеНакладные.Номенклатура КАК Номенклатура,
82
| ВТРасходныеНакладные.Характеристика КАК Характеристика,
83
| ВТРасходныеНакладные.Количество КАК Количество,
84
| ВТРасходныеНакладные.Заказ КАК ЗаказПокупателя,
85
| ВТРасходныеНакладные.Ссылка КАК РасходнаяНакладная
86
|ПОМЕСТИТЬ ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп
87
|ИЗ
88
| ВТРасходныеНакладные КАК ВТРасходныеНакладные
89
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеТЧ КАК ВТДанныеТЧ
90
| ПО (ВТДанныеТЧ.Номенклатура = ВТРасходныеНакладные.Номенклатура)
91
| И (ВТДанныеТЧ.Характеристика = ВТРасходныеНакладные.Характеристика)
92
| И (ВТДанныеТЧ.Количество = ВТРасходныеНакладные.Количество)
93
|ГДЕ
94
| ВТДанныеТЧ.Номенклатура ЕСТЬ NULL
95
|;
96
|////////////////////////////////////////////////////////////////////////////////
97
|ВЫБРАТЬ
98
| 4 КАК НомерЗапроса,
99
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.Номенклатура КАК Номенклатура,
100
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.Характеристика КАК Характеристика,
101
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.Количество КАК Количество,
102
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.ЗаказПокупателя КАК ЗаказПокупателя,
103
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.РасходнаяНакладная КАК РасходнаяНакладная
104
|ИЗ
105
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп КАК ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп
106
|;
107
|////////////////////////////////////////////////////////////////////////////////
108
|ВЫБРАТЬ
109
| 5 КАК НомерЗапроса,
110
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.Номенклатура КАК Номенклатура,
111
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.Характеристика КАК Характеристика,
112
| СУММА(ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.Количество) КАК Количество
113
|ИЗ
114
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп КАК ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп
115
|СГРУППИРОВАТЬ ПО
116
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.Номенклатура,
117
| ВТРасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.Характеристика”;
118
Запрос.УстановитьПараметр(
“МассивНомеров”, МассивНомеровСПрефиксами);
119
Запрос.УстановитьПараметр(
“Организация”, Объект.Организация);
120
Запрос.УстановитьПараметр(
“тзЗапасы”, Объект.Запасы.Выгрузить());
121
122
РезультатЗапроса = Запрос.ВыполнитьПакет();
123
124
ВыборкаНомерСтроки = РезультатЗапроса[2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
125
РасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп = РезультатЗапроса[4].Выгрузить();
126
РасходныеНакладныеБезСовпаденийПоКоличествуСгрупп = РезультатЗапроса[5].Выгрузить();
127
128
Пока ВыборкаНомерСтроки.Следующий()
Цикл
129
Выборка = ВыборкаНомерСтроки.Выбрать();
130
Пока Выборка.Следующий()
Цикл
131
Если ВыборкаНомерСтроки.КоличествоДублей > 1
Тогда
132
ОбщегоНазначения.СообщитьПользователю(
“Дублирование строк: строка №” + Выборка.НомерСтроки +
” расх.накл: “+Выборка.РасходнаяНакладная +
” строка №” + Выборка.НомерСтрокиНакладной);
133
Продолжить;
134
КонецЕсли;
135
Если НЕ ЗначениеЗаполнено(Выборка.ЗаказПокупателя)
Тогда
136
137
Продолжить;
138
КонецЕсли;
139
Если Выборка.ЗаказПокупателя <> Выборка.ЗаказПокупателяТекущий
Тогда
140
Объект.Запасы[Выборка.НомерСтроки – 1].ЗаказПокупателя = Выборка.ЗаказПокупателя;
141
Объект.Запасы[Выборка.НомерСтроки – 1].Резерв = Объект.Запасы[Выборка.НомерСтроки – 1].Количество;
142
КонецЕсли;
143
КонецЦикла;
144
КонецЦикла;
145
СтрокиСПустымиЗаказами = Объект.Запасы.НайтиСтроки(Новый Структура(
“ЗаказПокупателя”, Документы.ЗаказПокупателя.ПустаяСсылка()));
146
Для Каждого СтрокаСПустымЗаказом
Из СтрокиСПустымиЗаказами
Цикл
147
СтруктураОтбора = Новый Структура(
“Номенклатура, Характеристика”);
148
ЗаполнитьЗначенияСвойств(СтруктураОтбора, СтрокаСПустымЗаказом);
149
НайденныеСтрокиВРасходныхНакладныхСгрупп = РасходныеНакладныеБезСовпаденийПоКоличествуСгрупп.НайтиСтроки(СтруктураОтбора);
150
НайденныеСтрокиВРасходныхНакладныхНеСгрупп = РасходныеНакладныеБезСовпаденийПоКоличествуНеСгрупп.НайтиСтроки(СтруктураОтбора);
151
Если Не НайденныеСтрокиВРасходныхНакладныхСгрупп.Количество()
Тогда
152
ОбщегоНазначения.СообщитьПользователю(
“Не найдено в расходных накладных по строке №” + СтрокаСПустымЗаказом.НомерСтроки);
153
ИначеЕсли НайденныеСтрокиВРасходныхНакладныхСгрупп[0].Количество <> СтрокаСПустымЗаказом.Количество
Тогда
154
ОбщегоНазначения.СообщитьПользователю(СтрШаблон(
“В строка № %1 количество: %2, в расходных накладных количество: %3”, Выборка.НомерСтроки, СтрокаСПустымЗаказом.Количество, НайденныеСтрокиВРасходныхНакладныхСгрупп[0].Количество));
155
Для Каждого НайденнаяСтрокаВРасходныхНакладныхНеСгрупп
Из НайденныеСтрокиВРасходныхНакладныхНеСгрупп
Цикл
156
ОбщегоНазначения.СообщитьПользователю(СтрШаблон(Символы.Таб +
“В расходной накладной %1 по заказу %2 количество: %3”, НайденнаяСтрокаВРасходныхНакладныхНеСгрупп.РасходнаяНакладная, НайденнаяСтрокаВРасходныхНакладныхНеСгрупп.ЗаказПокупателя, НайденнаяСтрокаВРасходныхНакладныхНеСгрупп.Количество));
157
КонецЦикла;
158
Иначе
159
Для Каждого НайденнаяСтрокаВРасходныхНакладныхНеСгрупп
Из НайденныеСтрокиВРасходныхНакладныхНеСгрупп
Цикл
160
НСтрЗапасы = Объект.Запасы.Добавить();
161
ЗаполнитьЗначенияСвойств(НСтрЗапасы, СтрокаСПустымЗаказом);
162
ЗаполнитьЗначенияСвойств(НСтрЗапасы, НайденнаяСтрокаВРасходныхНакладныхНеСгрупп,
“Количество, ЗаказПокупателя”);
163
НСтрЗапасы.Резерв = НСтрЗапасы.Количество;
164
НСтрЗапасы.Сумма = СтрокаСПустымЗаказом.Сумма * НайденнаяСтрокаВРасходныхНакладныхНеСгрупп.Количество / СтрокаСПустымЗаказом.Количество;
165
НСтрЗапасы.Всего = СтрокаСПустымЗаказом.Всего * НайденнаяСтрокаВРасходныхНакладныхНеСгрупп.Количество / СтрокаСПустымЗаказом.Количество;
166
КонецЦикла;
167
Объект.Запасы.Удалить(СтрокаСПустымЗаказом);
168
КонецЕсли;
169
КонецЦикла;
170
171
КонецПроцедуры