Имя: Пароль:
1C
1С v8
Заполнение документа установки цен программно (УТ)
0 Santa4527
 
12.09.11
13:24
В Цикле

ТоварССылка = ЗагрузкаНоменклатурнойПозиции();
НайденнаяСтрока = НовыйДокумент.Товары.Найти(ТоварССылка,"Номенклатура");
Если найденнаяСтрока  = Неопределено Тогда  
                   Строка = НовыйДокумент.Товары.Добавить();
                   
                   Строка.Номенклатура            = ТоварССылка;
                   Строка.Валюта                    = Валюта;
                   Строка.ЕдиницаИзмерения          = ТоварССылка.ЕдиницаХраненияОстатков;
                   Строка.ИндексСтрокиТаблицыЦен    = НомерСтрокиВДокументе;
НомерСтрокиВДокументе = НомерСтрокиВДокументе + 1;
КонецЕсли;

В документе одна строчка с последней номенклатурой. Как сделать, что бы была вся номенклатура в документе?
1 mikecool
 
12.09.11
13:25
значит ТоварССылка  всегда один и тот же
2 poligraf
 
12.09.11
13:25
Строка.ИндексСтрокиТаблицыЦен - вот с этим разбирайся.

Где тип цен?
Он же тоже вроде участвует в табличной части?
3 Santa4527
 
12.09.11
13:28
(1)Когда я получаю ТоварССылка, то он заменяется автоматически в документе.

(3)  Строка.ИндексСтрокиТаблицыЦен А что с ним разбираться?
4 mikecool
 
12.09.11
13:29
"Когда я получаю ТоварССылка, то он заменяется автоматически в документе. " оО
5 Santa4527
 
12.09.11
13:38
(4) Первый раз цикл проходит нормально. Второй раз он выдает, что номенклатура уже есть в документе, хотя новой строки не добавлял и по отладчику вижу что номенклатура другая.
6 rintik
 
12.09.11
13:44
Посмотри Обработку "ФормированиеЦен", там в процедуре "ПриЗакрытии" можно глянуть как добавлять строку в ТЧ документа.
7 Santa4527
 
12.09.11
14:22
(6) Что то там нечего нет, что мне может помочь
8 Шапокляк
 
12.09.11
14:35
(0)Весь цикл покажи здесь.
9 Santa4527
 
12.09.11
15:04
(8)
ТоварССылка = ЗагрузкаНоменклатурнойПозиции(Контрагент, ПоследняяГруппа, КодТовара, КодТовараГлобальный, Наименование, Объем, НормаУпаковки,ШтрихКод );

           НайденнаяСтрока = НовыйДокумент.Товары.Найти(ТоварССылка,"Номенклатура");
           Если найденнаяСтрока  = Неопределено Тогда
               Н=1;
               Пока Н <= 5  Цикл
                   
                   НоменклатураДляДок = ТоварССылка;
                   Строка = НовыйДокумент.Товары.Добавить();
                   
                   Строка.Номенклатура            = НоменклатураДляДок;
                   Строка.Валюта                = Валюта;
                   Строка.ЕдиницаИзмерения          = ТоварССылка.ЕдиницаХраненияОстатков;
                   Строка.ИндексСтрокиТаблицыЦен    = НомерСтрокиВДокументе;
                   
                   Если Н = 1 Тогда
                       Строка.ТипЦен = ТипЦенМРЦ;
                       Строка.Цена   =  ЦенаМРЦ;
                   ИначеЕсли Н = 2 Тогда
                       Строка.ТипЦен = ТипЦенЗак;
                       Строка.Цена   =  ЦенаЗак;
                   ИначеЕсли Н = 3 Тогда
                       Строка.ТипЦен = ТипЦен5;
                       Строка.Цена   =  Цена5;
                   ИначеЕсли  Н = 4 Тогда
                       Строка.ТипЦен = ТипЦен4;
                       Строка.Цена   =  Цена4;
                   ИначеЕсли  Н = 5 Тогда
                       Строка.ТипЦен = ТипЦен3;
                       Строка.Цена   =  Цена3;
                   КонецЕсли;
                   Н=Н+1;
               КонецЦикла;
               
               НомерСтрокиВДокументе = НомерСтрокиВДокументе + 1;
           Иначе
               Сообщить (ТоварССылка.Наименование + " уже есть в документе!!!!");
           КонецЕсли;
10 shuhard
 
12.09.11
15:07
(9) может быть дело в том, что у документа две ТЧ ?
если речь о УТ 11 конечно
11 Santa4527
 
12.09.11
15:08
(10) у меня не 11
12 shuhard
 
12.09.11
15:09
(11) в УТ 10.3 тем более,
без записи во вторую ТЧ ни хера не будет работать

в поиск по мисте
было сотни раз
13 Santa4527
 
12.09.11
15:13
В документе установки цен 2 ТЧ первая Типы цен. Вторая Товары. Типы цен заполнены.
После прохождения цикла в документе последняя номенклатура и только одна из 900.
14 shuhard
 
12.09.11
15:15
(13) тогда покажи весь код, а не огрызок в (9)

в (9) одна товарная позиция пишется пять раз подряд с разными ценами, т.е. ошибка выше по циклу
15 Мимохожий Однако
 
12.09.11
15:18
НоменклатураДляДок = ТоварССылка;
Строка = НовыйДокумент.Товары.Добавить();
Н=1;
Пока Н <= 5  Цикл
Строка.Номенклатура             = НоменклатураДляДок;
                   Строка.Валюта                 = Валюта;
                   Строка.ЕдиницаИзмерения          = ТоварССылка.ЕдиницаХраненияОстатков;
                   Строка.ИндексСтрокиТаблицыЦен     = НомерСтрокиВДокументе;
                   
                   Если Н = 1 Тогда
                       Строка.ТипЦен = ТипЦенМРЦ;
                       Строка.Цена   =  ЦенаМРЦ;
                   ИначеЕсли Н = 2 Тогда
                       Строка.ТипЦен = ТипЦенЗак;
16 Alex11
 
12.09.11
15:18
В свое время писал для переноса из самописной 1с.77:
Процедура СозданиеДокаПоЦенам(ТипЦены)
   ДокументОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
   ДокументОбъект.Дата = ТекущаяДата();
   НовТипЦен = ДокументОбъект.ТипыЦен.Добавить();
   НовТипЦен.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию(ТипЦены);    
КонецПроцедуры



Процедура ЗанесениеЦен(ТипЦены, КолонкаВалюты, КолонкаЦены)
   Для каждого СтрокаТЧ Из ТЗ Цикл
       Номенклатура =  Поиск(СтрокаТЧ[0], Справочники.Номенклатура, "Код",Неопределено);
       Если Номенклатура <> Ложь Тогда
           Если СтрокаТЧ[КолонкаВалюты] = "Доллар" Тогда
               Валюта = Справочники.Валюты.НайтиПоКоду("840")
           ИначеЕсли СтрокаТЧ[КолонкаВалюты] = "Рубль" Тогда
               Валюта = Справочники.Валюты.НайтиПоКоду("643")
           ИначеЕсли СтрокаТЧ[КолонкаВалюты] = "Евро" Тогда
               Валюта = Справочники.Валюты.НайтиПоКоду("978")
           КонецЕсли;
           
           тчТовары = ДокументОбъект["Товары"];
           Объект = тчТовары.Добавить();
           Объект["Номенклатура"] = Номенклатура.Ссылка;
           Объект["Валюта"]       = Валюта;
           Объект["ЕдиницаИзмерения"] = Номенклатура.ЕдиницаХраненияОстатков;
           ТипЦены = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию(ТипЦены);
           Объект["ТипЦен"]       = ТипЦены;
           Объект["Цена"] = СтрокаТЧ[КолонкаЦены];
       КонецЕсли
   КонецЦикла;
КонецПроцедуры



Процедура ЗаписьДокаПоЦенам()
   Попытка
       ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);    
   Исключение
       Сообщить("НЕ ЗАПИСАН");
   КонецПопытки;
КонецПроцедуры
17 Alex11
 
12.09.11
15:22
только ТЗ у тя будет основание.товары, ну или как там будешь ссылку делать
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан