Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 23:13

Создание документа и элемента справочника на основе данных из таб. части

Автор helgе, 24 ноя 2018, 21:18

0 Пользователей и 1 гость просматривают эту тему.

helgе

Ситуация. Есть внешняя обработка, на ней есть таб.часть "Таблица"  с реквезитами "Т_Код", "Т_Артикул", "Т_Наименование", "Т_Цена", "Т_Номенклатура" из файла xls в таб.асть загружаются данные,потом ставится отбор (флажок) по какому признаку делать отбор (поиск) по номенклатуре, коду или артикулу и исходя из них показывается ссылка на найденную номенклатуру (эти данные заносятся в реквезит "Т_Номенклатура") в самой конфигурации (конфигурация УТ 10.3) - это всё просто, это сделано. Но теперь не пойму как сделать так чтобы если из загруженных данных не найдено номенклатуры, то она должна создаваться. Например мы задали отбор по номенклатуре, в документе xls есть номенклатура "Веник", а в справочнике такого нет, так вот она должна создаваться (про проверку уникальности кода - другой вопрос не по этой теме, предположим, что код всё таки уникален), а если строка в  xls  пустая (тупо ничего не написано),то соответственно ничего не создавать. После на основании всего этого создаётся документ "Установка цен номенклатуры"(там в таб.часть этого документа заносятся данные о номенклатуре и цене из таб.части, которая на внешней обработке), с этой новой номенклатурой. Не получается именно создать ту новую номенклатуру и документ... код (конечно он кривой и в самой обработке куча недоработок,но на данный момент я  хочу разобраться именно с созданием дока и элемента номенклатуры)

Процедура КнопкаВыполнитьНажатие(Кнопка) //cоздание документа

ДокУстановкаЦен = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ДокУстановкаЦен.Дата = ТекущаяДата();
ДокУстановкаЦен.Ответственный = ПараметрыСеанса.ТекущийПользователь;

ТипЦен = ДокУстановкаЦен.ТипыЦен;
СтрТипЦен = ТипЦен.Добавить();
СтрТипЦен.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая", Истина);

Товары = ДокУстановкаЦен.Товары;
Для каждого ТекСтрока Из Таблица Цикл 
СтрТовары = Товары.Добавить();
СтрТовары.Номенклатура=ТекСтрока.Т_Наименование; 

Если ПустаяСтрока(ТекСтрока.Т_Наименование) Тогда
СоздатьНоменклатуру();
  КонецЕсли;
 
  СтрТовары.Цена = ТекСтрока.Т_Цена;
СтрТовары.Валюта = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
СтрТовары.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая", Истина);
СтрТовары.ЕдиницаИзмерения = СтрТовары.Номенклатура.ЕдиницаХраненияОстатков;
СтрТовары.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон;

КонецЦикла;

ДокУстановкаЦен.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Создан документ " + ДокУстановкаЦен.Ссылка);

КонецПроцедуры

//создаём номенклатуру
Процедура СоздатьНоменклатуру()
Для Каждого ТекСтрока из Таблица Цикл
  Н_Товар = Справочники.Номенклатура.СоздатьЭлемент();
  Н_Товар.Наименование = ТекСтрока.Т_Наименование; 
//Н_Товар.Артикул = Стр.Арктикул;
Н_Товар.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт", Истина);
Н_Товар.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар",Истина);
Н_Товар.Записать();

ЕдИзмерений = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
ЕдИзмерений.ЕдиницаПоКлассификатору = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт",Истина);
ЕдИзмерений.Владелец = Н_Товар.Ссылка;
ЕдИзмерений.Коэффициент = 1;
ЕдИзмерений.Записать();

Н_Товар.ЕдиницаХраненияОстатков = ЕдИзмерений.Ссылка;
Н_Товар.ЕдиницаДляОтчетов = ЕдИзмерений.Ссылка;   
Н_Товар.Записать();

Сообщить("Создана новая номенклатура " + Н_Товар.Ссылка);
    КонецЦикла; 
КонецПроцедуры

Я пробовал разные способы, лучшее что было, это я создавал всю номенлкатуру, которая была в таб.части, даже ту,которая уже нахдилась. Уже запутался полностью, задачка наверное простая, но не для меня(

Cкинул саму внешнюю обработку кому интересно, да она недоработанная,но сейчас хочу разобраться с созданием номенклатуры и документа.

alexandr_ll

Цитата: helgе от 24 ноя 2018, 21:18
Ситуация. Есть внешняя обработка, на ней есть таб.часть "Таблица"  с реквезитами "Т_Код", "Т_Артикул", "Т_Наименование", "Т_Цена", "Т_Номенклатура" из файла xls в таб.асть загружаются данные,потом ставится отбор (флажок) по какому признаку делать отбор (поиск) по номенклатуре, коду или артикулу и исходя из них показывается ссылка на найденную номенклатуру (эти данные заносятся в реквезит "Т_Номенклатура") в самой конфигурации (конфигурация УТ 10.3) - это всё просто, это сделано. Но теперь не пойму как сделать так чтобы если из загруженных данных не найдено номенклатуры, то она должна создаваться. Например мы задали отбор по номенклатуре, в документе xls есть номенклатура "Веник", а в справочнике такого нет, так вот она должна создаваться (про проверку уникальности кода - другой вопрос не по этой теме, предположим, что код всё таки уникален), а если строка в  xls  пустая (тупо ничего не написано),то соответственно ничего не создавать. После на основании всего этого создаётся документ "Установка цен номенклатуры"(там в таб.часть этого документа заносятся данные о номенклатуре и цене из таб.части, которая на внешней обработке), с этой новой номенклатурой. Не получается именно создать ту новую номенклатуру и документ... код (конечно он кривой и в самой обработке куча недоработок,но на данный момент я  хочу разобраться именно с созданием дока и элемента номенклатуры)

Процедура КнопкаВыполнитьНажатие(Кнопка) //cоздание документа

ДокУстановкаЦен = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ДокУстановкаЦен.Дата = ТекущаяДата();
ДокУстановкаЦен.Ответственный = ПараметрыСеанса.ТекущийПользователь;

ТипЦен = ДокУстановкаЦен.ТипыЦен;
СтрТипЦен = ТипЦен.Добавить();
СтрТипЦен.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая", Истина);

Товары = ДокУстановкаЦен.Товары;
Для каждого ТекСтрока Из Таблица Цикл 
СтрТовары = Товары.Добавить();
СтрТовары.Номенклатура=ТекСтрока.Т_Наименование; 

Если ПустаяСтрока(ТекСтрока.Т_Наименование) Тогда
СоздатьНоменклатуру();
  КонецЕсли;
 
  СтрТовары.Цена = ТекСтрока.Т_Цена;
СтрТовары.Валюта = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
СтрТовары.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая", Истина);
СтрТовары.ЕдиницаИзмерения = СтрТовары.Номенклатура.ЕдиницаХраненияОстатков;
СтрТовары.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон;

КонецЦикла;

ДокУстановкаЦен.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Создан документ " + ДокУстановкаЦен.Ссылка);

КонецПроцедуры

//создаём номенклатуру
Процедура СоздатьНоменклатуру()
Для Каждого ТекСтрока из Таблица Цикл
  Н_Товар = Справочники.Номенклатура.СоздатьЭлемент();
  Н_Товар.Наименование = ТекСтрока.Т_Наименование; 
//Н_Товар.Артикул = Стр.Арктикул;
Н_Товар.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт", Истина);
Н_Товар.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар",Истина);
Н_Товар.Записать();

ЕдИзмерений = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
ЕдИзмерений.ЕдиницаПоКлассификатору = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт",Истина);
ЕдИзмерений.Владелец = Н_Товар.Ссылка;
ЕдИзмерений.Коэффициент = 1;
ЕдИзмерений.Записать();

Н_Товар.ЕдиницаХраненияОстатков = ЕдИзмерений.Ссылка;
Н_Товар.ЕдиницаДляОтчетов = ЕдИзмерений.Ссылка;   
Н_Товар.Записать();

Сообщить("Создана новая номенклатура " + Н_Товар.Ссылка);
    КонецЦикла; 
КонецПроцедуры

Я пробовал разные способы, лучшее что было, это я создавал всю номенлкатуру, которая была в таб.части, даже ту,которая уже нахдилась. Уже запутался полностью, задачка наверное простая, но не для меня(

Cкинул саму внешнюю обработку кому интересно, да она недоработанная,но сейчас хочу разобраться с созданием номенклатуры и документа.
Чтобы лучше разобраться, используйте
https://infostart.ru/public/97415/

helgе

Цитата: alexandr_ll от 25 ноя 2018, 08:17
Цитата: helgе от 24 ноя 2018, 21:18
Ситуация. Есть внешняя обработка, на ней есть таб.часть "Таблица"  с реквезитами "Т_Код", "Т_Артикул", "Т_Наименование", "Т_Цена", "Т_Номенклатура" из файла xls в таб.асть загружаются данные,потом ставится отбор (флажок) по какому признаку делать отбор (поиск) по номенклатуре, коду или артикулу и исходя из них показывается ссылка на найденную номенклатуру (эти данные заносятся в реквезит "Т_Номенклатура") в самой конфигурации (конфигурация УТ 10.3) - это всё просто, это сделано. Но теперь не пойму как сделать так чтобы если из загруженных данных не найдено номенклатуры, то она должна создаваться. Например мы задали отбор по номенклатуре, в документе xls есть номенклатура "Веник", а в справочнике такого нет, так вот она должна создаваться (про проверку уникальности кода - другой вопрос не по этой теме, предположим, что код всё таки уникален), а если строка в  xls  пустая (тупо ничего не написано),то соответственно ничего не создавать. После на основании всего этого создаётся документ "Установка цен номенклатуры"(там в таб.часть этого документа заносятся данные о номенклатуре и цене из таб.части, которая на внешней обработке), с этой новой номенклатурой. Не получается именно создать ту новую номенклатуру и документ... код (конечно он кривой и в самой обработке куча недоработок,но на данный момент я  хочу разобраться именно с созданием дока и элемента номенклатуры)

Процедура КнопкаВыполнитьНажатие(Кнопка) //cоздание документа

ДокУстановкаЦен = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ДокУстановкаЦен.Дата = ТекущаяДата();
ДокУстановкаЦен.Ответственный = ПараметрыСеанса.ТекущийПользователь;

ТипЦен = ДокУстановкаЦен.ТипыЦен;
СтрТипЦен = ТипЦен.Добавить();
СтрТипЦен.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая", Истина);

Товары = ДокУстановкаЦен.Товары;
Для каждого ТекСтрока Из Таблица Цикл 
СтрТовары = Товары.Добавить();
СтрТовары.Номенклатура=ТекСтрока.Т_Наименование; 

Если ПустаяСтрока(ТекСтрока.Т_Наименование) Тогда
СоздатьНоменклатуру();
  КонецЕсли;
 
  СтрТовары.Цена = ТекСтрока.Т_Цена;
СтрТовары.Валюта = Справочники.Валюты.НайтиПоНаименованию("руб.", Истина);
СтрТовары.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая", Истина);
СтрТовары.ЕдиницаИзмерения = СтрТовары.Номенклатура.ЕдиницаХраненияОстатков;
СтрТовары.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон;

КонецЦикла;

ДокУстановкаЦен.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Создан документ " + ДокУстановкаЦен.Ссылка);

КонецПроцедуры

//создаём номенклатуру
Процедура СоздатьНоменклатуру()
Для Каждого ТекСтрока из Таблица Цикл
  Н_Товар = Справочники.Номенклатура.СоздатьЭлемент();
  Н_Товар.Наименование = ТекСтрока.Т_Наименование; 
//Н_Товар.Артикул = Стр.Арктикул;
Н_Товар.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт", Истина);
Н_Товар.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар",Истина);
Н_Товар.Записать();

ЕдИзмерений = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
ЕдИзмерений.ЕдиницаПоКлассификатору = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт",Истина);
ЕдИзмерений.Владелец = Н_Товар.Ссылка;
ЕдИзмерений.Коэффициент = 1;
ЕдИзмерений.Записать();

Н_Товар.ЕдиницаХраненияОстатков = ЕдИзмерений.Ссылка;
Н_Товар.ЕдиницаДляОтчетов = ЕдИзмерений.Ссылка;   
Н_Товар.Записать();

Сообщить("Создана новая номенклатура " + Н_Товар.Ссылка);
    КонецЦикла; 
КонецПроцедуры

Я пробовал разные способы, лучшее что было, это я создавал всю номенлкатуру, которая была в таб.части, даже ту,которая уже нахдилась. Уже запутался полностью, задачка наверное простая, но не для меня(

Cкинул саму внешнюю обработку кому интересно, да она недоработанная,но сейчас хочу разобраться с созданием номенклатуры и документа.
Чтобы лучше разобраться, используйте
http://katalog.forum-baza.ru/public/97415/
да, спасибо, но это не совсем то,что я хотел, мне нужно чтобы создавался элемент номенклатуры, а затем документ "установка цен номенклатуры".

alexandr_ll


[/quote]да, спасибо, но это не совсем то,что я хотел, мне нужно чтобы создавался элемент номенклатуры, а затем документ "установка цен номенклатуры".
[/quote]
Так в публикации именно это и описано.

helgе


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск