8.х Разукомплектования номенклатуры

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем MevMix, 27 май 2011.

  1. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

    Регистрация:
    21 фев 2011
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    Столкнулся с такой проблемой
    Ругается на левое соединение

    что не так связал как надо?

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

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Хоть бы написали строку и сообщение об ошибке.

    это?
  3. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

    Регистрация:
    21 фев 2011
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26

    {Документ.РазукомплектацияНоменклатуры(75)}: Ошибка при вызове метода контекста (Выполнить): {(14, 20)}: Ошибка обработки представления "РегистрНакопления.ОстаткиТоваров.Остатки:Несоответствие типов (параметр номер ""1"")"
    ЛЕВОЕ СОЕДИНЕНИЕ <<?>>РегистрНакопления.ОстаткиТоваров.Остатки(
    ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Я же написал в чем ошибка, вы первым параметром передаете Склады, а необходимо Дату.
  5. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

    Регистрация:
    21 фев 2011
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    Спасибо не доглядел
  6. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

    Регистрация:
    21 фев 2011
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    shurikvz подскажите плиз
    при такой ОбработкеПроведения
    товар на складе не появляется???
    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
    
    СтруктураШапкиДокумента = ОбщегоНазначения.СформироватьСтруктуруШапкиДокумента(ЭтотОбъект);
    Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(СтруктураШапкиДокумента);
    ПроверитьЗаполнениеШапки(СтруктураШапкиДокумента, Отказ, Заголовок);
    
    СтруктураПолей = Новый Структура;
    СтруктураПолей.Вставить("Номенклатура");
    СтруктураПолей.Вставить("Количество");
    ЗаполнениеДокументов.ПроверитьЗаполнениеТабличнойЧасти(ЭтотОбъект, "ПереченьНоменклатуры", СтруктураПолей, Отказ, Заголовок);
    
    Если НЕ Отказ Тогда
    Запрос = Новый Запрос;
    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
    Запрос.Текст  =
    "ВЫБРАТЬ
    |	РазукомплектацияНоменклатуры.Комплект,
    |	РазукомплектацияНоменклатуры.Количество,
    |	РазукомплектацияНоменклатуры.Комплект.ВидНоменклатуры КАК ВидНоменклатуры,
    |	ОстаткиТоваровОстатки.КоличествоОстаток,
    |	ОстаткиТоваровОстаткиНаСкладе.КоличествоОстаток КАК КоличествоОстатокНаСкладе
    |ИЗ
    |	Документ.РазукомплектацияНоменклатуры КАК РазукомплектацияНоменклатуры
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
    |				&МоментВремени,
    |				Номенклатура В (&СписокНоменклатурыДокумента)
    |					И Склад = &СкладВДокументе) КАК ОстаткиТоваровОстаткиНаСкладе
    |		ПО РазукомплектацияНоменклатуры.Комплект = ОстаткиТоваровОстаткиНаСкладе.Номенклатура
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
    |				&МоментВремени,
    |				Номенклатура В (&СписокНоменклатурыДокумента)
    |					И Склад = &СкладВДокументе) КАК ОстаткиТоваровОстатки
    |		ПО РазукомплектацияНоменклатуры.Комплект = ОстаткиТоваровОстатки.Номенклатура
    |ГДЕ
    |	РазукомплектацияНоменклатуры.Ссылка = &Ссылка
    |
    |ДЛЯ ИЗМЕНЕНИЯ
    |	РегистрНакопления.ОстаткиТоваров.Остатки";
    Иначе
    Запрос.Текст  =
    "ВЫБРАТЬ
    |	РазукомплектацияНоменклатуры.Комплект,
    |	РазукомплектацияНоменклатуры.Количество,
    |	РазукомплектацияНоменклатуры.Комплект.ВидНоменклатуры КАК ВидНоменклатуры,
    |	ОстаткиТоваровОстатки.КоличествоОстаток
    |ИЗ
    |	Документ.РазукомплектацияНоменклатуры КАК РазукомплектацияНоменклатуры
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
    |		ПО РазукомплектацияНоменклатуры.Комплект = ОстаткиТоваровОстатки.Номенклатура
    |ГДЕ
    |	РазукомплектацияНоменклатуры.Ссылка = &Ссылка
    |
    |ДЛЯ ИЗМЕНЕНИЯ
    |	РегистрНакопления.ОстаткиТоваров.Остатки"
    КонецЕсли;
    Запрос.УстановитьПараметр("СкладВДокументе", Склад);
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("СписокНоменклатурыДокумента", Комплект);
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
    
    //Пока ВыборкаРезультатаЗапроса.Следующий() Цикл
    // Проверить остаток при оперативном проведении.
    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
    Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Номенклатура Тогда
    Остаток = ?(ВыборкаРезультатаЗапроса.КоличествоОстаток = Null, 0, ВыборкаРезультатаЗапроса.КоличествоОстаток);
    Если Остаток < ВыборкаРезультатаЗапроса.Количество или Остаток = 0 Тогда
    Сообщить("Недостаточное количество на склдаде "+Склад+" :"+СокрЛП(Комплект) + ", в наличии только " + Остаток);
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //КонецЦикла;
    Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Номенклатура Тогда
    
    Движение = Движения.ОстаткиТоваров.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Номенклатура = Комплект;
    Движение.Склад = Склад;
    Движение.Количество = ВыборкаРезультатаЗапроса.Количество;
    
    
    Движение = Движения.ОстаткиТоваров.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Номенклатура = ПереченьНоменклатуры.Номенклатура;
    Движение.Склад = Склад;
    Движение.Количество = ПереченьНоменклатуры.Количество;
    
    КонецЕсли;
    
    Движения.ОстаткиТоваров.Записать();
    КонецЕсли;
    
    КонецПроцедуры
    
    
  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Я не совсем пока понимаю логику работы.
    1)
    Код:
            "|	Документ.РазукомплектацияНоменклатуры КАК РазукомплектацияНоменклатуры
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
    |				&МоментВремени,
    |				Номенклатура В (&СписокНоменклатурыДокумента)
    |					И Склад = &СкладВДокументе) КАК ОстаткиТоваровОстаткиНаСкладе
    |		ПО РазукомплектацияНоменклатуры.Комплект = ОстаткиТоваровОстаткиНаСкладе.Номенклатура
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
    |				&МоментВремени,
    |				Номенклатура В (&СписокНоменклатурыДокумента)
    |					И Склад = &СкладВДокументе) КАК ОстаткиТоваровОстатки
    |		ПО РазукомплектацияНоменклатуры.Комплект = ОстаткиТоваровОстатки.Номенклатура"
    
    В чем смысл два раза делать соединение к одной и той-же таблице с одним и тем же набором параметров?

    2)
    Если режим проведения неоперативный - в вашем случае какой тогда смысл вообще выполнять запрос? Ведь вы потом результат его нигде не оцениваете.
  8. TopicStarter Overlay
    MevMix
    Offline

    MevMix Опытный в 1С

    Регистрация:
    21 фев 2011
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    Если честно. Первый пример делал по книге
    Там было описано так как я сделал тут
    Режим проведения оперативны, редко будет использоваться не оперативный
    Книга Радченко
    "практическое пособие разработчика"
    Не знаю может тут много лишнего написал в Обрабткепроведения
    пока некоторые моменты не понятны
    Мне просто необходимо сделать Комплектацию Номенклатуры и Разукомплектацию Номенклатуры
    Комплектацию сделал все ОК
    Вот с разукомплектацие траблы с Движением Регистра Приход

Поделиться этой страницей