Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Оприходование товара на основании документа Возврат от покупателей          
Bon Jovi Подменю пользователя
сообщение 11.06.20, 14:33
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 2 раз
Рейтинг: 2

Конфигурация: Trade (10.3.29.1) (http://v8.1c.ru/trade/), версия: 8.3.11.2867, обычные формы.
Добрый день. Подскажите пожалуйста в следующем. Мне нужно создать обработку, с помощью которой я смогу создавать документы оприходования товара на основе не проведённого документа возврат от покупателей. То есть получать позиции и количество из документа возврат от покупателей плюс нужно рассчитать себе стоимость. То есть есть реализация проведённая, есть её не проведённый возврат. Нужно вместо возврат создать документ оприходования. Товар из регистра партии товаров на складах списывается через реализацию по принципу FIFO. Документ возврат от покупателей возвращает товар немного иначе, последний товар который был списан из реализации будет первым в возврате (ну и остальные партии по такому же принципу). То есть оприходование должно записывать партии в такой же очерёдности как документ возврат от покупателей. Подскажите, как реализовать.
Небольшие наработки:
ВЫБРАТЬ
    ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Номенклатура,
    ВозвратТоваровОтПокупателяТовары.ДокументПартии КАК Реализация
ПОМЕСТИТЬ ЗапросПоВозврату
ИЗ
    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
ГДЕ
    ВозвратТоваровОтПокупателяТовары.Ссылка = &ДокументВозврата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗапросПоВозврату.Номенклатура КАК Номенклатура,
    ПартииТоваровНаСкладах.Количество КАК Количество,
    ПартииТоваровНаСкладах.Стоимость КАК Стоимость,
    ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования
ИЗ
    ЗапросПоВозврату КАК ЗапросПоВозврату
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
        ПО ЗапросПоВозврату.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
            И ЗапросПоВозврату.Реализация = ПартииТоваровНаСкладах.Регистратор

УПОРЯДОЧИТЬ ПО
    ДокументОприходования



stark Подменю пользователя
сообщение 11.06.20, 16:59
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 52
Из: Киев
Спасибо сказали: 7 раз
Рейтинг: 7

Bon Jovi @ Сегодня, 15:33 * ,
Как-то так...
ВЫБРАТЬ ПЕРВЫЕ 1
    ПартииТоваровНаСкладахОбороты.Номенклатура КАК Номенклатура,
    ПартииТоваровНаСкладахОбороты.Регистратор КАК Регистратор,
    ПартииТоваровНаСкладахОбороты.Период КАК Период
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(, , Регистратор, Номенклатура = &Номенклатура) КАК ПартииТоваровНаСкладахОбороты
ГДЕ
    ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.РеализацияТовраов

СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладахОбороты.Период,
    ПартииТоваровНаСкладахОбороты.Номенклатура,
    ПартииТоваровНаСкладахОбороты.Регистратор

УПОРЯДОЧИТЬ ПО
    Период УБЫВ

Bon Jovi Подменю пользователя
сообщение 12.06.20, 15:08
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 2 раз
Рейтинг: 2

stark @ Вчера, 17:59 * ,
Нужно как то сделать грамотный отбор после запроса,в котором будут сравниваться строки одной таблицы (возвраты) и другой (партий). Ну и одновременно высчитывать нужное количество из таблицы партий в таблицу возвратов.
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Номенклатура,
    |    ВозвратТоваровОтПокупателяТовары.Количество КАК Количество,
    |    ВозвратТоваровОтПокупателяТовары.ДокументПартии КАК Реализация,
    |    ВозвратТоваровОтПокупателяТовары.Склад КАК Склад,
    |    ВозвратТоваровОтПокупателяТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения
    |ПОМЕСТИТЬ ЗапросПоВозврату
    |ИЗ
    |    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
    |ГДЕ
    |    ВозвратТоваровОтПокупателяТовары.Ссылка = &ДокументВозврата
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    ЗапросПоВозврату.Номенклатура КАК Номенклатура,
    |    ЗапросПоВозврату.Количество КАК КоличествоНоменклатурыВозврата,
    |    ПартииТоваровНаСкладах.Количество КАК Количество,
    |    ЗапросПоВозврату.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |    ПартииТоваровНаСкладах.Стоимость КАК Стоимость,
    |    ЗапросПоВозврату.Склад КАК Склад
    |ИЗ
    |    ЗапросПоВозврату КАК ЗапросПоВозврату
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
    |        ПО ЗапросПоВозврату.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
    |            И ЗапросПоВозврату.Реализация = ПартииТоваровНаСкладах.Регистратор
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура,
    |    ПартииТоваровНаСкладах.ДокументОприходования УБЫВ
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    Запрос.УстановитьПараметр("ДокументВозврата", ДокументВозврата);
    Выборка = Запрос.Выполнить().Выбрать();
    
    ТЗНоменклатурыВозврата    = ДокументВозврата.Товары.Выгрузить();
        
    Отбор = Новый Структура();
    Отбор.Вставить("Номенклатура", Выборка.Номенклатура);
    Строка = ТЗНоменклатурыВозврата.НайтиСтроки(Отбор);

Bon Jovi Подменю пользователя
сообщение 17.06.20, 9:02
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 2 раз
Рейтинг: 2

Мой решение:
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Номенклатура,
    |    ВозвратТоваровОтПокупателяТовары.ДокументПартии КАК Реализация,
    |    ВозвратТоваровОтПокупателяТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения
    |ПОМЕСТИТЬ ЗапросПоВозврату
    |ИЗ
    |    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
    |ГДЕ
    |    ВозвратТоваровОтПокупателяТовары.Ссылка = &ДокументВозврата
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ЗапросПоВозврату.Номенклатура КАК Номенклатура,
    |    ПартииТоваровНаСкладах.Количество КАК Количество,
    |    ЗапросПоВозврату.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |    ПартииТоваровНаСкладах.Стоимость КАК Стоимость,
    |    ПартииТоваровНаСкладах.Склад КАК Склад
    |ИЗ
    |    ЗапросПоВозврату КАК ЗапросПоВозврату
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
    |        ПО ЗапросПоВозврату.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
    |            И ЗапросПоВозврату.Реализация = ПартииТоваровНаСкладах.Регистратор
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура,
    |    ПартииТоваровНаСкладах.ДокументОприходования УБЫВ
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    Запрос.УстановитьПараметр("ДокументВозврата", ДокументВозврата);
    
    ВыборкаВыгрузка = Запрос.Выполнить().Выгрузить();          
    
    НовыйДокумент = Документы.ОприходованиеТоваров.СоздатьДокумент();
    
    Для каждого СтрокаДокументаВозврата Из ДокументВозврата.Товары Цикл
        
        Массив = ВыборкаВыгрузка.НайтиСтроки(Новый Структура("Номенклатура", СтрокаДокументаВозврата.Номенклатура));
        НеобходимоеКоличество = СтрокаДокументаВозврата.Количество;
        
        Для каждого СтрокаМассива Из Массив Цикл
            
            ТабличнаяЧасть = НовыйДокумент.Товары.Добавить();
            ТабличнаяЧасть.Номенклатура             = СтрокаМассива.Номенклатура;
            ТабличнаяЧасть.ЕдиницаИзмерения    = СтрокаМассива.ЕдиницаИзмерения;
            ТабличнаяЧасть.Коэффициент            = 1;                              
            
            Если НеобходимоеКоличество > СтрокаМассива.Количество Тогда
                НеобходимоеКоличество = НеобходимоеКоличество - СтрокаМассива.Количество;
                ТабличнаяЧасть.Количество         = СтрокаМассива.Количество;
                ТабличнаяЧасть.Цена                     = СтрокаМассива.Стоимость / СтрокаМассива.Количество;
                ТабличнаяЧасть.Сумма                 = СтрокаМассива.Стоимость;
            Иначе                  
                ТабличнаяЧасть.Количество         = НеобходимоеКоличество;
                ТабличнаяЧасть.Цена                     = СтрокаМассива.Стоимость / СтрокаМассива.Количество;
                ТабличнаяЧасть.Сумма                = ТабличнаяЧасть.Количество * ТабличнаяЧасть.Цена;
                НеобходимоеКоличество = 0;
                Прервать;
            КонецЕсли;
            
        КонецЦикла;        
        
    КонецЦикла;
    
    НовыйДокумент.Товары.Свернуть("Номенклатура, ЕдиницаИзмерения, Коэффициент, Цена, Сумма, Качество", "Количество");    
    НовыйДокумент.Дата                                            = ТекущаяДата();
    НовыйДокумент.Склад                                            = СтрокаДокументаВозврата.Склад;
    НовыйДокумент.ОтражатьВУправленческомУчете     = Истина;
    НовыйДокумент.Организация                                 = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнаяОрганизация");    
    НовыйДокумент.Записать();
    
КонецПроцедуры

Спасибо сказали: Vofka,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 12.07.20, 22:20
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!