|
Заполнение установки цен номенклатуры с несколькими типами цен | ☑ | ||
---|---|---|---|---|
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 По КоличествоСтрок Цикл СтрокаТаблицыТиповЦен = ТаблицаЦен[Тмп]; Для Каждого СтрокаТипаЦен Из ТипыЦен Цикл НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[СтрокаТипаЦен.ТипЦен]; НоваяСтрока = Товары.Добавить(); НоваяСтрока.ИндексСтрокиТаблицыЦен = Тмп; НоваяСтрока.Номенклатура = СтрокаТаблицыТиповЦен.Номенклатура; НоваяСтрока.ТипЦен = СтрокаТипаЦен.ТипЦен; НоваяСтрока.Цена = СтрокаТаблицыТиповЦен["цена" + НомерСоответствияТекущейКолонки]; НоваяСтрока.Валюта = СтрокаТаблицыТиповЦен["валюта" + НомерСоответствияТекущейКолонки]; НоваяСтрока.ЕдиницаИзмерения = СтрокаТаблицыТиповЦен["единица" + НомерСоответствияТекущейКолонки]; НоваяСтрока.ПроцентСкидкиНаценки = СтрокаТаблицыТиповЦен["процент" + НомерСоответствияТекущейКолонки]; НоваяСтрока.СпособРасчетаЦены = СтрокаТаблицыТиповЦен["СпособРасчета" + НомерСоответствияТекущейКолонки]; КонецЦикла; КонецЦикла; КонецПроцедуры Таким же образом осуществляется заполнение табличной части в оригинальном документе УстановкаЦенНоменклатуры. Если где-то не прав, поправьте пожалуйста. Заранее благодарен. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |