8.х Помогите с созданием документа

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

  1. TopicStarter Overlay
    PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    Помогите пожалуйста разобраться, не пойму почему в таб часть документа попадает всего один товар, когда в регистре две записи по выборочному регистратору?

    //**************** Добавлено ************************************************
    Если БезНДС = Истина Тогда
    // Проверяем на ранее созданную реализацию по данной заявке
    Проверка = Новый Запрос;
    Проверка.Текст = "ВЫБРАТЬ
    | РеализацияТоваровУслуг.Ссылка КАК Реализация
    |ИЗ
    | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    | РеализацияТоваровУслуг.Товары.ЗаказПокупателя = &ЗакПокупателя
    | И РеализацияТоваровУслуг.Проведен = &Проведен";
    Проверка.УстановитьПараметр("ЗакПокупателя", ЗаказПокупателя.Ссылка);
    Проверка.УстановитьПараметр("Проведен", Истина);
    ПроверкаРеал = Проверка.Выполнить().Выбрать();
    Пока ПроверкаРеал.Следующий() Цикл
    РеалСсылка = ПроверкаРеал.Реализация;
    Если НЕ РеалСсылка=Неопределено Тогда
    Предупреждение("По "+ЗаказПокупателя.Ссылка+" была создана реализация!");
    Возврат;
    КонецЕсли;
    КонецЦикла;

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

    ДокРеал = Документы.РеализацияТоваровУслуг;
    НовыйДокРеал = ДокРеал.СоздатьДокумент();
    НовыйДокРеал.Дата = ТекущаяДата();
    НовыйДокРеал.Организация = ОргПост;
    НовыйДокРеал.КурсВзаиморасчетов = 1;
    НовыйДокРеал.КратностьВзаиморасчетов = 1;
    НовыйДокРеал.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
    НовыйДокРеал.ВидПередачи = Перечисления.ВидыПередачиТоваров.СоСклада;
    НовыйДокРеал.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("643");
    НовыйДокРеал.ОтражатьВБухгалтерскомУчете = Истина;
    НовыйДокРеал.ОтражатьВНалоговомУчете = Истина;
    НовыйДокРеал.ОтражатьВУправленческомУчете = Истина;
    НовыйДокРеал.Сделка = ЗаказПокупателя;
    НовыйДокРеал.ЗакПокупателя = ЗаказПокупателя;
    Пока ЗапШапку.Следующий() Цикл
    НовыйДокРеал.Контрагент = ЗапШапку.Контрагент;
    ДогКонтрагента = Новый Запрос;
    ДогКонтрагента.Текст = "ВЫБРАТЬ
    | ДоговорыКонтрагентов.Ссылка КАК ДогСсылка
    |ИЗ
    | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |ГДЕ
    | ДоговорыКонтрагентов.Организация = &Организация
    | И ДоговорыКонтрагентов.Владелец = &Владелец
    | И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора";
    ДогКонтрагента.УстановитьПараметр("ВидДоговора", Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);
    ДогКонтрагента.УстановитьПараметр("Владелец",НовыйДокРеал.Контрагент);
    ДогКонтрагента.УстановитьПараметр("Организация", ОргПост);
    ВыбДоговора= ДогКонтрагента.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыбДоговора.Следующий() Цикл
    НовыйДокРеал.ДоговорКонтрагента = ВыбДоговора.ДогСсылка;
    КонецЦикла;
    НовыйДокРеал.ЗакПокупателя = ЗапШапку.ЗакСсылка;
    КонецЦикла;
    //НовыйДокРеал.Записать(РежимЗаписиДокумента.Запись);
    // Заполняем Таб. часть "Товары"
    Товары = Новый Запрос;
    Товары.Текст = "ВЫБРАТЬ
    | ВнутренниеТМЦ.Склад,
    | ВнутренниеТМЦ.Номенклатура,
    | ВнутренниеТМЦ.ЦенаРеализации КАК ЦенаРеализации,
    | ВнутренниеТМЦ.ВидОперации,
    | ВнутренниеТМЦ.Количество КАК Количество,
    | ВнутренниеТМЦ.Номенклатура.Артикул КАК Артикул
    |ИЗ
    | РегистрНакопления.ВнутренниеТМЦ КАК ВнутренниеТМЦ
    |ГДЕ
    | ВнутренниеТМЦ.Регистратор = &Регистратор
    | И ВнутренниеТМЦ.ОрганизацияПоставщик = &ОрганизацияПоставщик
    |
    |СГРУППИРОВАТЬ ПО
    | ВнутренниеТМЦ.Номенклатура,
    | ВнутренниеТМЦ.Склад,
    | ВнутренниеТМЦ.ЦенаРеализации,
    | ВнутренниеТМЦ.ВидОперации,
    | ВнутренниеТМЦ.Количество,
    | ВнутренниеТМЦ.Номенклатура.Артикул";
    Товары.УстановитьПараметр("Регистратор", ЗаказПокупателя.Ссылка);
    Товары.УстановитьПараметр("ОрганизацияПоставщик", ОргПост);
    ЗапТовар = Товары.Выполнить().Выгрузить();
    НовТовар = НовыйДокРеал.Товары.Добавить();
    Для Каждого Строка Из ЗапТовар Цикл
    НовТовар.Номенклатура = Строка.Номенклатура;
    НовТовар.ЕдиницаИзмерения = Строка.Номенклатура.ЕдиницаХраненияОстатков;
    НовТовар.Склад = Строка.Склад;
    НовТовар.ЗаказПокупателя = НовыйДокРеал.ЗакПокупателя;
    НовТовар.Коэффициент = 1;
    РегЦены = Новый Запрос;
    РегЦены.Текст = "ВЫБРАТЬ
    | ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    |ГДЕ
    | ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул = &Артикул
    |
    |СГРУППИРОВАТЬ ПО
    | ЦеныНоменклатурыСрезПоследних.Цена";
    РегЦены.УстановитьПараметр("Артикул", Строка.Артикул);
    ВыбЦены = РегЦены.Выполнить().Выбрать();
    Пока ВыбЦены.Следующий() Цикл
    НовТовар.Цена = ВыбЦены.Цена;
    КонецЦикла;
    НовТовар.Количество = Строка.Количество;
    НовТовар.Сумма = ВыбЦены.Цена*Строка.Количество;
    НовТовар.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.СоСклада;
    КонецЦикла;

    Если ЗаписыватьРеализацию = Истина Тогда
    НовыйДокРеал.Записать(РежимЗаписиДокумента.Запись);
    КонецЕсли;

    Если ПроводитьРеализацию = Истина Тогда
    НовыйДокРеал.Записать(РежимЗаписиДокумента.Проведение);
    КонецЕсли;

    Если ОткрыватьРеализацию = Истина Тогда
    ФормаРеал = НовыйДокРеал.ПолучитьФорму("ФормаДокумента");
    ФормаРеал.Открыть();
    КонецЕсли;

    Если ФормироватьСФ Тогда
    ОбъектСчетаФактуры = Документы.СчетФактураВыданный.СоздатьДокумент();
    ОбъектСчетаФактуры.Дата = РабочаяДата;
    ОбъектСчетаФактуры.ЗакПокупателя = ЗаказПокупателя;
    ОбъектСчетаФактуры.Заполнить(НовыйДокРеал);
    ОбъектСчетаФактуры.Организация = НовыйДокРеал.Организация;
    ОбъектСчетаФактуры.Ответственный = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный");
    ОбъектСчетаФактуры.Записать();
    КонецЕсли;

    Если ПроводитьСФ Тогда
    Попытка
    ОбъектСчетаФактуры.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
    ОбщегоНазначения.СообщитьОбОшибке("Не удалось провести "+СокрЛП(ОбъектСчетаФактуры));
    КонецПопытки;
    КонецЕсли;

    Если ОткрыватьСФ Тогда
    ФормаСчетаФактуры = ОбъектСчетаФактуры.ПолучитьФорму("ФормаДокумента");
    ФормаСчетаФактуры.Открыть();
    КонецЕсли;

    Если ПечататьРеализацию = Истина Тогда
    НовыйДокРеал.Печать(МакетРеализации, , ПечататьРеализациюНаПринтер);
    КонецЕсли;

    Если ПечататьСФ Тогда
    ОбъектСчетаФактуры.Печать("СчетФактура", , ПечататьСФНаПринтер);
    КонецЕсли;

    КонецЦикла;
    Ответ = Вопрос("Отменить заявку?", РежимДиалогаВопрос.ДаНет);
    Если Ответ = КодВозвратаДиалога.Да Тогда
    Сделка = ЗаказПокупателя.Ссылка;
    ТекЗаявка = Сделка.ПолучитьОбъект();
    ТекЗаявка.Записать(РежимЗаписиДокумента.ОтменаПроведения);
    ФормаЗаявки = ТекЗаявка.ПолучитьФорму("ФормаДокумента");
    // ФормаЗаявки.Открыть();
    // ФормаЗаявки.Закрыть();
    Иначе
    Возврат;
    КонецЕсли;
  2. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Перенеси строку

    Код:
    НовТовар = НовыйДокРеал.Товары.Добавить();
    
    Внутрь цикла
    Код:
    Для Каждого Строка Из ЗапТовар Цикл
    ....
    КонецЦикла;
    
    зы используй теги code, читать намного удобнее
  3. TopicStarter Overlay
    PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое, а то весь день понять не мог в чем дело!!!

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