Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 авг 2025, 03:44

Обучаюсь на 1с не могу решить проблему в коде

Автор Denmf, 23 авг 2025, 20:26

Denmf и 1 гость просматривают эту тему.

Denmf

Начал решать эту задачу, но столкнулся с проблемой: не могу её решить. Если кто-то может подсказать, что именно я делал неправильно, в каком направлении нужно думать, чтобы решить эту задачу, буду благодарен. (Начал её запускать, но постоянно жалуется на "
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура"). Не могу понять почему. И вопрос: правильно ли я делаю, что блокирую (РегистрНакопления.БронированиеТоваров)? Из-за этого я встаю в тупик и не могу продвинуться дальше вот мой код      "
Процедура ОбработкаПроведения(Отказ, Режим)
    // !!!   
    Блокировка = Новый БлокировкаДанных;
    ЭлБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
    ЭлБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлБлокировки.УстановитьЗначение("Склад",Склад);
    ЭлБлокировки.ИсточникДанных =Товары.Выгрузить(, "Номенклатура");
    ЭлБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
    // блокируем 2 часть
    ЭлБлокБрон = Блокировка.Добавить("РегистрНакопления.БронированиеТоваров");
    ЭлБлокБрон.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлБлокБрон.УстановитьЗначение("Склад",Склад);
    ЭлБлокБрон.ИсточникДанных =Товары.Выгрузить(, "Номенклатура");
    ЭлБлокБрон.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");

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


   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
   КонецПроцедуры"

sali


antoneus

Пишет, что поле объекта не обнаружено. Потому что в последнем запросе не надо ПОМЕСТИТЬ ТВ_рег.

Denmf

sali, Здравствуйте, Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура - Что, поле объекта не обнаружено
" Пока ВыборкаДетальныеЗаписи.Следующий() Цикл       
        // !!! Отсечь Услуги !!! (Решено на уровне запроса)
      Движение = Движения.ОстаткиНоменклатуры.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
      Движение.Склад = Склад;
      Движение.Количество = ВыборкаДетальныеЗаписи.Количество;   "

Denmf


Теги: #новчичёк 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск