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

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 30 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 159 27.01.21 04:35 Сейчас в теме
Пришлите лучше текст ошибки.
5. user1087014 27.01.21 08:22 Сейчас в теме
(2)На данным коде никаких ошибок нету. Загружается номенклатура. а если добавить некоторые строки, говорит что типо из за регистр сведений.
12. user1087014 27.01.21 09:58 Сейчас в теме
Просто нужно добавить что в каком-то конкретном строке документа экзель написать цену закупочной например на основание этой ячейке внутри создавшився номенклатуры появилась цена закупочной.. вот и все) просто голова не работает как сделать
15. comptr 30 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)Ну и естественно понимать, что номенклатура в номенклатуру. Цены номенклатуры в табличную часть документа "Установка цен номенклатуры". И т.д.
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Программист 1С:ERP
Москва
зарплата от 100 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день