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

Хранилище

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

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



> Партионный учет (Проведение расходной)          
bodka Подменю пользователя
сообщение 04.09.11, 17:44
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 76
Спасибо сказали: 36 раз
Рейтинг: 0

Что-то я запутался... Почему при проведении расходной у меня списывается только одна единица по регистру ОстаткиТоваров? Списать = Мин(ОсталосьСписать,ВыборкаПартии.КоличествоОстаток); - Здесь я все правильно написал?


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

    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
     Запрос.УстановитьПараметр("Склад", Склад);

    Результат = Запрос.Выполнить();

    Выборка  = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока Выборка.Следующий() Цикл
        
        Если Выборка.Количество > Выборка.КоличествоОстатокПоСкладам Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не хватает товара"""+ Выборка.Номенклатура + """,из необходимых"
+ Выборка.Количество+ " в наличии осталось только "+ Выборка.КоличествоОстатокПоСкладам;
            Сообщение.Поле = "Товары["+(Выборка.НомерСтроки-1) +"].Количество";
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();
            Отказ = Истина;
            Движения.ОстаткиТоваров.Записывать = Ложь;
             Движения.ОстаткиПоСкладам.Записывать = Ложь;
         КонецЕсли;
         КонецЦикла;
            Если Отказ Тогда
                Возврат;
                
            КОнецЕсли;
            Выборка.Сбросить();
            Пока Выборка.Следующий() Цикл
                ОсталосьСписать = Выборка.Количество();
                ВыборкаПартии = Выборка.Выбрать();
                Пока ВыборкаПартии.Следующий() И ОсталосьСписать <> 0 Цикл
                    
                    Списать = Мин(ОсталосьСписать,ВыборкаПартии.КоличествоОстаток);
                    Себестоимость = Списать / ВыборкаПартии.КоличествоОстаток * ВыборкаПартии.СтоимостьОстаток;
                    
                    
            
         Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
        Движение.Период = Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Списать;
        Движение.Стоимость = Себестоимость;
        Движение.Партия = ВыборкаПартии.Партия;
        
        ОсталосьСписать = ОсталосьСписать - Списать;
        
                    
                КонецЦикла;
        Движение = Движения.ОстаткиПоСкладам.ДобавитьРасход();
        Движение.Период = Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Выборка.Количество;
        Движение.Склад = Склад;
                
            
             КонецЦикла;

    
КонецПроцедуры

Vofka Подменю пользователя
сообщение 04.09.11, 19:00
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Это из книги Радченко?

bodka Подменю пользователя
сообщение 04.09.11, 20:44
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 76
Спасибо сказали: 36 раз
Рейтинг: 0

Нет

Flexy Подменю пользователя
сообщение 04.09.11, 20:53
Сообщение #4

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Очень похоже на практическое задание которое дает работодатель wink.gif
А вообще структура кода напоминает Курс Чистова, где рассматривалось списание партий товара.
В Радченко по моему не рассматривались задачи такого плана.если ошибаюсь - поправьте, т.к. нет книги под рукой.

Сообщение отредактировал Flexy - 04.09.11, 21:08

bodka Подменю пользователя
сообщение 05.09.11, 11:31
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 76
Спасибо сказали: 36 раз
Рейтинг: 0

Да, это из курса Чистова...

Радченко в книге "Практ. Пос. Разр." не рассматривал партионный

Нужно вот так:
ОсталосьСписать = Выборка.Количество;

Когда набирал код после точки нажал ввод для выбора "Количество()"

Batchir Подменю пользователя
сообщение 05.09.11, 11:37
Сообщение #6

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

Не хватает движения если в конце ОсталосьСписать <> 0, но есть в остатках. В данном случае означает что у Вас проблемы с партиями, т.е. по партиям меньше чем в остатках
В вашем примере стоит, например ОсталосьСписать=2, а остаток по партиям равен 1. После выполнения циклов ОсталосьСписать = 1. Это количество тоже нужно списать, но не в разрезе партий.

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


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

 

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