Имя: Пароль:
1C
1С v8
Движение по регистрам
,
0 myr4ik07
 
09.10.14
11:18
Мира вам.
Есть документ Поступление товаров и услуг я сделал, что бы цены которые есть в колонке Цена попадало в карточку Номенклатуры ЦеныНоменклатуры (для типа цен Закупочная) через регистр сведений ЦеныНоменклатуры

[CODE]Для Каждого эл Из Товары Цикл
               Движение = Движения.ЦеныНоменклатуры.Добавить();
               Движение.Период = Дата;
               Движение.Валюта = Справочники.Валюты.НайтиПоНаименованию("грн");
               Движение.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
               Движение.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000015");
               Движение.Номенклатура = эл.Номенклатура;
               Движение.Цена = эл.Цена;
           КонецЦикла;
[/CODE]

все работает но тут появилась еще одна "хотелка", добавил колонку с полем ввода в форме документа где хочу, что бы при вводе в колонке цены (продажная будет) так же эти цены попадали в карточку номенклатуры ЦеныНоменклатуры (Тип цен РозничныйМаг№1, РозничныйМаг№2), что было и сделано

[CODE]Для Каждого эл Из Товары Цикл
            Движение = Движения.ЦеныНоменклатуры.Добавить();
            Движение.Период = Дата;
            Движение.Валюта = Справочники.Валюты.НайтиПоНаименованию("грн");
            Движение.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
            Движение.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000011");        
            Движение.Номенклатура = эл.Номенклатура;
            Движение.Цена = эл.[B]ЦенаПродажная[/B]; // это добавленное поле        
        КонецЦикла;
Для Каждого эл Из Товары Цикл
            
            Движение = Движения.ЦеныНоменклатуры.Добавить();
            Движение.Период = Дата;
            Движение.Валюта = Справочники.Валюты.НайтиПоНаименованию("грн");
            Движение.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
            Движение.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000012");    
            Движение.Номенклатура = эл.Номенклатура;
            Движение.Цена = эл.[B]ЦенаПродажная[/B];


[/CODE]

что как бы и работает но бывает такое, что в документе не надо изменять поле ввода колонки [B]ЦенаПродажная[/B] и если я не ввожу в это поле значение то естественно удаляется цены с карточки номенклатура ЦеныНоменклатуры для магазинов РозничныйМаг№1, РозничныйМаг№2
я решил добавить условие в одни из последних циклов

[CODE]Для Каждого эл Из Товары Цикл
            
            Движение = Движения.ЦеныНоменклатуры.Добавить();
            Движение.Период = Дата;
            Движение.Валюта = Справочники.Валюты.НайтиПоНаименованию("грн");
            Движение.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
            Движение.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000012");    
            Движение.Номенклатура = эл.Номенклатура;
            Если эл.ЦенаПродажная = 0 Тогда
                Прервать;
            Иначе
                Движение.Цена = эл.[B]ЦенаПродажная[/B];
            КонецЕсли;
[/CODE]

но тут поработав отладчиком увидел, что значение Движение.Цена при начале первого цикла в условии уже получает значение, а мне как то нужно обойти это получение и сделать так, что если я ничего не ввожу в поле эл.ЦенаПродажная то значение розничных цен оставались не измененными, не менялись.
Да, вариант добавление еще одного измерения в регистре сведений есть но тут дело в том, что при открытии карточки номенклатуры страницы ЦеныНоменклатуры происходит получение значение типов цен с измерения Цена, а не Цена1, а отследить где оно такое происходит не получается, там голову можно сломать с километровым кодом и заветвениями в десяток общих модулей и т.д.
1 Cube
 
09.10.14
11:26
(0) Расстрелять! (с)

                Движение.Валюта = Справочники.Валюты.НайтиПоНаименованию("грн");
               Движение.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
               Движение.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000015");
2 Джинн
 
09.10.14
11:28
Чем штатная запись в цены контрагентов не устраивает?
3 Михаил Козлов
 
09.10.14
11:28
(1)+ Особенно, когда Движение.ЕдиницаИзмерения окажется от другого товара.
4 Ненавижу 1С
 
гуру
09.10.14
11:29
5 barrgand
 
09.10.14
11:29
(0) Тебе уже писали в предыдущей теме, что это бред. Поступление формирует только закупочную цену, все остальные формируй установкой цен.
6 Krolik Bezobraznik
 
09.10.14
11:32
Если эл.ЦенаПродажная <> 0 Тогда
    Движение = Движения.ЦеныНоменклатуры.Добавить();
    Движение.Период = Дата;
    Движение.Валюта = Справочники.Валюты.НайтиПоНаименованию("грн");
    Движение.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
    Движение.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000012");    
    Движение.Номенклатура = эл.Номенклатура;
    Движение.Цена = эл.[B]ЦенаПродажная[/B];
    
Иначе
    Продолжить();
КонецЕсли;
7 Krolik Bezobraznik
 
09.10.14
11:33
Ремарка небольшая

продолжить;
8 Шапокляк
 
09.10.14
11:34
Движение.ЕдиницаИзмерения=Эл.Номенклатура.ЕдиницаХраненияОстатков;
9 Krolik Bezobraznik
 
09.10.14
11:38
Движение.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();

ИЛИ

Движение.Валюта = ВалютаДокумента;
10 myr4ik07
 
09.10.14
12:21
для чего мне цены контрагентов? (2)
11 myr4ik07
 
09.10.14
12:22
в смысле? обьясните пожалуйста (3)
12 myr4ik07
 
09.10.14
12:23
у нас выходит что в карточке номенклатуры указываем и розничную и продажную цену, но документ поступление товаров проводит по регистру ценыноменклатурыконтрагшентов но этот регистр мне не нужен(5)
13 johnny17
 
09.10.14
12:29
(12) Тебе нужен документ "УстановкаЦенНоменклатуры", созданный на основании поступления, в нем и устанавливай нужные цены...
14 myr4ik07
 
09.10.14
12:33
тоже думал об этом, в итоге не разобрался как обойти циклом все типы цен в этом документе(13)
15 johnny17
 
09.10.14
12:37
(14)
Для Каждого ТипЦены Из ТипыЦен Цикл //ТЧ ТипыЦен
  Строки = Товары.НайтиСтроки(Новый Структура("ТипЦены", ТипЦены));
  Для Каждого Строка Из Строки Цикл //ТЧ Товары
    <Здесь ТипЦены и Строка.Номенклатура>
  КонецЦикла;
КонецЦикла;
16 myr4ik07
 
09.10.14
13:01
вот спасибо, я еще не очень умею работать с коллекциями ы запутался как правильно, попробую, спасибо (15)
17 HEKPOH
 
09.10.14
13:10
(11) получаешь одни и те же данные несколько раз (т.е. в цикле)
18 myr4ik07
 
09.10.14
15:35
(15)
если делаю

СоздатьДокумент = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    СоздатьДокумент.Дата = РабочаяДата;
    Для Каждого ТипыЦены Из СоздатьДокумент.ТипыЦен Цикл
        Строка = Товары.НайтиСтроки(Новый Структура("ТипыЦены", ТипЦен));
        Для Каждого Строки Из Строка Цикл
            
        КонецЦикла;
    КонецЦикла;

получаю на

Для Каждого ТипыЦены Из СоздатьДокумент.ТипыЦен Цикл

итератор для значения не определен
19 Джинн
 
09.10.14
15:54
(10) Потому что одинаковую номенклатуру Вы можете покупать у нескольких поставщиков по разным ценам.
20 myr4ik07
 
09.10.14
16:03
(19) так же говорю, что мне незачем знать какая раньше была цена продажи и закупки так как закупку нам сохраняет регистр сведений Ценыноменклатурыконтрагентов и + мы еще в карточку номенклатуры указываем закупочную цену для того, что бы потом в формировании прайс-листа было легко выбрать типы цен с карточки номенклатуры (там у нас виды есть ЗакупочнаяДол, ЗакупочнаяГРН, Розничная№1, Розничная№2)

мне незачем что то сохранять в регистре сведений Ценыноменклатурыконтрагентов он и так все отлично сохраняет, а я хочу с документа изменять ТипыЦен карточки Номенклатура, все эти типы цен (там у нас виды есть ЗакупочнаяДол, ЗакупочнаяГРН, Розничная№1, Розничная№2)
21 myr4ik07
 
09.10.14
16:04
(19) где то с терминами или названием и ошибся но смысл должен понятный быть
22 myr4ik07
 
09.10.14
16:05
ммм ) наконец то сделали так, что номер ответного поста ставиться автоматически перед ответом )) я когда то писал уже об этом ))
23 Krolik Bezobraznik
 
09.10.14
16:07
(18) Вы что курили? Вы создали документ, а потом пытаетесь циклом пройтись по его реквизиту?
24 myr4ik07
 
09.10.14
16:20
(23) пытаюсь пройтись ))
25 myr4ik07
 
09.10.14
16:20
(23) но я не курю
26 myr4ik07
 
09.10.14
16:21
(23) кстати, я думаю будет более понятно, что я хочу выполнить ваш код с модуля документа Пост. товар.
27 myr4ik07
 
09.10.14
17:02
короче, создал
НовыйДокумент = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    НовыйДокумент.Дата = РабочаяДата;
    ТабличнаяЧастьТовары = НовыйДокумент.Товары;
    НоваяСтрока = ТабличнаяЧастьТовары.Добавить();
    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000007150");
    НовыйДокумент.Записать();

дошел до формы выбора ТипЦены где ТипЦены это Тип СписокЗначений и там нужно проставить галки для того, что бы были выбраны цены, как тут программное это сделать?
28 hhhh
 
09.10.14
17:09
(27) отдельная строчка для каждого типа цен. В типовой так и есть.
29 myr4ik07
 
09.10.14
17:18
помогите перебрать ТипЦен не получается и все, постоянно итератор
30 barrgand
 
09.10.14
17:24
(29) Отладчик тебе поможет
31 myr4ik07
 
09.10.14
17:34
короче шо то выходит
    
    НовыйДокумент = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    НовыйДокумент.Дата = РабочаяДата;
    НоваяСтрокаТипЦен = НовыйДокумент.ТипыЦен.Добавить();
    НоваяСтрокаТипЦен.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001");
    
    Для Каждого ТекСтрока Из НовыйДокумент.ТипыЦен Цикл
        
        НоваяСтрокаТовары = НовыйДокумент.Товары.Добавить();
        НоваяСтрокаТовары.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000004220");
        НоваяСтрокаТовары.Валюта = Справочники.Валюты.НайтиПоКоду("840");
        НоваяСтрокаТовары.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
        НоваяСтрокаТовары.Цена = Товары.Цена;
    КонецЦикла;
    НовыйДокумент.Записать();

но тут при проведении получаю ошибку уже в модуле документа УстановкаЦенНоменклатуры на строке

НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Цена;

с ошибкой  
{Документ.УстановкаЦенНоменклатуры.Форма.ФормаДокумента.Форма(596)}: Поле объекта не обнаружено (цена)
        НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Цена;
32 myr4ik07
 
09.10.14
17:39
вот эти [] меня сбивают, что это такое? Это таким способом можно "добраться" до реквизита? а + тогда что означает?
33 barrgand
 
09.10.14
17:43
(32) Это аналог ".". То есть если например НомерСоответствияТекущейКолонки = 1 тогда НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = НоваяСтрока.цена1
34 hhhh
 
09.10.14
17:54
(32)

    Для Каждого СтрокаТовара Из Товары Цикл
  Для Каждого ТекСтрока Из НовыйДокумент.ТипыЦен Цикл
        
        НоваяСтрокаТовары = НовыйДокумент.Товары.Добавить();
        НоваяСтрокаТовары.Номенклатура = СтрокаТовара.Номенклатура;
        НоваяСтрокаТовары.Валюта = Справочники.Валюты.НайтиПоКоду("840");
        НоваяСтрокаТовары.ЕдиницаИзмерения = СтрокаТовара.ЕдиницаИзмерения;
        НоваяСтрокаТовары.Цена = СтрокаТовара.Цена;
    КонецЦикла;
КонецЦикла;
35 myr4ik07
 
09.10.14
18:17
ну ... вышло

    Если ЭтотОбъект.Грн Тогда  
        
        НовыйДокумент = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
        НовыйДокумент.Дата = РабочаяДата;
        НоваяСтрокаТипЦен = НовыйДокумент.ТипыЦен.Добавить();
        НоваяСтрокаТипЦен.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000015");
        
        Для Каждого эл Из Товары Цикл
            Для Каждого ТекСтрока Из НовыйДокумент.ТипыЦен Цикл     
                НоваяСтрокаТовары = НовыйДокумент.Товары.Добавить();
                НоваяСтрокаТовары.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000015");     
                НоваяСтрокаТовары.Валюта = Справочники.Валюты.НайтиПоКоду("980");
                НоваяСтрокаТовары.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
                НоваяСтрокаТовары.Номенклатура = эл.Номенклатура;
                НоваяСтрокаТовары.Цена = эл.Цена;
            КонецЦикла;
            
            НовыйДокумент.Записать();
        КонецЦикла;
        
    КонецЕсли;


создается УстановкаЦенНоменклатуры документ с товаром и ценой той что в документе ПТиУ, но не проводиться, почему?
36 myr4ik07
 
09.10.14
18:20
финиш

оказывается
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
добавить, а не просто запписать()
спасибо, до следующей ветки )) потому как это только кусок работы ))