Имя: Пароль:
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
а теперь еще вопрос..... после чистки кэша первый раз все отлично прошел, но на втором пробеге все то же самое...... что делать? каждый раз чистить не вариант