Имя: Пароль:
1C
 
В регистре накопления Остатки по расходу регистрируется только 1
0 HolySheep
 
04.12.25
10:58
Добрый день. Для учебы выполняю задания по 1с сборника чистова. Задача 11.
При проведении документа "расходная накладная" в расходе в любом случае указывается единица, даже если указано другое количество
Вот модуль объекта

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

И ФОРМА ДОКУМЕНТА

&НаСервереБезКонтекста
Функция ПолучитьПартии(Номенклатура)
    Запрос = Новый Запрос;
    Запрос.Текст =
               "ВЫБРАТЬ РАЗЛИЧНЫЕ
               |    ОстаткиНоменклатурыОстатки.Партия КАК Партия
               |ИЗ
               |    РегистрНакопления.ОстаткиНоменклатуры.Остатки(, Номенклатура = &Номенклатура) КАК ОстаткиНоменклатурыОстатки";

               Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
               Результат = Запрос.Выполнить().Выгрузить();
               Спс = Новый СписокЗначений;
               Спс.ЗагрузитьЗначения(Результат.ВыгрузитьКолонку("Партия"));
               Возврат Спс;
               КонецФункции
&НаКлиенте

Процедура СписокНоменклатурыПартияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтрокаТЧ = Элементы.СписокНоменклатуры.ТекущиеДанные;
ДанныеВыбора = ПолучитьПартии(СтрокаТЧ.Номенклатура);
СтандартнаяОбработка = Ложь;
Если ДанныеВыбора.Количество() = 0  Тогда
    Сообщить("Партии отсутствуют");
    КонецЕсли;
    
    
КонецПроцедуры
1 Волшебник
 
04.12.25
11:05
и чо?
2 Волшебник
 
04.12.25
11:06
ОсталосьСписать = ВыборкаТовары.Количество(); // гы-гы
3 Гипервизор
 
04.12.25
11:19
(2) Вот подстава, так подстава. )
4 Волшебник
 
04.12.25
11:21
Сон разума рождает чудовищ.
5 СвинТуз
 
04.12.25
11:50
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(&МоментВремени, ????)
6 HolySheep
 
04.12.25
12:36
(2) а что в этой строчке не так?..
7 Гипервизор
 
04.12.25
12:42
(6) Ну это зависит от желаемого результата. Что вернёт ВыборкаТовары.Количество(), есть мысли?
8 HolySheep
 
04.12.25
12:49
(7) в моем понимании, Должно вернуть количество товаров, но я уже не уверена, что это правильно
9 2S
 
04.12.25
12:52
(8) Скобки убери
10 HolySheep
 
04.12.25
12:59
(9) спасибо большое, увидела
Основная теорема систематики: Новые системы плодят новые проблемы.