Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как программно добавить/изменить цены? , ТИС 7.7 2 страниц V   1 2 >          
Flexy Подменю пользователя
сообщение 31.10.11, 9:26
Сообщение #1

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Здравствуйте Коллеги.
Есть Обработка, которая заполняет из файла Excel в ПН (и при необходимости карточку товара)Наименование/ШтрихКод/Артикул/Цену товара.Но эта обработка написана под Бух.
На данный момент столкнулся с проблемой.Не получается Добавить цену из файла Экселя и сохранить ее в карточке товара с Типом Закупочная.
Исходный код для Бух выглядит так:
товар.цена_розн=окр(товар.цена_прих+товар.цена_прих*товар.ТорговаяНаценка/100,0);

MATEVI Подменю пользователя
сообщение 31.10.11, 9:31
Сообщение #2

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

В ТИСе Цены это справочник. И работать надо как со справочником Спр = СоздатьОбъект ... и т.д.
Посмотрите как в ТИСе идет работа с закладкой цены

Flexy Подменю пользователя
сообщение 31.10.11, 9:36
Сообщение #3

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Смотрел.Именно это у меня и не выходит.
Пробовал делать как-то так:
СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.ИспользоватьВладельца(Товар);
....

И дальше у меня ступор.В Справочник Цен Тип Цены подтягивается со Справочника КатегорииЦен.В общем я запутался совсем.Что от куда, как и куда берется...
Прошу помощи rolleyes.gif

alex040269 Подменю пользователя
сообщение 31.10.11, 9:49
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(Flexy @ 31.10.11, 10:36) *
Смотрел.Именно это у меня и не выходит.
Пробовал делать как-то так:
СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.ИспользоватьВладельца(Товар);
....

И дальше у меня ступор.В Справочник Цен Тип Цены подтягивается со Справочника КатегорииЦен.В общем я запутался совсем.Что от куда, как и куда берется...
Прошу помощи rolleyes.gif

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


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Flexy Подменю пользователя
сообщение 31.10.11, 9:51
Сообщение #5

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Цитата(alex040269 @ 31.10.11, 9:49) *
ну, наверное нужно запросом проверить есть нужная запись, если есть, то изменить, если нет то добавить, если заведомо нет, то сразу добавить....
как т о так.

Этот алгоритм уже есть в обработке.
Меня интересует именно кусок кода в котором на Программном уровне Для Текущего Товара Добавиться в Список Цен цена с типом Закупочная.

Kaliban Подменю пользователя
сообщение 31.10.11, 10:07
Сообщение #6

Говорящий
Иконка группы
Группа: Местный
Сообщений: 97
Спасибо сказали: 28 раз
Рейтинг: 0

как-то так:
             ЦеныТовара = СоздатьОбъект("Справочник.Цены"); 
    Если ПустоеЗначение(НаДату)=1 Тогда
        НаДату = РабочаяДата();
    КонецЕсли;
    ЦеныТовара.ИспользоватьДату(НаДату);
    ЦеныТовара.ИспользоватьВладельца(Тов.ТекущийЭлемент());
    КатегорииЦен = СоздатьОбъект("Справочник.КатегорииЦен");
    КатегорииЦен.ВыбратьЭлементы();
    Пока КатегорииЦен.ПолучитьЭлемент()=1 Цикл
        Если КатегорииЦен.ПометкаУдаления()=1 Тогда
            Продолжить;
        КонецЕсли;
        Если ЦеныТовара.НайтиПоРеквизиту("КатегорияЦены",КатегорииЦен.ТекущийЭлемент(),0)=0 Тогда
            ЦеныТовара.Новый();
        Иначе
            Если ЦеныТовара.ПометкаУдаления()=1 Тогда
                Если Вопрос("Цена "+ЦеныТовара.КатегорияЦены+ " помечена на удаление и не будет заполнена.
                            |Снять пометку удаления?","Да+Нет")="Да" Тогда
                    Попытка
                        ЦеныТовара.СнятьПометкуУдаления();
                    Исключение
                    Предупреждение(ОписаниеОшибки());
                        Возврат;
                    КонецПопытки;            
                КонецЕсли;
                Продолжить;
            КонецЕсли;
        КонецЕсли;  
        //опр валюту  
        ВалютаЦ=Тов.ВалютаУчета;
        ЦеныТовара.Наименование = КатегорииЦен.Наименование;
        ЦеныТовара.Единица = Тов.ЕдиницаПоУмолчанию;
        ЦеныТовара.КатегорияЦены = КатегорииЦен.ТекущийЭлемент();    
                           //ВычисленнаяЦена= тащите их экселя;
         ЦеныТовара.Цена = ВычисленнаяЦена;
        // Попытка
        ЦеныТовара.Записать();
                     // Исключение                                                                                                                  х
         //    глТрассировка(ОписаниеОшибки(),0);
         //    Возврат;
                  // КонецПопытки;
        
    КонецЦикла;

Спасибо сказали: Flexy,

alex040269 Подменю пользователя
сообщение 31.10.11, 10:10
Сообщение #7

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(Flexy @ 31.10.11, 10:51) *
Этот алгоритм уже есть в обработке.
Меня интересует именно кусок кода в котором на Программном уровне Для Текущего Товара Добавиться в Список Цен цена с типом Закупочная.


СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.ИспользоватьВладельца(Товар);
СпрЦены.ИспользоватьДату(Товар);
СпрЦены.Новый();
СпрЦены.<ИмяРеквизита> = Значение;
......
СпрЦены.Записать();
....


СпрЦены.ИспользоватьДату(Товар); точно не помню до новый() или после...


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Спасибо сказали: Flexy,

Flexy Подменю пользователя
сообщение 01.11.11, 15:03
Сообщение #8

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Цитата(Kaliban @ 31.10.11, 10:07) *
как-то так:
             ЦеныТовара = СоздатьОбъект("Справочник.Цены"); 
    Если ПустоеЗначение(НаДату)=1 Тогда
        НаДату = РабочаяДата();
    КонецЕсли;
    ЦеныТовара.ИспользоватьДату(НаДату);
    ЦеныТовара.ИспользоватьВладельца(Тов.ТекущийЭлемент());
    КатегорииЦен = СоздатьОбъект("Справочник.КатегорииЦен");
    КатегорииЦен.ВыбратьЭлементы();
    Пока КатегорииЦен.ПолучитьЭлемент()=1 Цикл
        Если КатегорииЦен.ПометкаУдаления()=1 Тогда
            Продолжить;
        КонецЕсли;
        Если ЦеныТовара.НайтиПоРеквизиту("КатегорияЦены",КатегорииЦен.ТекущийЭлемент(),0)=0 Тогда
            ЦеныТовара.Новый();
        Иначе
            Если ЦеныТовара.ПометкаУдаления()=1 Тогда
                Если Вопрос("Цена "+ЦеныТовара.КатегорияЦены+ " помечена на удаление и не будет заполнена.
                            |Снять пометку удаления?","Да+Нет")="Да" Тогда
                    Попытка
                        ЦеныТовара.СнятьПометкуУдаления();
                    Исключение
                    Предупреждение(ОписаниеОшибки());
                        Возврат;
                    КонецПопытки;            
                КонецЕсли;
                Продолжить;
            КонецЕсли;
        КонецЕсли;  
        //опр валюту  
        ВалютаЦ=Тов.ВалютаУчета;
        ЦеныТовара.Наименование = КатегорииЦен.Наименование;
        ЦеныТовара.Единица = Тов.ЕдиницаПоУмолчанию;
        ЦеныТовара.КатегорияЦены = КатегорииЦен.ТекущийЭлемент();    
                           //ВычисленнаяЦена= тащите их экселя;
         ЦеныТовара.Цена = ВычисленнаяЦена;
        // Попытка
        ЦеныТовара.Записать();
                     // Исключение                                                                                                                  х
         //    глТрассировка(ОписаниеОшибки(),0);
         //    Возврат;
                  // КонецПопытки;
        
    КонецЦикла;

Вот это вроде бы работает, но как-то коряво.
1.Оно добавляет каждый раз для товара все категории , которые есть в Справочнике Категорий.
Вопрос: Как выбрать только 2 нужные категории?
2.Надо как-то прикрутить проверку Категорий.
Т.е. Если у товара уже есть эти 2 категории, то нужно всего лишь изменить в них цену, как для одной так и для другой.
А если их нет, то нужно добавить их и установить уже вычисленную цену.

Выручайте Товарищи.А то что-то башка не варит совсем 64000000.gif

Flexy Подменю пользователя
сообщение 01.11.11, 18:03
Сообщение #9

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

В общем как добавлять только одну категорию разобрался. Вот код.Может кому пригодиться.
Но остается вопрос как выбрать именно две нужные категории?Может через список значений отфильтровать?Возможен такой вариант?
Процедура Выполнить()  
    
    спрЦены = СоздатьОбъект("Справочник.Цены");
    спрКатегорииЦен = СоздатьОбъект("Справочник.КатегорииЦен");
    спрЦены.ИспользоватьДату(РабочаяДата());
        спрЦены.ИспользоватьВладельца(Товар);
    СпрКатегорииЦен.НайтиПоНаименованию("Розничная");
    
    Если спрЦены.НайтиПоРеквизиту("КатегорияЦены",спрКатегорииЦен.ТекущийЭлемент(),0)=0 Тогда
        флаг =0;    
           Сообщить("Возможно товар "+ Товар.Наименование+" " + "новый и пока не имеет Цены.Создаю Категорию и Цену Товара");
        спрЦены.Новый();
        Иначе
            Сообщить("Категория цены для товара "+ " "+Товар.Наименование+ "уже установлена.Меняю цену");
            Если спрЦены.ПометкаУдаления()=1 Тогда
                Если Вопрос("Цена "+спрЦены.КатегорияЦены+ " помечена на удаление и не будет заполнена.
                            |Снять пометку удаления?","Да+Нет")="Да" Тогда
                    Попытка
                        спрЦены.СнятьПометкуУдаления();
                    Исключение
                    Предупреждение(ОписаниеОшибки());
                        Возврат;
                    КонецПопытки;            
                КонецЕсли;
                КонецЕсли;
        КонецЕсли;  
        Если Флаг=0 Тогда
        спрЦены.Валюта = Товар.ВалютаУчета;
        спрЦены.Наименование = спрКатегорииЦен.Наименование;
        спрЦены.Единица = Товар.ЕдиницаПоУмолчанию;
        спрЦены.КатегорияЦены = спрКатегорииЦен.ТекущийЭлемент();
        спрЦены.Цена = Цен;//ВычисленнаяЦена;
        Иначе
        спрЦены.Цена = Цен;//ВычисленнаяЦена;
        КонецЕсли;
        спрЦены.Записать();
         КонецПроцедуры


Сообщение отредактировал Flexy - 01.11.11, 18:08

Kaliban Подменю пользователя
сообщение 02.11.11, 10:33
Сообщение #10

Говорящий
Иконка группы
Группа: Местный
Сообщений: 97
Спасибо сказали: 28 раз
Рейтинг: 0

Ну если имена категорий жестко заданы и не будут изменяться никогда - будьте как все, хардкодьте.
Пример быдлокода:
...
Пока КатегорииЦен.ПолучитьЭлемент()=1 Цикл
если (категорияЦен.Наименование="Закупочная")или(категорияЦен.Наименование="Розничная") тогда
...
иначе
продолжить;
конецЕсли
...

если нужно произвольное количество произвольных категорий,
влепите на форму обработки список или тз, и вместо цикла по всем категориям выбирайте из списка или тз.
Делов то.

Спасибо сказали: Flexy,

Flexy Подменю пользователя
сообщение 04.11.11, 11:10
Сообщение #11

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Вот еще вопросик возник.Решил не создавать новую темку т.к. касается этой.
Как спозиционироваться на новом Товаре? т.е делаю
Товар.Новый();
Товар.Наименование=НаименованиеТовара;
Товар.ПолнНаименование=НаименованиеТовара;
...
Товар.Записать()

Единицы = СоздатьОбъект("Справочник.Единицы");
Единицы.ИспользоватьВладельца(Товар.ТекущийЭлемент());
Единицы.ШтрихКод = Товар.ШтрихКод;

Но выдает ошибку:
Единицы.ШтрихКод = Товар.ШтрихКод;
Не выбран элемент!

Сообщение отредактировал Flexy - 04.11.11, 11:13

Zaval Подменю пользователя
сообщение 04.11.11, 11:18
Сообщение #12

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Попробуйте без "ТекущийЭлемент()". Когда он лишний - позиционирование сбивается.
Если не поможет - сохраните Товар в переменной перед "Записать()"

Flexy Подменю пользователя
сообщение 04.11.11, 11:22
Сообщение #13

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Цитата(Zaval @ 04.11.11, 11:18) *
Попробуйте без "ТекущийЭлемент()".
Если не поможет - сохраните его в переменной перед "Зпаписать()"

Пробовал.
Делал так:
ТекТовар = Товар.ТекущийЭлемент();
ТекТовар.Записать();
                      
Единицы = СоздатьОбъект("Справочник.Единицы");
Единицы.ИспользоватьВладельца(ТекТовар);
Сообщить(ТекТовар);
Единицы.ШтрихКод = ТекТовар.ШтрихКод;

Та же ошибка.ШК записывается.Но Цикл выпадает с этой ошибкой на первом товаре и дальше не идет.

Сообщение отредактировал Flexy - 04.11.11, 11:23

Zaval Подменю пользователя
сообщение 04.11.11, 11:27
Сообщение #14

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

ТекТовар - объявлена в Процедуре?
Что-то было с позиционированием при "Записать()", уже подробностей не помню(
Повозитесь с Отладчиком.

Спасибо сказали: Flexy,

nysysimara Подменю пользователя
сообщение 04.11.11, 11:37
Сообщение #15

Оратор
Иконка группы
Группа: Местный
Сообщений: 312
Из: Бердянск
Спасибо сказали: 110 раз
Рейтинг: 0

Цитата(Flexy @ 04.11.11, 12:22) *
Пробовал.
Делал так:
ТекТовар = Товар.ТекущийЭлемент();
ТекТовар.Записать();
                      
Единицы = СоздатьОбъект("Справочник.Единицы");
Единицы.ИспользоватьВладельца(ТекТовар);
Сообщить(ТекТовар);
Единицы.ШтрихКод = ТекТовар.ШтрихКод;

Та же ошибка.ШК записывается.Но Цикл выпадает с этой ошибкой на первом товаре и дальше не идет.


а если так:

Единицы = СоздатьОбъект("Справочник.Единицы");
Единицы.ИспользоватьВладельца(ТекТовар);
Единицы.ВыбратьЭлементы();
Если Единицы.ПолучитьЭлемент()=1 Тогда
      Единицы.ШтрихКод = ТекТовар.ШтрихКод;


а вообще, если
Цитата
Товар.Новый();

у него же нет еще елементо подчиненного справочника

Во-первых, у Вас очепятка не
Цитата
ТекТовар.Записать();

а Товар.Записать();

и если он новый
    
        Единицы.Новый();
        Единицы.Владелец = ТекТовар;
        Единицы.ШтрихКод = ТекТовар.ШтрихКод;
        Единицы.Записать();


Signature
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП)
1С Предприятие 8.3: Бух.предприятия 3.0 + самописка
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кроме высшего образования, нужно иметь хотя бы среднее соображение

Flexy Подменю пользователя
сообщение 04.11.11, 11:53
Сообщение #16

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Хм.Если не создавать объект Единицы.То в карточку товара Заноситься ШК, но на вкладке Единциы, Единицы Товара не Имеет ШК.Только когда я интерактивно
нажимаю Записать, то сразу же в единицу устанавливается ШК.
Не пойму ни фига


Цитата(nysysimara @ 04.11.11, 11:37) *
и если он новый
    
        Единицы.Новый();
        Единицы.Владелец = ТекТовар;
        Единицы.ШтрихКод = ТекТовар.ШтрихКод;
        Единицы.Записать();

Таким макаром записывается просто ШК.Без Коефициента и Штук.
Надо как-то спозиционироваться на текущем элементе Цены.Шт и Коэф по идее там уже автоматом проставляются, а вот ШК надо туда дописать.

nysysimara Подменю пользователя
сообщение 04.11.11, 12:03
Сообщение #17

Оратор
Иконка группы
Группа: Местный
Сообщений: 312
Из: Бердянск
Спасибо сказали: 110 раз
Рейтинг: 0

Товар.Новый();
Товар.Наименование=НаименованиеТовара;
Товар.ПолнНаименование=НаименованиеТовара;
...
ТекТовар = Товар.ТекущийЭлемент();
Товар.Записать();

Единицы = СоздатьОбъект("Справочник.Единицы");
Единицы.Новый();
Единицы.Владелец = ТекТовар;
Единицы.ШтрихКод = ТекТовар.ШтрихКод;
Единицы.Записать();


Я правильно понимаю:
1)создаем новый элемент Товар
2) создаем подчиненный ему элемент справочника "Единицы" ??


Signature
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП)
1С Предприятие 8.3: Бух.предприятия 3.0 + самописка
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кроме высшего образования, нужно иметь хотя бы среднее соображение

Flexy Подменю пользователя
сообщение 04.11.11, 12:10
Сообщение #18

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

1.Создаем Новый товар.
2.Записываем в реквизит Товара ШтрихКод.
3.Записываем Товар.
4.В единицах Товара Видим Только Единица = шт. Коефициент = 1 ШтрихКода = Нет.
5.Жму Записать Интерактивно в Карточке Товара.И тогда только в Единицы подтягивается ШК с Реквизита Справочника товара "ШтрихКод".

nysysimara Подменю пользователя
сообщение 04.11.11, 12:36
Сообщение #19

Оратор
Иконка группы
Группа: Местный
Сообщений: 312
Из: Бердянск
Спасибо сказали: 110 раз
Рейтинг: 0

Товар.Новый();
...
ТекТовар = Товар.ТекущийЭлемент();
Товар.Записать();

Единицы = СоздатьОбъект("Справочник.Единицы");
Единицы.ИспользоватьВладельца(ТекТовар);
Единицы.ВыбратьЭлементы();
Если Единицы.ПолучитьЭлемент()=1 Тогда
      Единицы.ШтрихКод = ТекТовар.ШтрихКод;
      Единицы.Записать();
Иначе
      Сообщить("нет элемента спр.Единицы");
КонецЕсли;


Если выдаст сообщение, тогда заменить код на
Единицы = СоздатьОбъект("Справочник.Единицы");
Единицы.Новый();
Единицы.Владелец = ТекТовар;
...
Заполнить необходимые реквизиты
...
Единицы.ШтрихКод = ТекТовар.ШтрихКод;
Единицы.Записать();


Signature
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП)
1С Предприятие 8.3: Бух.предприятия 3.0 + самописка
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кроме высшего образования, нужно иметь хотя бы среднее соображение

Flexy Подменю пользователя
сообщение 04.11.11, 12:37
Сообщение #20

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Цитата(nysysimara @ 04.11.11, 12:25) *
Товар.Новый();
...
ТекТовар = Товар.ТекущийЭлемент();
Товар.Записать();

Единицы = СоздатьОбъект("Справочник.Единицы");
Единицы.ИспользоватьВладельца(ТекТовар);
Единицы.ВыбратьЭлементы();
Если Единицы.ПолучитьЭлемент()=1 Тогда
      Единицы.ШтрихКод = ТекТовар.ШтрихКод;
      Единицы.Записать();
Иначе
      Сообщить("нет элемента спр.Единицы");
КонецЕсли;


нет элемента спр.Единицы huh.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 18.04.24, 22:03
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!