Здравствуйте друзья. Есть обработка загрузки из экзель в программу. Тут обработка для номенклатуры, что бы только номенклатуры из экзель перикинуть в прогу. Все отлично работает. ШтрихКод, Наиминование, Группа и единица. Но хотелось бы докончить модуль и сделать так что бы кроме всего этого автоматом загружал еще и розничную и закупочные цены.. Вроде бы я добавил на этот код еще чуток фунции но выдает ошибку.. Какой код и куда добавить для этого ? Форма на фотке а модули я сюда поставлю помогите пожалуйста!
Функция НайтиПоНоименование(Тип,Наименование,ЭтоГруппа=Ложь,Родитель="")
запрос=Новый Запрос;
если не ЗначениеЗаполнено(Родитель) тогда
Запрос_текст="ВЫБРАТЬ
| Тип.Ссылка
|ИЗ
| Справочник.Тип КАК Тип
|ГДЕ
| Тип.Наименование = &Наименование
|//Иерархический И Тип.ЭтоГруппа=(&ЭтоГруппа)
| ";
Иначе
Запрос_текст="ВЫБРАТЬ
| Тип.Ссылка
|ИЗ
| Справочник.Тип КАК Тип
|ГДЕ
| Тип.Наименование = &Наименование
|//Иерархический И Тип.ЭтоГруппа=(&ЭтоГруппа)
| И Тип.Родитель = (&Родитель)";
Запрос.Параметры.Вставить("Родитель",Родитель);
Конецесли;
Запрос_текст=СтрЗаменить(Запрос_текст,"Тип",Тип);
запрос.Текст=Запрос_текст;
если Метаданные.Справочники[Тип].Иерархический тогда
Запрос_текст=стрзаменить(Запрос_текст,"//Иерархический","");
Конецесли;
Запрос.Параметры.Вставить("Наименование",Наименование);
Запрос.Параметры.Вставить("ЭтоГруппа",ЭтоГруппа);
тз=запрос.Выполнить().Выгрузить();
если тз.Количество()>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).
Зачем такой геморрой. Если имеются уже давно разработанные внешние обработки которые позволяют загрузить что угодно в любой документ/табличную часть. Единственное, что нужно - это понять: по какому принципу данные из таблицы экселя подцепляются при переносе.
Ищите "Загрузка данных из табличного документа "Управляемые формы"
Ищите "Загрузка данных из табличного документа "Управляемые формы"
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот