[РЕШЕНО] Как программно заполнить Базовую и Основную единицу в Торговля и склад 9.0

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Vitaly, 23 сен 2014.

  1. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Прошу помочь.
    Есть справочник Номенклатура:
    upload_2014-9-23_14-55-56.png
    Открываю в конфигураторе форму элемента номенклатуры там реквизит базовая (на форме) называется РекБазоваяЕдиница (тип Справочник.ОКЕИ). Смотрю реквизиты справочника номенклатура: там нет такого реквизита а есть БазоваяЕдиница, но у него уже тип Справочник.единицы. Как их связать? Это совсем разные справочочники.
    Просьба помочь.
    Еще раз большое спасибо.
    --- Объединение сообщений, 23 сен 2014 ---
    Последнее редактирование: 23 сен 2014
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Смотрите объект Справочник.Единицы. Один из его реквизитов (ОКЕИ) - справочник типа ОКЕИ.
    По внешнему виду у вас ТиС но явно переписанная.. Лучше выложите МДшник... Чувствую это не последний ваш вопрос...
    Vitaly нравится это.
  3. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    скачивание недоступно
    Vitaly нравится это.
  5. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    скачал...
    Смотрите ЗаписатьБазовуюЕдиницу() модуля формы. Там ответ на ваш вопрос... Впрочем, я его озвучил выше
    Vitaly нравится это.
  7. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Получился вот такой код:
    Код:
    РеквБазоваяЕдиница=СоздатьОбъект("Справочник.ОКЕИ");
                    СпрЕдиницы = СоздатьОбъект("Справочник.Единицы");
                    Если СокрЛП(Лист.Cells(Элемент,12).Value)="шт" Тогда
                        Если РеквБазоваяЕдиница.НайтиПоКоду("796")=1 Тогда
                            СпрЕдиницы.ОКЕИ=РеквБазоваяЕдиница.ТекущийЭлемент();
                            СпрЕдиницы.Коэффициент=1;
                            Спр.БазоваяЕдиница=СпрЕдиницы;
                        КонецЕсли;
                    КонецЕсли;
    Почему мне выдает ошибку:
    СпрЕдиницы.ОКЕИ=РеквБазоваяЕдиница.ТекущийЭлемент();
    Не выбран элемент!
  8. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    а так?
    Последнее редактирование: 24 сен 2014
    Vitaly нравится это.
  9. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
  10. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    да сходу черканул код, да не тот
    --- Объединение сообщений, 24 сен 2014 ---
    но поиск то даёт результат
    Код:
            Сообщить(РеквБазоваяЕдиница.ТекущийЭлемент());   
            СпрЕдиницы.ОКЕИ=РеквБазоваяЕдиница.ТекущийЭлемент();
    
    сообщает
    Vitaly нравится это.
  11. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Я читал что проблема в том что все из-за РеквБазоваяЕдиница.ТекущийЭлемент() - у меня это объект и его нельзя к реквизиту приравнивать. Но так и не разобрался как нужно.
  12. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    погоди, там же "Справочник.Единицы" подчинён Номенклатуре
    --- Объединение сообщений, 24 сен 2014 ---
    не хватает привязки к владельцу
    2 и 3 строки
    там у вас в модуле справочника Номенклатура есть такой код
    Код:
            Если ПустоеЗначение(БазоваяЕдиница) = 1 Тогда
                   СпрЕдиницы.ИспользоватьВладельца(ТекущийЭлемент());
                   СпрЕдиницы.Новый();
            Иначе
                СпрЕдиницы.НайтиЭлемент(БазоваяЕдиница);
            КонецЕсли;
               
           
            СпрЕдиницы.Наименование = РеквБазоваяЕдиница.Наименование;
            СпрЕдиницы.Вес            = РеквВесБазовой;
            СпрЕдиницы.Коэффициент    = 1;
            СпрЕдиницы.ОКЕИ            = РеквБазоваяЕдиница;
            СпрЕдиницы.ШтрихКод        = РеквШтрихкодБазовой;
    
    Последнее редактирование: 24 сен 2014
    Vitaly нравится это.
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    В данном случае нужно так
    Код:
    РеквБазоваяЕдиница=СоздатьОбъект("Справочник.ОКЕИ");
                    СпрЕдиницы = СоздатьОбъект("Справочник.Единицы");
                    Если СокрЛП(Лист.Cells(Элемент,12).Value)="шт" Тогда
                        Если РеквБазоваяЕдиница.НайтиПоКоду("796")=1 Тогда
                            СпрЕдиницы.ОКЕИ=РеквБазоваяЕдиница.ТекущийЭлемент();
                            СпрЕдиницы.Коэффициент=1;
                            СпрЕдиницы.Владелец=Спр.ТекущийЭлемент();
                            СпрЕдиницы.Записать();
                            Спр.БазоваяЕдиница=СпрЕдиницы.ТекущийЭлемент();
                            Спр.Записать() ;
                        иначе
                            Сообщить("Не нашли по коду 796");  
                        КонецЕсли;
                    КонецЕсли;
    Vitaly нравится это.
  14. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Все равно ошибка:
    СпрЕдиницы.ОКЕИ=РеквБазоваяЕдиница.ТекущийЭлемент();
    Не выбран элемент!
    --- Объединение сообщений, 24 сен 2014 ---
    А почему мы Новый() не используем?
    Но тогда ошибка:
    прЕдиницы.Владелец=Спр.ТекущийЭлемент();
    Неверное значение!
    Последнее редактирование: 24 сен 2014
  15. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    так, ТС, давайте код ваш чуть больше, там где ещё сама номенклатура
    --- Объединение сообщений, 24 сен 2014 ---
    и кстати, в редакции 9.2 в обоих реквизитах идёт ссылка на "Справочник.ОКЕИ"
    Последнее редактирование: 24 сен 2014
    Vitaly нравится это.
  16. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Все, я разобрался, нашел ошибку. Работающий код в итоге:
    Код:
    Спр.Записать();   
                        ОКЕИ=СоздатьОбъект("Справочник.ОКЕИ");
                        СпрЕдиницы=СоздатьОбъект("Справочник.Единицы");
                        СпрЕдиницы.Новый();
                        Если СокрЛП(Лист.Cells(Элемент,12).Value)="шт" Тогда
                            КодОКЕИ="796";
                        ИначеЕсли СокрЛП(Лист.Cells(Элемент,12).Value)="кг" Тогда
                            КодОКЕИ="166";
                        ИначеЕсли СокрЛП(Лист.Cells(Элемент,12).Value)="комп." Тогда
                            КодОКЕИ="003";
                        ИначеЕсли СокрЛП(Лист.Cells(Элемент,12).Value)="к-т" Тогда
                            КодОКЕИ="003";
                        ИначеЕсли СокрЛП(Лист.Cells(Элемент,12).Value)="м" Тогда
                            КодОКЕИ="006";
                        ИначеЕсли СокрЛП(Лист.Cells(Элемент,12).Value)="п.м." Тогда
                            КодОКЕИ="106";
                        ИначеЕсли СокрЛП(Лист.Cells(Элемент,12).Value)="пар" Тогда
                            КодОКЕИ="103";
                        ИначеЕсли СокрЛП(Лист.Cells(Элемент,12).Value)="ящ" Тогда
                            КодОКЕИ="812";
                        КонецЕсли;
                        Если ОКЕИ.НайтиПоКоду(КодОКЕИ)=1 Тогда   
                            СпрЕдиницы.ОКЕИ=ОКЕИ.ТекущийЭлемент(); 
                        КонецЕсли;
                        СпрЕдиницы.Коэффициент=1;
                        СпрЕдиницы.Владелец=Спр;
                        СпрЕдиницы.Записать(); 
                        Спр.БазоваяЕдиница=СпрЕдиницы.ТекущийЭлемент();
                        Спр.ОсновнаяЕдиница=СпрЕдиницы.ТекущийЭлемент(); 
                        Спр.Записать();
    Большое при большое спасибо, сам бы не разобрался.
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Не за что... обращайтесь..
    З/Ы я бы еще добавил
    Код:
                        
    ИначеЕсли СокрЛП(Лист.Cells(Элемент,12).Value)="пар" Тогда
                     КодОКЕИ="103";
    ИначеЕсли СокрЛП(Лист.Cells(Элемент,12).Value)="ящ" Тогда
                 КодОКЕИ="812";
    ИНАЧЕ
    Сообщить("Неизвестная единица "+КодОКЕИ);
    КонецЕсли;
    
  18. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    и лучше в файл экселя выгружать с кодами ОКЕИ сразу
    а тут просто по коду искать
  19. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    если они (кода) там есть.....
  20. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    ну тут уже варианты
    хотя даже в эксле их можно добавить без особых проблем

    основная проблема в точности написания имён по классификатору

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