Здравствуйте Коллеги. Есть Обработка, которая заполняет из файла Excel в ПН (и при необходимости карточку товара)Наименование/ШтрихКод/Артикул/Цену товара.Но эта обработка написана под Бух. На данный момент столкнулся с проблемой.Не получается Добавить цену из файла Экселя и сохранить ее в карточке товара с Типом Закупочная. Исходный код для Бух выглядит так:
И дальше у меня ступор.В Справочник Цен Тип Цены подтягивается со Справочника КатегорииЦен.В общем я запутался совсем.Что от куда, как и куда берется... Прошу помощи
И дальше у меня ступор.В Справочник Цен Тип Цены подтягивается со Справочника КатегорииЦен.В общем я запутался совсем.Что от куда, как и куда берется... Прошу помощи
ну, наверное нужно запросом проверить есть нужная запись, если есть, то изменить, если нет то добавить, если заведомо нет, то сразу добавить.... как т о так.
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник. ЗиУП
ну, наверное нужно запросом проверить есть нужная запись, если есть, то изменить, если нет то добавить, если заведомо нет, то сразу добавить.... как т о так.
Этот алгоритм уже есть в обработке. Меня интересует именно кусок кода в котором на Программном уровне Для Текущего Товара Добавиться в Список Цен цена с типом Закупочная.
Группа: Местный
Сообщений: 97
Спасибо сказали: 28 раз
Рейтинг: 0
как-то так:
ЦеныТовара = СоздатьОбъект("Справочник.Цены"); Если ПустоеЗначение(НаДату)=1 Тогда НаДату = РабочаяДата(); КонецЕсли; ЦеныТовара.ИспользоватьДату(НаДату); ЦеныТовара.ИспользоватьВладельца(Тов.ТекущийЭлемент()); КатегорииЦен = СоздатьОбъект("Справочник.КатегорииЦен"); КатегорииЦен.ВыбратьЭлементы(); Пока КатегорииЦен.ПолучитьЭлемент()=1 Цикл Если КатегорииЦен.ПометкаУдаления()=1 Тогда Продолжить; КонецЕсли; Если ЦеныТовара.НайтиПоРеквизиту("КатегорияЦены",КатегорииЦен.ТекущийЭлемент(),0)=0 Тогда ЦеныТовара.Новый(); Иначе Если ЦеныТовара.ПометкаУдаления()=1 Тогда Если Вопрос("Цена "+ЦеныТовара.КатегорияЦены+ " помечена на удаление и не будет заполнена. |Снять пометку удаления?","Да+Нет")="Да" Тогда Попытка ЦеныТовара.СнятьПометкуУдаления(); Исключение Предупреждение(ОписаниеОшибки()); Возврат; КонецПопытки; КонецЕсли; Продолжить; КонецЕсли; КонецЕсли; //опр валюту ВалютаЦ=Тов.ВалютаУчета; ЦеныТовара.Наименование = КатегорииЦен.Наименование; ЦеныТовара.Единица = Тов.ЕдиницаПоУмолчанию; ЦеныТовара.КатегорияЦены = КатегорииЦен.ТекущийЭлемент(); //ВычисленнаяЦена= тащите их экселя; ЦеныТовара.Цена = ВычисленнаяЦена; // Попытка ЦеныТовара.Записать(); // Исключение х // глТрассировка(ОписаниеОшибки(),0); // Возврат; // КонецПопытки;
Этот алгоритм уже есть в обработке. Меня интересует именно кусок кода в котором на Программном уровне Для Текущего Товара Добавиться в Список Цен цена с типом Закупочная.
ЦеныТовара = СоздатьОбъект("Справочник.Цены"); Если ПустоеЗначение(НаДату)=1 Тогда НаДату = РабочаяДата(); КонецЕсли; ЦеныТовара.ИспользоватьДату(НаДату); ЦеныТовара.ИспользоватьВладельца(Тов.ТекущийЭлемент()); КатегорииЦен = СоздатьОбъект("Справочник.КатегорииЦен"); КатегорииЦен.ВыбратьЭлементы(); Пока КатегорииЦен.ПолучитьЭлемент()=1 Цикл Если КатегорииЦен.ПометкаУдаления()=1 Тогда Продолжить; КонецЕсли; Если ЦеныТовара.НайтиПоРеквизиту("КатегорияЦены",КатегорииЦен.ТекущийЭлемент(),0)=0 Тогда ЦеныТовара.Новый(); Иначе Если ЦеныТовара.ПометкаУдаления()=1 Тогда Если Вопрос("Цена "+ЦеныТовара.КатегорияЦены+ " помечена на удаление и не будет заполнена. |Снять пометку удаления?","Да+Нет")="Да" Тогда Попытка ЦеныТовара.СнятьПометкуУдаления(); Исключение Предупреждение(ОписаниеОшибки()); Возврат; КонецПопытки; КонецЕсли; Продолжить; КонецЕсли; КонецЕсли; //опр валюту ВалютаЦ=Тов.ВалютаУчета; ЦеныТовара.Наименование = КатегорииЦен.Наименование; ЦеныТовара.Единица = Тов.ЕдиницаПоУмолчанию; ЦеныТовара.КатегорияЦены = КатегорииЦен.ТекущийЭлемент(); //ВычисленнаяЦена= тащите их экселя; ЦеныТовара.Цена = ВычисленнаяЦена; // Попытка ЦеныТовара.Записать(); // Исключение х // глТрассировка(ОписаниеОшибки(),0); // Возврат; // КонецПопытки;
КонецЦикла;
Вот это вроде бы работает, но как-то коряво. 1.Оно добавляет каждый раз для товара все категории , которые есть в Справочнике Категорий. Вопрос: Как выбрать только 2 нужные категории? 2.Надо как-то прикрутить проверку Категорий. Т.е. Если у товара уже есть эти 2 категории, то нужно всего лишь изменить в них цену, как для одной так и для другой. А если их нет, то нужно добавить их и установить уже вычисленную цену.
Выручайте Товарищи.А то что-то башка не варит совсем
В общем как добавлять только одну категорию разобрался. Вот код.Может кому пригодиться. Но остается вопрос как выбрать именно две нужные категории?Может через список значений отфильтровать?Возможен такой вариант?
Если спрЦены.НайтиПоРеквизиту("КатегорияЦены",спрКатегорииЦен.ТекущийЭлемент(),0)=0 Тогда флаг =0; Сообщить("Возможно товар "+ Товар.Наименование+" " + "новый и пока не имеет Цены.Создаю Категорию и Цену Товара"); спрЦены.Новый(); Иначе Сообщить("Категория цены для товара "+ " "+Товар.Наименование+ "уже установлена.Меняю цену"); Если спрЦены.ПометкаУдаления()=1 Тогда Если Вопрос("Цена "+спрЦены.КатегорияЦены+ " помечена на удаление и не будет заполнена. |Снять пометку удаления?","Да+Нет")="Да" Тогда Попытка спрЦены.СнятьПометкуУдаления(); Исключение Предупреждение(ОписаниеОшибки()); Возврат; КонецПопытки; КонецЕсли; КонецЕсли; КонецЕсли; Если Флаг=0 Тогда спрЦены.Валюта = Товар.ВалютаУчета; спрЦены.Наименование = спрКатегорииЦен.Наименование; спрЦены.Единица = Товар.ЕдиницаПоУмолчанию; спрЦены.КатегорияЦены = спрКатегорииЦен.ТекущийЭлемент(); спрЦены.Цена = Цен;//ВычисленнаяЦена; Иначе спрЦены.Цена = Цен;//ВычисленнаяЦена; КонецЕсли; спрЦены.Записать(); КонецПроцедуры
Группа: Местный
Сообщений: 97
Спасибо сказали: 28 раз
Рейтинг: 0
Ну если имена категорий жестко заданы и не будут изменяться никогда - будьте как все, хардкодьте. Пример быдлокода:
... Пока КатегорииЦен.ПолучитьЭлемент()=1 Цикл если (категорияЦен.Наименование="Закупочная")или(категорияЦен.Наименование="Розничная") тогда ... иначе продолжить; конецЕсли ...
если нужно произвольное количество произвольных категорий, влепите на форму обработки список или тз, и вместо цикла по всем категориям выбирайте из списка или тз. Делов то.
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП) 1С Предприятие 8.3: Бух.предприятия 3.0 + самописка ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Кроме высшего образования, нужно иметь хотя бы среднее соображение
Хм.Если не создавать объект Единицы.То в карточку товара Заноситься ШК, но на вкладке Единциы, Единицы Товара не Имеет ШК.Только когда я интерактивно нажимаю Записать, то сразу же в единицу устанавливается ШК. Не пойму ни фига
Таким макаром записывается просто ШК.Без Коефициента и Штук. Надо как-то спозиционироваться на текущем элементе Цены.Шт и Коэф по идее там уже автоматом проставляются, а вот ШК надо туда дописать.
Я правильно понимаю: 1)создаем новый элемент Товар 2) создаем подчиненный ему элемент справочника "Единицы" ??
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП) 1С Предприятие 8.3: Бух.предприятия 3.0 + самописка ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Кроме высшего образования, нужно иметь хотя бы среднее соображение
1.Создаем Новый товар. 2.Записываем в реквизит Товара ШтрихКод. 3.Записываем Товар. 4.В единицах Товара Видим Только Единица = шт. Коефициент = 1 ШтрихКода = Нет. 5.Жму Записать Интерактивно в Карточке Товара.И тогда только в Единицы подтягивается ШК с Реквизита Справочника товара "ШтрихКод".
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП) 1С Предприятие 8.3: Бух.предприятия 3.0 + самописка ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Кроме высшего образования, нужно иметь хотя бы среднее соображение
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!