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

перенос номенклатуры из 1С Аптека в УПП

Автор bannov, 28 июн 2010, 10:25

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

bannov

1С 8 УПП

Написал обработку, которая переносит номенклатуры, через com-соединение из 1С Аптека в УПП. Нужно переносить не все номенклатуры, а только те которые используются в аптеке, поэтому выгрузка идёт не из справочника "Номенклатура", а из регистра накопления "Остатки товаров компании". Проблема заключается в том, что нужно перенести поле "Ставка НДС", в УПП они хранятся в перечислениях "Ставки НДС", а в 1С Аптека - в справочнике "Ставки НДС", не могку понять как это сделать. Привожу пример кода, который уже написан, осталось решить только эту проблемму. Помогите пожалуйста.


Процедура КнопкаВыполнитьНажатие(Кнопка)
Если НЕ Соединение() Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДатаКон) Тогда
Сообщить("Заполните поле конечная дата!");
Возврат;
КонецЕсли;
Если ДатаКон < ДатаНач Тогда
Сообщить("Конечная дата меньше начальной!");
Возврат;
КонецЕсли;

видНом = справочники.видыноменклатуры.НайтиПоКоду("000000001");
Родитель = Справочники.Номенклатура.НайтиПоКоду("ЦБД00004394");
ЗапросА=м_Соединение.NewObject("Запрос");
ТекстЗапроса="ВЫБРАТЬ РАЗЛИЧНЫЕ
|  ОстаткиТоваровКомпанииОбороты.Номенклатура КАК Номенклатура
|ИЗ
|  РегистрНакопления.ОстаткиТоваровКомпании.Обороты(&ДатаНач, &ДатаКон, Период, ) КАК ОстаткиТоваровКомпанииОбороты";
ЗапросА.Текст=ТекстЗапроса;
ЗапросА.УстановитьПараметр("ДатаНач", ДатаНач);
ЗапросА.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
РезультатА=ЗапросА.Выполнить();




Если РезультатА.Пустой() Тогда
Возврат;
КонецЕсли;

Запрос=Новый Запрос();
ТекстЗапроса="ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Объект
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство.Наименование = &Наименование
| И ЗначенияСвойствОбъектов.Значение = &Значение
| И ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура";
Запрос.Текст=ТекстЗапроса;
Запрос.УстановитьПараметр("Наименование", "ObjectUA");
Свойство_ObjectUA=ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("ЦБД00000011");

ТекстЗапроса="ВЫБРАТЬ
| ЕдиницыИзмерения.Ссылка КАК ЕдиницаИзмерения
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
|ГДЕ
| ЕдиницыИзмерения.Владелец = &Владелец";
ЗапросА_ЕИ=м_Соединение.NewObject("Запрос");
ЗапросА_ЕИ.Текст=ТекстЗапроса;


ВыборкаА=РезультатА.Выбрать();
Пока ВыборкаА.Следующий() Цикл
НоменклатураА=ВыборкаА.Номенклатура;
ObjectUA=м_Соединение.String(НоменклатураА.УникальныйИдентификатор());
Запрос.УстановитьПараметр("Значение", ObjectUA);
Если НЕ Запрос.Выполнить().Пустой() Тогда
Продолжить;
КонецЕсли;

НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НоваяНоменклатура.Наименование = НоменклатураА.Наименование;
НоваяНоменклатура.Артикул = НоменклатураА.Артикул;
НоваяНоменклатура.Родитель = Родитель;
НоваяНоменклатура.НоменклатурнаяГруппа = НоменклатурнаяГруппа;
НоваяНоменклатура.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(НоменклатураА.БазоваяЕдиницаИзмерения.Код);
НоваяНоменклатура.НаименованиеПолное= НоменклатураА.НаименованиеПолное;
НоваяНоменклатура.ВидНоменклатуры = видНом;
НоваяНоменклатура.Записать();

Запись=РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
Запись.Объект=НоваяНоменклатура.Ссылка;
Запись.Свойство=Свойство_ObjectUA;
Запись.Значение=ObjectUA;
Запись.Записать();

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

Если ОснЕИ<>Неопределено Тогда
НоваяНоменклатура.ЕдиницаХраненияОстатков=ОснЕИ;
НоваяНоменклатура.ЕдиницаДляОтчетов=ОснЕИ;
НоваяНоменклатура.ЕдиницаИзмеренияМест=ОснЕИ;
НоваяНоменклатура.Записать();
КонецЕсли;

///////////////////////
Прервать; //ОТЛАДКА
КонецЦикла;

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


Myti

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

bannov


bannov

Честно говоря, даже не представляю как это сделать, если можно напишите код пожалуйста!

Myti

Ну вот как так? такой запрос написать и не знать как искать элемент по наименованию!!!

bannov

Дописал ещё вот что, но всё равно не получается.


ТекстЗапроса="ВЫБРАТЬ
| СтавкиНДС.Наименование КАК СтавкаНДС
|ИЗ
| Справочник.СтавкиНДС КАК СтавкиНДС";
ЗапросА_СтавкаНДС=м_Соединение.NewObject("Запрос");
ЗапросА_СтавкаНДС.Текст=ТекстЗапроса;


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



Myti

дя...усе,правильно,,,а запрос не пустой???? com соединение разве поддерживает запросы к справочникам?

bannov

Да, потдерживает. До этого делал запрос к справочнику Единицы измерения

Myti

а сообщает ??? из кода
Если СтавкаНДС = "НДС 0%" Тогда
               Сообщить("Ставка НДС = 0");

bannov


Теги:

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

Рейтинг@Mail.ru

Поиск