Имя: Пароль:
1C
 
Помощь с проведением документа по РН
0 kpe4et178
 
20.02.25
15:41
Всем привет.
Еще не пятница, но мозг ушел погулять.

Есть справочник Номенклатуры, с реквизитом ТипНоменклатуры.
ТипНоменклатуры - перчисления Товар, Услуга.
Есть документ прихода товаров с ТЧ Товары, туда подбираются и услуги и товары.

Как правильно сдлеать обработку проведения, чтобы отразить приход только товаров по регистру ОстаткиТоваров?

Как-то в цикле проверять тип номенклатуры - не айс мне кажется.
1 Галахад
 
гуру
20.02.25
15:43
Подготовить нужную табличку.
Закинуть табличку в РН.
Профит.

П.С. Цикл это норм.
2 DimVad
 
20.02.25
15:45
ТЧ выгружаете во временную таблицу запроса, делаете отбор по типу в запросе, выгружаете для проведения.
3 Elf_80_lvl
 
20.02.25
15:46
(0) Можно выгрузить табличку с отбором, можно циклом.
4 kpe4et178
 
20.02.25
15:47
Движения.ОстаткиТоваров.Записывать = Истина;
    // Обходим строки документа
    Для Каждого СтрокаТЧ Из Товары Цикл
        // Проверяем, что тип номенклатуры - "Товар"
        Если СтрокаТЧ.Номенклатура.ТипНоменклатуры = Перечисления.ТипНоменклатуры.Товар Тогда
            // Формируем запись в регистр ОстаткиТоваров
            Движение = Движения.Остатки.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Склад = Склад;
            Движение.Номенклатура = СтрокаТЧ.Номенклатура;
            Движение.Количество = СтрокаТЧ.Количество;
        КонецЕсли;
    КонецЦикла;
5 kpe4et178
 
20.02.25
15:48
(1) вот я тоже думаю, что будет быстрее Цикл или Выгрузка с отбором?
6 DimVad
 
20.02.25
15:54
(4) СтрокаТЧ.Номенклатура.ТипНоменклатуры - в этот момент система будет загружать весь объект номенклатуры в память (если раньше был загружен - возьмёт из кеша).

Я имел в виду что-то типа :
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
    |    Товары.Количество КАК Количество
    |ПОМЕСТИТЬ втТовары
    |ИЗ
    |    &тзТовары КАК Товары
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    втТовары.Номенклатура,
    |    втТовары.Количество
    |ИЗ
    |    втТовары КАК втТовары
    |ГДЕ
    |    втТовары.Номенклатура.ТипНоменклатуры = Значение(Перечисление.ТипНоменклатуры.Товар)");
    Запрос.УстановитьПараметр("тзТовары",    Док_.Товары.Выгрузить(,"Номенклатура, Количество"));
7 arsik
 
гуру
20.02.25
15:55
(2) Зачем временную? Можно сразу из базы читать. В момент проведения все данные документа уже в базе.
8 DimVad
 
20.02.25
15:57
(7) Можно. Привычка :-)
9 kpe4et178
 
20.02.25
16:07
(6) Спасибо. Согласен на счет Запроса, будет быстрее.
Мучас грасиас всем