Загрузка из экзель

1. user1087014 26.01.21 21:35 Сейчас в теме +0.61 $m
Здравствуйте друзья. Есть обработка загрузки из экзель в программу. Тут обработка для номенклатуры, что бы только номенклатуры из экзель перикинуть в прогу. Все отлично работает. ШтрихКод, Наиминование, Группа и единица. Но хотелось бы докончить модуль и сделать так что бы кроме всего этого автоматом загружал еще и розничную и закупочные цены.. Вроде бы я добавил на этот код еще чуток фунции но выдает ошибку.. Какой код и куда добавить для этого ? Форма на фотке а модули я сюда поставлю помогите пожалуйста!

Функция НайтиПоНоименование(Тип,Наименование,ЭтоГруппа=Ложь,Родитель="")
запрос=Новый Запрос;
если не ЗначениеЗаполнено(Родитель) тогда
Запрос_текст="ВЫБРАТЬ
| Тип.Ссылка
|ИЗ
| Справочник.Тип КАК Тип
|ГДЕ
| Тип.Наименование = &Наименование
|//Иерархический И Тип.ЭтоГруппа=(&ЭтоГруппа)
| ";
Иначе
Запрос_текст="ВЫБРАТЬ
| Тип.Ссылка
|ИЗ
| Справочник.Тип КАК Тип
|ГДЕ
| Тип.Наименование = &Наименование
|//Иерархический И Тип.ЭтоГруппа=(&ЭтоГруппа)
| И Тип.Родитель = (&Родитель)";
Запрос.Параметры.Вставить("Родитель",Родитель);
Конецесли;


Запрос_текст=СтрЗаменить(Запрос_текст,"Тип",Тип);
запрос.Текст=Запрос_текст;
если Метаданные.Справочники[Тип].Иерархический тогда
Запрос_текст=стрзаменить(Запрос_текст,"//Иерархический","");
Конецесли;

Запрос.Параметры.Вставить("Наименование",Наименование);
Запрос.Параметры.Вставить("ЭтоГруппа",ЭтоГруппа);
тз=запрос.Выполнить().Выгрузить();
если тз.Количество()>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];
КонецЕсли;;
СтандартнаяОбработка=ложь;
КонецПроцедуры
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. 603692 3 27.01.21 06:44 Сейчас в теме
(1)не написали какая у вас конфигурация. Но в любой конфигурации для установки цены используется отдельные документ - Установка цен номенклатуры, поэтому вам нужно параллельно с загрузкой справочника создавать и заполнять этот документ
4. 603692 3 27.01.21 06:47 Сейчас в теме
(1)
(3)нужно 1 документ на всю номенклатуру
6. user1087014 27.01.21 08:22 Сейчас в теме
(4)
а всю номенклат

это как?
8. 603692 3 27.01.21 09:01 Сейчас в теме
(6)Вместо НаборЦены=РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
ДокУЦ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
А в цикле (так же как в документ приход у вас добавляются строки) добавлять строки в ДокУЦ
НоваяСтрокаУЦ = ДокУЦ.Товары.Добавить();
10. user1087014 27.01.21 09:48 Сейчас в теме
(8)
е как в документ приход у вас добавляются строки) добавлять строки в ДокУЦ
НоваяСтрокаУЦ = ДокУЦ.Товары.Добавить();
ок сейчас проверю
11. user1087014 27.01.21 09:53 Сейчас в теме
(8)Тут проблема в том что, то что вы написали это для того что бы оприходовать номенклатуру, в склад и там уже заранее цены указывались. А мне нужно просто что бы создать номенклатуру заранее с его единицей, ценой и баркодом. Как бы представь те я создаю ручном ввиде просто номенклатуру. внутри самого справочника номенклатура же я сам создаю цены розничной и закупочной. вот так надо.
14. comptr 31 27.01.21 11:04 Сейчас в теме
(11)
внутри самого справочника номенклатура же я сам создаю цены розничной и закупочной.

Уверен на 99%, что при этом создаётся документ "Установка цен номенклатуры", просто программа об этом никак не уведомляет. Зайдите в список документов и увидите, что они там есть. Можете поменять цену из карточки номенклатуры и увидеть, что при этом создаётся новый документ.
prog1c_vl; +1 Ответить
7. killitch 30 27.01.21 08:29 Сейчас в теме
(1)Перед загрузкой номенклатуры создайте таблицу значений с колонками "Номенклатура", "ЦенаЗакупочная", "ЦенаРозничная". В процессе обработки файла и идентификации номенклатуры добавляйте в таблицу строки и заполняйте их соответствующими значениями.
После того как файл будет обработан создайте документ установки цен используя заполненную таблицу.
Всё.
не надо писать напрямую в регистр цен, нужно делать это через предназначенный для этого документ. Не забудьте его, документ установки цен, записать и провести.
prog1c_vl; +1 Ответить
9. user1087014 27.01.21 09:41 Сейчас в теме
(7)
ужно делать это через предназначенный для этого документ. Не забудьте его, документ установки цен, записать и провести.

Можно по этапно ? а то некоторые вещи мне не дошли)
13. killitch 30 27.01.21 10:47 Сейчас в теме
(9)Можно.
1. Чтение файла в таблицу значений подходящего состава.
2. Идентификация/создание номенклатуры/единиц измерения/штрихкодов с фиксацией в таблице в соответствующих колонках;
3. Создание, заполнение и проведение документа установки цен на основании данных таблицы;
4. Заполнение табличной части документа поступление из таблицы.
2. Matveev_VS 160 27.01.21 04:35 Сейчас в теме
Пришлите лучше текст ошибки.
5. user1087014 27.01.21 08:22 Сейчас в теме
(2)На данным коде никаких ошибок нету. Загружается номенклатура. а если добавить некоторые строки, говорит что типо из за регистр сведений.
12. user1087014 27.01.21 09:58 Сейчас в теме
Просто нужно добавить что в каком-то конкретном строке документа экзель написать цену закупочной например на основание этой ячейке внутри создавшився номенклатуры появилась цена закупочной.. вот и все) просто голова не работает как сделать
15. comptr 31 27.01.21 13:34 Сейчас в теме
(12) Регистр сведений ЦеныНоменклатуры подчинён регистратору, т.е. без документа УстановкаЦенНоменклатуры "добавить что в каком-то конкретном строке документа экзель написать цену закупочной" не получится. Нужно создавать документ, заполнять его и проводить, как уже было сказано в (7).
prog1c_vl; +1 Ответить
16. Alexponenta 19.02.21 14:49 Сейчас в теме
Зачем такой геморрой. Если имеются уже давно разработанные внешние обработки которые позволяют загрузить что угодно в любой документ/табличную часть. Единственное, что нужно - это понять: по какому принципу данные из таблицы экселя подцепляются при переносе.

Ищите "Загрузка данных из табличного документа "Управляемые формы"
17. Alexponenta 19.02.21 14:51 Сейчас в теме
(16)Ну и естественно понимать, что номенклатура в номенклатуру. Цены номенклатуры в табличную часть документа "Установка цен номенклатуры". И т.д.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот