8.х ОБМЕН перенос номенклатуры из 1С Аптека в УПП

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем bannov, 28 июн 2010.

  1. TopicStarter Overlay
    bannov
    Offline

    bannov Опытный в 1С

    Регистрация:
    17 дек 2008
    Сообщения:
    185
    Симпатии:
    0
    Баллы:
    26
    1С 8 УПП

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

    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка) 
    Если НЕ Соединение() Тогда
    Возврат;
    КонецЕсли;
    Если Не ЗначениеЗаполнено(ДатаКон) Тогда
    Сообщить("Заполните поле конечная дата!");
    Возврат;
    КонецЕсли;
    Если ДатаКон < ДатаНач Тогда
    Сообщить("Конечная дата меньше начальной!");
    Возврат;
    КонецЕсли;
    
    видНом = справочники.видыноменклатуры.НайтиПоКоду("000000001");
    Родитель = Справочники.Номенклатура.НайтиПоКоду("ЦБД00004394");
    ЗапросА=м_Соединение.NewObject("Запрос");
    ТекстЗапроса="ВЫБРАТЬ РАЗЛИЧНЫЕ
    |  ОстаткиТоваровКомпанииОбороты.Номенклатура КАК Номенклатура
    |ИЗ
    |  РегистрНакопления.ОстаткиТоваровКомпании.Обороты(&ДатаНач, &ДатаКон, Период, ) КАК ОстаткиТоваровКомпанииОбороты";
    ЗапросА.Текст=ТекстЗапроса;
    ЗапросА.УстановитьПараметр("ДатаНач", ДатаНач);
    ЗапросА.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
    РезультатА=ЗапросА.Выполнить();
    
    
    
    
    Если РезультатА.Пустой() Тогда
    Возврат;
    КонецЕсли;
    
    Запрос=Новый Запрос();
    ТекстЗапроса="ВЫБРАТЬ
    |	ЗначенияСвойствОбъектов.Объект
    |ИЗ
    |	РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |	ЗначенияСвойствОбъектов.Свойство.Наименование = &Наименование
    |	И ЗначенияСвойствОбъектов.Значение = &Значение
    |	И ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура";
    Запрос.Текст=ТекстЗапроса;
    Запрос.УстановитьПараметр("Наименование", "ObjectUA");
    Свойство_ObjectUA=ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("ЦБД00000011");
    
    ТекстЗапроса="ВЫБРАТЬ
    |	ЕдиницыИзмерения.Ссылка КАК ЕдиницаИзмерения
    |ИЗ
    |	Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
    |ГДЕ
    |	ЕдиницыИзмерения.Владелец = &Владелец";	
    ЗапросА_ЕИ=м_Соединение.NewObject("Запрос");
    ЗапросА_ЕИ.Текст=ТекстЗапроса;
    
    
    ВыборкаА=РезультатА.Выбрать();
    Пока ВыборкаА.Следующий() Цикл
    НоменклатураА=ВыборкаА.Номенклатура;
    ObjectUA=м_Соединение.String(НоменклатураА.УникальныйИдентификатор());
    Запрос.УстановитьПараметр("Значение", ObjectUA);
    Если НЕ Запрос.Выполнить().Пустой() Тогда
    Продолжить;
    КонецЕсли;
    
    НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
    НоваяНоменклатура.Наименование = НоменклатураА.Наименование;
    НоваяНоменклатура.Артикул = НоменклатураА.Артикул;
    НоваяНоменклатура.Родитель = Родитель;
    НоваяНоменклатура.НоменклатурнаяГруппа = НоменклатурнаяГруппа;
    НоваяНоменклатура.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(НоменклатураА.БазоваяЕдиницаИзмерения.Код);
    НоваяНоменклатура.НаименованиеПолное= НоменклатураА.НаименованиеПолное;
    НоваяНоменклатура.ВидНоменклатуры = видНом;
    НоваяНоменклатура.Записать();
    
    Запись=РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
    Запись.Объект=НоваяНоменклатура.Ссылка;
    Запись.Свойство=Свойство_ObjectUA;
    Запись.Значение=ObjectUA;
    Запись.Записать();
    
    ОснЕИ=Неопределено;
    ЗапросА_ЕИ.УстановитьПараметр("Владелец", НоменклатураА);
    РезультатА_ЕИ=ЗапросА_ЕИ.Выполнить();
    Если НЕ РезультатА_ЕИ.Пустой() Тогда
    ВыборкаА_ЕИ=РезультатА_ЕИ.Выбрать();   
    Пока ВыборкаА_ЕИ.Следующий() Цикл
    ЕдИзмА_ЕИ = ВыборкаА_ЕИ.ЕдиницаИзмерения;
    НоваяЕдИзм = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    НоваяЕдИзм.Владелец=НоваяНоменклатура.Ссылка;
    НоваяЕдИзм.Наименование=ЕдИзмА_ЕИ.Наименование;
    НоваяЕдИзм.ЕдиницаПоКлассификатору=Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(ЕдИзмА_ЕИ.ЕдиницаПоКлассификатору.Код);
    НоваяЕдИзм.Коэффициент=ЕдИзмА_ЕИ.Коэффициент;
    НоваяЕдИзм.Вес=ЕдИзмА_ЕИ.Вес;
    НоваяЕдИзм.Записать();
    Если НоменклатураА.ОсновнаяЕдиницаИзмерения.Код=ЕдИзмА_ЕИ.Код Тогда
    ОснЕИ=НоваяЕдИзм.Ссылка;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    
    Если ОснЕИ<>Неопределено Тогда
    НоваяНоменклатура.ЕдиницаХраненияОстатков=ОснЕИ;
    НоваяНоменклатура.ЕдиницаДляОтчетов=ОснЕИ;
    НоваяНоменклатура.ЕдиницаИзмеренияМест=ОснЕИ;
    НоваяНоменклатура.Записать();
    КонецЕсли;					
    
    ///////////////////////
    Прервать; //ОТЛАДКА
    КонецЦикла;
    
    КонецПроцедуры
    
    
    
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Сдается мне, что выход один - писать условие, типа:

    Если Справочник.СтавкиНДС.<НужнаяСтавкаНДС> Тогда
    СтавкаНДС = Перечисления.СтавкиНДС.<НужнаяСтавкаНДС>
    ИначеЕсли
    .........
    КонецЕсли;
    НовыйЭлементСправочника.СтавкаНДС = СтавкаНДС;
  3. TopicStarter Overlay
    bannov
    Offline

    bannov Опытный в 1С

    Регистрация:
    17 дек 2008
    Сообщения:
    185
    Симпатии:
    0
    Баллы:
    26
    Так не получится. Как я вот это "Справочник.СтавкиНДС.<НужнаяСтавкаНДС> " дёрну из другой базы?
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    А каким образом ставкаНДС привязана к номенклатуре? оттуда и дергай....
    Условие будет выглядеть по-другому малость, но суть не изменится:

    Если Номенклатура.СтавкаНДС.Код = "КодСтавкиНДС18%" Тогда
    СтавкаНДС = Перечисления.СтавкиНДС.<НужнаяСтавкаНДС>
    ИначеЕсли Номенклатура.СтавкаНДС.Код = "КодСтавкиНДС10%" Тогда
    ......
    КонецЕсли.

    Не так уж их много, ставок этих....

Поделиться этой страницей