Загрузка из экзель
Здравствуйте друзья. Есть обработка загрузки из экзель в программу. Тут обработка для номенклатуры, что бы только номенклатуры из экзель перикинуть в прогу. Все отлично работает. ШтрихКод, Наиминование, Группа и единица. Но хотелось бы докончить модуль и сделать так что бы кроме всего этого автоматом загружал еще и розничную и закупочные цены.. Вроде бы я добавил на этот код еще чуток фунции но выдает ошибку.. Какой код и куда добавить для этого ? Форма на фотке а модули я сюда поставлю помогите пожалуйста!
Функция НайтиПоНоименование(Тип,Наименование,ЭтоГруппа=Ложь,Родитель="")
запрос=Новый Запрос;
если не ЗначениеЗаполнено(Родитель) тогда
Запрос_текст="ВЫБРАТЬ
| Тип.Ссылка
|ИЗ
| Справочник.Тип КАК Тип
|ГДЕ
| Тип.Наименование = &Наименование
|//Иерархический И Тип.ЭтоГруппа=(&ЭтоГруппа)
| ";
Иначе
Запрос_текст="ВЫБРАТЬ
| Тип.Ссылка
|ИЗ
| Справочник.Тип КАК Тип
|ГДЕ
| Тип.Наименование = &Наименование
|//Иерархический И Тип.ЭтоГруппа=(&ЭтоГруппа)
| И Тип.Родитель = (&Родитель)";
Запрос.Параметры.Вставить("Родитель",Родитель);
Конецесли;
Запрос_текст=СтрЗаменить(Запрос_текст,"Тип",Тип);
запрос.Текст=Запрос_текст;
если Метаданные.Справочники[Тип].Иерархический тогда
Запрос_текст=стрзаменить(Запрос_текст,"//Иерархический","");
Конецесли;
Запрос.Параметры.Вставить("Наименование",Наименование);
Запрос.Параметры.Вставить("ЭтоГруппа",ЭтоГруппа);
тз=запрос.Выполнить().Выгрузить();
если тз.Количество()>0 тогда
Возврат тз[0].Ссылка;
Иначе
возврат справочники[Тип].ПустаяСсылка();
Конецесли;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
ТипЦенАлыш=УправлениеПользователями.ЗначениеПоУмолчания("ЗакупочныйТипЦен");
ТипЦенСатыш=УправлениеПользователями.ЗначениеПоУмолчания("РозничныйТипЦен");
НачатьТранзакцию();
док=неопределено;
если флПриход тогда
если Контрагент.Пустая() тогда
Предупреждение("Kontragent seçilməyib!",,"Xəbərdarlıq!");
возврат;
КонецЕсли;
док=Документы.ПоступлениеТоваров.СоздатьДокумент();
ОбщегоНазначения.ИнстализацияДокумента(док);
док.Контрагент=Контрагент;
док.Склад=Склад;
КонецЕсли;
эксел=новый COMОбъект("Excel.Application");
эксел.Visible = 1;
НаборЦены=РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
колстр=0;
нашфайл=эксел.Workbooks.Open(ИмяФайла);
Для й1=1 По нашфайл.Worksheets().Count Цикл
Нашлист = нашфайл .Sheets(й1);
н=Нашлист.UsedRange.Row+Нашлист.UsedRange.Rows.Count()-1 ;
Если н=0 Тогда
продолжить;
КонецЕсли;
Для й2=2 По н Цикл
если Сокрлп(НашЛист.Cells(й2,2).Value)="" тогда
Продолжить;
Конецесли;
ГрупАды=Сокрлп(НашЛист.Cells(й2,1).Value);
груп=Справочники.Номенклатура.ПустаяСсылка();
если ГрупАды <>"" тогда
Груп=Справочники.Номенклатура.НайтиПоНаименованию(ГрупАды,Истина);
если Груп.Пустая() тогда
Груп=справочники.Номенклатура.СоздатьГруппу();
груп.Наименование=ГрупАды;
груп.Записать();
Конецесли;
Конецесли;
МалАды=Сокрлп(НашЛист.Cells(й2,2).Value);
тексткол=стрзаменить(Сокрлп(НашЛист.Cells(й2,4).Value),",",".");
кол=?(тексткол="",0,Число(тексткол));
шк=СтрЗаменить(Сокрлп(НашЛист.Cells(й2,3).Value),Символы.НПП,"");
текстАлыш=стрзаменить(Сокрлп(НашЛист.Cells(й2,6).Value),",",".");
Алыш=?(текстАлыш="",0,Число(текстАлыш));
текстСатыш=стрзаменить(Сокрлп(НашЛист.Cells(й2,10).Value),",",".");
Сатыш=?(текстАлыш="",0,Число(текстСатыш));
если шк="" тогда
продолжить;
КонецЕсли;
если стрДлина(шк)=13 тогда
если лев(шк,2)=ПараметрыСеанса.глперем.ПрефиксШтучногоТовара тогда
продолжить;
Иначеесли лев(шк,2)=ПараметрыСеанса.глперем.ПрефиксВесовогоТовара тогда
продолжить;
Конецесли;
Конецесли;
Единица=Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту("Штрихкод",шк);
если Единица.Пустая() тогда
клЕдАды=Сокрлп(НашЛист.Cells(й2,5).Value);
если клЕдАды="" тогда
клЕд=константы.ТипБазовойЕдиницыПоУмолчанию.Получить();
иначе
клЕд=справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(клЕдАды,истина);
если клЕд.Пустая() тогда
элКлЕд=справочники.КлассификаторЕдиницИзмерения.СоздатьЭлемент();
элКлЕд.Наименование= клЕдАды;
элКлЕд.Записать();
клЕд= элКлЕд.Ссылка;
Конецесли;
КонецЕсли;
товар=Справочники.Номенклатура.СоздатьЭлемент();
товар.Наименование=МалАды;
товар.Родитель=Груп.Ссылка;
Товар.КлБазоваяЕдиница= клЕд;
товар.Записать();
Единица=Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
Единица.Владелец=товар.Ссылка;
Единица.Штрихкод=шк;
Единица.ЕдиницаПоКлассификатору=клед;
Единица.Коэффициент=1;
Единица.Наименование=Единица.ЕдиницаПоКлассификатору.Наименование;
Единица.Записать();
товар.БазоваяЕдиница=Единица.Ссылка;
товар.Штрихкод=шк;
Товар.ОсновнаяЕдиница=Единица.Ссылка;
товар.Записать();
Сообщить("Yeni mal yarandı: "+товар);
Иначе
товар=Единица.Владелец;
Конецесли;
СтруктураЦена=УправлениеНоменклатурой.ПолучитьСтруктураЦена(ТекущаяДата(),ТипЦенАлыш,Единица.Владелец,Единица.Ссылка);
СтруктураЦена=УправлениеНоменклатурой.ПолучитьСтруктураЦена(ТекущаяДата(),ТипЦенСатыш,Единица.Владелец,Единица.Ссылка);
если флПриход и кол>0 тогда
стрдок=док.Товары.Добавить();
стрдок.Товар=товар.Ссылка;
стрдок.единица=единица.Ссылка;
РаботаСТЧДокумента.ИзмЕдин(док,стрдок);
стрдок.Коэффициент=единица.Коэффициент;
стрдок.Количество=кол;
стрдок.цена=алыш;
РаботаСТЧДокумента.Выч_Суммы_ТЧ(док,стрдок);
Конецесли;
КонецЦикла;
КонецЦикла;
если флПриход тогда
если док.Товары.Количество()>0 тогда
док.Записать(РежимЗаписиДокумента.Запись);
док.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Yeni sənəd yarandı: "+док);
Конецесли;
Конецесли;
ЗафиксироватьТранзакцию ();
эксел.WorkBooks.close();
эксел.Quit();
КонецПроцедуры
Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.Фильтр="*.xls|*;
ДиалогОткрытияФайла.МножественныйВыбор=Ложь;
Если ДиалогОткрытияФайла.Выбрать() Тогда
ИмяФайла=ДиалогОткрытияФайла.ВыбранныеФайлы[0];
КонецЕсли;;
СтандартнаяОбработка=ложь;
КонецПроцедуры
Функция НайтиПоНоименование(Тип,Наименование,ЭтоГруппа=Ложь,Родитель="")
запрос=Новый Запрос;
если не ЗначениеЗаполнено(Родитель) тогда
Запрос_текст="ВЫБРАТЬ
| Тип.Ссылка
|ИЗ
| Справочник.Тип КАК Тип
|ГДЕ
| Тип.Наименование = &Наименование
|//Иерархический И Тип.ЭтоГруппа=(&ЭтоГруппа)
| ";
Иначе
Запрос_текст="ВЫБРАТЬ
| Тип.Ссылка
|ИЗ
| Справочник.Тип КАК Тип
|ГДЕ
| Тип.Наименование = &Наименование
|//Иерархический И Тип.ЭтоГруппа=(&ЭтоГруппа)
| И Тип.Родитель = (&Родитель)";
Запрос.Параметры.Вставить("Родитель",Родитель);
Конецесли;
Запрос_текст=СтрЗаменить(Запрос_текст,"Тип",Тип);
запрос.Текст=Запрос_текст;
если Метаданные.Справочники[Тип].Иерархический тогда
Запрос_текст=стрзаменить(Запрос_текст,"//Иерархический","");
Конецесли;
Запрос.Параметры.Вставить("Наименование",Наименование);
Запрос.Параметры.Вставить("ЭтоГруппа",ЭтоГруппа);
тз=запрос.Выполнить().Выгрузить();
если тз.Количество()>0 тогда
Возврат тз[0].Ссылка;
Иначе
возврат справочники[Тип].ПустаяСсылка();
Конецесли;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
ТипЦенАлыш=УправлениеПользователями.ЗначениеПоУмолчания("ЗакупочныйТипЦен");
ТипЦенСатыш=УправлениеПользователями.ЗначениеПоУмолчания("РозничныйТипЦен");
НачатьТранзакцию();
док=неопределено;
если флПриход тогда
если Контрагент.Пустая() тогда
Предупреждение("Kontragent seçilməyib!",,"Xəbərdarlıq!");
возврат;
КонецЕсли;
док=Документы.ПоступлениеТоваров.СоздатьДокумент();
ОбщегоНазначения.ИнстализацияДокумента(док);
док.Контрагент=Контрагент;
док.Склад=Склад;
КонецЕсли;
эксел=новый COMОбъект("Excel.Application");
эксел.Visible = 1;
НаборЦены=РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
колстр=0;
нашфайл=эксел.Workbooks.Open(ИмяФайла);
Для й1=1 По нашфайл.Worksheets().Count Цикл
Нашлист = нашфайл .Sheets(й1);
н=Нашлист.UsedRange.Row+Нашлист.UsedRange.Rows.Count()-1 ;
Если н=0 Тогда
продолжить;
КонецЕсли;
Для й2=2 По н Цикл
если Сокрлп(НашЛист.Cells(й2,2).Value)="" тогда
Продолжить;
Конецесли;
ГрупАды=Сокрлп(НашЛист.Cells(й2,1).Value);
груп=Справочники.Номенклатура.ПустаяСсылка();
если ГрупАды <>"" тогда
Груп=Справочники.Номенклатура.НайтиПоНаименованию(ГрупАды,Истина);
если Груп.Пустая() тогда
Груп=справочники.Номенклатура.СоздатьГруппу();
груп.Наименование=ГрупАды;
груп.Записать();
Конецесли;
Конецесли;
МалАды=Сокрлп(НашЛист.Cells(й2,2).Value);
тексткол=стрзаменить(Сокрлп(НашЛист.Cells(й2,4).Value),",",".");
кол=?(тексткол="",0,Число(тексткол));
шк=СтрЗаменить(Сокрлп(НашЛист.Cells(й2,3).Value),Символы.НПП,"");
текстАлыш=стрзаменить(Сокрлп(НашЛист.Cells(й2,6).Value),",",".");
Алыш=?(текстАлыш="",0,Число(текстАлыш));
текстСатыш=стрзаменить(Сокрлп(НашЛист.Cells(й2,10).Value),",",".");
Сатыш=?(текстАлыш="",0,Число(текстСатыш));
если шк="" тогда
продолжить;
КонецЕсли;
если стрДлина(шк)=13 тогда
если лев(шк,2)=ПараметрыСеанса.глперем.ПрефиксШтучногоТовара тогда
продолжить;
Иначеесли лев(шк,2)=ПараметрыСеанса.глперем.ПрефиксВесовогоТовара тогда
продолжить;
Конецесли;
Конецесли;
Единица=Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту("Штрихкод",шк);
если Единица.Пустая() тогда
клЕдАды=Сокрлп(НашЛист.Cells(й2,5).Value);
если клЕдАды="" тогда
клЕд=константы.ТипБазовойЕдиницыПоУмолчанию.Получить();
иначе
клЕд=справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(клЕдАды,истина);
если клЕд.Пустая() тогда
элКлЕд=справочники.КлассификаторЕдиницИзмерения.СоздатьЭлемент();
элКлЕд.Наименование= клЕдАды;
элКлЕд.Записать();
клЕд= элКлЕд.Ссылка;
Конецесли;
КонецЕсли;
товар=Справочники.Номенклатура.СоздатьЭлемент();
товар.Наименование=МалАды;
товар.Родитель=Груп.Ссылка;
Товар.КлБазоваяЕдиница= клЕд;
товар.Записать();
Единица=Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
Единица.Владелец=товар.Ссылка;
Единица.Штрихкод=шк;
Единица.ЕдиницаПоКлассификатору=клед;
Единица.Коэффициент=1;
Единица.Наименование=Единица.ЕдиницаПоКлассификатору.Наименование;
Единица.Записать();
товар.БазоваяЕдиница=Единица.Ссылка;
товар.Штрихкод=шк;
Товар.ОсновнаяЕдиница=Единица.Ссылка;
товар.Записать();
Сообщить("Yeni mal yarandı: "+товар);
Иначе
товар=Единица.Владелец;
Конецесли;
СтруктураЦена=УправлениеНоменклатурой.ПолучитьСтруктураЦена(ТекущаяДата(),ТипЦенАлыш,Единица.Владелец,Единица.Ссылка);
СтруктураЦена=УправлениеНоменклатурой.ПолучитьСтруктураЦена(ТекущаяДата(),ТипЦенСатыш,Единица.Владелец,Единица.Ссылка);
если флПриход и кол>0 тогда
стрдок=док.Товары.Добавить();
стрдок.Товар=товар.Ссылка;
стрдок.единица=единица.Ссылка;
РаботаСТЧДокумента.ИзмЕдин(док,стрдок);
стрдок.Коэффициент=единица.Коэффициент;
стрдок.Количество=кол;
стрдок.цена=алыш;
РаботаСТЧДокумента.Выч_Суммы_ТЧ(док,стрдок);
Конецесли;
КонецЦикла;
КонецЦикла;
если флПриход тогда
если док.Товары.Количество()>0 тогда
док.Записать(РежимЗаписиДокумента.Запись);
док.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Yeni sənəd yarandı: "+док);
Конецесли;
Конецесли;
ЗафиксироватьТранзакцию ();
эксел.WorkBooks.close();
эксел.Quit();
КонецПроцедуры
Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.Фильтр="*.xls|*;
ДиалогОткрытияФайла.МножественныйВыбор=Ложь;
Если ДиалогОткрытияФайла.Выбрать() Тогда
ИмяФайла=ДиалогОткрытияФайла.ВыбранныеФайлы[0];
КонецЕсли;;
СтандартнаяОбработка=ложь;
КонецПроцедуры
Прикрепленные файлы:
По теме из базы знаний
- [ExcelEditor] Чтение/запись файла Excel напрямую из 1С без Excel (формат 97/2003)
- Чтение/Запись документа Excel 2007 без офиса, без внешних компонент. (с примером для 7.7, 8.1 и 8.2 на управляемых формах)
- Заполнение ПоступлениеТоваровУслуг по внешнему документу в формате XLS (УТ 11)
- Универсальный загрузчик номенклатуры из Excel без COM компоненты с сохранением настройки
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(6)Вместо НаборЦены=РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
ДокУЦ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
А в цикле (так же как в документ приход у вас добавляются строки) добавлять строки в ДокУЦ
НоваяСтрокаУЦ = ДокУЦ.Товары.Добавить();
ДокУЦ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
А в цикле (так же как в документ приход у вас добавляются строки) добавлять строки в ДокУЦ
НоваяСтрокаУЦ = ДокУЦ.Товары.Добавить();
(8)Тут проблема в том что, то что вы написали это для того что бы оприходовать номенклатуру, в склад и там уже заранее цены указывались. А мне нужно просто что бы создать номенклатуру заранее с его единицей, ценой и баркодом. Как бы представь те я создаю ручном ввиде просто номенклатуру. внутри самого справочника номенклатура же я сам создаю цены розничной и закупочной. вот так надо.
(11)
Уверен на 99%, что при этом создаётся документ "Установка цен номенклатуры", просто программа об этом никак не уведомляет. Зайдите в список документов и увидите, что они там есть. Можете поменять цену из карточки номенклатуры и увидеть, что при этом создаётся новый документ.
внутри самого справочника номенклатура же я сам создаю цены розничной и закупочной.
Уверен на 99%, что при этом создаётся документ "Установка цен номенклатуры", просто программа об этом никак не уведомляет. Зайдите в список документов и увидите, что они там есть. Можете поменять цену из карточки номенклатуры и увидеть, что при этом создаётся новый документ.
(1)Перед загрузкой номенклатуры создайте таблицу значений с колонками "Номенклатура", "ЦенаЗакупочная", "ЦенаРозничная". В процессе обработки файла и идентификации номенклатуры добавляйте в таблицу строки и заполняйте их соответствующими значениями.
После того как файл будет обработан создайте документ установки цен используя заполненную таблицу.
Всё.
не надо писать напрямую в регистр цен, нужно делать это через предназначенный для этого документ. Не забудьте его, документ установки цен, записать и провести.
После того как файл будет обработан создайте документ установки цен используя заполненную таблицу.
Всё.
не надо писать напрямую в регистр цен, нужно делать это через предназначенный для этого документ. Не забудьте его, документ установки цен, записать и провести.
(9)Можно.
1. Чтение файла в таблицу значений подходящего состава.
2. Идентификация/создание номенклатуры/единиц измерения/штрихкодов с фиксацией в таблице в соответствующих колонках;
3. Создание, заполнение и проведение документа установки цен на основании данных таблицы;
4. Заполнение табличной части документа поступление из таблицы.
1. Чтение файла в таблицу значений подходящего состава.
2. Идентификация/создание номенклатуры/единиц измерения/штрихкодов с фиксацией в таблице в соответствующих колонках;
3. Создание, заполнение и проведение документа установки цен на основании данных таблицы;
4. Заполнение табличной части документа поступление из таблицы.
Просто нужно добавить что в каком-то конкретном строке документа экзель написать цену закупочной например на основание этой ячейке внутри создавшився номенклатуры появилась цена закупочной.. вот и все) просто голова не работает как сделать
(12) Регистр сведений ЦеныНоменклатуры подчинён регистратору, т.е. без документа УстановкаЦенНоменклатуры "добавить что в каком-то конкретном строке документа экзель написать цену закупочной" не получится. Нужно создавать документ, заполнять его и проводить, как уже было сказано в (7).
Зачем такой геморрой. Если имеются уже давно разработанные внешние обработки которые позволяют загрузить что угодно в любой документ/табличную часть. Единственное, что нужно - это понять: по какому принципу данные из таблицы экселя подцепляются при переносе.
Ищите "Загрузка данных из табличного документа "Управляемые формы"
Ищите "Загрузка данных из табличного документа "Управляемые формы"
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)