Ошибка обращения к табличной части объекта табличная часть объекта не может быть изменена

Ошибка при обмене, что не так с конвертацией

Я
   AugustBlack

26.09.11 — 21:38

Настраиваю план обмена между БП и Док, с использованием стандартных правил между Бухгалтерией и Документоборотом. Переношу справочники Контрагенты и Конт. лица. Там есть алгоритм для переноса контактной информации..

КоллекцияОбъектов = Новый ТаблицаЗначений;

КоллекцияОбъектов.Колонки.Добавить(«Тип»);

КоллекцияОбъектов.Колонки.Добавить(«Вид»);

КоллекцияОбъектов.Колонки.Добавить(«Представление»);

КоллекцияОбъектов.Колонки.Добавить(«ЗначенияПолей»);

КоллекцияОбъектов.Колонки.Добавить(«Страна»);

КоллекцияОбъектов.Колонки.Добавить(«Регион»);

КоллекцияОбъектов.Колонки.Добавить(«Город»);

КоллекцияОбъектов.Колонки.Добавить(«АдресЭП»);

КоллекцияОбъектов.Колонки.Добавить(«ДоменноеИмяСервера»);

КоллекцияОбъектов.Колонки.Добавить(«НомерТелефона»);

КоллекцияОбъектов.Колонки.Добавить(«НомерТелефонаБезКодов»);

Запрос = Новый Запрос(»

|ВЫБРАТЬ

|    КонтактнаяИнформация.Тип КАК Тип,

|    КонтактнаяИнформация.Вид КАК Вид,

|    КонтактнаяИнформация.Представление КАК Представление,

|    КонтактнаяИнформация.Поле1 КАК Поле1,

|    КонтактнаяИнформация.Поле2 КАК Поле2,

|    КонтактнаяИнформация.Поле3 КАК Поле3,

|    КонтактнаяИнформация.Поле4 КАК Поле4,

|    КонтактнаяИнформация.Поле5 КАК Поле5,

|    КонтактнаяИнформация.Поле6 КАК Поле6,

|    КонтактнаяИнформация.Поле7 КАК Поле7,

|    КонтактнаяИнформация.Поле8 КАК Поле8,

|    КонтактнаяИнформация.Поле9 КАК Поле9

|ИЗ

|    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация

|ГДЕ

|    КонтактнаяИнформация.Объект = &ОбъектКИ

|»);

Запрос.УстановитьПараметр(«ОбъектКИ», Источник.Ссылка);

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

   НоваяСтрока = КоллекцияОбъектов.Добавить();

   ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);

   
   Если Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда

       НоваяСтрока.ЗначенияПолей = «Индекс=» + Выборка.Поле1 + Символы.ПС

          + «Регион=»           + Выборка.Поле2 + Символы.ПС

          + «Район=»            + Выборка.Поле3 + Символы.ПС

          + «Город=»            + Выборка.Поле4 + Символы.ПС

          + «НаселенныйПункт=»  + Выборка.Поле5 + Символы.ПС

          + «Улица=»            + Выборка.Поле6 + Символы.ПС

          + «Дом=»              + Выборка.Поле7 + Символы.ПС

          + «Корпус=»           + Выборка.Поле8 + Символы.ПС

          + «Квартира=»         + Выборка.Поле9 + Символы.ПС

          + «ТипДома=дом»       + Символы.ПС

          + «ТипКорпуса=корпус» + Символы.ПС

          + «ТипКвартиры=кв.»;

   ИначеЕсли Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда

       НоваяСтрока.ЗначенияПолей = «КодСтраны=»     + Выборка.Поле1 + Символы.ПС

          + «КодГорода=»     + Выборка.Поле2 + Символы.ПС

          + «НомерТелефона=» + Выборка.Поле3 + Символы.ПС

          + «Добавочный=»    + Выборка.Поле4;

       НоваяСтрока.НомерТелефонаБезКодов = Выборка.Поле3;

       НоваяСтрока.НомерТелефона         = Выборка.Поле1 + Выборка.Поле2 + Выборка.Поле3;

   ИначеЕсли Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда

       НоваяСтрока.АдресЭП = Выборка.Представление;

   КонецЕсли;

КонецЦикла;

Так вот при загрузке данных в Документооборот выдает ошибку:

Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.

   ТипОбъекта             =  Справочник объект: Корреспонденты

   Объект                 =  СОТРУДНИКИ

   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.

   ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)

   Текст                  =  Имя табличной части: КонтактнаяИнформация

   КСообщенияОбОшибках    =  83

отсюда СОТРУДНИКИ это группа а не элемент..Я так понимаю он пытается обратится к табличной части группы но т.к ее попросту нету и заканивает ошибкой или почему так?

дописываю в алгоритм переноса контакт. информации уже это:

Если НЕ Источник.Ссылка.ЭтоГруппа Тогда

КоллекцияОбъектов = Новый ТаблицаЗначений;

КоллекцияОбъектов.Колонки.Добавить(«Тип»);

КоллекцияОбъектов.Колонки.Добавить(«Вид»);

….такое ощущение как будьто условие не срабатывает. Помогите пожалуйста решить эту задачу, замучался с ними ужасно:(

   AugustBlack

1 — 26.09.11 — 21:44

Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805) — вот процедура

Процедура ЗагрузитьТабличнуюЧасть(Объект, ИмяТабличнойЧасти, ОбщаяИнформацияОТипеДокумента, НужноЗаписатьОбъект, ПараметрыОбъекта, ПКО)

   
   Перем КлючевыеПоляПоиска;

   Перем МассивКлючевыхПолейПоиска;

   
   Результат = ПолучитьКлючевыеПоляПоискаПоТабличнойЧасти(ПКО, ИмяТабличнойЧасти, МассивКлючевыхПолейПоиска, КлючевыеПоляПоиска);

   
   Если Не Результат Тогда

       одПропустить(ФайлОбмена);

       Возврат;

   КонецЕсли;

   
   ТабличнаяЧастьОбъекта = Объект[ИмяТабличнойЧасти];

   
   ИмяКолонкиИтератора = «КлючевоеПолеИтератораЗначений»;

   
   КоллекцияОбъекта     = ТабличнаяЧастьОбъекта.Выгрузить();

   КоллекцияФайлаОбмена = КоллекцияОбъекта.СкопироватьКолонки();

   
   ЗаполнитьКоллекциюФайлаОбмена(КоллекцияФайлаОбмена, ИмяТабличнойЧасти, ОбщаяИнформацияОТипеДокумента, ПараметрыОбъекта, МассивКлючевыхПолейПоиска);

   
   ДобавитьИтераторТаблице(КоллекцияФайлаОбмена, +1, ИмяКолонкиИтератора);

   ДобавитьИтераторТаблице(КоллекцияОбъекта,     -1, ИмяКолонкиИтератора);

   
   КоллекцияГруппировки = ИнициализацияТаблицыПоКлючевымПолям(МассивКлючевыхПолейПоиска);

   КоллекцияГруппировки.Колонки.Добавить(ИмяКолонкиИтератора);

   
   ЗаполнитьЗначенияСвойствТаблицы(КоллекцияФайлаОбмена, КоллекцияГруппировки);

   ЗаполнитьЗначенияСвойствТаблицы(КоллекцияОбъекта,     КоллекцияГруппировки);

   
   КоллекцияГруппировки.Свернуть(КлючевыеПоляПоиска, ИмяКолонкиИтератора);

   
   // очищаем табличную часть объекта

//здесь ругается

   Попытка

       ТабличнаяЧастьОбъекта.Очистить();

   Исключение

       
       Текст = НСтр(«ru = ‘Имя табличной части: %1′»);

       
       ЗП = ПолучитьСтруктуруЗаписиПротокола(83, ОписаниеОшибки());

       ЗП.Объект     = Объект;

       ЗП.ТипОбъекта = ТипЗнч(Объект);

       ЗП.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ИмяТабличнойЧасти);

       ЗаписатьВПротоколВыполнения(83, ЗП);

       
       одПропустить(ФайлОбмена);

       Возврат;

   КонецПопытки;

   
   Для Каждого СтрокаКоллекции ИЗ КоллекцияГруппировки Цикл

       
       // получаем структуру отбора

       Отбор = Новый Структура();

       
       Для Каждого ИмяПоля ИЗ МассивКлючевыхПолейПоиска Цикл

           
           Отбор.Вставить(ИмяПоля, СтрокаКоллекции[ИмяПоля]);

           
       КонецЦикла;

       
       Если СтрокаКоллекции[ИмяКолонкиИтератора] = 0 Тогда

           
           //заполняем строки табличной части из старой версии объекта

           СтрокиКоллекцииОбъекта = КоллекцияОбъекта.НайтиСтроки(Отбор);

           
       Иначе

           
           // заполняем строки табличной части из коллекции файла обмена

           СтрокиКоллекцииОбъекта = КоллекцияФайлаОбмена.НайтиСтроки(Отбор);

           
       КонецЕсли;

       
       // добавляем строки табличной части объекта

       Для Каждого СтрокаКоллекции ИЗ СтрокиКоллекцииОбъекта Цикл

           
           ЗаполнитьЗначенияСвойств(ТабличнаяЧастьОбъекта.Добавить(), СтрокаКоллекции);

           
       КонецЦикла;

       
       НужноЗаписатьОбъект = Истина;

       
   КонецЦикла;

   
КонецПроцедуры

   AugustBlack

2 — 27.09.11 — 06:23

up, актуально

   SIS72

3 — 27.09.11 — 07:15

Если перенос только этих 2 справочников — можешь и сам написать правила — почитай здесь http://www.mykod.info (конвертация с нуля)

   SIS72

4 — 27.09.11 — 07:24

Кстати с чем то подобным встречался — если переносишь много справочников — перенеси сначало эти 2, а потом остальные — звучит глупо но мне однажды помогло

   AugustBlack

5 — 27.09.11 — 08:30

(4) SIS72 спасиба там я читал..вообщем стандартные правила не совсем подходят, я их чуть чуть допилил. В универсальной выгрузке правила работают, в планах остановка на ошибке(

   SuperMario

6 — 27.09.11 — 08:53

(0) нужно отказаться от выгрузки таб. части если объект ЭтоГруппа.

А у тебя в ПКГС

+code

Если НЕ Источник.Ссылка.ЭтоГруппа Тогда

+code

все равно передают в приемник, что таб. часть у СОТРУДНИКИ есть, только она пустая.

   AugustBlack

7 — 27.09.11 — 09:02

(6)  SuperMario а как это сделать в конвертации??

   AugustBlack

8 — 27.09.11 — 09:07

или где это сделать? не дописывать же мне код в обработку КонвертацияОбъектовИнформационныхБаз

   SuperMario

9 — 27.09.11 — 09:30

В ПКГС в обработчик ПередВыгрузкой

Отказ = Источник.ЭтоГруппа;

   AugustBlack

10 — 27.09.11 — 09:41

добавил теперь план обмена ругается на это:

Ошибка в обработчике события ПередВыгрузкойОбъекта

   ПВД                    =  Контрагенты

   Объект                 =  Торговый дом «Комплексный»  (Справочник объект: Контрагенты)

   Обработчик             =  ПередВыгрузкойОбъектаВыборки

   ОписаниеОшибки         =  Метод объекта не обнаружен (ЭтоГруппа)

   ПозицияМодуля          =  (1)

   КСообщенияОбОшибках    =  33

Т_Т

   SuperMario

11 — 27.09.11 — 09:48

Так у тебя и выборка идет по произвольному алгоритму.

Смотри в ПВД Контрагенты. Наверняка запрос. Добавь признак группы.

   SuperMario

12 — 27.09.11 — 09:55

(10) и ошибка в ПВД и не того ПКо, который в (0) описан.

Ничего не понял. Куда вставил отказ от выгрузки?

Нужно для ПКО Корреспонденты в ПередВыгрузкой ПКГС

   AugustBlack

13 — 27.09.11 — 10:05

соррь.в пвд видать лишнее было написано,удалил оттуда.

http://imglink.ru/show-image.php?id=2e00d52db6264c2ca90a596027177630 посмотрите пожалуйста. вот сюда нада?

поставил туда, при загрузке в ДО, все равно ошибка(

Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.

   ТипОбъекта             =  Справочник объект: Корреспонденты

   Объект                 =  СОТРУДНИКИ

   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.

   ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)

   Текст                  =  Имя табличной части: ДополнительныеРеквизиты

   КСообщенияОбОшибках    =  83

   SuperMario

14 — 27.09.11 — 10:16

(13) ну и что не понятно?

Теперь ругается на таб. часть Дополнительные документы.

А ты поставил только для таб. части Контактной информации ;)

   SuperMario

15 — 27.09.11 — 10:20

(13) сорь.

попутал  с ДополнительныеРеквизиты

   SuperMario

16 — 27.09.11 — 10:23

А какие у тебя реквизиты поиска стоят для этого ПКО?

Не получилось ли так, что в источнике «СОТРУДНИКИ» — это элемент справочника, а в приемнике это группа?

Поиск по свойству «ЭтоГруппа» стоит?

   AugustBlack

17 — 27.09.11 — 10:36

дадада, Поиск по ИНН и по ЭтоГруппа. Т.е убрать его? в стандартных правилах так стояло я решил не трогать.

   SuperMario

18 — 27.09.11 — 10:40

НЕт. Поиск по Этогруппа нужен обязательно. Иначе косанет.

Тогда отказ от выгрузки ДополнительныеРеквизиты для групп должен решить проблему.

   AugustBlack

19 — 27.09.11 — 10:45

добавил отказ для ДополнительныеРеквизиты:

Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.

   ТипОбъекта             =  Справочник объект: Корреспонденты

   Объект                 =  СОТРУДНИКИ

   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.

   ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)

   Текст                  =  Имя табличной части: КонтактнаяИнформация

   КСообщенияОбОшибках    =  83

   AugustBlack

20 — 27.09.11 — 10:48

в xml файле записи:

<Код>11</Код>

                       <Наименование> —&gt; КонтактнаяИнформация</Наименование>

                       <Порядок>600</Порядок>

                       <Источник Имя=»» Вид=»»/>

                       <Приемник Имя=»КонтактнаяИнформация» Вид=»ТабличнаяЧасть»/>

                       <ПередОбработкойВыгрузки>Выполнить(Алгоритмы.ПереносКИ);</ПередОбработкойВыгрузки>

                       <ПередВыгрузкой>Отказ = Источник.ЭтоГруппа;

</ПередВыгрузкой>

вопрос правильно ли алгоритм для выгрузки стоит в процедуре

ПередОбработкойВыгрузки ? в стандартных правилах так. мб в этом дело??

   AugustBlack

21 — 27.09.11 — 10:50

может отказ перед ПередОбработкойВыгрузки запихнуть??

   AugustBlack

22 — 27.09.11 — 11:00

вродь получилось=)) спасиба  SuperMario, поставил отказ перед обработкой..

Перед обработкой

Условия возникновения события

Событие выполняется перед обработкой группы свойств, например, перед выгрузкой табличной части. Возможен отказ от выгрузки. Можно определить произвольную коллекцию, являющуюся источником данных.

Отказ = Источник.ЭтоГруппа;

Выполнить(Алгоритмы.ПереносКИ);

  

SuperMario

23 — 27.09.11 — 11:06

(22) Удачи!

Ошибка при обмене, что не так с конвертацией

Я

  

AugustBlack

26.09.11 — 21:38

Настраиваю план обмена между БП и Док, с использованием стандартных правил между Бухгалтерией и Документоборотом. Переношу справочники Контрагенты и Конт. лица. Там есть алгоритм для переноса контактной информации..

КоллекцияОбъектов = Новый ТаблицаЗначений;

КоллекцияОбъектов.Колонки.Добавить(«Тип»);

КоллекцияОбъектов.Колонки.Добавить(«Вид»);

КоллекцияОбъектов.Колонки.Добавить(«Представление»);

КоллекцияОбъектов.Колонки.Добавить(«ЗначенияПолей»);

КоллекцияОбъектов.Колонки.Добавить(«Страна»);

КоллекцияОбъектов.Колонки.Добавить(«Регион»);

КоллекцияОбъектов.Колонки.Добавить(«Город»);

КоллекцияОбъектов.Колонки.Добавить(«АдресЭП»);

КоллекцияОбъектов.Колонки.Добавить(«ДоменноеИмяСервера»);

КоллекцияОбъектов.Колонки.Добавить(«НомерТелефона»);

КоллекцияОбъектов.Колонки.Добавить(«НомерТелефонаБезКодов»);

Запрос = Новый Запрос(»

|ВЫБРАТЬ

|    КонтактнаяИнформация.Тип КАК Тип,

|    КонтактнаяИнформация.Вид КАК Вид,

|    КонтактнаяИнформация.Представление КАК Представление,

|    КонтактнаяИнформация.Поле1 КАК Поле1,

|    КонтактнаяИнформация.Поле2 КАК Поле2,

|    КонтактнаяИнформация.Поле3 КАК Поле3,

|    КонтактнаяИнформация.Поле4 КАК Поле4,

|    КонтактнаяИнформация.Поле5 КАК Поле5,

|    КонтактнаяИнформация.Поле6 КАК Поле6,

|    КонтактнаяИнформация.Поле7 КАК Поле7,

|    КонтактнаяИнформация.Поле8 КАК Поле8,

|    КонтактнаяИнформация.Поле9 КАК Поле9

|ИЗ

|    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация

|ГДЕ

|    КонтактнаяИнформация.Объект = &ОбъектКИ

|»);

Запрос.УстановитьПараметр(«ОбъектКИ», Источник.Ссылка);

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

   НоваяСтрока = КоллекцияОбъектов.Добавить();

   ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);

   

   Если Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда

       НоваяСтрока.ЗначенияПолей = «Индекс=» + Выборка.Поле1 + Символы.ПС

          + «Регион=»           + Выборка.Поле2 + Символы.ПС

          + «Район=»            + Выборка.Поле3 + Символы.ПС

          + «Город=»            + Выборка.Поле4 + Символы.ПС

          + «НаселенныйПункт=»  + Выборка.Поле5 + Символы.ПС

          + «Улица=»            + Выборка.Поле6 + Символы.ПС

          + «Дом=»              + Выборка.Поле7 + Символы.ПС

          + «Корпус=»           + Выборка.Поле8 + Символы.ПС

          + «Квартира=»         + Выборка.Поле9 + Символы.ПС

          + «ТипДома=дом»       + Символы.ПС

          + «ТипКорпуса=корпус» + Символы.ПС

          + «ТипКвартиры=кв.»;

   ИначеЕсли Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда

       НоваяСтрока.ЗначенияПолей = «КодСтраны=»     + Выборка.Поле1 + Символы.ПС

          + «КодГорода=»     + Выборка.Поле2 + Символы.ПС

          + «НомерТелефона=» + Выборка.Поле3 + Символы.ПС

          + «Добавочный=»    + Выборка.Поле4;

       НоваяСтрока.НомерТелефонаБезКодов = Выборка.Поле3;

       НоваяСтрока.НомерТелефона         = Выборка.Поле1 + Выборка.Поле2 + Выборка.Поле3;

   ИначеЕсли Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда

       НоваяСтрока.АдресЭП = Выборка.Представление;

   КонецЕсли;

КонецЦикла;

Так вот при загрузке данных в Документооборот выдает ошибку:

Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.

   ТипОбъекта             =  Справочник объект: Корреспонденты

   Объект                 =  СОТРУДНИКИ

   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.

   ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)

   Текст                  =  Имя табличной части: КонтактнаяИнформация

   КСообщенияОбОшибках    =  83

отсюда СОТРУДНИКИ это группа а не элемент..Я так понимаю он пытается обратится к табличной части группы но т.к ее попросту нету и заканивает ошибкой или почему так?

дописываю в алгоритм переноса контакт. информации уже это:

Если НЕ Источник.Ссылка.ЭтоГруппа Тогда

КоллекцияОбъектов = Новый ТаблицаЗначений;

КоллекцияОбъектов.Колонки.Добавить(«Тип»);

КоллекцияОбъектов.Колонки.Добавить(«Вид»);

….такое ощущение как будьто условие не срабатывает. Помогите пожалуйста решить эту задачу, замучался с ними ужасно:(

  

AugustBlack

1 — 26.09.11 — 21:44

Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805) — вот процедура

Процедура ЗагрузитьТабличнуюЧасть(Объект, ИмяТабличнойЧасти, ОбщаяИнформацияОТипеДокумента, НужноЗаписатьОбъект, ПараметрыОбъекта, ПКО)

   

   Перем КлючевыеПоляПоиска;

   Перем МассивКлючевыхПолейПоиска;

   
   Результат = ПолучитьКлючевыеПоляПоискаПоТабличнойЧасти(ПКО, ИмяТабличнойЧасти, МассивКлючевыхПолейПоиска, КлючевыеПоляПоиска);

   

   Если Не Результат Тогда

       одПропустить(ФайлОбмена);

       Возврат;

   КонецЕсли;

   
   ТабличнаяЧастьОбъекта = Объект[ИмяТабличнойЧасти];

   
   ИмяКолонкиИтератора = «КлючевоеПолеИтератораЗначений»;

   

   КоллекцияОбъекта     = ТабличнаяЧастьОбъекта.Выгрузить();

   КоллекцияФайлаОбмена = КоллекцияОбъекта.СкопироватьКолонки();

   
   ЗаполнитьКоллекциюФайлаОбмена(КоллекцияФайлаОбмена, ИмяТабличнойЧасти, ОбщаяИнформацияОТипеДокумента, ПараметрыОбъекта, МассивКлючевыхПолейПоиска);

   

   ДобавитьИтераторТаблице(КоллекцияФайлаОбмена, +1, ИмяКолонкиИтератора);

   ДобавитьИтераторТаблице(КоллекцияОбъекта,     -1, ИмяКолонкиИтератора);

   

   КоллекцияГруппировки = ИнициализацияТаблицыПоКлючевымПолям(МассивКлючевыхПолейПоиска);

   КоллекцияГруппировки.Колонки.Добавить(ИмяКолонкиИтератора);

   

   ЗаполнитьЗначенияСвойствТаблицы(КоллекцияФайлаОбмена, КоллекцияГруппировки);

   ЗаполнитьЗначенияСвойствТаблицы(КоллекцияОбъекта,     КоллекцияГруппировки);

   
   КоллекцияГруппировки.Свернуть(КлючевыеПоляПоиска, ИмяКолонкиИтератора);

   

   // очищаем табличную часть объекта

//здесь ругается

   Попытка

       ТабличнаяЧастьОбъекта.Очистить();

   Исключение

       
       Текст = НСтр(«ru = ‘Имя табличной части: %1′»);

       

       ЗП = ПолучитьСтруктуруЗаписиПротокола(83, ОписаниеОшибки());

       ЗП.Объект     = Объект;

       ЗП.ТипОбъекта = ТипЗнч(Объект);

       ЗП.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ИмяТабличнойЧасти);

       ЗаписатьВПротоколВыполнения(83, ЗП);

       

       одПропустить(ФайлОбмена);

       Возврат;

   КонецПопытки;

   
   Для Каждого СтрокаКоллекции ИЗ КоллекцияГруппировки Цикл

       

       // получаем структуру отбора

       Отбор = Новый Структура();

       
       Для Каждого ИмяПоля ИЗ МассивКлючевыхПолейПоиска Цикл

           
           Отбор.Вставить(ИмяПоля, СтрокаКоллекции[ИмяПоля]);

           
       КонецЦикла;

       
       Если СтрокаКоллекции[ИмяКолонкиИтератора] = 0 Тогда

           

           //заполняем строки табличной части из старой версии объекта

           СтрокиКоллекцииОбъекта = КоллекцияОбъекта.НайтиСтроки(Отбор);

           
       Иначе

           

           // заполняем строки табличной части из коллекции файла обмена

           СтрокиКоллекцииОбъекта = КоллекцияФайлаОбмена.НайтиСтроки(Отбор);

           
       КонецЕсли;

       

       // добавляем строки табличной части объекта

       Для Каждого СтрокаКоллекции ИЗ СтрокиКоллекцииОбъекта Цикл

           
           ЗаполнитьЗначенияСвойств(ТабличнаяЧастьОбъекта.Добавить(), СтрокаКоллекции);

           
       КонецЦикла;

       
       НужноЗаписатьОбъект = Истина;

       
   КонецЦикла;

   
КонецПроцедуры

  

AugustBlack

2 — 27.09.11 — 06:23

up, актуально

  

SIS72

3 — 27.09.11 — 07:15

Если перенос только этих 2 справочников — можешь и сам написать правила — почитай здесь http://www.mykod.info (конвертация с нуля)

  

SIS72

4 — 27.09.11 — 07:24

Кстати с чем то подобным встречался — если переносишь много справочников — перенеси сначало эти 2, а потом остальные — звучит глупо но мне однажды помогло

  

AugustBlack

5 — 27.09.11 — 08:30

(4) SIS72 спасиба там я читал..вообщем стандартные правила не совсем подходят, я их чуть чуть допилил. В универсальной выгрузке правила работают, в планах остановка на ошибке(

  

SuperMario

6 — 27.09.11 — 08:53

(0) нужно отказаться от выгрузки таб. части если объект ЭтоГруппа.

А у тебя в ПКГС

+code

Если НЕ Источник.Ссылка.ЭтоГруппа Тогда

+code

все равно передают в приемник, что таб. часть у СОТРУДНИКИ есть, только она пустая.

  

AugustBlack

7 — 27.09.11 — 09:02

(6)  SuperMario а как это сделать в конвертации??

  

AugustBlack

8 — 27.09.11 — 09:07

или где это сделать? не дописывать же мне код в обработку КонвертацияОбъектовИнформационныхБаз

  

SuperMario

9 — 27.09.11 — 09:30

В ПКГС в обработчик ПередВыгрузкой

Отказ = Источник.ЭтоГруппа;

  

AugustBlack

10 — 27.09.11 — 09:41

добавил теперь план обмена ругается на это:

Ошибка в обработчике события ПередВыгрузкойОбъекта

   ПВД                    =  Контрагенты

   Объект                 =  Торговый дом «Комплексный»  (Справочник объект: Контрагенты)

   Обработчик             =  ПередВыгрузкойОбъектаВыборки

   ОписаниеОшибки         =  Метод объекта не обнаружен (ЭтоГруппа)

   ПозицияМодуля          =  (1)

   КСообщенияОбОшибках    =  33

Т_Т

  

SuperMario

11 — 27.09.11 — 09:48

Так у тебя и выборка идет по произвольному алгоритму.

Смотри в ПВД Контрагенты. Наверняка запрос. Добавь признак группы.

  

SuperMario

12 — 27.09.11 — 09:55

(10) и ошибка в ПВД и не того ПКо, который в (0) описан.

Ничего не понял. Куда вставил отказ от выгрузки?

Нужно для ПКО Корреспонденты в ПередВыгрузкой ПКГС

  

AugustBlack

13 — 27.09.11 — 10:05

соррь.в пвд видать лишнее было написано,удалил оттуда.

http://imglink.ru/show-image.php?id=2e00d52db6264c2ca90a596027177630 посмотрите пожалуйста. вот сюда нада?

поставил туда, при загрузке в ДО, все равно ошибка(

Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.

   ТипОбъекта             =  Справочник объект: Корреспонденты

   Объект                 =  СОТРУДНИКИ

   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.

   ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)

   Текст                  =  Имя табличной части: ДополнительныеРеквизиты

   КСообщенияОбОшибках    =  83

  

SuperMario

14 — 27.09.11 — 10:16

(13) ну и что не понятно?

Теперь ругается на таб. часть Дополнительные документы.

А ты поставил только для таб. части Контактной информации ;)

  

SuperMario

15 — 27.09.11 — 10:20

(13) сорь.

попутал  с ДополнительныеРеквизиты

  

SuperMario

16 — 27.09.11 — 10:23

А какие у тебя реквизиты поиска стоят для этого ПКО?

Не получилось ли так, что в источнике «СОТРУДНИКИ» — это элемент справочника, а в приемнике это группа?

Поиск по свойству «ЭтоГруппа» стоит?

  

AugustBlack

17 — 27.09.11 — 10:36

дадада, Поиск по ИНН и по ЭтоГруппа. Т.е убрать его? в стандартных правилах так стояло я решил не трогать.

  

SuperMario

18 — 27.09.11 — 10:40

НЕт. Поиск по Этогруппа нужен обязательно. Иначе косанет.

Тогда отказ от выгрузки ДополнительныеРеквизиты для групп должен решить проблему.

  

AugustBlack

19 — 27.09.11 — 10:45

добавил отказ для ДополнительныеРеквизиты:

Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.

   ТипОбъекта             =  Справочник объект: Корреспонденты

   Объект                 =  СОТРУДНИКИ

   ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.

   ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)

   Текст                  =  Имя табличной части: КонтактнаяИнформация

   КСообщенияОбОшибках    =  83

  

AugustBlack

20 — 27.09.11 — 10:48

в xml файле записи:

<Код>11</Код>

                       <Наименование> —&gt; КонтактнаяИнформация</Наименование>

                       <Порядок>600</Порядок>

                       <Источник Имя=»» Вид=»»/>

                       <Приемник Имя=»КонтактнаяИнформация» Вид=»ТабличнаяЧасть»/>

                       <ПередОбработкойВыгрузки>Выполнить(Алгоритмы.ПереносКИ);</ПередОбработкойВыгрузки>

                       <ПередВыгрузкой>Отказ = Источник.ЭтоГруппа;

</ПередВыгрузкой>

вопрос правильно ли алгоритм для выгрузки стоит в процедуре

ПередОбработкойВыгрузки ? в стандартных правилах так. мб в этом дело??

  

AugustBlack

21 — 27.09.11 — 10:50

может отказ перед ПередОбработкойВыгрузки запихнуть??

  

AugustBlack

22 — 27.09.11 — 11:00

вродь получилось=)) спасиба  SuperMario, поставил отказ перед обработкой..

Перед обработкой

Условия возникновения события

Событие выполняется перед обработкой группы свойств, например, перед выгрузкой табличной части. Возможен отказ от выгрузки. Можно определить произвольную коллекцию, являющуюся источником данных.

Отказ = Источник.ЭтоГруппа;

Выполнить(Алгоритмы.ПереносКИ);

  

SuperMario

23 — 27.09.11 — 11:06

(22) Удачи!

Настраиваю план обмена между БП и Док, с использованием стандартных правил между Бухгалтерией и Документоборотом. Переношу справочники Контрагенты и Конт. лица. Там есть алгоритм для переноса контактной информации.. Так вот при загрузке данных в Документооборот выдает ошибку: Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.    Объект                 =  СОТРУДНИКИ    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.    ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)    Текст                  =  Имя табличной части: КонтактнаяИнформация отсюда СОТРУДНИКИ это группа а не элемент..Я так понимаю он пытается обратится к табличной части группы но т.к ее попросту нету и заканивает ошибкой или почему так? дописываю в алгоритм переноса контакт. информации уже это: КоллекцияОбъектов.Колонки.Добавить(«Вид»); ….такое ощущение как будьто условие не срабатывает. Помогите пожалуйста решить эту задачу, замучался с ними ужасно:(

Если перенос только этих 2 справочников — можешь и сам написать правила — почитай здесь (конвертация с нуля)

Кстати с чем то подобным встречался — если переносишь много справочников — перенеси сначало эти 2, а потом остальные — звучит глупо но мне однажды помогло

SIS72 спасиба там я читал..вообщем стандартные правила не совсем подходят, я их чуть чуть допилил. В универсальной выгрузке правила работают, в планах остановка на ошибке(

нужно отказаться от выгрузки таб. части если объект ЭтоГруппа. А у тебя в ПКГС +code Если НЕ Источник.Ссылка.ЭтоГруппа Тогда +code все равно передают в приемник, что таб. часть у СОТРУДНИКИ есть, только она пустая.

SuperMario а как это сделать в конвертации??

или где это сделать? не дописывать же мне код в обработку КонвертацияОбъектовИнформационныхБаз

В ПКГС в обработчик ПередВыгрузкой Отказ = Источник.ЭтоГруппа;

добавил теперь план обмена ругается на это: Ошибка в обработчике события ПередВыгрузкойОбъекта    ПВД                    =  Контрагенты    Объект                 =  Торговый дом «Комплексный»  (Справочник объект: Контрагенты)    Обработчик             =  ПередВыгрузкойОбъектаВыборки    ОписаниеОшибки         =  Метод объекта не обнаружен (ЭтоГруппа) Т_Т

Так у тебя и выборка идет по произвольному алгоритму. Смотри в ПВД Контрагенты. Наверняка запрос. Добавь признак группы.

и ошибка в ПВД и не того ПКо, который в описан. Ничего не понял. Куда вставил отказ от выгрузки? Нужно для ПКО Корреспонденты в ПередВыгрузкой ПКГС

соррь.в пвд видать лишнее было написано,удалил оттуда. посмотрите пожалуйста. вот сюда нада? поставил туда, при загрузке в ДО, все равно ошибка( Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.    Объект                 =  СОТРУДНИКИ    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.    ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)    Текст                  =  Имя табличной части: ДополнительныеРеквизиты    КСообщенияОбОшибках    =  83

ну и что не понятно? Теперь ругается на таб. часть Дополнительные документы. А ты поставил только для таб. части Контактной информации ;)

сорь. попутал  с ДополнительныеРеквизиты

А какие у тебя реквизиты поиска стоят для этого ПКО? Не получилось ли так, что в источнике «СОТРУДНИКИ» — это элемент справочника, а в приемнике это группа? Поиск по свойству «ЭтоГруппа» стоит?

дадада, Поиск по ИНН и по ЭтоГруппа. Т.е убрать его? в стандартных правилах так стояло я решил не трогать.

НЕт. Поиск по Этогруппа нужен обязательно. Иначе косанет. Тогда отказ от выгрузки ДополнительныеРеквизиты для групп должен решить проблему.

добавил отказ для ДополнительныеРеквизиты: Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.    Объект                 =  СОТРУДНИКИ    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.    ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)    Текст                  =  Имя табличной части: КонтактнаяИнформация    КСообщенияОбОшибках    =  83

в xml файле записи: вопрос правильно ли алгоритм для выгрузки стоит в процедуре ПередОбработкойВыгрузки ? в стандартных правилах так. мб в этом дело??

может отказ перед ПередОбработкойВыгрузки запихнуть??

вродь получилось=)) спасиба  SuperMario, поставил отказ перед обработкой.. Перед обработкой Условия возникновения события Событие выполняется перед обработкой группы свойств, например, перед выгрузкой табличной части. Возможен отказ от выгрузки. Можно определить произвольную коллекцию, являющуюся источником данных.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Сделал форму документа там два параметра и табличная часть с 3мя параметрами.
Создаю новый документ путем нажатия кнопки Создать в форме выбора документов.

Затем в этой форме документа (документ еще не создан, не проведен, только создается) заполняю программно реквизиты.

1C
1
Объект.П1 = лялятополя;

А вот с табличной частью так не получается Объект.ТабличнаяЧасть.П3 = ввпапв;
Ругается говорит нету Параметра3.

Фиг с ним знаю, что если сохранить документ то можно получить доступ к табличной части.
Пишу

1C
1
Объект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);

Ругается Метод объекта не обнаружен (Записать).
Думаю ладно У тебя же есть ссылка сейчас тебя в нормальный объект сделаем.

1C
1
Объект.Ссылка.ПолучитьОбъект();

Ругается Метод объекта не обнаружен.
Вопросы: 1. Как Мне программно сохранить и провести документ?
2. Как записать в табличную часть?

Добавлено через 58 минут
Ну с таблицей немного разобрался сделал так

1C
1
2
3
4
5
6
7
8
ТабЧасть = Объект.ТабличнаяЧасть.Выгрузить();
    Для Каждого строка из ТабЧасть Цикл
        Если (строка.Изделие.Пустая() = Ложь) тогда
            строка.Проба = строка.Изделие.Металл.Проба;
                        Сообщить(строка.Проба);
            ТабЧасть.Добавить();
        КонецЕсли; 
    КонецЦикла;

Но почему-то в форме новое табличное значение не отображается.
Как сделать чтобы таблица обновилась на форме?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

  • Главная
  • Карьера
  • Блог о жизни франчайзи
  • Про 1С от наших сотрудников

15 Сентября 2020

Конвертация строки в справочник (перечисления) и обратно

Конвертация строки в справочник

Если в базе источника реквизит имеет тип «Строка», а в базе приемника тип «Справочник», то необходимо разработать отдельное правило конвертации объектов. Обязательно в правиле оставить Объект-источник пустым, иначе при выгрузке будет выдаваться ошибка. В конвертации объекта описать поля поиска, а также реквизит, в который будет грузиться значения реквизита объекта источника, и при необходимости описать заполнение остальных реквизитов справочника. В правиле в обработчике «Перед выгрузкой» реквизита написать следующий алгоритм (см. рисунок 1).

Рисунок 1 – Описание обработчика «Перед Выгрузкой».

Конвертация строки в перечисление

Если в базе источника реквизит имеет тип «Строка», а в базе приемника тип «Перечисление», то отдельное правило конвертации объектов разрабатывать не нужно, все действия описываются в конвертации свойств. Необходимо в обработчике «Перед выгрузкой» свойства описать алгоритм заполнения перечисления объекта приемника от значений реквизита объекта источника, то есть:

Конвертация справочника в строку

Если в базе источника реквизит имеет тип «Справочник», а в базе приемника тип «Строка», то отдельное правило конвертации объектов разрабатывать не нужно, все действия описываются в конвертации свойств. Необходимо в обработчике «Перед выгрузкой» свойства описать алгоритм заполнения реквизита объекта приемника от реквизита справочника объекта источника, то есть:

Конвертация перечисления в строку

Если в базе источника реквизит имеет тип «Перечисление», а в базе приемника тип «Строка», то отдельное правило конвертации объектов разрабатывать не нужно, все действия описываются в конвертации свойств. Необходимо в обработчике «Перед выгрузкой» свойства описать алгоритм заполнения реквизита объекта приемника от перечисления объекта источника, то есть:

Конвертация справочника в перечисление (перечисление в справочник)

Конвертация справочника в перечисление

Данная задача становится актуальной с учетом изменения перечисления «Ставки НДС» на справочник в новых конфигурациях. Теперь при конвертации объектов из новых конфигураций (тип: справочник) в конфигурации, где ставки НДС еще являются перечислением, необходимо будет разрабатывать соответствующее правило конвертации объектов.

1. Необходимо в правиле конвертации объектов на вкладке «Настройки», включить свойство «Не запоминать выгруженные объекты» (см. рисунок 2).

Рисунок 2 – Не запоминать выгруженные объекты.

Иначе система будет перезаписывать выгрузку одного и того же значения перечисления.

2. Не использовать конвертацию значений (предопределенные значения справочника в значения перечисления).

Будет использоваться обработчик «При выгрузке», а при использовании данного обработчика конвертация значений не отрабатывает.

3. В конвертации объекта в обработчике «При выгрузке» необходимо прописать следующий код:

      

То есть нам необходимо в переменную «УзелСсылки» присвоить значение метаданных перечисления, которое соответствует базе приемника, тогда система автоматически при загрузке определит нужное значение.

Конвертация перечисления в справочник

Для конвертации перечисления в справочник, потребуется отдельное правило конвертации объектов. В данном правиле можно воспользоваться конвертацией значений (конвертация значений перечисления в предопределенные значения), и необходимо описать поля поиска, а также реквизит, в который будет грузиться значение перечисления (например: реквизит — наименование), и при необходимости описать заполнение остальных реквизитов справочника. В правиле в обработчике «Перед выгрузкой» реквизита написать следующий алгоритм (см. рисунок 1).

Отключение проверки полей поиска

В созданных правилах конвертации объектов, по которым не заполнена колонка «Поля поиска» при сохранении правил, система предложит указать автоматически поля поиска (см. рисунок 3).

Рисунок 3 – Предупреждение – не указаны поля поиска.

При каждом сохранении правил, система будет выдавать данное сообщение. Если при достаточно большом количестве правил случайно нажать «Да», то система создаст поля поиска по всем правилам, и может потребоваться достаточно большое время восстанавливать обратно. Чтобы избежать таких неприятных ситуаций, данную проверку можно отключить (путь: Сервис – Настройки пользователя) (см. рисунок 4).

Рисунок 4 – Отключение проверки полей поиска.

Не регистрировать документы к обмену при определенных действиях

Документы регистрируются к обмену по правилам регистрации объектов при любых действиях (проведение, выполнение различных обработок и т.д.). Если необходимо не регистрировать документы при определенных действиях (например: при выполнении обработки по перепроведению документов), то можно использовать функционал дополнительные свойства.

В месте изменения документа, который не должен регистрироваться к обмену, нужно установить дополнительное свойство. В правилах регистрации объектов по документу в обработчике событий «После обработки» добавить:

В таком случае документ при групповом перепроведении не будет регистрироваться к обмену.

Общий алгоритм для всех объектов одного типа метаданных

Если необходимо учитывать один алгоритм для всех объектов одного типа метаданных (например: не выгружать помеченные на удаления справочники), то можно воспользоваться глобальными обработчиками, в них прописать один раз алгоритм, который будет действовать для всех существующих и новых объектов. Такой подход позволяет избежать дублирования кода и не забыть написать необходимый алгоритм для новых справочников.

Например, для задачи – не выгружать помеченные на удаления справочники, необходимо в глобальном обработчике «Перед выгрузкой объекта» написать следующий алгоритм:

Перенос субконто по своим правилам

У одного типа субконто могут присутствовать несколько правил выгрузки объекта, и система в таком случае будет по умолчанию выбирать одно определенное правила согласно приоритету и наименованию. Если же необходимо выгрузить субконто не по выбранному по умолчанию правилу, то можно воспользоваться следующим алгоритмом:

1. Для реквизита «Субконто» в обработчике «Перед выгрузкой»:

2. Перенос плана видов характеристик «Виды Субконто Хозрасчетные» (см. рисунок 5):

Рисунок 5 – Перенос плана видов характеристик.

3. Для реквизита «Субконто» в обработчике «При выгрузке»:

Описывается последовательность действий для каждого типа субконто.

Важный момент. Обязательно нужно прописать алгоритм выгрузки для каждого возможного типа субконто. После того, как добавлен код в обработчик «При выгрузке», типовое определение правила от типа субконто не срабатывает.

Поиск полей

Конвертация данных позволяет разрабатывать собственные алгоритмы поиска элементов на стороне приемника, для этого предназначен обработчик «Поля поиска».

В обработчике «Поля поиска» могут участвовать только те реквизиты, у которых установлен признак «Поиск» в конвертации свойств (см. рисунок 6). Данные реквизиты не обязательно должны участвовать в поиске нужного элемента, они могут присутствовать в различной другой логике алгоритма (например: в условиях алгоритма обработчика «Поля поиска»).

Рисунок 6 – Реквизиты доступные для обработчика «Поля поиска»

            Пример обработчика «Поля поиска»:

            В обработчике мы можем задать до 10 итераций через переменную «НомерВариантаПоиска». В каждой итерации в зависимости от условий задать поля поиска элемента через переменную «СтрокаИменСвойствПоиска» (наименование полей задаются, как они заданы у приемника). Получить значение поля поиска можно через структуру «СвойстваПоиска» (наименование полей задаются, как они заданы у приемника). Для прекращения поиска нужно использовать переменную «ПрекратитьПоиск».

Реквизиты узлов источника и приемника

В конвертации данных можно обращаться к реквизитам плана обмена. Это может быть необходимо, например, при тиражировании правил обмена на несколько баз и некоторые особенности функционала отличаются между базами (данные особенности будут учитываться с помощью реквизитов плана обмена).

На стороне источника, чтобы обратиться к узлу плана обмена, необходимо использовать переменную: «УзелДляОбмена».

Например, в правилах обмена на стороне источника можно обратиться к ИНН выбранной организации в плане обмена:

На стороне приемника, чтобы обратиться к узлу плана обмена, необходимо использовать переменную: «УзелОбменаЗагрузкаДанных».

Например, в правилах обмена на стороне приемника можно обратиться к ИНН выбранной организации в плане обмена:

Протокол (лог) синхронизации между базами

Важным элементом обмена между базами является протокол (лог) синхронизации. Данный протокол должен показывать в удобном виде всю необходимую информацию об обмене (количество выгруженных элементов; список выгруженных элементов; ошибки обмена и т.д.). Чем сложнее алгоритмы обмена, тем более расширенный должен быть лог (например: у нас несколько документов на стороне источника объединяются в один документ на стороне приемника, в таком случае протокол должен показывать, как документы объединялись). Лог должен содержать значимую информацию, которая оперативно поможет разобраться с вопросами связанными с синхронизацией.

Можно выделить три наиболее частых варианта создания протокола (лога) синхронизации между базами без кастомизации баз источника и приемника:

1) Записывать всю необходимую информацию в журнал регистрации. Данный подход имеет существенные недостатки. Чаще всего журнал регистрации имеет большой объем информации, это влияет на скорость анализа нужной информации (журнал регистрации может работать медленно), и предоставление данных в журнале регистрации не всегда удобно для анализа данных. 

2) Отправлять все необходимые данные на электронную почту. После каждой синхронизации записывать данные в регистр сведений (ОтправкаEmail) для последующей отправки необходимым адресатам. В данном случае недостаток в том, что может возникнуть большое количество писем за день, и в них будет сложно проводить анализ.

3) Записывать всю необходимую информацию во внешний источник (файлы excel и т.д.). Данный подход является наиболее предпочтительный, т.к. можно создать 1 файл в день, в него дописывать всю нужную информацию за день в удобном виде для анализа.

Можно выбрать любой из данных подходов или кастомизировать базы источника и приемника для хранения лога в самих базах, но наличие подробного протокола (лога) может помочь во многих вопросах, связанных с синхронизацией между базами.

Передача параметра из источника в табличную часть приемника

При возникновении задач заполнения на стороне приемника в табличной части колонок, отсутствующих на стороне источника по данным колонок, которые отсутствуют на стороне приемника. Можно воспользоваться функционалом передачи значений отсутствующих колонок на стороне приемника в параметры табличной части и на основании этих данных заполнять нужную колонку.

            Передача значений табличной части из источника в параметры табличной части приемника имеет ряд особенностей:

1. Необходимо в конвертации свойств табличной части приемника создать необходимый параметр. Если параметр имеет не примитивный тип, то указать также правило конвертации (см. рисунок 7).


Рисунок 7 – Создание параметра в конвертации свойств табличной части приемника.

2. Важный момент! Заполнение параметра должно всегда происходить в переменную «Значение» в обработчике «Перед выгрузкой». Из входящих данных параметр не сможет заполниться (будет выдаваться сообщение об ошибки) (см. рисунок 8).

Рисунок 8 – Заполнение параметра в конвертации свойств табличной части.

3. На стороне приемника обращение к параметрам табличной части происходит в обработчике «После загрузки» через соответствие «ПараметрыОбъекта» по следующему правилу:

  • если параметр был создан в табличной части, то обращение будет типа: [Наименование табличной части] + ТабличнаяЧасть (например: «ТоварыТабличнаяЧасть»);

  • если параметр был создан в наборе движений регистра, то обращение будет типа: [Наименование набора движений регистра] + Набор записей (например: «ХозрасчетныйНаборЗаписей»);

Например:

Заключение

Рассмотренные приемы работы позволят повысить производительность и эффективность работы с программой «Конвертация данных 2.1». Описанные приемы в данной статье и в первой статье затрагивают наиболее частые нетривиальные задачи использования конвертации данных, изучив обе статьи, подобные задачи уже не будут вызывать сложностей.

Ретунский (2).png

Статью подготовил аналитик-эксперт по информационным системам «ИнфоСофт» Ретунский Александр.
Статья опубликована на портале ИнфоСтарт

Поле объекта недоступно для записи в 1С

После обновления или доработки конфигурации пользователи иногда сталкиваются с ошибкой в 1С 8.3 «Поле объекта недоступно для записи». Разберем, с чем связана ошибка и как ее исправить на примерах в платформе 8.3.15.1747. Для самостоятельного решения задачи пользователю потребуются начальные знания в области 1С программирования.

Причины появления ошибки

При появлении ошибки после обновления конфигурации достаточно дождаться выхода исправленной версии. Разработчики 1С оперативно реагируют на возникшие проблемы и решают вопрос в короткие сроки. Но лучше подстраховаться заранее и либо предварительно устанавливать обновления на тестовую базу, либо иметь в запасе актуальную резервную копию.

Если конфигурация изменялась, редактировалась под нужды организации, то для устранения ошибки лучше обратиться к программисту 1С.

Сообщение «Поле объекта недоступно для записи (Имя_поля)» выдается пользователю, когда программа в процессе исполнения кода не может присвоить элементу требуемое значение.

Доступно только для чтения данных

При работе с объектами 1С различают два способа обращения к данным:

  • ссылка — содержит только представление объекта, часто это код и наименование. Сам объект не загружается. Доступ к реквизитам получают разыменованием: обращением через точку. Ссылки читаются из базы, но не изменяются;
  • объект — включает данные в полном объеме, в т. ч. реквизиты, табличные части, которые можно создавать, удалять и редактировать.

Ссылочные данные программисты используют, когда не потребуется изменять объект. Программа обрабатывает ссылки быстрее, т. к. из базы загружается только информация об объекте — ссылка, а не сам объект целиком со всеми реквизитами и другими входящими в него данными. Для записи изменений из ссылки получают объект: например, с помощью метода ПолучитьОбъект(). Если это не сделано, и присвоение нового значения производится ссылочному полю, возникает ошибка «Поле объекта недоступно для записи».

Для перехода к месту ошибки:

  • запустите конфигурацию в режиме отладки через конфигуратор Отладка — Начать отладку;
  • повторите действия, приводящие к ошибке;
  • в окне предупреждения нажмите Подробно, затем Конфигуратор.

В открывшемся служебном окне в нижней части конфигуратора отразится информация о месте сбоя:

  • Поле объекта недоступно для записи (ВалютаДенежныхСредств) — тест ошибки и имя элемента, куда программа пытается сохранить данные;
  • Справочник.Контрагенты.Форма.ФормаЭлемента.Форма(137) — путь до модуля, где расположена выполняемая строка кода, и порядковый номер строки с ошибкой;
  • НайденныйБанковскийСчет.ВалютаДенежныхСредств = БанковскийСчет.ВалютаДенежныхСредств — команда записи изменений, в которой возникает сбой.

Чтобы исправить ошибку:

1. Поставьте точку останова на строке кода из служебного сообщения.

2. Перейдите в режим отладки конфигурации по кнопке Начать отладку.

3. Выполните действия, приводящие к появлению ошибки, и исполнение программы остановится на отмеченной строке кода;

4. С помощью команды контекстного меню Вычислить выражение определите тип объекта, которому присваивается значение:

  • НайденныйБанковскийСчет — содержит ссылку на элемент справочника Банковские счета;

  • ВалютаДенежныхСредств — реквизит справочника Банковские счета, имеет ссылочный тип данных на справочник Валюта.

При определении типа выделяйте объект постепенно: сначала узнайте тип первой часть объекта до точки, далее увеличивайте количество выделенных частей. Если реквизит имеет ссылочный тип данных, результат в окне Выражение может быть неверно понят пользователем. Почти всегда в операциях присваивания последним указывается реквизит объекта.

5. Для получения объекта впишите строку кода с использованием соответствующего метода:

  • документы, справочники, планы счетов и др. — ПолучитьОбъект();
  • константы, перечисления, регистры и др. — Получить()Прочитать();
    Подробное описание методов смотрите в Синтакс-Помощнике.

6. В выражении замените ссылку на объект.

Объекты конфигурации делятся:

  • объекты (ДокументОбъект.[Имя] и др.) — можно найти в базе по ссылке. На вкладке Прочее в окне редактирования объекта конфигурации есть Модуль объекта;
  • набор записей — для изменения одной записи регистров, перечислений используют менеджер записи, для констант — менеджер значения.

Ошибку «Поле объекта недоступно для записи» 1С выдает при неправильной записи как объектных данных, так и наборов записей. Обращение с записями лучше не исправлять самостоятельно, а поручить программисту.

Попытка изменить системные поля

В 1С существуют специальные системные поля, которым программа присваивает значения по умолчанию:

  • порядковый номер строки;
  • номер группировки;
  • уровень группировки.

Системные поля доступны только для чтения. Создаются автоматически к элементам: например, номера строк табличных частей или уровень группировки в отчете. Повлиять на них пользователь не может. При попытке изменить значение будет выдано окно с предупреждением:

Один из вариантов решения:

1. Выключите отображение системного поля через свойство Видимость.

2. Добавьте свой реквизит в табличную часть кнопкой Добавить колонку реквизита.

3. Замените в строке кода, где возникает ошибка, системное поле на имя созданного реквизита.

Имя переменной совпадает с именем объекта

При использовании переменных в программном коде следует задавать им наименования, отличные от зарезервированных за объектами системы. В противном случае программа посчитает их не переменными, которым можно присваиваться любое значение, а элементами базы соответствующего типа с уже заданными значениями.

В примере в переменную Документы пытаются записать результат выборки документов. В процессе выполнения программы пользователю выдается сообщение «Поле объекта недоступно для записи (Документ)». Для решения проблемы измените имя переменной, но оно не должно начинаться с цифры и совпадать с другими переменными во избежание конфликтных ситуаций.

Кроме команды равенства логично предположить, что переменная используется в последующем коде, где после изменения имени начнут возникать различные сбои. Поэтому поменять наименование нужно во всем местах, в которых она упоминается.

Изменение элемента формы

Еще один пример кода, приводящий к ошибке «Поле объекта недоступно для записи», — неверное обращение к полям формы при попытке присвоить им новое значение.

Формы содержат коллекцию элементов формы, через разыменование (точку) получают доступ к полю, таблице и т. д. и управляют их свойствами. Элементы используются для графической визуализации информации на форме. Они не содержат данные, путь к ним прописан в свойстве Путь к данным.

Чтобы изменить значение элемента, используют:

  • реквизиты объекта;

  • реквизиты, созданные в форме;

  • свойство ТекущиеДанные при обращении к данным текущей строки табличной части.

Ошибку «Поле объекта недоступно для записи» сможет исправить пользователь самостоятельно, если он хоть немного разбирается в программном коде. Все изменения рекомендуется сначала произвести в тестовой базе. При возникновении затруднений передайте программисту 1С информацию об ошибке.

Вмешательство в программный код при отсутствии необходимых навыков может повлечь за собой другие сбои и повреждения в структуре базы данных.

Обслуживание

Заказать консультацию

По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.

Ваша ошибка заключается в недопонимании различий между метаданными. Обработки в отличии от справочников, документов и так далее не описывают хранимую в базе данных информацию — это набор алгоритмов по обработке данных и описание графического/программного интерфейса взаимодействия с пользователем.

В реквизитах обработки, а так же на форме обработки в реквизитах самой формы могут размещаться некоторые данные, но данные из значения таких реквизитов существуют только на протяжении времени жизни обработки. Ни до создания экземпляра обработки, ни после её закрытия эти данные не существуют.

В вашем примере существует обработка под названием «Связь», в которой есть табличная часть «Таблица». Запросы языка 1С указанным вами способом (путь по метаданным) могут получать выборки лишь из данных, которые сохранены в СУБД базы. Т.е. у вас ничего не выйдет. Но язык запросов позволяет делать запросы еще и к структурам в памяти, если их передавать в качестве параметров. Вы можете поступить следующим образом:

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Таблица", Таблица);
Запрос.Текст = 
"ВЫБРАТЬ Т.Документ, Т.Клиент, Т.Сумма
|ПОМЕСТИТЬ втТаблица
|ИЗ &Таблица КАК Т;
|
|ВЫБРАТЬ Клиент, СУММА(втТаблица.Сумма)
|ИЗ втТаблица
|СГРУППИРОВАТЬ ПО Клиент";
Итоги = Запрос.Выполнить().Выгрузить();

1

2

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Д.И.А

Дата регистрации: 11.03.2012
Сообщений: 64

Добрый день ребята, к простым формам(не управ), в табличной части созданны два реквизита(Сотрудник,Сумма),то есть две колонки,и две с помощью наведения на табличную часть,контекстное меню,добавить колонку(Количество,Статья),теперь вопрос,знатоки! <br>КАК ОБРАТИТЬСЯ К ЭТИ КОЛОНКАМ,ЧТОБ ПРИ ИЗМЕНЕНИИ СОТРУДНИКА(РЕКВИЗИТА В ТАБ. ЧАСТИ) ДОБАВЛЯЛАСЬ СТАТЬЯ(Справочники.Сотрудники.Статья), ни как не могу сделать, подскажите пжл

Д.И.А

Дата регистрации: 11.03.2012
Сообщений: 64

Prikum

активный пользователь

онлайн

Дата регистрации: 18.02.2002
Сообщений: 20834

В лесу аукать будешь! Здесь никто не обязан, бросать свои дела и решать чужие проблемы!

Prikum

активный пользователь

онлайн

Дата регистрации: 18.02.2002
Сообщений: 20834

Через коллекцию колонок табличной части можно получить доступ к любой колонке. Остальное скажет Синтаксис-помощник, если конечно ты его не обидел.

Тэра

Дата регистрации: 25.12.2008
Сообщений: 22390

ну чего ругаешься на человека, — заблудился, страшно…

Д.И.А

Дата регистрации: 11.03.2012
Сообщений: 64

«Все перепробывал ниче не помогает……<br>ЭлементыФормы.ТабличнаяЧасть.Колонки.Статья.Данные = Строка(Сотрудник.Статья); <br>Ошибка при установке значения атрибута контекста (Данные)<br>ЭлементыФормы.ТабличнаяЧастьХ.ТекущиеДанные.РеквизитY=<br> Поле объекта не обнаружено (Ячейки)<br>АктивнаяСтрока = ЭлементыФормы.ТабличнаяЧасть.текущиеДанные <br>Статья = АктивнаяСтрока.Статья<br>не работает<br>Что еще можно сделать?»

Д.И.А

Дата регистрации: 11.03.2012
Сообщений: 64

ShirA84

Дата регистрации: 02.12.2009
Сообщений: 340

«Процедура ИмяТабЧастиСтатьяПриИзменении (элемент)<br> <br>СтрТЧ = ЭлементыФормы.ИмяТабЧасти.ТекущиеДанные;<br> <br>Запрос = Новый Запрос;<br>Запрос.Текст = <br>»ВЫБРАТЬ<br>|Справочники.Сотрудники.Статья<br>|ИЗ<br>| Справочник.Сотрудники КАК Сотрудники<br>|ГДЕ<br>| Сотрудники.Ссылка = &Ссылка»;<br> <br>Запрос.УстановитьПараметр(«Ссылка», СтрТЧ.Сотрудник);<br> Результат = Запрос.Выполнить();<br> ВыборкаДетальныеЗаписи = Результат.Выбрать(); <br> <br>Пока ВыборкаДетальныеЗаписи.Следующий() Цикл<br>Статья = ВыборкаДетальныеЗаписи.Статья<br>КонецЦикла; <br> <br>СтрокаТЧ.Статья = Статья;<br> <br>Сообщить («Както так если я правильно понял вопрос»);<br> <br>КонецПроцедуры»

ShirA84

Дата регистрации: 02.12.2009
Сообщений: 340

блин погнал процедура будет ИмяТабЧастиСотрудникПриИзменении

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

Что будет при повторном открытии формы объекта. Увидим мы в табличной части какую-нибудь информацию по статье?

После обновления или доработки конфигурации пользователи иногда сталкиваются с ошибкой в 1С 8.3 «Поле объекта недоступно для записи». Разберем, с чем связана ошибка и как ее исправить на примерах в платформе 8.3.15.1747. Для самостоятельного решения задачи пользователю потребуются начальные знания в области 1С программирования.

Содержание

  • 1 Причины появления ошибки
    • 1.1 Доступно только для чтения данных
    • 1.2 Попытка изменить системные поля
    • 1.3 Имя переменной совпадает с именем объекта
    • 1.4 Изменение элемента формы
    • 1.5 Вам будет интересно

Причины появления ошибки

При появлении ошибки после обновления конфигурации достаточно дождаться выхода исправленной версии. Разработчики 1С оперативно реагируют на возникшие проблемы и решают вопрос в короткие сроки. Но лучше подстраховаться заранее и либо предварительно устанавливать обновления на тестовую базу, либо иметь в запасе актуальную резервную копию.

Если конфигурация изменялась, редактировалась под нужды организации, то для устранения ошибки лучше обратиться к программисту 1С.

Сообщение «Поле объекта недоступно для записи (Имя_поля)» выдается пользователю, когда программа в процессе исполнения кода не может присвоить элементу требуемое значение.

image002

Доступно только для чтения данных

При работе с объектами 1С различают два способа обращения к данным:

  • ссылка — содержит только представление объекта, часто это код и наименование. Сам объект не загружается. Доступ к реквизитам получают разыменованием: обращением через точку. Ссылки читаются из базы, но не изменяются;
  • объект — включает данные в полном объеме, в т. ч. реквизиты, табличные части, которые можно создавать, удалять и редактировать.

image004

Ссылочные данные программисты используют, когда не потребуется изменять объект. Программа обрабатывает ссылки быстрее, т. к. из базы загружается только информация об объекте — ссылка, а не сам объект целиком со всеми реквизитами и другими входящими в него данными. Для записи изменений из ссылки получают объект: например, с помощью метода ПолучитьОбъект(). Если это не сделано, и присвоение нового значения производится ссылочному полю, возникает ошибка «Поле объекта недоступно для записи».

image006

Для перехода к месту ошибки:

  • запустите конфигурацию в режиме отладки через конфигуратор Отладка — Начать отладку;
  • повторите действия, приводящие к ошибке;
  • в окне предупреждения нажмите Подробно, затем Конфигуратор.

В открывшемся служебном окне в нижней части конфигуратора отразится информация о месте сбоя:

image008

  • Поле объекта недоступно для записи (ВалютаДенежныхСредств) — тест ошибки и имя элемента, куда программа пытается сохранить данные;
  • Справочник.Контрагенты.Форма.ФормаЭлемента.Форма(137) — путь до модуля, где расположена выполняемая строка кода, и порядковый номер строки с ошибкой;
  • НайденныйБанковскийСчет.ВалютаДенежныхСредств = БанковскийСчет.ВалютаДенежныхСредств — команда записи изменений, в которой возникает сбой.

Чтобы исправить ошибку:

  1. Поставьте точку останова на строке кода из служебного сообщения.image010
  2. Перейдите в режим отладки конфигурации по кнопке Начать отладку.
  3. Выполните действия, приводящие к появлению ошибки, и исполнение программы остановится на отмеченной строке кода;
  4. С помощью команды контекстного меню Вычислить выражение определите тип объекта, которому присваивается значение:
    image012
  5. Для получения объекта впишите строку кода с использованием соответствующего метода:
    • документы, справочники, планы счетов и др. — ПолучитьОбъект();
    • константы, перечисления, регистры и др. — Получить(), Прочитать();
      Подробное описание методов смотрите в Синтакс-Помощнике.
  6. В выражении замените ссылку на объект.
    image020

Объекты конфигурации делятся:

  • объекты (ДокументОбъект.[Имя] и др.) — можно найти в базе по ссылке. На вкладке Прочее в окне редактирования объекта конфигурации есть Модуль объекта;
  • набор записей — для изменения одной записи регистров, перечислений используют менеджер записи, для констант — менеджер значения.

Ошибку «Поле объекта недоступно для записи» 1С выдает при неправильной записи как объектных данных, так и наборов записей. Обращение с записями лучше не исправлять самостоятельно, а поручить программисту.

Попытка изменить системные поля

В 1С существуют специальные системные поля, которым программа присваивает значения по умолчанию:

  • порядковый номер строки;
  • номер группировки;
  • уровень группировки.

Системные поля доступны только для чтения. Создаются автоматически к элементам: например, номера строк табличных частей или уровень группировки в отчете. Повлиять на них пользователь не может. При попытке изменить значение будет выдано окно с предупреждением:

image022image024

Один из вариантов решения:

  1. Выключите отображение системного поля через свойство Видимость.image026
  2. Добавьте свой реквизит в табличную часть кнопкой Добавить колонку реквизита.image028
  3. Замените в строке кода, где возникает ошибка, системное поле на имя созданного реквизита.image030

Имя переменной совпадает с именем объекта

При использовании переменных в программном коде следует задавать им наименования, отличные от зарезервированных за объектами системы. В противном случае программа посчитает их не переменными, которым можно присваиваться любое значение, а элементами базы соответствующего типа с уже заданными значениями.

image032

В примере в переменную Документы пытаются записать результат выборки документов. В процессе выполнения программы пользователю выдается сообщение «Поле объекта недоступно для записи (Документ)». Для решения проблемы измените имя переменной, но оно не должно начинаться с цифры и совпадать с другими переменными во избежание конфликтных ситуаций.

Кроме команды равенства логично предположить, что переменная используется в последующем коде, где после изменения имени начнут возникать различные сбои. Поэтому поменять наименование нужно во всем местах, в которых она упоминается.

image034

Изменение элемента формы

Еще один пример кода, приводящий к ошибке «Поле объекта недоступно для записи», — неверное обращение к полям формы при попытке присвоить им новое значение.

image036

Формы содержат коллекцию элементов формы, через разыменование (точку) получают доступ к полю, таблице и т. д. и управляют их свойствами. Элементы используются для графической визуализации информации на форме. Они не содержат данные, путь к ним прописан в свойстве Путь к данным.

Чтобы изменить значение элемента, используют:

Ошибку «Поле объекта недоступно для записи» сможет исправить пользователь самостоятельно, если он хоть немного разбирается в программном коде. Все изменения рекомендуется сначала произвести в тестовой базе. При возникновении затруднений передайте программисту 1С информацию об ошибке.

Вмешательство в программный код при отсутствии необходимых навыков может повлечь за собой другие сбои и повреждения в структуре базы данных.

См. также:

  • Переменная не определена
  • Метод объекта не обнаружен
  • Поле объекта не обнаружено
  • Нарушение прав доступа 1С 8.3: внешняя обработка
  • Не обнаружена установленная версия 1С Предприятия 8.3
  • Неверный формат хранилища данных 1С
  • Использование модальных окон в данном режиме запрещено в 1С

Поставьте вашу оценку этой статье:

Загрузка…

Дата публикации: Янв 20, 2021

Поставьте вашу оценку этой статье:

Загрузка…

Судя по Вашему описания у вас есть некоторые недочеты  в структуре Вашей БД.
Во-первых: это избыточность информации. То есть, значения характеристик повторяются и в справочнике «Контрагенты» и в справочнике «Договора».
Во-вторых: у Вас присутствует лишние «прогоны» данных между справочниками. При создании нового договора происходит запрос данных из справочника «Контрагенты» и размещение их в справочнике «Договора». Затем, при записи данных в справочнике «Договора», данные пересылаются обратно в справочник «Контрагенты». А это не очень хорошо сказывается на производительности.
И еще есть один подводный камень. Вы пишите, что в договоре возможно придется что-то менять: добавлять или удалять. При такой постановке вопроса, Вам точно придется использовать регистры сведений. Ведь может быть такая ситуация — контрагент ООО «Добрый гном» регулярно поставляет вам гвозди и доски, а однажды по случаю продал вашей фирме красивую вазу для холла. Эта поставка была разовая и, скорее всего, она более не повторится. Как быть с  такой поставкой. Если её внести в договор вместе с гвоздями и досками, то она будет выглядеть не совсем уместной. Она перенесется в справочник «Контрагенты», а затем, при создании нового договора  с данным поставщиком запись  о поставке вазы отразится вместе с гвоздями и досками. Оператор создавший новый договор со спокойной совестью удалит запись о вазе из договора (ведь новом договоре о вазе нет и речи), но, при этом, запись о вазе исчезнет и в контрагенте. Как говорится: «Вот она была и нету».

Я бы сделал так.

Справочник «контрагенты содержит общие данные:
Наименование;
ИНН/КПП;
Адрес и т.п.
Булевых реквизитов типа «Поставщик», «Арендодатель», «Подрядчик» и т.д. в справочнике «Контрагенты быть не должно. Эти реквизиты заменяются на «Тип отношений» в справочнике «Договора».
Ведь может быть такая ситуация — появится новый тип отношений (например Аутсортинг) и что, вы будете добавлять в справочник еще одно булево поле и перекраивать форму.
По моему мнению, проще создать справочник «Отношения» из которого, при создании нового договора, очень просто будет выбрать значение.

Справочник «Договора» (а может даже лучше документ «Договора») содержит:
Тип отношений (поставка, подряд, аренда и т.п.);
Табличную часть со значениями характеристик;
и т.п.
Для каждого статуса контрагента (арендодатель, поставщик, и.т.п.) создается свой договор.
Для каждой разовой хозяйственной операции, также создается отдельный договор. Тогда, ничего не потеряется и упроститься отчетность по контрагенту.
А при необходимости получить данные о хозяйственных взаимоотношениях с контрагентом есть такой инструмент как отчет, который предоставит информацию в любом желаемом разрезе.

Моё мнение — Вам надо перекроить структуру Вашей БД.
И прочитайте популярную статью «Нормализация баз данных», это поможет в дальнейшем избежать многих ошибок при проектировании БД.
ПРИМЕЧАНИЕ. Дальше третей формы не изучайте. И поищите статью, где объяснения даются простым языком, без математической зауми.

Если будут вопросы можете писать мне на email.
Просто, я не знаю интересна ли еще остальным участникам форума данная тема.

Настраиваю план обмена между БП и Док, с использованием стандартных правил между Бухгалтерией и Документоборотом. Переношу справочники Контрагенты и Конт. лица. Там есть алгоритм для переноса контактной информации.. Так вот при загрузке данных в Документооборот выдает ошибку: Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.    Объект                 =  СОТРУДНИКИ    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.    ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)    Текст                  =  Имя табличной части: КонтактнаяИнформация отсюда СОТРУДНИКИ это группа а не элемент..Я так понимаю он пытается обратится к табличной части группы но т.к ее попросту нету и заканивает ошибкой или почему так? дописываю в алгоритм переноса контакт. информации уже это: КоллекцияОбъектов.Колонки.Добавить(«Вид»); ….такое ощущение как будьто условие не срабатывает. Помогите пожалуйста решить эту задачу, замучался с ними ужасно:(

Если перенос только этих 2 справочников — можешь и сам написать правила — почитай здесь (конвертация с нуля)

Кстати с чем то подобным встречался — если переносишь много справочников — перенеси сначало эти 2, а потом остальные — звучит глупо но мне однажды помогло

SIS72 спасиба там я читал..вообщем стандартные правила не совсем подходят, я их чуть чуть допилил. В универсальной выгрузке правила работают, в планах остановка на ошибке(

нужно отказаться от выгрузки таб. части если объект ЭтоГруппа. А у тебя в ПКГС +code Если НЕ Источник.Ссылка.ЭтоГруппа Тогда +code все равно передают в приемник, что таб. часть у СОТРУДНИКИ есть, только она пустая.

SuperMario а как это сделать в конвертации??

или где это сделать? не дописывать же мне код в обработку КонвертацияОбъектовИнформационныхБаз

В ПКГС в обработчик ПередВыгрузкой Отказ = Источник.ЭтоГруппа;

добавил теперь план обмена ругается на это: Ошибка в обработчике события ПередВыгрузкойОбъекта    ПВД                    =  Контрагенты    Объект                 =  Торговый дом «Комплексный»  (Справочник объект: Контрагенты)    Обработчик             =  ПередВыгрузкойОбъектаВыборки    ОписаниеОшибки         =  Метод объекта не обнаружен (ЭтоГруппа) Т_Т

Так у тебя и выборка идет по произвольному алгоритму. Смотри в ПВД Контрагенты. Наверняка запрос. Добавь признак группы.

и ошибка в ПВД и не того ПКо, который в описан. Ничего не понял. Куда вставил отказ от выгрузки? Нужно для ПКО Корреспонденты в ПередВыгрузкой ПКГС

соррь.в пвд видать лишнее было написано,удалил оттуда. посмотрите пожалуйста. вот сюда нада? поставил туда, при загрузке в ДО, все равно ошибка( Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.    Объект                 =  СОТРУДНИКИ    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.    ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)    Текст                  =  Имя табличной части: ДополнительныеРеквизиты    КСообщенияОбОшибках    =  83

ну и что не понятно? Теперь ругается на таб. часть Дополнительные документы. А ты поставил только для таб. части Контактной информации ;)

сорь. попутал  с ДополнительныеРеквизиты

А какие у тебя реквизиты поиска стоят для этого ПКО? Не получилось ли так, что в источнике «СОТРУДНИКИ» — это элемент справочника, а в приемнике это группа? Поиск по свойству «ЭтоГруппа» стоит?

дадада, Поиск по ИНН и по ЭтоГруппа. Т.е убрать его? в стандартных правилах так стояло я решил не трогать.

НЕт. Поиск по Этогруппа нужен обязательно. Иначе косанет. Тогда отказ от выгрузки ДополнительныеРеквизиты для групп должен решить проблему.

добавил отказ для ДополнительныеРеквизиты: Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.    Объект                 =  СОТРУДНИКИ    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Очистить): Объект недоступен для изменения.    ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(5805)    Текст                  =  Имя табличной части: КонтактнаяИнформация    КСообщенияОбОшибках    =  83

в xml файле записи: вопрос правильно ли алгоритм для выгрузки стоит в процедуре ПередОбработкойВыгрузки ? в стандартных правилах так. мб в этом дело??

может отказ перед ПередОбработкойВыгрузки запихнуть??

вродь получилось=)) спасиба  SuperMario, поставил отказ перед обработкой.. Перед обработкой Условия возникновения события Событие выполняется перед обработкой группы свойств, например, перед выгрузкой табличной части. Возможен отказ от выгрузки. Можно определить произвольную коллекцию, являющуюся источником данных.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Войти или зарегистрироваться

8.х ОБМЕН Обмен данными.ОбменУправлениеНебольшойФирмойБухгалтерия20.Загрузка данных

Тема в разделе «Обмен данными в «1С:Предприятие 8″», создана пользователем Himon, 14 май 2014.




0/5,
Голосов: 0
  1. TopicStarter Overlay

    Himon

    Offline

    Himon
    Опытный в 1С

    Регистрация:
    26 июл 2012
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26

    Добрый день! Происходит ошибка при обмене Бухгалтерия предприятия (базовая), редакция 2.0 (2.0.57.4) — Управление небольшой фирмой, редакция 1.4 (1.4.2.22). Обмен проходит через файл xml. При загрузке в УНФ ошибка:
    «Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.
    ТипОбъекта = Справочник объект: Контрагенты
    Объект = <>
    ОписаниеОшибки = Ошибка при вызове метода контекста (Загрузить): Объект недоступен для изменения.
    ПозицияМодуля = Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(6326)
    Текст = Имя табличной части: КонтактнаяИнформация
    КСообщенияОбОшибках = 83″

    Подскажите пожалуйста! Что делать? «Куда копать?» Спасибо!


    Himon,
    14 май 2014
    #1

  2. Настройщик

    Offline

    Настройщик
    Опытный в 1С

    Регистрация:
    17 окт 2010
    Сообщения:
    208
    Симпатии:
    8
    Баллы:
    29

    УНФ у Вас очень старая. В Бухгалтерии 2.0.57 правила для обмена с УНФ 1.4.7. Обновитесь для начала.


    Настройщик,
    14 май 2014
    #2
  3. TopicStarter Overlay

    Himon

    Offline

    Himon
    Опытный в 1С

    Регистрация:
    26 июл 2012
    Сообщения:
    105
    Симпатии:
    0
    Баллы:
    26

    УНФ дописанная, правила не типовый! Загрузка из двух аналогичных баз бухгалтерии идет без ошибок, а с этой базой ошибка. Дат запрета не стоит, права полные. «Обновитесь для начала» — Если бы все было так просто, я бы к Вам не обращался!


    Himon,
    15 май 2014
    #3
(Вы должны войти или зарегистрироваться, чтобы ответить.)
Показать игнорируемое содержимое
Похожие темы

  1. uanr81

    7.7
    Загрузка справочника данными

    uanr81,
    15 янв 2011
    , в разделе: Отчеты и обработки для «1С:Предприятие 7.7»
    Ответов:
    2
    Просмотров:
    1.043
    uanr81
    23 янв 2011

  2. Vladius

    8.х ОБМЕН
    Обмен данными с РИБ перестал работать обмен

    Vladius,
    18 апр 2012
    , в разделе: Обмен данными в «1С:Предприятие 8»
    Ответов:
    2
    Просмотров:
    2.125
    nomad_irk
    11 фев 2015

  3. Reader

    8.х ОБМЕН
    Ошибка при загрузке данных через (Обработка «Выгрузка и загрузка данных XML»)

    Reader,
    26 апр 2012
    , в разделе: Обмен данными в «1С:Предприятие 8»
    Ответов:
    2
    Просмотров:
    4.119
    Reader
    26 апр 2012

  4. Will

    8.х ОБМЕН
    Обмен данными УТ 10.3 — БП 2.0 (замена данных за год)

    Will,
    13 май 2013
    , в разделе: Обмен данными в «1С:Предприятие 8»
    Ответов:
    4
    Просмотров:
    421
    Will
    16 май 2013

Загрузка…

Поделиться этой страницей

Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Поиск

  • Искать только в заголовках
Сообщения пользователя:

Имена участников (разделяйте запятой).

Новее чем:
  • Искать только в этой теме
  • Искать только в этом разделе
    • Отображать результаты в виде тем

Быстрый поиск

  • Последние сообщения

Больше…

  • Главная
  • Карьера
  • Блог о жизни франчайзи
  • Про 1С от наших сотрудников

15 Сентября 2020

Конвертация строки в справочник (перечисления) и обратно

Конвертация строки в справочник

Если в базе источника реквизит имеет тип «Строка», а в базе приемника тип «Справочник», то необходимо разработать отдельное правило конвертации объектов. Обязательно в правиле оставить Объект-источник пустым, иначе при выгрузке будет выдаваться ошибка. В конвертации объекта описать поля поиска, а также реквизит, в который будет грузиться значения реквизита объекта источника, и при необходимости описать заполнение остальных реквизитов справочника. В правиле в обработчике «Перед выгрузкой» реквизита написать следующий алгоритм (см. рисунок 1).

Рисунок 1 – Описание обработчика «Перед Выгрузкой».

Конвертация строки в перечисление

Если в базе источника реквизит имеет тип «Строка», а в базе приемника тип «Перечисление», то отдельное правило конвертации объектов разрабатывать не нужно, все действия описываются в конвертации свойств. Необходимо в обработчике «Перед выгрузкой» свойства описать алгоритм заполнения перечисления объекта приемника от значений реквизита объекта источника, то есть:

Конвертация справочника в строку

Если в базе источника реквизит имеет тип «Справочник», а в базе приемника тип «Строка», то отдельное правило конвертации объектов разрабатывать не нужно, все действия описываются в конвертации свойств. Необходимо в обработчике «Перед выгрузкой» свойства описать алгоритм заполнения реквизита объекта приемника от реквизита справочника объекта источника, то есть:

Конвертация перечисления в строку

Если в базе источника реквизит имеет тип «Перечисление», а в базе приемника тип «Строка», то отдельное правило конвертации объектов разрабатывать не нужно, все действия описываются в конвертации свойств. Необходимо в обработчике «Перед выгрузкой» свойства описать алгоритм заполнения реквизита объекта приемника от перечисления объекта источника, то есть:

Конвертация справочника в перечисление (перечисление в справочник)

Конвертация справочника в перечисление

Данная задача становится актуальной с учетом изменения перечисления «Ставки НДС» на справочник в новых конфигурациях. Теперь при конвертации объектов из новых конфигураций (тип: справочник) в конфигурации, где ставки НДС еще являются перечислением, необходимо будет разрабатывать соответствующее правило конвертации объектов.

1. Необходимо в правиле конвертации объектов на вкладке «Настройки», включить свойство «Не запоминать выгруженные объекты» (см. рисунок 2).

Рисунок 2 – Не запоминать выгруженные объекты.

Иначе система будет перезаписывать выгрузку одного и того же значения перечисления.

2. Не использовать конвертацию значений (предопределенные значения справочника в значения перечисления).

Будет использоваться обработчик «При выгрузке», а при использовании данного обработчика конвертация значений не отрабатывает.

3. В конвертации объекта в обработчике «При выгрузке» необходимо прописать следующий код:

      

То есть нам необходимо в переменную «УзелСсылки» присвоить значение метаданных перечисления, которое соответствует базе приемника, тогда система автоматически при загрузке определит нужное значение.

Конвертация перечисления в справочник

Для конвертации перечисления в справочник, потребуется отдельное правило конвертации объектов. В данном правиле можно воспользоваться конвертацией значений (конвертация значений перечисления в предопределенные значения), и необходимо описать поля поиска, а также реквизит, в который будет грузиться значение перечисления (например: реквизит — наименование), и при необходимости описать заполнение остальных реквизитов справочника. В правиле в обработчике «Перед выгрузкой» реквизита написать следующий алгоритм (см. рисунок 1).

Отключение проверки полей поиска

В созданных правилах конвертации объектов, по которым не заполнена колонка «Поля поиска» при сохранении правил, система предложит указать автоматически поля поиска (см. рисунок 3).

Рисунок 3 – Предупреждение – не указаны поля поиска.

При каждом сохранении правил, система будет выдавать данное сообщение. Если при достаточно большом количестве правил случайно нажать «Да», то система создаст поля поиска по всем правилам, и может потребоваться достаточно большое время восстанавливать обратно. Чтобы избежать таких неприятных ситуаций, данную проверку можно отключить (путь: Сервис – Настройки пользователя) (см. рисунок 4).

Рисунок 4 – Отключение проверки полей поиска.

Не регистрировать документы к обмену при определенных действиях

Документы регистрируются к обмену по правилам регистрации объектов при любых действиях (проведение, выполнение различных обработок и т.д.). Если необходимо не регистрировать документы при определенных действиях (например: при выполнении обработки по перепроведению документов), то можно использовать функционал дополнительные свойства.

В месте изменения документа, который не должен регистрироваться к обмену, нужно установить дополнительное свойство. В правилах регистрации объектов по документу в обработчике событий «После обработки» добавить:

В таком случае документ при групповом перепроведении не будет регистрироваться к обмену.

Общий алгоритм для всех объектов одного типа метаданных

Если необходимо учитывать один алгоритм для всех объектов одного типа метаданных (например: не выгружать помеченные на удаления справочники), то можно воспользоваться глобальными обработчиками, в них прописать один раз алгоритм, который будет действовать для всех существующих и новых объектов. Такой подход позволяет избежать дублирования кода и не забыть написать необходимый алгоритм для новых справочников.

Например, для задачи – не выгружать помеченные на удаления справочники, необходимо в глобальном обработчике «Перед выгрузкой объекта» написать следующий алгоритм:

Перенос субконто по своим правилам

У одного типа субконто могут присутствовать несколько правил выгрузки объекта, и система в таком случае будет по умолчанию выбирать одно определенное правила согласно приоритету и наименованию. Если же необходимо выгрузить субконто не по выбранному по умолчанию правилу, то можно воспользоваться следующим алгоритмом:

1. Для реквизита «Субконто» в обработчике «Перед выгрузкой»:

2. Перенос плана видов характеристик «Виды Субконто Хозрасчетные» (см. рисунок 5):

Рисунок 5 – Перенос плана видов характеристик.

3. Для реквизита «Субконто» в обработчике «При выгрузке»:

Описывается последовательность действий для каждого типа субконто.

Важный момент. Обязательно нужно прописать алгоритм выгрузки для каждого возможного типа субконто. После того, как добавлен код в обработчик «При выгрузке», типовое определение правила от типа субконто не срабатывает.

Поиск полей

Конвертация данных позволяет разрабатывать собственные алгоритмы поиска элементов на стороне приемника, для этого предназначен обработчик «Поля поиска».

В обработчике «Поля поиска» могут участвовать только те реквизиты, у которых установлен признак «Поиск» в конвертации свойств (см. рисунок 6). Данные реквизиты не обязательно должны участвовать в поиске нужного элемента, они могут присутствовать в различной другой логике алгоритма (например: в условиях алгоритма обработчика «Поля поиска»).

Рисунок 6 – Реквизиты доступные для обработчика «Поля поиска»

            Пример обработчика «Поля поиска»:

            В обработчике мы можем задать до 10 итераций через переменную «НомерВариантаПоиска». В каждой итерации в зависимости от условий задать поля поиска элемента через переменную «СтрокаИменСвойствПоиска» (наименование полей задаются, как они заданы у приемника). Получить значение поля поиска можно через структуру «СвойстваПоиска» (наименование полей задаются, как они заданы у приемника). Для прекращения поиска нужно использовать переменную «ПрекратитьПоиск».

Реквизиты узлов источника и приемника

В конвертации данных можно обращаться к реквизитам плана обмена. Это может быть необходимо, например, при тиражировании правил обмена на несколько баз и некоторые особенности функционала отличаются между базами (данные особенности будут учитываться с помощью реквизитов плана обмена).

На стороне источника, чтобы обратиться к узлу плана обмена, необходимо использовать переменную: «УзелДляОбмена».

Например, в правилах обмена на стороне источника можно обратиться к ИНН выбранной организации в плане обмена:

На стороне приемника, чтобы обратиться к узлу плана обмена, необходимо использовать переменную: «УзелОбменаЗагрузкаДанных».

Например, в правилах обмена на стороне приемника можно обратиться к ИНН выбранной организации в плане обмена:

Протокол (лог) синхронизации между базами

Важным элементом обмена между базами является протокол (лог) синхронизации. Данный протокол должен показывать в удобном виде всю необходимую информацию об обмене (количество выгруженных элементов; список выгруженных элементов; ошибки обмена и т.д.). Чем сложнее алгоритмы обмена, тем более расширенный должен быть лог (например: у нас несколько документов на стороне источника объединяются в один документ на стороне приемника, в таком случае протокол должен показывать, как документы объединялись). Лог должен содержать значимую информацию, которая оперативно поможет разобраться с вопросами связанными с синхронизацией.

Можно выделить три наиболее частых варианта создания протокола (лога) синхронизации между базами без кастомизации баз источника и приемника:

1) Записывать всю необходимую информацию в журнал регистрации. Данный подход имеет существенные недостатки. Чаще всего журнал регистрации имеет большой объем информации, это влияет на скорость анализа нужной информации (журнал регистрации может работать медленно), и предоставление данных в журнале регистрации не всегда удобно для анализа данных. 

2) Отправлять все необходимые данные на электронную почту. После каждой синхронизации записывать данные в регистр сведений (ОтправкаEmail) для последующей отправки необходимым адресатам. В данном случае недостаток в том, что может возникнуть большое количество писем за день, и в них будет сложно проводить анализ.

3) Записывать всю необходимую информацию во внешний источник (файлы excel и т.д.). Данный подход является наиболее предпочтительный, т.к. можно создать 1 файл в день, в него дописывать всю нужную информацию за день в удобном виде для анализа.

Можно выбрать любой из данных подходов или кастомизировать базы источника и приемника для хранения лога в самих базах, но наличие подробного протокола (лога) может помочь во многих вопросах, связанных с синхронизацией между базами.

Передача параметра из источника в табличную часть приемника

При возникновении задач заполнения на стороне приемника в табличной части колонок, отсутствующих на стороне источника по данным колонок, которые отсутствуют на стороне приемника. Можно воспользоваться функционалом передачи значений отсутствующих колонок на стороне приемника в параметры табличной части и на основании этих данных заполнять нужную колонку.

            Передача значений табличной части из источника в параметры табличной части приемника имеет ряд особенностей:

1. Необходимо в конвертации свойств табличной части приемника создать необходимый параметр. Если параметр имеет не примитивный тип, то указать также правило конвертации (см. рисунок 7).


Рисунок 7 – Создание параметра в конвертации свойств табличной части приемника.

2. Важный момент! Заполнение параметра должно всегда происходить в переменную «Значение» в обработчике «Перед выгрузкой». Из входящих данных параметр не сможет заполниться (будет выдаваться сообщение об ошибки) (см. рисунок 8).

Рисунок 8 – Заполнение параметра в конвертации свойств табличной части.

3. На стороне приемника обращение к параметрам табличной части происходит в обработчике «После загрузки» через соответствие «ПараметрыОбъекта» по следующему правилу:

  • если параметр был создан в табличной части, то обращение будет типа: [Наименование табличной части] + ТабличнаяЧасть (например: «ТоварыТабличнаяЧасть»);

  • если параметр был создан в наборе движений регистра, то обращение будет типа: [Наименование набора движений регистра] + Набор записей (например: «ХозрасчетныйНаборЗаписей»);

Например:

Заключение

Рассмотренные приемы работы позволят повысить производительность и эффективность работы с программой «Конвертация данных 2.1». Описанные приемы в данной статье и в первой статье затрагивают наиболее частые нетривиальные задачи использования конвертации данных, изучив обе статьи, подобные задачи уже не будут вызывать сложностей.

Ретунский (2).png

Статью подготовил аналитик-эксперт по информационным системам «ИнфоСофт» Ретунский Александр.
Статья опубликована на портале ИнфоСтарт

  • Ошибка обрыв цепи датчика распредвала
  • Ошибка обращения к контейнеру закрытого ключа registry
  • Ошибка обращения к внешней системе втб что это
  • Ошибка обрыв цепи датчика кислорода калина
  • Ошибка обращения к контейнеру закрытого ключа 0x8010006c