8.х Две ТабличныеЧасти, в Одном Документе

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

  1. TopicStarter Overlay
    Student15
    Offline

    Student15 Опытный в 1С

    Регистрация:
    10 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Бьюсь не один час!
    В обработке заполнения Док ПоступлениеТовара, с ТЧ
    Товары
    Услуги
    Хочу ввести на основании Док ЗаказПокупателя с ТЧ
    Товары
    Услуги
    Заодно из Ресурса Цены, вести Цены, в док ЗаказПокупателя!
    Но сейчас застрял, на заполнении, на элементарном запросе выдаёт ошибку:
    Код:
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |	ЗаказПокупателя.Товары.(
    |		Номенклатура КАК НоменклатураТовары,
    |		Количество КАК КоличествоТовары
    |	),
    |	ЗаказПокупателя.Услуги.(
    |		Наименование КАК НаименованиеУслуги,
    |		Количество КАК КоличествоУслуги
    |	)
    |ИЗ
    |	Документ.ЗаказПокупателя КАК ЗаказПокупателя
    |ГДЕ
    |	ЗаказПокупателя.Ссылка = &Ссылка";	
    Запрос.УстановитьПараметр("Ссылка", Основание);
    Выборка=Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий()Цикл
    //ВыборкаТЧ=Выборка.Товары.Выбрать();
    //ВыборкаТЧ2=Выборка.Услуги.Выбрать();
    //Пока ВыборкаТЧ.Следующий () Цикл 
    //Пока ВыборкаТЧ2.Следующий () Цикл
    Если ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
    Контрагент = Основание.Контрагент;
    Склад = Основание.Склад;
    НоваяСтрока = ПоступившийТовар.Добавить();
    НоваяСтрока.Количество = Выборка.КоличествоТовары;
    НоваяСтрока.Номенклатура = Выборка.НоменклатураТовары;
    //НоваяСтрока.Цена=Выборка.Цена;
    НоваяСтрока = Услуги.Добавить();
    НоваяСтрока.Количество = Выборка.КоличествоУслуги;
    НоваяСтрока.Наименование = Выборка.НаименованиеУслуги;
    КонецЕсли;
    //КонецЦикла;
    //КонецЦикла;
    КонецЦикла;
    
    {Документ.ПоступлениеТовара(28)}: Поле объекта не обнаружено (КоличествоТовары)
    НоваяСтрока.Количество = Выборка.КоличествоТовары;
    
    Не находит, выбраные реквезиты! Хотя если выбрать только одну ТЧ все работает! Но мне же нужно из двух ТЧ, а то и из 3!
    Подскажите как быть?
  2. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Неправильный у вас код. Так как написано у вас:
    во-первых: в получившейся выборке и товары и услуги будут в свою очередь выборкой, поэтому их надо в свою очередь тоже обходить
    во-вторых: непонятно, что вообще там в выборке будет: у вас две табличные части сделаны как отдельные поля результата запроса (ну хз, может и правильно там все будет, не проверял).


    Обращайтесь сразу к табличной части документа.
    Для объединения в одном запросе результата из двух ТЧ используйте конструкцию "ОБЪЕДЕНИТЬ ВСЕ".
  3. TopicStarter Overlay
    Student15
    Offline

    Student15 Опытный в 1С

    Регистрация:
    10 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Спасибо на "Наводку"!

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

    Вложения:

    • Уч.jpg
      Уч.jpg
      Размер файла:
      175,5 КБ
      Просмотров:
      20
  4. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    "ВЫБРАТЬ
    ЗаказПокупателяТовары.Номенклатура,
    ЗаказПокупателяТовары.Количество
    ИЗ
    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
    ГДЕ
    ЗаказПокупателяТовары.Ссылка = &Ссылка
    </span>
    ОБЪЕДЕНИТЬ ВСЕ
    
    ВЫБРАТЬ
    ЗаказПокупателяУслуги.Наименование,
    ЗаказПокупателяУслуги.Количество
    ИЗ
    Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги
    ГДЕ
    ЗаказПокупателяУслуги.Ссылка = &Ссылка"
    
    </FONT></FONT></pre>
  5. TopicStarter Overlay
    Student15
    Offline

    Student15 Опытный в 1С

    Регистрация:
    10 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Но это получается, что в каждую ТЧ попадают, вся выборка (т.е. 4 записи, 3 - товары, 1 - услуга и все попадают в обе таблицы, а мне нужен отбор по таблица). Все Доки переделал, на документы с одной ТЧ.

    Но спасибо, за разъяснения, про обходы ТЧ!
  6. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Не понял что вы хотели сказать. В какую ТЧ попадает выборка?
  7. TopicStarter Overlay
    Student15
    Offline

    Student15 Опытный в 1С

    Регистрация:
    10 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Получается примерно так, как на рисунке, + подставляются ещё и количество.

    Вложения:

    • Уч.jpg
      Уч.jpg
      Размер файла:
      122 КБ
      Просмотров:
      13
  8. TopicStarter Overlay
    Student15
    Offline

    Student15 Опытный в 1С

    Регистрация:
    10 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Но это уже, не так важно, переделал я все документы, и вот не могли бы вы мне помочь с парой моментов:
    При изменении Колонки ТипЦен ТабличнойЧасти, Должна перемножаться колонка Цена, на значение ТипаЦен (Берется из Справочника ТипЦен, со значениями: Оптовая 40%, Розничная - 50%,), номенклатура Храниться в Регистре Свед, Вместе с ТипомЦен)
    Код:
    ТекущаяСтрока=ЭлементыФормы.РеализацияТоваров.ТекущиеДанные;	
    Запрос=Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
    |	ТипЦен2.Наименование КАК НаименованиеСправочник,
    |	ТипЦен2.Наценка / 100 КАК Поле1
    |ИЗ
    |	Справочник.ТипЦен КАК ТипЦен2
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТипыЦен.СрезПоследних(&Дата, ) КАК ТипыЦенСрезПоследних
    |		ПО (ТипыЦенСрезПоследних.ТипЦен.Наименование = ТипЦен2.Наименование)
    |ГДЕ
    |	ТипыЦенСрезПоследних.ТипЦен = &ТипЦен
    |	И ТипыЦенСрезПоследних.Номенклатура = &Номенклатура";
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("ТипЦен", ТекущаяСтрока.ТипЦен);
    Запрос.УстановитьПараметр("Номенклатура", ТекущаяСтрока.Номенклатура);
    Выборка=Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    //ТекущаяСтрока.Цена.Очистить();		
    ТекущаяСтрока.Цена=(ТекущаяСтрока.Цена+(ТекущаяСтрока.Цена*Выборка.Поле1));
    КонецЦикла;
    
    Поле цена, при измении Типа цен постоянно перемножается на значения наценки, как мне перед каждым выбором Колонки ТипЦен - очищать поле цена?

    Вложения:

    • Уч.jpg
      Уч.jpg
      Размер файла:
      107,9 КБ
      Просмотров:
      12

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