Имя: Пароль:
1C
 
Com-соединение с синхронизацией по номеру документа
0 DK_L
 
23.02.07
20:08
Идея такая - из базы-источник документ реализация "преобразуется" в базе-приемнике в поступление. Проблема в том,что не могу проверить то, что уже существует документ поступление с таким номером как текущая реализация
МодульВнешнихСоединений = Новый COMОбъект("V8.COMConnector");
  Попытка
      Соединение = МодульВнешнихСоединений.Connect("Srvr=""HOME-UTA"";Ref=""Tovaroved""; Usr=""Администратор"";") ;
     
  Исключение
      Предупреждение("База данных не открыта!!!");
      Возврат;
  КонецПопытки;

ЕстьЛиПоступление = Соединение.Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(Номер);// Вот здесь не пойму как проверить на номер
НовыйДокумент =  Соединение.Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Дата = Дата;
   //Форма = НовыйДокумент.ПолучитьФорму();
   //Форма.Открыть();
   НовыйДокумент.Номер = Номер;
   НовыйДокумент.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;
   НовыйДокумент.Контрагент = Соединение.Справочники.Контрагенты.НайтиПоКоду("0000001");
   НовыйДокумент.ДоговорКонтрагента =Соединение.Справочники.ДоговорыКонтрагентов.НайтиПоКоду("00001");
   НовыйДокумент.Организация = Соединение.Справочники.Организации.НайтиПоКоду("00001");
   НовыйДокумент.СкладОрдер = Соединение.Справочники.Склады.НайтиПоКоду("00001");
   
НовыйДокумент.Записать();
1 ТелепатБот
 
гуру
23.02.07
20:08
2 avmlvm
 
23.02.07
21:01
(задумчиво) ну-у-у вообще-то


СсылкаНаНайденыйДокумент = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(Номер)

это ссылка... и проверка "результативности" поиска, это

Если СсылкаНаНайденыйДокумент.Пустая() Тогда

или

Если СсылкаНаНайденыйДокумент = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка() Тогда

чЁ выбрать - вопрос религии

ЗЫ.. надеюсь понятно, что в примере говорится о "Документы", а у тебя это "Соединение.Документы"? :-)
3 Neco
 
23.02.07
21:15
(0) Лучше сделай так номер реализации запихивая в реквизит поступления НомерВходящегоДокумента. А потом ищи по реквизиту через НайтиПоРеквизиту
4 DK_L
 
23.02.07
21:20
(2) точно, мозги раком уже , просто сначала пробовал стандартно ТипЗнч - не прокатило :)))
5 DK_L
 
23.02.07
21:21
(3) спасибо, ща попробую
6 DK_L
 
23.02.07
21:28
(3) Слушай, Денис, а как ты реализовывал синхронизацию элементов номенклатуры в ТЧ. ИМХО нужно делать постоянно ...НайтиПоКоду(КодТекущегоТовараТекущегоДокумента)
7 Neco
 
23.02.07
21:34
(6) Можно и так. Можно искать через уникальный идентификатор, через:

ПолучитьСсылку(<Уникальный идентификатор>)
8 DK_L
 
23.02.07
23:01
МодульВнешнихСоединений = Новый COMОбъект("V8.Application");
  Попытка
      Соединение = МодульВнешнихСоединений.Connect("Srvr=""HOME-UTA"";Ref=""Tovaroved""; Usr=""Администратор"";") ;
     
  Исключение
      Предупреждение("База данных не открыта!!!");
      Возврат;
  КонецПопытки;

ЕстьЛиПоступление = МодульВнешнихСоединений.Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(Номер);
Если  ЕстьЛиПоступление.Пустая()   Тогда
   НовыйДокумент =  МодульВнешнихСоединений.Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
   НовыйДокумент.Дата = Дата;
   //Форма = НовыйДокумент.ПолучитьФорму();
   //Форма.Открыть();
   НовыйДокумент.Номер = Номер;
   НовыйДокумент.НомерВходящегоДокумента = Номер;
   НовыйДокумент.ВидПоступления = МодульВнешнихСоединений.Перечисления.ВидыПоступленияТоваров.НаСклад;
   НовыйДокумент.Контрагент = МодульВнешнихСоединений.Справочники.Контрагенты.НайтиПоКоду("0000001");
   НовыйДокумент.ДоговорКонтрагента =МодульВнешнихСоединений.Справочники.ДоговорыКонтрагентов.НайтиПоКоду("00001");
   НовыйДокумент.Организация = МодульВнешнихСоединений.Справочники.Организации.НайтиПоКоду("00001");
   НовыйДокумент.СкладОрдер = МодульВнешнихСоединений.Справочники.Склады.НайтиПоКоду("00001");
   НовыйДокумент.СуммаВключаетНДС = Истина;
   НовыйДокумент.УчитыватьНДС = Истина;
   НовыйДокумент.ОтражатьВБухгалтерскомУчете = Истина;
   НовыйДокумент.ОтражатьВНалоговомУчете = Истина;
   НовыйДокумент.ОтражатьВУправленческомУчете = Истина;
   НовыйДокумент.ТипЦен = МодульВнешнихСоединений.Справочники.ТипыЦенНоменклатурыКонтрагентов.НайтиПоКоду("00001");
   НовыйДокумент.РегистрироватьЦеныПоставщика = Истина;
   Для Каждого СтрокаТовары Из Товары Цикл
       НоваяСтрокаТЧПоступления = НовыйДокумент.Товары.Добавить();    
       МодульВнешнихСоединений.ЗаполнитьЗначенияСвойств(НоваяСтрокаТЧПоступления,СтрокаТовары);
       ЕстьЛиТовар = МодульВнешнихСоединений.Справочники.Номенклатура.НайтиПоКоду(СтрокаТовары.Номенклатура.Код);
       Если Не ЕстьЛиТовар.Пустая() Тогда
       Иначе
         НовыйТовар = МодульВнешнихСоединений.Справочники.Номенклатура.СоздатьЭлемент();
         НовыйТовар.Код = СтрокаТовары.Номенклатура.Код;
         НовыйТовар.Наименование = СтрокаТовары.Номенклатура.Наименование;
         НовыйТовар.НаименованиеПолное = СтрокаТовары.Номенклатура.НаименованиеПолное;
         НовыйТовар.Артикул = СтрокаТовары.Номенклатура.Артикул;
         НовыйТовар.БазоваяЕдиницаИзмерения = СтрокаТовары.Номенклатура.БазоваяЕдиницаИзмерения;
         НовыйТовар.СтавкаНДС = СтрокаТовары.Номенклатура.СтавкаНДС;
         // ЕдиницаОтчетов и ЕдиницаХраненияОстатков
         ВыборкаЕдиниц = МодульВнешнихСоединений.Справочники.ЕдиницыИзмерения.Выбрать(, НовыйТовар.Ссылка);
         Если ВыборкаЕдиниц.Следующий() Тогда
             НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
         Иначе
             НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
             
             НайденнаяЕдиницаОбъект.Наименование            = СтрокаТовары.Номенклатура.БазоваяЕдиницаИзмерения.Наименование;
             НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = СтрокаТовары.Номенклатура.БазоваяЕдиницаИзмерения;
             НайденнаяЕдиницаОбъект.Коэффициент             = 1;
             НайденнаяЕдиницаОбъект.Владелец                = НовыйТовар.Ссылка;
             
             Попытка
                 НайденнаяЕдиницаОбъект.Записать();// ВОТ ЗДЕСЬ НЕ ХОЧЕТ ЗАПИСЫВАТЬ И ВСЕ ТУТ
             Исключение
                 Сообщить("Не удалось записать единицу хранения остатков: " + ОписаниеОшибки(), СтатусСообщения.Важное);
                 Отказ = Истина;
                 Возврат;
             КонецПопытки;
             
             НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
             НовыйТовар.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
             НовыйТовар.ЕдиницаДляОтчетов = НайденнаяЕдиница;

         КонецЕсли;
         
         
   
         НовыйТовар.Записать();
         НоваяСтрокаТЧПоступления.Номенклатура = НовыйТовар;  
       КонецЕсли;    
   КонецЦикла;
   НовыйДокумент.Записать();
КонецЕсли;
9 DK_L
 
23.02.07
23:06
Не хочет записывать спрЕдиницыИзмерения , т.к нет ссылки еще Номенклатуры - что делать ?
10 Neco
 
23.02.07
23:10
Сначало запиши НовыйТовар
Тут тоже ошибка

НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();

подумай, что за элеменет и где ты создаешь
11 DK_L
 
23.02.07
23:12
(10)Вот из-за этого то и не записывался товар, по второй части отрабатываю стандартную часть при записи Номенклатуры
12 DK_L
 
23.02.07
23:15
После этого // ЕдиницаОтчетов и ЕдиницаХраненияОстатков
взял часть отсюда
Процедура ПроверитьЕдиницуХраненияОстатков(Отказ)

   Если НЕ ЗначениеНеЗаполнено(ЕдиницаХраненияОстатков) Тогда
       Возврат;// ВОТ ОН ОТКАЗ
   КонецЕсли;
....
13 DK_L
 
23.02.07
23:16
+(12) процедура из модуля формы спр Номенклатура
14 DK_L
 
23.02.07
23:19
про отказ не то написал, ладно до завтра, а то мозги раком
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.