Имя: Пароль:
1C
 
1с и OLE подлючение
, ,
0 men47
 
02.03.17
09:49
Нужна помощь, не могу понять в чем проблема.

Имеется несколько баз БП 2.0 (скажем 3 базы, причем 3-тья была создана недавно) и обработка, которая обрабатывает некоторое количество данных и создает документы через OLE в других базах.

само подключение обычное, т.е.:

ОЛЕБаза = Новый COMОбъект("V83.Application");
    Попытка
        //Параметры = "File=""C:\1CBase""";Usr=""login"";Pwd=""password"";";
        Подключение = ОЛЕБаза.Connect("File=""" + ПараметрыПодключения.ПутьКБазе +""";Usr="""+ ПользовательБазы + """;Pwd="""+ Пароль +""";");
        
    Исключение
        Сообщить("Проблемы с подключением!");
        Сообщить(ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;

ПользовательБазы во всех базах с Полными правами

далее после подключения происходит создание документов реализации.
И вот тут я столкнулся с ошибкой. При первом подключении к одной базе все отлично отрабатывает, создается документ, заполняется, записывается. А вот в "новой" базе, при очистки таблицы "Товары" либо при создании в данной таблице строки пишет следующее:

Метод объекта не обнаружен (Добавить)
            НоваяСтрока = НовыйДокумент.Товары.Добавить();


как я понимаю я что-то не учел в новой базе, т.е. код рабочий т.к. все отлично создается в других базах, а вот в новой не могу понять чего не хватает, хотя права полные у данного пользователя
1 Альбатрос
 
02.03.17
09:51
Выложи весь код создания
2 Маркусс
 
02.03.17
09:52
сам вручную добавь строку - наверняка косяк вылезет.
3 men47
 
02.03.17
09:54
ОЛЕДокументы         = ОЛЕБаза.Документы.РеализацияТоваровУслуг;
    ОЛЕСклады            = ОЛЕБаза.Справочники.Склады;
    ОЛЕКонтрагенты        = ОЛЕБаза.Справочники.Контрагенты;
    ОЛЕВидыОпераций        = ОЛЕБаза.Перечисления.ВидыОперацийРеализацияТоваров;
    ОЛЕВалюта            = ОЛЕБаза.Константы.ВалютаРегламентированногоУчета;
    ОЛЕТипыЦен            = ОЛЕБаза.Справочники.ТипыЦенНоменклатуры;
    ОЛЕНоменклатура        = ОЛЕБаза.Справочники.Номенклатура;
    ОЛЕСтавкаНДС        = ОЛЕБаза.Перечисления.СтавкиНДС;
    ОЛЕСчетУчета        = ОЛЕБаза.ПланыСчетов.Хозрасчетный.ТоварыНаСкладах;
    ОЛЕСпособыЗачетаАвансов = ОЛЕБаза.Перечисления.СпособыЗачетаАвансов;
    ОЛЕСчетРасчетов        = ОЛЕБаза.ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
    ОЛЕСчетАвансов        = ОЛЕБаза.ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным;
    Пользователь        = ОЛЕБаза.глЗначениеПеременной("глТекущийПользователь");
    
    Контрагент        = ОЛЕКонтрагенты.НайтиПоКоду (ПараметрыСоздания.КодКонтрагента);
    Склад            = ОЛЕСклады.НайтиПоНаименованию("Основной склад");
    ВидыОпераций    = ОЛЕВидыОпераций.ПродажаКомиссия;
    Валюта            = ОЛЕВалюта.Получить();
    ТипЦены            = ОЛЕТипыЦен.НайтиПоНаименованию("Основная цена продажи");
    СтавкаНДСБезНДС = ОЛЕСтавкаНДС.БезНДС;
    Организация     = ОЛЕБаза.глЗначениеПеременной ("ОсновнаяОрганизация");
    ТекстСообщения        = "В базе " + Организация.Наименование + " %действие% док-т РТУ номер %номердок%";    
    
    Если УИДОбъекта = Неопределено ИЛИ Строка(УИДОбъекта) = "00000000-0000-0000-0000-000000000000" Тогда        
        НовыйДокумент = ОЛЕДокументы.СоздатьДокумент();
        НовыйДокумент.Дата =  ДатаНачала;//ТекущаяДата();
        Текстсообщения = СтрЗаменить(ТекстСообщения, "%действие%", "создан");
        
    Иначе
        ОЛЕСсылкаНаДокумент = ОЛЕ_ПолучитьСсылкуПоУИД(ОЛЕБаза, УИДОбъекта, "РеализацияТоваровУслуг");
        Попытка
        НовыйДокумент = ОЛЕСсылкаНаДокумент.ПолучитьОбъект();
    Исключение
            НовыйДокумент = ОЛЕДокументы.СоздатьДокумент();
        НовыйДокумент.Дата =  ДатаНачала;//ТекущаяДата();
        Текстсообщения = СтрЗаменить(ТекстСообщения, "%действие%", "создан");
    
    КонецПопытки;
        Если НовыйДокумент = Неопределено И ТЗ.Количество() > 0 Тогда
            НовыйДокумент = ОЛЕДокументы.СоздатьДокумент();
            НовыйДокумент.Дата = ДатаНачала;//ТекущаяДата();
            Текстсообщения = СтрЗаменить(ТекстСообщения, "%действие%", "создан");
            Текстсообщения = СтрЗаменить(ТекстСообщения, "%номердок%", НовыйДокумент.Номер);
            
        КонецЕсли;
        Текстсообщения = СтрЗаменить(ТекстСообщения, "%действие%", "обновлен");
        Текстсообщения = СтрЗаменить(ТекстСообщения, "%номердок%", НовыйДокумент.Номер);

НовыйДокумент.СчетУчетаРасчетовПоАвансам = ОЛЕСчетАвансов;
    НовыйДокумент.СчетУчетаРасчетовСКонтрагентом = ОЛЕСчетРасчетов;
    // БЕДА
    НовыйДокумент.Товары.Очистить();
    НовыйДокумент.УчитыватьНДС = Ложь;
    НовыйДокумент.СуммаВключаетНДС = Ложь;
    НовыйДокумент.Склад = Склад;
    НовыйДокумент.Контрагент = Контрагент;
    НовыйДокумент.ДоговорКонтрагента = Контрагент.ОсновнойДоговорКонтрагента;
    НовыйДокумент.КурсВзаиморасчетов = 1;
    НовыйДокумент.КратностьВзаиморасчетов = 1;
    НовыйДокумент.СпособЗачетаАвансов = ОЛЕСпособыЗачетаАвансов.Автоматически;
    НовыйДокумент.Организация = Организация;
    НовыйДокумент.Ответственный = Пользователь;
    НовыйДокумент.Комментарий = "Создан автоматически";
    НовыйДокумент.Дата = НачалоДня(ДатаНачала) + 60*60*8;
    НовыйДокумент.ВидОперации = ВидыОпераций;//Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
    НовыйДокумент.ТипЦен = ТипЦены;
    НовыйДокумент.ВалютаДокумента = Валюта;// Константы.ВалютаРегламентированногоУчета.Получить();
    Для Каждого СтрокаТЗ ИЗ ТЗ Цикл
        Если  СтрокаТЗ.Количество > 0 Тогда
//беда            
НоваяСтрока = НовыйДокумент.Товары.Добавить();
            Номенклатура = ОЛЕНоменклатура.НайтиПоРеквизиту("Артикул", СтрокаТЗ.Артикул);
            НоваяСтрока.Номенклатура = Номенклатура;
            НоваяСтрока.Коэффициент = 1;
            НоваяСтрока.ЕдиницаИзмерения = НоваяСтрока.Номенклатура.БазоваяЕдиницаИзмерения;
            НоваяСтрока.СтавкаНДС = СтавкаНДСБезНДС;
            
            НоваяСтрока.Цена = ОЛЕБаза.Ценообразование.ПолучитьЦенуНоменклатуры(
            НоваяСтрока.Номенклатура,
            ТипЦены,
            НовыйДокумент.Дата,
            НовыйДокумент.ВалютаДокумента,
            1, 1);
            НоваяСтрокаЦена = ТЗЦены.Добавить();
            
            НоваяСтрокаЦена.Артикул = СтрокаТЗ.Артикул;
            НоваяСтрокаЦена.Цена = НоваяСтрока.Цена;
            
            НоваяСтрока.Количество = СтрокаТЗ.Количество;            
            НоваяСтрока.Сумма = НоваяСтрока.Цена * НоваяСтрока.Количество;
            НоваяСтрока.СуммаНДС = 0;
            НовыйДокумент.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(НоваяСтрока, "Товары", Истина);
            НоваяСтрока.СчетУчета = ОЛЕСчетУчета;
        КонецЕсли;
    КонецЦикла;
    НовыйДокумент.УчитыватьНДС = Ложь;
    //НовыйДокумент.ЗаполнитьСчетаУчетаВТабЧасти(НовыйДокумент.Товары, "Товары", Истина);
    
    //НовыйДокумент.ПолучитьФорму("ФормаДокумента").Открыть();
    Попытка
        Если НЕ НовыйДокумент.Товары.Количество() = 0 Тогда
            НовыйДокумент.Записать();
            Текстсообщения = СтрЗаменить(ТекстСообщения, "%номердок%", НовыйДокумент.Номер);
            
            Сообщить(ТекстСообщения);
        Иначе
            НовыйДокумент.Записать();
            НовыйДокумент.Удалить();

            Сообщить("РеализацияТоваровУслуг в "+Организация.Наименование+": табличные части пустые. Создавать документ не нужно.");

        КонецЕсли;
4 men47
 
02.03.17
09:55
ручками только что проверил, все отлично в пользовательском режиме создается, никаких ошибок
5 Юрий Лазаренко
 
02.03.17
09:56
(4) А ручками под тем же пользователем проверяешь? Может там с правами что-то не так?
6 men47
 
02.03.17
10:00
(5) да, зашел под тем же пользователем, все ок, только я сейчас увидел одну особенность, при открытии реализации списка вышло сообщение "помошника" возможно он мешал в создании, я поставил галочку не показывать более и сейчас заново запускаю обработку, посмотрим....
7 men47
 
02.03.17
10:01
нет, все так же ошибка
8 men47
 
02.03.17
10:08
чет я не понял.... открыл отладчик табло, скинул переменную "НовыйДокумент" в табло, раскрыл, все реквизиты из документа, а "Товары" раскрыл увидел следующее

http://www.fotolink.su/v.php?id=4fde994c6b3fdd3b7195a76d004b22f9

с какого? кэш?
9 men47
 
02.03.17
10:35
кэш......... всем спасибо
10 men47
 
02.03.17
10:51
а теперь еще вопрос..... после чистки кэша первый раз все отлично прошел, но на втором пробеге все то же самое...... что делать? каждый раз чистить не вариант
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn