Имя: Пароль:
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
финиш

оказывается
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
добавить, а не просто запписать()
спасибо, до следующей ветки )) потому как это только кусок работы ))
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший