Имя: Пароль:
1C
1С v8
Создание документа на основании открытого.
0 гыргыр
 
01.03.16
09:01
Добрый день.
есть две фирмы, первая принимает товар, продает второй, а потом вторая уже продает покупателю.
Причем во второй склад должен быть как бы транзитный, без остатков.

Создаем документ реализация товаров от второй фирмы стороннему покупателю. В нем делаем кнопку. с помощью которой создается документ реализация товаров от первой фирме второй, и документ покупка товара от первой - второй.

документы создаются правильно, табличная часть попадает нормально.

загвоздка вот в чем, необходимо, что бы в эти документы вставала стоимость единицы товара поставки на первую фирму от стороннего поставщика.

делаем срез последних через запрос цен, но он ведет себя неадекватно, а именно:

1. цены закупочные он вытаскивает, но меняет в текущем открытом документе.
2. розничную цену от второй фирмы стороннему покупателю вставляет в документ реализации между первой фирмой и второй.
3. в документ покупки товара между первой и второй вставляет уже цену из открытого документа ( то есть как бы правильную, но не из среза последних, как мне надо).

Вот такая загвоздка,  помогите кто чем может) код самой кнопки ниже.




Процедура      КоманднаяПанельТоварыпровести(Кнопка)
      

РКО = Документы.РеализацияТоваров.СоздатьДокумент();
ЗаполнитьЗначенияСвойств(РКО,ЭтотОбъект,,);
РКО.ХозОперация = Справочники.ХозОперации.РеализацияТоваров;
РКО.Автор = Справочники.Пользователи.НайтиПоНаименованию("Администратор");
РКО.Организация = Справочники.Организации.НайтиПоКоду("00001");
РКО.ПодразделениеКомпании = Справочники.ПодразделенияКомпании.НайтиПоКоду("00001");
РКО.СкладКомпании = Справочники.СкладыКомпании.НайтиПоКоду("ЦБ000001");
РКО.Контрагент = Справочники.Контрагенты.НайтиПоКоду("ЦБ000006");
РКО.ДоговорВзаиморасчетов = Справочники.ДоговорыВзаиморасчетов.НайтиПоКоду("ЦБ000009");
РКО.ТипЦен = Справочники.ТипыЦен.НайтиПоКоду("ЦБ000003");



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

КонецЦикла;


РКО.УстановитьНовыйНомер();    
РКО.Записать(РежимЗаписиДокумента.Запись);



      
      
ПКО = Документы.ПоступлениеТоваров.СоздатьДокумент();

ЗаполнитьЗначенияСвойств(ПКО,ЭтотОбъект,,);
ПКО.ХозОперация = Справочники.ХозОперации.ПоступлениеТоваров;
ПКО.Организация = Справочники.Организации.НайтиПоКоду("ЦБ000001");
ПКО.Контрагент = Справочники.Контрагенты.НайтиПоКоду("ЦБ000005");
ПКО.СкладКомпании = Справочники.СкладыКомпании.НайтиПоКоду("ЦБ000002");
ПКО.ДоговорВзаиморасчетов = Справочники.ДоговорыВзаиморасчетов.НайтиПоКоду("ЦБ000010");



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


  
      
КонецПроцедуры
1 aleks_default
 
01.03.16
09:24
Для Каждого СтрокаТовары из Товары Цикл

ты одну и ту же таб часть заполняешь дважды
2 Serg_1960
 
01.03.16
09:26
(0) Ты меняешь цены в исходном документе:

Для Каждого СтрокаТовары из Товары Цикл
   НоваяСтрока = РКО.Товары.Добавить()
   ...
   СтрокаТовары.Цена=Цена;
   ОбработкаРеквизита("Товары.Цена",СтрокаТовары);
КонецЦикла;
3 гыргыр
 
01.03.16
09:28
2-

как исправить ? я уже мозг сломал...
4 aleks_default
 
01.03.16
09:30
хрупкий же у тебя мозг
Для каждого СтрокаТовары из ПКО.Товары цикл

Для каждого СтрокаТовары из РКО.Товары цикл
5 aleks_default
 
01.03.16
09:30
не не так
надо же добавить строки
6 aleks_default
 
01.03.16
09:32
Для Каждого СтрокаТовары из Товары Цикл
НоваяСтрока = ПКО.Товары.Добавить()
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаТовары)

ну и т. п.
7 SadrArt
 
01.03.16
09:41
Запрос в цикле... Ай-яй-яй
8 Serg_1960
 
01.03.16
09:52
(3) В первом цикле (во втором - аналогично):

...
//строкатовары.Цена=цена;
//ОбработкаРеквизита("Товары.Цена",СтрокаТовары);

НоваяСтрока.Цена = Цена;
РКО.ОбработкаРеквизита("Товары.Цена",НоваяСтрока);
9 гыргыр
 
01.03.16
11:14
8-

огромное спасибо, все получилось.