|
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
|
а теперь еще вопрос..... после чистки кэша первый раз все отлично прошел, но на втором пробеге все то же самое...... что делать? каждый раз чистить не вариант
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |