|
Оприходование товара на основании документа Возврат от покупателей | ☑ | ||
---|---|---|---|---|
0
Bon Jovi
11.06.20
✎
15:36
|
Конфигурация: Trade (10.3.29.1) (http://v8.1c.ru/trade/), версия: 8.3.11.2867, обычные формы.
Добрый день. Подскажите пожалуйста в следующем. Мне нужно создать обработку, с помощью которой я смогу создавать документы оприходования товара на основе не проведённого документа возврат от покупателей. То есть получать позиции и количество из документа возврат от покупателей плюс нужно рассчитать себе стоимость. То есть есть реализация проведённая, есть её не проведённый возврат. Нужно вместо возврат создать документ оприходования. Товар из регистра партии товаров на складах списывается через реализацию по принципу FIFO. Документ возврат от покупателей возвращает товар немного иначе, последний товар который был списан из реализации будет первым в возврате (ну и остальные партии по такому же принципу). То есть оприходование должно записывать партии в такой же очерёдности как документ возврат от покупателей. Подскажите, как реализовать. Небольшие наработки: ВЫБРАТЬ ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Номенклатура, ВозвратТоваровОтПокупателяТовары.ДокументПартии КАК Реализация ПОМЕСТИТЬ ЗапросПоВозврату ИЗ Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары ГДЕ ВозвратТоваровОтПокупателяТовары.Ссылка = &ДокументВозврата ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗапросПоВозврату.Номенклатура КАК Номенклатура, ПартииТоваровНаСкладах.Количество КАК Количество, ПартииТоваровНаСкладах.Стоимость КАК Стоимость, ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования ИЗ ЗапросПоВозврату КАК ЗапросПоВозврату ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ПО ЗапросПоВозврату.Номенклатура = ПартииТоваровНаСкладах.Номенклатура И ЗапросПоВозврату.Реализация = ПартииТоваровНаСкладах.Регистратор УПОРЯДОЧИТЬ ПО ДокументОприходования Тестовый пример результата запроса: https://ibb.co/Kwmrg71 |
|||
1
Злопчинский
11.06.20
✎
16:19
|
провети возврат. получаем нужные партии и все данные.
скопировтаь ТЧ из возрата в Оприходование распровести возврат. |
|||
2
Злопчинский
11.06.20
✎
16:20
|
но концепция пагубная. ибо по постановке вопроса видно, что вы "труситесь" над себестоимостью возвратов.
а впри той схеме что вы описали, у вас будетреализация. потом оприходованием (типа "первый возврат") - зато следующий возврат нихрена не знает про предыдущий возврат. и вся схема идет в п..у. Хотя несколько возвартов по однйо отгрузке редко, но концепция - кривая... |
|||
3
Bon Jovi
11.06.20
✎
16:24
|
(1) к сожалению, не подходит способ
|
|||
4
Bon Jovi
12.06.20
✎
16:08
|
Нужно как сделать грамотный отбор после запроса,в котором будут сравниваться строки одной таблицы (возвраты) и другой (партий). Ну и одновременно высчитывать нужное количество из таблицы партий в таблицу возвратов.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Номенклатура, | ВозвратТоваровОтПокупателяТовары.Количество КАК Количество, | ВозвратТоваровОтПокупателяТовары.ДокументПартии КАК Реализация, | ВозвратТоваровОтПокупателяТовары.Склад КАК Склад, | ВозвратТоваровОтПокупателяТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения |ПОМЕСТИТЬ ЗапросПоВозврату |ИЗ | Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары |ГДЕ | ВозвратТоваровОтПокупателяТовары.Ссылка = &ДокументВозврата |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗапросПоВозврату.Номенклатура КАК Номенклатура, | ЗапросПоВозврату.Количество КАК КоличествоНоменклатурыВозврата, | ПартииТоваровНаСкладах.Количество КАК Количество, | ЗапросПоВозврату.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ПартииТоваровНаСкладах.Стоимость КАК Стоимость, | ЗапросПоВозврату.Склад КАК Склад |ИЗ | ЗапросПоВозврату КАК ЗапросПоВозврату | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах | ПО ЗапросПоВозврату.Номенклатура = ПартииТоваровНаСкладах.Номенклатура | И ЗапросПоВозврату.Реализация = ПартииТоваровНаСкладах.Регистратор | |УПОРЯДОЧИТЬ ПО | Номенклатура, | ПартииТоваровНаСкладах.ДокументОприходования УБЫВ |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("ДокументВозврата", ДокументВозврата); Выборка = Запрос.Выполнить().Выбрать(); ТЗНоменклатурыВозврата = ДокументВозврата.Товары.Выгрузить(); Отбор = Новый Структура(); Отбор.Вставить("Номенклатура", Выборка.Номенклатура); Строка = ТЗНоменклатурыВозврата.НайтиСтроки(Отбор); |
|||
5
mistеr
12.06.20
✎
18:48
|
(1) Не из ТЧ нужно копировать, а из движений.
|
|||
6
Bon Jovi
17.06.20
✎
10:03
|
(5) моё решение:
Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Номенклатура, | ВозвратТоваровОтПокупателяТовары.ДокументПартии КАК Реализация, | ВозвратТоваровОтПокупателяТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения |ПОМЕСТИТЬ ЗапросПоВозврату |ИЗ | Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары |ГДЕ | ВозвратТоваровОтПокупателяТовары.Ссылка = &ДокументВозврата |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗапросПоВозврату.Номенклатура КАК Номенклатура, | ПартииТоваровНаСкладах.Количество КАК Количество, | ЗапросПоВозврату.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ПартииТоваровНаСкладах.Стоимость КАК Стоимость, | ПартииТоваровНаСкладах.Склад КАК Склад |ИЗ | ЗапросПоВозврату КАК ЗапросПоВозврату | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах | ПО ЗапросПоВозврату.Номенклатура = ПартииТоваровНаСкладах.Номенклатура | И ЗапросПоВозврату.Реализация = ПартииТоваровНаСкладах.Регистратор | |УПОРЯДОЧИТЬ ПО | Номенклатура, | ПартииТоваровНаСкладах.ДокументОприходования УБЫВ |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("ДокументВозврата", ДокументВозврата); ВыборкаВыгрузка = Запрос.Выполнить().Выгрузить(); НовыйДокумент = Документы.ОприходованиеТоваров.СоздатьДокумент(); Для каждого СтрокаДокументаВозврата Из ДокументВозврата.Товары Цикл Массив = ВыборкаВыгрузка.НайтиСтроки(Новый Структура("Номенклатура", СтрокаДокументаВозврата.Номенклатура)); НеобходимоеКоличество = СтрокаДокументаВозврата.Количество; Для каждого СтрокаМассива Из Массив Цикл ТабличнаяЧасть = НовыйДокумент.Товары.Добавить(); ТабличнаяЧасть.Номенклатура = СтрокаМассива.Номенклатура; ТабличнаяЧасть.ЕдиницаИзмерения = СтрокаМассива.ЕдиницаИзмерения; ТабличнаяЧасть.Коэффициент = 1; Если НеобходимоеКоличество > СтрокаМассива.Количество Тогда НеобходимоеКоличество = НеобходимоеКоличество - СтрокаМассива.Количество; ТабличнаяЧасть.Количество = СтрокаМассива.Количество; ТабличнаяЧасть.Цена = СтрокаМассива.Стоимость / СтрокаМассива.Количество; ТабличнаяЧасть.Сумма = СтрокаМассива.Стоимость; Иначе ТабличнаяЧасть.Количество = НеобходимоеКоличество; ТабличнаяЧасть.Цена = СтрокаМассива.Стоимость / СтрокаМассива.Количество; ТабличнаяЧасть.Сумма = ТабличнаяЧасть.Количество * ТабличнаяЧасть.Цена; НеобходимоеКоличество = 0; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; НовыйДокумент.Товары.Свернуть("Номенклатура, ЕдиницаИзмерения, Коэффициент, Цена, Сумма, Качество", "Количество"); НовыйДокумент.Дата = ТекущаяДата(); НовыйДокумент.Склад = СтрокаДокументаВозврата.Склад; НовыйДокумент.ОтражатьВУправленческомУчете = Истина; НовыйДокумент.Организация = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнаяОрганизация"); НовыйДокумент.Записать(); КонецПроцедуры |
|||
7
Джинн
17.06.20
✎
10:07
|
Вы решили в доход это захреначить и налог на прибыль заплатить? Гениальный ход. И одноэснику есть чем заняться.
|
|||
8
eTmy
17.06.20
✎
10:10
|
А если будет две нуменклатуры двумя строчками?) Не пугает связка вас?
|
|||
9
eTmy
17.06.20
✎
10:10
|
(8) Одинаковые*
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |