|
"Заполнить по заказу покупателя", не объединять одинаковые товары | ☑ | ||
---|---|---|---|---|
0
MrZLO
10.07.13
✎
09:03
|
(1С 8.2 УТ 10.3)
Документ заказ поставщику. При заполнении по заказу покупателя одинаковая номенклатура объединяется и суммируется. Как сделать, чтобы этого не было? // Заполняет переданную табличную часть по остаткам // // Параметры: // ТабличнаяЧасть - табличная часть. // Процедура ЗаполнитьТабличнуюЧастьПоОстаткам(ТабличнаяЧасть, ЗаказПокупателя = Неопределено) Экспорт Если ЗначениеЗаполнено(ЗаказПокупателя.ДатаОтгрузки) И ЗначениеЗаполнено(ДатаПоступления) И (ЗаказПокупателя.ДатаОтгрузки < ДатаПоступления) Тогда #Если Клиент Тогда Предупреждение("Отгрузку по заказу покупателя необходимо осуществить раньше даты поступления по данному документу!"); #Иначе ОбщегоНазначения.СообщитьОбОшибке("Отгрузку по заказу покупателя необходимо осуществить раньше даты поступления по данному документу!"); #КонецЕсли Возврат; КонецЕсли; Если ТабличнаяЧасть = Товары Тогда ЭтоТовары = Истина; Иначе ЭтоТовары = Ложь; КонецЕсли; Если ЭтоТовары Тогда ТоварТара = Перечисления.ТоварТара.Товар; Иначе ТоварТара = Перечисления.ТоварТара.Тара; КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТоварТара", ТоварТара); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("ТипЦен", ТипЦен); Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("ДатаОстатков", ОбщегоНазначения.ПолучитьДатуОстатков(ЭтотОбъект)); Если ЭтоТовары Тогда Запрос.УстановитьПараметр("СтатусПартии", Перечисления.СтатусыПартийТоваров.Купленный); Иначе Запрос.УстановитьПараметр("СтатусПартии", Перечисления.СтатусыПартийТоваров.ВозвратнаяТара); КонецЕсли; Запрос.УстановитьПараметр("ЗаказПокупателя", ЗаказПокупателя); Запрос.Текст = "ВЫБРАТЬ | ЗаказыПокупателейОстатки.Номенклатура, | ЗаказыПокупателейОстатки.Номенклатура.СтавкаНДС КАК СтавкаНДС, | ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры, | ЗаказыПокупателейОстатки.ЗаказПокупателя, | ЗаказыПокупателейОстатки.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ЗаказыПокупателейОстатки.ЕдиницаИзмерения.Коэффициент КАК Коэффициент, | ЗаказыПокупателейОстатки.СуммаУпрОстаток КАК Сумма, | ЗаказыПокупателейОстатки.КоличествоОстаток КАК Заказано, | ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщику, | ТоварыВРезервеНаСкладах.КоличествоОстаток КАК Зарезервировано |ИЗ | РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОстатков, ЗаказПокупателя = &ЗаказПокупателя | И СтатусПартии = &СтатусПартии) КАК ЗаказыПокупателейОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РазмещениеЗаказовПокупателей.Остатки(&ДатаОстатков, ЗаказПокупателя = &ЗаказПокупателя | И ЗаказПоставщику <> &Ссылка | И ТоварТара = &ТоварТара) КАК ЗаказыПоставщикамОстатки | ПО ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура | И ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры = ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаОстатков, ДокументРезерва = &ЗаказПокупателя) КАК ТоварыВРезервеНаСкладах | ПО ЗаказыПокупателейОстатки.Номенклатура = ТоварыВРезервеНаСкладах.Номенклатура | И ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры | |ГДЕ | НЕ ЗаказыПокупателейОстатки.Номенклатура.Услуга |"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Количество = ?(Выборка.Заказано = NULL, 0, Выборка.Заказано) - ?(Выборка.Зарезервировано = NULL, 0, Выборка.Зарезервировано) - ?(Выборка.ЗаказаноПоставщику = NULL, 0, Выборка.ЗаказаноПоставщику); Если Количество > 0 Тогда СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить(); СтрокаТабличнойЧасти.Номенклатура = Выборка.Номенклатура; СтрокаТабличнойЧасти.Заказ = Выборка.ЗаказПокупателя; Если ЭтоТовары Тогда СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры; СтрокаТабличнойЧасти.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения; СтрокаТабличнойЧасти.СтавкаНДС = Выборка.СтавкаНДС; СтрокаТабличнойЧасти.Коэффициент = Выборка.Коэффициент; СтрокаТабличнойЧасти.Количество = Количество * Выборка.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Выборка.Коэффициент; Иначе СтрокаТабличнойЧасти.Количество = Количество; КонецЕсли; КонецЕсли; КонецЦикла; // Получить нужные цены запросом НовыйВалютаДокумента = ?(ЭтоТовары, ВалютаДокумента, ДоговорКонтрагента.ВалютаВзаиморасчетов); СтруктураКурса = МодульВалютногоУчета.ПолучитьКурсВалюты(НовыйВалютаДокумента, Дата); НовыйКурсДокумента = СтруктураКурса.Курс; НовыйКратностьДокумента = СтруктураКурса.Кратность; СтруктураЗначенийЦен = Новый Структура; СтруктураЗначенийЦен.Вставить("ПерезаполнитьПроцентСкидкиНаценки", Ложь); СтруктураЗначенийЦен.Вставить("НовыйТипЦен", ТипЦен); СтруктураЗначенийЦен.Вставить("НовыйВалютаДокумента", НовыйВалютаДокумента); СтруктураЗначенийЦен.Вставить("НовыйКурсДокумента", НовыйКурсДокумента); СтруктураЗначенийЦен.Вставить("НовыйКратностьДокумента", НовыйКратностьДокумента); СтруктураЗначенийЦен.Вставить("ТекущийВалютаДокумента", ВалютаДокумента); СтруктураЗначенийЦен.Вставить("НовыйУчитыватьНДС", ?(ЭтоТовары, УчитыватьНДС, Истина)); СтруктураЗначенийЦен.Вставить("НовыйСуммаВключаетНДС", ?(ЭтоТовары, СуммаВключаетНДС, Истина)); СтруктураЗначенийЦен.Вставить("ЕстьСтавкаНДСВТабличнойЧасти", ?(ЭтоТовары, Истина, Ложь)); РезультатЗапросаЦен = Ценообразование.СформироватьЗапросПоЦенам(СтруктураЗначенийЦен, Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатурыКонтрагентов, ТабличнаяЧасть.ВыгрузитьКолонку("Номенклатура"), Дата, Контрагент, ДоговорКонтрагента); ВыборкаРезультатЗапросаЦен = РезультатЗапросаЦен.Выбрать(); Для каждого СтрокаТабличнойЧасти из ТабличнаяЧасть Цикл Если СтрокаТабличнойЧасти.Цена = 0 Тогда СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("Номенклатура", СтрокаТабличнойЧасти.Номенклатура); Ценообразование.ЗаполнитьЦенуВСтрокеТабличнойЧасти(ЭтотОбъект, СтрокаТабличнойЧасти, СтруктураПоиска, ВыборкаРезультатЗапросаЦен, СтруктураЗначенийЦен, Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатурыКонтрагентов, ?(ЭтоТовары, СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры, Неопределено)); Если ЭтоТовары Тогда ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, "Приобретение"); КонецЕсли; ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); Если ЭтоТовары Тогда ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); КонецЕсли; КонецЕсли; Если ЭтоТовары Тогда ОбработкаТабличныхЧастей.РассчитатьПлановуюСебестоимостьВСтрокеТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, мВалютаРегламентированногоУчета); КонецЕсли; КонецЦикла; КонецПроцедуры // ЗаполнитьТабличнуюЧастьПоОстаткам() я так понял сразу запрос отдает группированные товары, но тут про группировку нет ни слова... |
|||
1
Ненавижу 1С
гуру
10.07.13
✎
09:05
|
из разных заказов покупателя суммируется что ли?
|
|||
2
Ненавижу 1С
гуру
10.07.13
✎
09:05
|
вообще конечно
Количество = ?(Выборка.Заказано = NULL, 0, Выборка.Заказано) - ?(Выборка.Зарезервировано = NULL, 0, Выборка.Зарезервировано) - ?(Выборка.ЗаказаноПоставщику = NULL, 0, Выборка.ЗаказаноПоставщику); режет глаза |
|||
3
Ненавижу 1С
гуру
10.07.13
✎
09:06
|
+(2) но это не по теме
|
|||
4
Пеппи
10.07.13
✎
09:07
|
(0) Запрос же берет данные из регистра остатков а не из табличных частей документов.
|
|||
5
MrZLO
10.07.13
✎
09:09
|
(1) если в заказе покупателя есть
товар123 - 10 шт товар2 - 1 шт товар123 - 20 шт. получаем товар123 - 30 шт товар2 - 1 шт а надо товар123 - 10 шт товар2 - 1 шт товар123 - 20 шт. |
|||
6
Ненавижу 1С
гуру
10.07.13
✎
09:11
|
(5) если в одном заказе, то таки да и это правильно, ибо никакой разницы система не делает в 1 и 3 строке, см (4)
|
|||
7
MrZLO
10.07.13
✎
09:13
|
(4) т.е. никак... :(
|
|||
8
MrZLO
10.07.13
✎
09:19
|
Можно тупой вопрос. Чем будет хуже брать их не из регистра, а из табличной части? У меня документ ЗаказПоставщику не движит регистр ОстатковЗаказовПокупателей
|
|||
9
Ненавижу 1С
гуру
10.07.13
✎
09:23
|
(8) надо будет отслеживать размещение заказов покупателей в разных заказах пеоставщикам
|
|||
10
Serg_1960
10.07.13
✎
10:21
|
(8) Почему не используют чтение ТЧ документа? "ПотомуЧто"(с)
Тебе нужно получить остатки заказа, а не его первоначальное состояние. А на остатки оказывают влияние другие документы (корректировка заказа покупателя, частичная отгрузка/реализация, корректировка регистров и т.д.) - их тоже нужно будет все учитывать, считывать из различных источников :( |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |