Имя: Пароль:
1C
1С v8
Заполнение установки цен номенклатуры с несколькими типами цен
, ,
0 KoBapeH
 
12.11.13
14:05
Необходимо заполнить документ Установка цен номенклатуры из Excel. Документ формируется, но из-за того, что типов цен несколько, заполняется только последняя колонка(остальные - пустые). Знаю, что это реализуется как-то через индексы (ИндексСтрокиТаблицыЦен?). Но как получить строку с несколькими типами цен не знаю. В 1С новичок. Помогите кто чем может=).
1 KoBapeH
 
12.11.13
14:10
УстановкаЦенНоменклатуры= СозданиеДокументаУстановкаЦенНоменклатуры();
        ТЧТовары                = УстановкаЦенНоменклатуры["Товары"];
    
    //Обход листа Excel, заполнение УстановкиЦен
    Для Row    = Row + 2  По RowCount Цикл
        Результат    = НаличиеНоменклатурыВРегистре(ExcelЛист.Cells(Row,2).Text);
        Если Результат[0]    = Истина Тогда
            НоваяСтрока                = ТЧТовары.Добавить();
            НоваяСтрока.Номенклатура= Результат[1];
            Для Каждого Стр1 из УстановкаЦенНоменклатуры.ТипыЦен Цикл
                НоваяСтрока["Валюта"]                = Справочники.Валюты.НайтиПоКоду("643");            
                НоваяСтрока["ТипЦен"]                = Стр1.ТипЦен;
                НоваяСтрока["ЕдиницаИзмерения"]    = Результат[2];
                НоваяСтрока["Цена"]= ExcelЛист.Cells(Row,15).value;
                

            КонецЦикла;

        КонецЕсли;
    КонецЦикла;
2 mikeA
 
12.11.13
14:28
НоваяСтрока.Номенклатура= Результат[1];
            Для Каждого Стр1 из УстановкаЦенНоменклатуры.ТипыЦен Цикл
                      НоваяСтрока = ТЧТовары.Добавить();
3 palpetrovich
 
12.11.13
14:35
(2) почти +1 :), как так:
    // ТЧ Товары
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
            Для Каждого СтрокаТипЦен Из НовыйОбъект.ТипыЦен Цикл
                НоваяСтрока = НовыйОбъект.Товары.Добавить();
                НоваяСтрока.Номенклатура = Выборка.Номенклатура;
...
4 an-korot
 
12.11.13
14:52
вечером могу тебе полный код кинуть, год назад делал загрузку цен,  если не терпит то гугли или жди совета, к сожалению не помню уже кода.
а делал я ее используя вот эту ветку: и все получилось без проблем, там по моему все разжевано...
не забудь что все цены нужно указать в параметре "Типы Цен"

v8: 1С8 УТ программное открытие и заполнение докУстановкаЦен
5 KoBapeH
 
12.11.13
15:03
(2) Спасибо, работает. То есть, в каждую колонку надо добавлять строку вручную?
(4) Спасибо, тему читал. Проблема была именно в нескольких типах цен. Для 1, сложности не было.
6 an-korot
 
12.11.13
15:07
(5) такая же проблема была, нужно в типы цен передать их все которые нужны ;)
7 KoBapeH
 
12.11.13
15:23
(6) Да я полдня бился, а ларчик-то просто открывался.
8 mikeA
 
12.11.13
16:02
(7) следующий уровень - заполнение табличной части этого... документа. вот где танцы с бубном )))
9 Мимохожий Однако
 
12.11.13
16:06
(8)Не забыть заполнить ТЧ с типами цен.
10 KoBapeH
 
13.11.13
10:00
(8) С этим, как-раз, сложностей не возникло.
11 KoBapeH
 
16.11.13
21:35
Так как вышеприведенный примеры заполняют документ некорректно, приведу как я реализовал для внешней обработки, вдруг кому пригодится.
Сначала нужно создать реквизит таблица значений ТаблицаЦен. После создания документа УстановкаЦенНоменклатуры, сформировать её:
    мСоответствиеТиповЦЕН    = Новый Соответствие;
    ТипыЦен    = УстановкаЦенНоменклатуры.ТипыЦен;
    ТаблицаЦен.Колонки.Добавить("Номенклатура");
    ТаблицаЦен.Колонки.Добавить("ИндексСтрокиТаблицыЦен");
    Для Каждого СтрокаТипаЦен Из ТипыЦен Цикл
        НомерСоответствияТекущейКолонки = ТипыЦен.Индекс(СтрокаТипаЦен);
        мСоответствиеТиповЦен.Вставить(СтрокаТипаЦен.ТипЦен, НомерСоответствияТекущейКолонки);

        Если ТаблицаЦен.Колонки.Найти("цена" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
            ТаблицаЦен.Колонки.Добавить("цена" + НомерСоответствияТекущейКолонки, ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15, 2, ДопустимыйЗнак.Неотрицательный), СокрЛП(СтрокаТипаЦен.ТипЦен), 10);
        КонецЕсли;
        Если ТаблицаЦен.Колонки.Найти("СпособРасчета" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
            ТаблицаЦен.Колонки.Добавить("СпособРасчета"+НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("ПеречислениеСсылка.СпособыРасчетаЦены"), "Способ расчета", 8);
        КонецЕсли;
        Если ТаблицаЦен.Колонки.Найти("валюта" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
            ТаблицаЦен.Колонки.Добавить("валюта" + НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("СправочникСсылка.Валюты"), "Валюта", 8);
        КонецЕсли;
        Если ТаблицаЦен.Колонки.Найти("единица" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
            ТаблицаЦен.Колонки.Добавить("единица" + НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"), "Единица", 8);
        КонецЕсли;
        Если ТаблицаЦен.Колонки.Найти("процент" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
            ТаблицаЦен.Колонки.Добавить("процент" + НомерСоответствияТекущейКолонки, ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15, 2), "% скидки (наценки)", 8);
        КонецЕсли;
    КонецЦикла;


Затем заполнить:

    ТЧТовары    = УстановкаЦенНоменклатуры["Товары"];
    Для Row    = НачалоПрайса    По RowCount Цикл
        Если ЗначениеЗаполнено(ExcelЛист.Cells(Row,КолонкаАрикул).Text) Тогда
            Результат    = НаличиеНоменклатурыВПоАртикулу((ExcelЛист.Cells(Row,КолонкаАрикул).Text));
        ИначеЕсли ЗначениеЗаполнено(ExcelЛист.Cells(Row,КолонкаКодНоменклатурыКонтрагента).Text) Тогда
            Результат    = НаличиеНоменклатурыПоКоду((ExcelЛист.Cells(Row,КолонкаКодНоменклатурыКонтрагента).Text));
        КонецЕсли;
        Если ЗначениеЗаполнено(ExcelЛист.Cells(Row,КолонкаЦена).Value) Тогда
            ТекущаяЦена    = ExcelЛист.Cells(Row,КолонкаЦена).value;
        Иначе
            Продолжить;
        КонецЕсли;
        Если Результат[0]    = Истина Тогда
            НоваяСтрока                        = ТаблицаЦен.Добавить();
            Для Каждого Стр1 из Документ.ТипыЦен Цикл
                ИндексКолонки                    = мСоответствиеТиповЦен[Стр1.ТипЦен];
                НоваяСтрока.Номенклатура        = Результат[1];            
                НоваяСтрока["Валюта" + ИндексКолонки]            = Справочники.Валюты.НайтиПоКоду("643");            
                НоваяСтрока["Единица" + ИндексКолонки]    = Результат[2];
                НоваяСтрока["Цена" + ИндексКолонки]    = ТекущаяЦена;
            КонецЦикла;
        КонецЕсли;

В результате получаем таблицу, готовую для записи.
Записываем

Процедура    ЗаполнитьДокументУстановкаЦен(УстановкаЦенНоменклатуры)                                //Заполняет Установку цен из Таблицы цен
    
    Товары    = УстановкаЦенНоменклатуры.Товары;
    ТипыЦен    = УстановкаЦенНоменклатуры.ТипыЦен;
    УстановкаЦенНоменклатуры.Товары.Очистить();
    КоличествоСтрок = ТаблицаЦен.Количество() - 1;
    Для Тмп = 0 По КоличествоСтрок Цикл
        СтрокаТаблицыТиповЦен = ТаблицаЦен[Тмп];

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

Таким же образом осуществляется заполнение табличной части в оригинальном документе УстановкаЦенНоменклатуры. Если где-то не прав, поправьте пожалуйста. Заранее благодарен.