|
Чем плох такой код? | ☑ | ||
---|---|---|---|---|
0
pro3ri
28.12.15
✎
15:00
|
добрый день!
в обработке проведения док расходный ордер: Если ТипЗнч(ДокументПередачи.ДокументОснование) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") Тогда Сделка=ДокументПередачи.ДокументОснование.ЗаказПокупателя.Ссылка; ИначеЕсли ТипЗнч(ДокументПередачи.ДокументОснование) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда Сделка=ДокументПередачи.ДокументОснование; КонецЕсли; Если Не ЗначениеНеЗаполнено(Сделка) И ДоговорКонтрагента.ВедениеВзаиморасчетов <> Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоРасчетнымДокументам И ТипЗнч(Сделка) <> Тип("ДокументСсылка.СчетНаОплатуПокупателю") Тогда НаборДвижений = Движения.ЗаказыПокупателей; ТаблицаДвижений = НаборДвижений.Выгрузить(); ТаблицаПоТоварам = Новый ТаблицаЗначений; ТаблицаПоТоварам.Колонки.Добавить("ЗаказПокупателя"); ТаблицаПоТоварам.Колонки.Добавить("ДоговорКонтрагента"); ТаблицаПоТоварам.Колонки.Добавить("СтатусПартии"); ТаблицаПоТоварам.Колонки.Добавить("Склад"); ТаблицаПоТоварам.Колонки.Добавить("Номенклатура"); ТаблицаПоТоварам.Колонки.Добавить("ЕдиницаИзмерения"); ТаблицаПоТоварам.Колонки.Добавить("Количество"); ТаблицаПоТоварам.Колонки.Добавить("Цена"); ТаблицаПоТоварам.Колонки.Добавить("СуммаВзаиморасчетов"); ТаблицаПоТоварам.Колонки.Добавить("СуммаУпр"); ТоварыСгруппировал = Товары.Выгрузить(); ТоварыСгруппировал.Свернуть("Номенклатура, ЕдиницаИзмерения, Коэффициент, Цена", "Количество"); Для каждого СтрокаТЧ из ТоварыСгруппировал Цикл ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Номенклатура", СтрокаТЧ.Номенклатура); НайденныеСтроки = Сделка.Товары.НайтиСтроки(ПараметрыОтбора); ВсегоВРасходникеДолжноБыть = 0; Для каждого Строка Из НайденныеСтроки Цикл ВсегоВРасходникеДолжноБыть = ВсегоВРасходникеДолжноБыть + Строка.Количество; КонецЦикла; Для каждого СтрокаНайденная Из НайденныеСтроки Цикл Отбор = Новый Структура ("ДокументРезерва, Номенклатура, Склад", Сделка,СтрокаТЧ.Номенклатура, СтрокаНайденная.Размещение); Если СтрокаНайденная.Размещение = Неопределено Тогда Остатки = Новый ТаблицаЗначений; Иначе Остатки = РегистрыНакопления.ТоварыВРезервеНаСкладах.Остатки(Дата,Отбор,"Номенклатура","Количество"); КонецЕсли; Если Остатки.Количество()>0 Тогда ОстатокЗаказа=Остатки[0].Количество; Иначе ОстатокЗаказа=0; КонецЕсли; Если ОстатокЗаказа>0 И ВсегоВРасходникеДолжноБыть>0 Тогда СтрокаТЗ=ТаблицаПоТоварам.Добавить(); Если СтрокаНайденная.Размещение = Неопределено Тогда СтрокаТЗ.Склад=СтрокаТЧ.Склад; Иначе СтрокаТЗ.Склад = СтрокаНайденная.Размещение; КонецЕсли; СтрокаТЗ.Номенклатура=СтрокаТЧ.Номенклатура; СтрокаТЗ.ЕдиницаИзмерения=СтрокаТЧ.ЕдиницаИзмерения; СтрокаТЗ.Цена=СтрокаТЧ.Цена; Если ВсегоВРасходникеДолжноБыть>0 Тогда СтрокаТЗ.Количество =?(ВсегоВРасходникеДолжноБыть-ОстатокЗаказа>=0,ОстатокЗаказа,ВсегоВРасходникеДолжноБыть); ВсегоВРасходникеДолжноБыть = ВсегоВРасходникеДолжноБыть - ОстатокЗаказа; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений); // Недостающие поля ТаблицаДвижений.ЗаполнитьЗначения(Сделка, "ЗаказПокупателя"); ТаблицаДвижений.ЗаполнитьЗначения(ДоговорКонтрагента, "ДоговорКонтрагента"); ТаблицаДвижений.ЗаполнитьЗначения(Перечисления.СтатусыПартийТоваров.Купленный, "СтатусПартии"); НаборДвижений.мПериод = Дата; НаборДвижений.мТаблицаДвижений = ТаблицаДвижений; // Проверка осатков при оперативном проведении. Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда // Контроль объема отгрузки по заказу Движения.ЗаказыПокупателей.КонтрольПревышенияОбъемаЗаказа(ЭтотОбъект, СтруктураШапкиДокумента, "Товары", Отказ, Заголовок); КонецЕсли; Если Не Отказ Тогда Движения.ЗаказыПокупателей.ВыполнитьРасход(); КонецЕсли; НаборДвижений = Движения.ТоварыВРезервеНаСкладах; // Получим таблицу значений, совпадающую со струкутрой набора записей регистра. ТаблицаДвижений = НаборДвижений.Выгрузить(); // Заполним таблицу движений. ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений); // Недостающие поля. ТаблицаДвижений.ЗаполнитьЗначения(Сделка,"ДокументРезерва"); НаборДвижений.мПериод = Дата; НаборДвижений.мТаблицаДвижений = ТаблицаДвижений; // Проверка осатков при оперативном проведении. Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда НаборДвижений.КонтрольОстатков(ЭтотОбъект, "Товары", СтруктураШапкиДокумента, Отказ, Заголовок); КонецЕсли; Если Не Отказ Тогда Движения.ТоварыВРезервеНаСкладах.ВыполнитьРасход(); КонецЕсли; КонецЕсли; Я вижу то, что если документ был создан не на основании, ОбработкаЗаполнения: ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ПредварительнаяНакладная") Тогда // Заполним реквизиты из стандартного набора. ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание); ВидОперации = Перечисления.ВидыОперацийРасходныйОрдер.РасходПоНакладной; ДокументПередачи = Основание; Тогда резерв не спишется. |
|||
2
pro3ri
28.12.15
✎
15:04
|
Я так понимаю нужно все данные тащить из документа в документ: заказ покупателя (тут указаны резервы) в предварительную накладную (резервы переносятся в табличной части); Она в расходный ордер соответсвенно тащит данные о резервах. Или допустимо использовать код выше?
НО, он работает... |
|||
4
Stim
28.12.15
✎
15:11
|
(2) да
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |