Имя: Пароль:
1C
1С v8
УТ 11, перенос справочника цен из 7.7 в 8,3 ут
,
0 lite700
 
11.05.15
11:23
Фрагмент кода в ут 11, который переносит цены из 1с 7,7
в 8,3  почемуто не работает метод цена.ИспользоватьВладельца(спр.ТекущийЭлемент()); при отладке пишет метод объекта не обнаружен
хоты метод ВыбратьЭлементы() работает
v7 это ком объект
директива на сервере



Сообщить("Добавление Элементов");
спр = v7.CreateObject("Справочник.Номенклатура");
тип=  v7.CreateObject("Справочник.ТипыЦен");
тип.НайтиПокоду("00003") ; //А
типа=Тип.ТекущийЭлемент() ;
цена=  v7.CreateObject("Справочник.Цены");
    
вид=Справочники.ВидыЦен.НайтиПоНаименованию("А").Ссылка ;
спр.ВыбратьЭлементы() ;
Пока спр.ПолучитьЭлемент()=1 Цикл
        спр2=справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(спр.Код));
Если спр2<>Справочники.Номенклатура.ПустаяСсылка() Тогда // нашли  спр2 и спр
              цена.ИспользоватьВладельца(спр.ТекущийЭлемент());
цена.ВыбратьЭлементы();
1 Рэйв
 
11.05.15
11:28
проверь
вид=Справочники.ВидыЦен.НайтиПоНаименованию("А").Ссылка ;
чтото мне кажется тип= неопределено
2 lite700
 
11.05.15
11:32
вид нормально находит , проверил
3 lite700
 
11.05.15
11:33
Непонятно почему некоторые методы V7 работают а некоторые нет ?
4 lite700
 
11.05.15
11:34
Также не работает Метод НайтиПоКоду
5 Бубка Гоп
 
11.05.15
11:37
(0) выгрузить из 7.7 в файлик и загрузить в 8.3 не предлагать?
6 lite700
 
11.05.15
11:39
можно конечно попробовать ! Гораздо сложнее только, хотя я так целые документы переносил, в обычном режиме , а не в режиме управляемого приложения , может кто сталкивался ?
7 Бубка Гоп
 
11.05.15
11:41
(6) выгрузить цены в файлик сложнее, чем подключиться из 83 в 77 по COM и пытаться оттуда использовать методы 77? не соглашусь, одноко
8 lite700
 
11.05.15
11:44
ты предлагаешь через текстовые файлы ?
9 Бубка Гоп
 
11.05.15
11:45
(8) xml
10 lite700
 
11.05.15
11:45
как разделяешь данные там ? каким нить спец символом ?
11 lite700
 
11.05.15
11:47
Может кто то сталкивался все таки ? через файл писать обработку с двух сторон придется
12 PRO100 NigGaZ
 
11.05.15
12:47
Для 1С8 заполнение из таблицы

&НаСервере
Процедура ЗаполнитьДокументыВводаЦенНаСервере()
    Даты = ТаблицаЦен.Выгрузить(,"Дата");
    Даты.Свернуть("Дата");
    ТаблицаВидовЦен = ТаблицаЦен.Выгрузить(,"ВидЦены");
    ТаблицаВидовЦен.Свернуть("ВидЦены");
    Для Каждого СтрокаДаты Из Даты Цикл
        
    НовыйДокументВводаЦен = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    НовыйДокументВводаЦен.Дата            = СтрокаДаты.Дата; //
    НовыйДокументВводаЦен.Ответственный     =ПараметрыСеанса.ТекущийПользователь; // СправочникСсылка.Пользователи
    НовыйДокументВводаЦен.Комментарий       = "Документ введен автоматически при переносе данных"; // Строка
    НовыйДокументВводаЦен.Согласован        = Истина; // Булево
    //НовыйДокументВводаЦен.ДокументОснование = ; // ДокументСсылка.ПоступлениеТоваровУслуг, ДокументСсылка.ЗаказПоставщику, ДокументСсылка.СборкаТоваров, ДокументСсылка.ПрочееОприходованиеТоваров, ДокументСсылка.ИзменениеАссортимента, ДокументСсылка.ПорчаТоваров
    НовыйДокументВводаЦен.Статус            = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован; // ПеречислениеСсылка.СтатусыУстановокЦенНоменклатуры
    Для Каждого СтрокаТаблицыЦен Из ТаблицаЦен Цикл
        НовыйДокументВводаЦенСтрока = НовыйДокументВводаЦен.Товары.Добавить();
        НовыйДокументВводаЦенСтрока.Номенклатура        = СтрокаТаблицыЦен.Номенклатура; // СправочникСсылка.Номенклатура
    //    НовыйДокументВводаЦенСтрока.Характеристика      = ; // СправочникСсылка.ХарактеристикиНоменклатуры
        //НовыйДокументВводаЦенСтрока.Упаковка            = ; // СправочникСсылка.УпаковкиНоменклатуры
        НовыйДокументВводаЦенСтрока.ВидЦены             = СтрокаТаблицыЦен.ВидЦены; // СправочникСсылка.ВидыЦен
        НовыйДокументВводаЦенСтрока.Цена                = СтрокаТаблицыЦен.Цена; // Число
        НовыйДокументВводаЦенСтрока.ЦенаИзмененаВручную = Истина; // Булево
    КонецЦикла;
    НовыйДокументВводаЦен.ВидыЦен.Загрузить(ТаблицаВидовЦен);
    НовыйДокументВводаЦен.Записать();
    КонецЦикла;
КонецПроцедуры


для 7.7 создание файла, за пару минут переделаешь под ole
Процедура ВыгрузитьЦены()
    
    Файл = СоздатьОбъект("Текст");
        ТЗ = СоздатьОбъект("ТаблицаЗначений");
        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса = "
        |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
        |Группировка Номенклатура;";
        Запрос.Выполнить(ТекстЗапроса);
        Запрос.Выгрузить(ТЗ);
        КоличествоЭлементов = ТЗ.КоличествоСтрок();
        Номенклатура = СоздатьОбъект("Справочник.Номенклатура");
        Номенклатура.ВыбратьЭлементы();
        ЦеныНоменклатуры = СоздатьОбъект("Справочник.Цены");
        а = 0;
        Пока Номенклатура.ПолучитьЭлемент() = 1 Цикл
            а = а + 1;
            Если КоличествоЭлементов > 0 Тогда
                Зн = Цел(а/КоличествоЭлементов*100);
            КонецЕсли;
            Состояние(СтрЗаменить("%1%", "%1", Зн));
            Если Номенклатура.ПометкаУдаления() = 1 Тогда
                Продолжить;
            КонецЕсли;
            Если Номенклатура.ЭтоГруппа() = 1 Тогда
                Продолжить;
            КонецЕсли;
            ЦеныНоменклатуры.ИспользоватьВладельца(Номенклатура.ТекущийЭлемент());
            ЦеныНоменклатуры.ВыбратьЭлементы();
            Пока ЦеныНоменклатуры.ПолучитьЭлемент() = 1 Цикл
                Если (СокрЛП(ЦеныНоменклатуры.ТипЦен) = "До 50")  ИЛИ (СокрЛП(ЦеныНоменклатуры.ТипЦен) = "Закупочные") Тогда
                    Если СокрЛП(ЦеныНоменклатуры.ТипЦен) = "Закупочные" Тогда
                        ТипЦен = "Закупочная";
                    ИначеЕсли СокрЛП(ЦеныНоменклатуры.ТипЦен) = "До 50" Тогда
                        ТипЦен = "Прайс-лист";
                    КонецЕсли;
                    Стр = "";
                    Цена = ЦеныНоменклатуры.Цена.Получить(НачДата);
                    Если Цена > 0 Тогда
                        ДобавитьКСтрокеСРазделителем(Стр, "Дата;" + Формат(НачДата, "Д ГГГГММДД") + ";");
                        УКодН = СокрЛП(Номенклатура.УКодН);
                        Если ПустоеЗначение(УкодН) = 1 Тогда
                            Сообщить("ВНИМАНИЕ " + Номенклатура);
                        КонецЕсли;
                        ДобавитьКСтрокеСРазделителем(Стр, "Номенклатура;" + УКодН + ";");
                        ДобавитьКСтрокеСРазделителем(Стр, "ВидЦены;" + ТипЦен + ";");
                        ДобавитьКСтрокеСРазделителем(Стр, "Цена;" + Цена + ";");
                        Файл.ДобавитьСтроку(Стр);                    
                    КонецЕсли;                    
                    СтараяЦена = Цена;
                    Цена = СоздатьОбъект("Периодический");
                    Цена.ИспользоватьОбъект("Цена", ЦеныНоменклатуры.ТекущийЭлемент());
                    Цена.ВыбратьЗначения(НачДата, КонДата);
                    Пока Цена.ПолучитьЗначение() = 1 Цикл
                        НоваяЦена = Цена.Значение;
                        Если СтараяЦена = НоваяЦена Тогда
                            Продолжить;
                        КонецЕсли;
                        Стр = "";
                    ДобавитьКСтрокеСРазделителем(Стр, "Дата;" + Формат(Цена.ДатаЗнач, "Д ГГГГММДД") + ";");
                        УКодН = СокрЛП(Номенклатура.УКодН);
                        ДобавитьКСтрокеСРазделителем(Стр, "Номенклатура;" + УКодН + ";");
                        ДобавитьКСтрокеСРазделителем(Стр, "ВидЦены;" + ТипЦен + ";");
                        ДобавитьКСтрокеСРазделителем(Стр, "Цена;" + НоваяЦена + ";");
                        Файл.ДобавитьСтроку(Стр);
                        СтараяЦена = НоваяЦена;
                    КонецЦикла;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        Файл.Записать("C:\НоменклатураЦены.txt");
    КонецПроцедуры // ВыгрузитьЦены
13 Maniac
 
11.05.15
12:50
СОхрани из 77 в эксель отчет прайс-лист
Загрузки в восьмерке его обработкой
14 lite700
 
11.05.15
14:20
ок
15 lite700
 
11.05.15
14:41
самое легкое наверно дйствительно прайс в иксекль и загрузить из икселы
16 НП
 
11.05.15
18:17
(0) Всё Вы правильно делаете, в принципе. И всё должно работать и с управляемым приложением. Тем более, что внешнему соединению формы безразличны. Проверьте метод, которым Вы коннектитесь. Там две возможности есть. Обе попробуйте. Часто в ОС comcntr.dll не зарегистрировано или что-тов этом роде.
Код для обращения к подчинённому справочнику правильный.
Иногда полезно обе базы перенести на другой компьютер, если размер позволяет.
17 Maniac
 
11.05.15
18:25
(15) естественно! тем более разовая работа!
18 Maniac
 
11.05.15
18:26
Да и в прочем постоянно нужно будет из экселя теперь загружать прайсы, всякие документы и прочие вещи. тоесть регулярно.

А писать разовую обработку перегрузки цен по ОЛЕ - этовсе равно что дом строить в котором жильцы 1 день проживут
19 НП
 
11.05.15
18:28
(18) От 15 минут до часа занимает. Зачем тогда нужно программирование, если такие задачи делать сложно?
20 НП
 
11.05.15
18:30
(18) Но иногда есть смысл через файлы пересылать. Если базы в разных локальных сетях, например. В этом случае сейчас принzто пользоваться XML, а вовсе не устаревшим Excel.
21 lite700
 
14.05.15
13:59
В итого загрузил с икселя, а в 7,7 сформировал прайс лист
и сохранил его в иксель, токо вопрос , у кого нить работал метод ИспользоватьРодителя при подключении через оле, хотя другиет методы как выбрать элементы и Получить Элемент работают .С xML не пробовал программировать , токо дбф и иксель
22 lite700
 
14.05.15
13:59
клиент доволен
23 Torquader
 
14.05.15
14:13
(21) ИспользоватьРодителя будет работать, если ему правильно родителя передать.
Просто, с учётом того, что семёрка работает через RPC-вызовы, подключаться нужно из семёрки в восьмёрку.
Независимо от того, куда вы едете — это в гору и против ветра!