|
1С Больница Загрузка цен номенклатуры | ☑ | ||
---|---|---|---|---|
0
mataranga
10.01.14
✎
08:26
|
Доброго времени суток,
В Медицине.Больница 1.1.1.1 есть в установке цен выгрузка и загрузка из excel ... Выгрузка выглядит так : http://hkar.ru/obej Если делать загрузку из такого же листа excel то он не хочет. Я не понимаю структуру требуемого документа для загрузки. Код : &НаКлиенте Функция ЗагрузитьИзExcelНаКлиенте(ИмяВременногоФайла) Попытка COMОбъект = Новый COMОбъект("Excel.Application"); Исключение СообщениеОбОшибке = НСтр("ru = 'Не удалось загрузить цены из файла Excel. Убедитесь, что на сервере установлена программа Microsoft Excel. Подробности: '") + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ВызватьИсключение СообщениеОбОшибке; КонецПопытки; Попытка Workbook = COMОбъект.Workbooks.Open(ИмяВременногоФайла); SettingsSheet = Workbook.Worksheets(1); Sheet = Workbook.Worksheets(2); Исключение COMОбъект.Quit(); COMОбъект = 0; СообщениеОбОшибке = НСтр("ru = 'Не удалось прочитать данные из файла. Подробности: '") + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ВызватьИсключение СообщениеОбОшибке; КонецПопытки; // Массивы структур МассивСтруктурВидыЦен = Новый Массив; МассивСтруктурТовары = Новый Массив; ЕстьДополнительнаяКолонка = Ложь; // Загрузка данных Попытка // Загрузка служебной таблицы НомерСтроки = 2; Пока ЗначениеЗаполнено(SettingsSheet.Cells(НомерСтроки, 1).Value) Цикл НоваяСтрока = Новый Структура("ИдентификаторВидЦены, НомерКолонкиЦена"); НоваяСтрока.ИдентификаторВидЦены = SettingsSheet.Cells(НомерСтроки, 1).Value; НоваяСтрока.НомерКолонкиЦена = SettingsSheet.Cells(НомерСтроки, 5).Value; МассивСтруктурВидыЦен.Добавить(НоваяСтрока); НомерСтроки = НомерСтроки + 1; КонецЦикла; Если МассивСтруктурВидыЦен.Количество() > 0 Тогда // Загрузка цен номенклатуры НомерСтроки = 3; ЕстьДополнительнаяКолонка = (СтрДлина(Sheet.Cells(НомерСтроки, 2).Value) <> 36); Пока ЗначениеЗаполнено(Sheet.Cells(НомерСтроки, 2 + ?(ЕстьДополнительнаяКолонка,1,0)).Value) Цикл Для Каждого СтрокаТЧ Из МассивСтруктурВидыЦен Цикл НоваяСтрока = Новый Структура("ИдентификаторНоменклатура, ИдентификаторВидЦены, Цена"); НоваяСтрока.ИдентификаторНоменклатура = Sheet.Cells(НомерСтроки, 2 + ?(ЕстьДополнительнаяКолонка,1,0)).Value; НоваяСтрока.ИдентификаторВидЦены = СтрокаТЧ.ИдентификаторВидЦены; НоваяСтрока.Цена = Sheet.Cells(НомерСтроки, СтрокаТЧ.НомерКолонкиЦена).Value; МассивСтруктурТовары.Добавить(НоваяСтрока); КонецЦикла; НомерСтроки = НомерСтроки + 1; КонецЦикла; КонецЕсли; Workbook.Close(); Исключение COMОбъект.Quit(); COMОбъект = 0; СообщениеОбОшибке = НСтр("ru = 'Не удалось прочитать данные из файла. Подробности: '") + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ВызватьИсключение СообщениеОбОшибке; КонецПопытки; COMОбъект.Quit(); COMОбъект = 0; ЗагрузитьИзExcelНаСервере(МассивСтруктурВидыЦен, МассивСтруктурТовары); КонецФункции &НаСервере Функция ЗагрузитьИзExcelНаСервере(МассивСтруктурВидыЦен, МассивСтруктурТовары) // Определение видов цен ВидыЦен = Новый ТаблицаЗначений; ВидыЦен.Колонки.Добавить("ВидЦены"); ВидыЦен.Колонки.Добавить("ИдентификаторВидЦены"); ВидыЦен.Колонки.Добавить("ИмяКолонки"); ВидыЦен.Колонки.Добавить("НомерКолонкиЦена"); Для Каждого СтруктураВидЦены Из МассивСтруктурВидыЦен Цикл ВидЦены = Справочники.ВидыЦен.ПолучитьСсылку(Новый УникальныйИдентификатор(СтруктураВидЦены.ИдентификаторВидЦены)); ВидЦеныОбъект = ВидЦены.ПолучитьОбъект(); // ВидЦены всегда формирует ссылку и всегда заполнен Если ВидЦеныОбъект = Неопределено Тогда Продолжить; КонецЕсли; СтрокаВидЦены = НайтиСтрокуВидаЦен(ВидЦены); Если СтрокаВидЦены.Выбрана Тогда НоваяСтрока = ВидыЦен.Добавить(); НоваяСтрока.ВидЦены = ВидЦены; НоваяСтрока.ИдентификаторВидЦены = СтруктураВидЦены.ИдентификаторВидЦены; НоваяСтрока.НомерКолонкиЦена = СтруктураВидЦены.НомерКолонкиЦена; НоваяСтрока.ИмяКолонки = СтрокаВидЦены.ИмяКолонки; КонецЕсли; КонецЦикла; ВидыЦен.Индексы.Добавить("ИдентификаторВидЦены"); Если ВидыЦен.Количество() = 0 Тогда Возврат Ложь; КонецЕсли; // Загрузка цен в ДеревоЦен Для Каждого СтруктураТовар Из МассивСтруктурТовары Цикл СтрокаВидЦены = ВидыЦен.Найти(СтруктураТовар.ИдентификаторВидЦены); Если СтрокаВидЦены = Неопределено Тогда Продолжить; КонецЕсли; Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтруктураТовар.ИдентификаторНоменклатура)); Если Не ЗначениеЗаполнено(Номенклатура) Тогда Продолжить; КонецЕсли; СтрокаДереваЦен = НайтиСтрокуДереваЦен(Новый Структура("Номенклатура", Номенклатура)); Если СтрокаДереваЦен = Неопределено Тогда СтрокаДереваЦен = НайтиСтрокуДереваЦен(Новый Структура("Номенклатура", Номенклатура)); Если СтрокаДереваЦен = Неопределено Тогда СтрокаДереваЦен = ДеревоЦен.ПолучитьЭлементы().Добавить(); СтрокаДереваЦен.Артикул = Номенклатура.Артикул; СтрокаДереваЦен.Номенклатура = Номенклатура; НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Номенклатура = Номенклатура; НоваяСтрока.СтрокаДереваЦен = СтрокаДереваЦен; КонецЕсли; КонецЕсли; СтрокаДереваЦен[СтрокаВидЦены.ИмяКолонки] = СтруктураТовар.Цена; СтрокаДереваЦен["ИзмененаВручную"+СтрокаВидЦены.ИмяКолонки] = Истина; КонецЦикла; // Загрузка старых цен и процента изменения ТаблицаЗначений = ПолучитьПустуюТаблицуТовары(); Для Каждого СтрокаВидЦены Из ВыбранныеЦены Цикл Если СтрокаВидЦены.Выбрана ИЛИ СтрокаВидЦены.Влияет Тогда ИмяКолонки = СтрокаВидЦены.ИмяКолонки; Для Каждого СтрокаТЗ Из ТЗ Цикл СтрокаДереваЦен = СтрокаТЗ.СтрокаДереваЦен; НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.Номенклатура = СтрокаДереваЦен.Номенклатура; НоваяСтрока.ВидЦены = СтрокаВидЦены.Ссылка; НоваяСтрока.Цена = СтрокаДереваЦен[ИмяКолонки]; КонецЦикла; КонецЕсли; КонецЦикла; ЗагрузитьСтарыеЦеныНоменклатуры(ТаблицаЗначений); // Список видов цен, которые, которые зависят от изменяемых ЗависимыеЦены = Новый Массив; Для Каждого СтрокаТЧ Из ВидыЦен Цикл МассивСтрокЗависимыхЦен = ПолучитьЗависимыеОтВидаЦеныВидыЦен(НайтиСтрокуВидаЦен(СтрокаТЧ.ВидЦены)); Для Каждого СтрокаВидЦены Из МассивСтрокЗависимыхЦен Цикл Если ЗависимыеЦены.Найти(СтрокаВидЦены) = Неопределено И ВидыЦен.Найти(СтрокаВидЦены.Ссылка) = Неопределено Тогда ЗависимыеЦены.Добавить(СтрокаВидЦены); КонецЕсли; КонецЦикла; КонецЦикла; // Автоматически рассчитывать нужно только те цены, по которым процент изменения которых // не изменяется и которые зависят от изменяемых ВидыЦенДляРасчета = Новый Массив; ВыбранныеСтрокиВидовЦен = ПолучитьВыбранныеСтрокиТаблицыВидовЦен(); Для Каждого ВидЦены Из ВыбранныеСтрокиВидовЦен Цикл Если ЗависимыеЦены.Найти(ВидЦены) <> Неопределено Тогда ВидыЦенДляРасчета.Добавить(ВидЦены); КонецЕсли; КонецЦикла; Если РассчитыватьАвтоматически Тогда РассчитатьВычисляемыеЦены(ТЗ, ВидыЦенДляРасчета, Ложь); Иначе УстановитьПризнакРучногоИзмененияДляВидовЦен(ТЗ, ВидыЦенДляРасчета); КонецЕсли; КонецФункции |
|||
1
Wobland
10.01.14
✎
08:31
|
ты же правда не хочешь от нас толкования этой портянки?
|
|||
2
mataranga
10.01.14
✎
08:32
|
правда :) разобрался, всем спасибо всем счастливой пятницы..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |