Итак.
Дано: Две идентичные по конфигурауии базы. Необходимо выполнить синхронизацию цен в элементе справочника ТМЦ. Цены и единицы товара - подчинены справочнику ТМЦ.
Кто = Там.CreateObject("Справочник.Сотрудники");
Если Кто.НайтиПоНаименованию(АвторДока.Наименование,0) = 0 Тогда
Сообщить("Извините, нет в той базе сотрудника "+АвторДока.Наименование+" ... Запись автора цены проводится не будет!");
КонецЕсли;
//Поиск товара, цен и единиц товара в другой базе
ТМЦ = Там.CreateObject("Справочник.ТМЦ");
ТТТ = СоздатьОбъект("Справочник.ТМЦ");
ТТТ.НайтиЭлемент(ТекущийЭлемент());
ТТТ1 = Там.CreateObject("Справочник.ТМЦ");
Если ТМЦ.НайтиПоКоду(ТекущийЭлемент().Код) = 1 тогда
Сообщить("Найдено ТМЦ с кодом "+ТМЦ.Код+". Имя ему "+Тмц.Наименование);
попытка
// ТТТ1.НайтиЭлемент(ТМЦ);
Сообщить("Записи на дату "+ДатаРекв);
//ТМЦ.ИспользоватьДату(Датарекв);
Сообщить("Использовали там дату");
ТМЦ.УстановитьАтрибут("УчетнаяЦена",УчетнаяЦена.Получить(ДатаРекв));
Сообщить("Должна записаться "+ТТТ.УчетнаяЦена.Получить(ДатаРекв)+" в товар "+ТМЦ.наименование);
ТМЦ.Записать();
Сообщить("Записали");
исключение
Сообщить("!!! Ошибка записи учетной цены !!!");
КонецПопытки;
КЕТам = Там.CreateObject("Справочник.КлассификаторЕдИзм");
КЦТам = Там.CreateObject("Справочник.КатегорииЦен");
//Сравниваем единицы у товаров
ЕТам = Там.CreateObject("Справочник.Единицы");
ЕТам.ИспользоватьВладельца(Тмц.ТекущийЭлемент());
Е = СоздатьОбъект("Справочник.Единицы");
Е.ИспользоватьВладельца(ТекущийЭлемент());
Е.ВыбратьЭлементы();
Пока Е.ПолучитьЭлемент() = 1 Цикл
Если Е.ПометкаУдаления() = 1 Тогда
продолжить;
КонецЕсли;
Если КЕТам.НайтиПоНаименованию(Е.Единица.Наименование) = 0 Тогда
КЕТам.Новый();
КЕТам.наименование = Е.Единица.Наименование;
КЕТам.ПолнНаименование = Е.Единица.ПолнНаименование; //Поиск классификатора единицы измерения как в единице
КЕТам.Записать();
Сообщить("В той базе не найден классификатор единиц измерения "+Е.Единица.Наименование+". Создан новый!");
КонецЕсли;
Найдено = 0;
ЕТам.ВыбратьЭлементы();
Пока ЕТам.ПолучитьЭлемент() = 1 Цикл
Если ЕТам.ПометкаУдаления() = 1 Тогда
продолжить;
КонецЕсли;
Если (Е.Наименование = ЕТам.Наименование) и (Е.Коэффициент = Етам.Коэффициент) и (Е.Единица.Наименование = ЕТам.Единица.Наименование) Тогда
Найдено = 1;
Прервать;
КонецЕсли;
КонецЦикла;
Если Найдено = 0 Тогда
ЕТам.Новый();
Етам.Наименование = Е.Наименование;
Етам.Единица =КЕТам.ТекущийЭлемент();
Етам.Коэффициент = Е.Коэффициент;
ЕТам.Вес = Е.Вес;
Етам.Записать();
Сообщить("Не найдена единица "+Е.Наименование+" в той базе. Создана новая!");
КонецЕсли;
КонецЦикла;
Цена = Там.CreateObject("Справочник.Цены");
Цена.ИспользоватьДату(ДатаРекв);
Цена.ИспользоватьВладельца(ТМЦ.ТекущийЭлемент());
Ц = СоздатьОбъект("Справочник.Цены");
Ц.ИспользоватьВладельца(ТекущийЭлемент());
Ц.ВыбратьЭлементы();
Пока Ц.ПолучитьЭлемент() = 1 Цикл
Если Ц.ПометкаУдаления() = 1 Тогда
продолжить;
КонецЕсли;
ТЦ = СокрЛП((Ц.КатегорияЦены.Наименование));
Если КЦТам.НайтиПоНаименованию(СокрЛП(Ц.КатегорияЦены.Наименование)) = 0 Тогда
КЦТам.Новый();
КЦТам.Наименование = Ц.КатегорияЦены.Наименование;
КЦТам.Комментарий = Ц.КатегорияЦены.Комментарий; //Поиск категории цены там
КЦТам.ТорговаяНаценка = Ц.КатегорияЦены.ТорговаяНаценка;
КЦТам.БПДВ = Ц.КатегорияЦены.БПДВ;
КЦТам.РЦ = Ц.КатегорияЦены.РЦ;
КЦТам.СКТов = Ц.КатегорияЦены.СКтов;
КЦТам.Записать();
Сообщить("В той базе не найден тип цены "+Ц.КатегорияЦены.Наименование+". Создан новый!");
КонецЕсли;
Ед = СокрЛП(Ц.Единица.Получить(ДатаРекв).Наименование);
Цена.ВыбратьЭлементы();
Пока Цена.ПолучитьЭлемент() = 1 Цикл
Найдено = 0;
Если Цена.ПометкаУдаления() = 1 Тогда
продолжить;
КонецЕсли;
Если (СокрЛП(Цена.КатегорияЦены.Наименование) = ТЦ) и (СокрЛП(Цена.Единица.Наименование) = Ед) Тогда
Найдено = 1;
БылоЦ = Цена.Цена;
БылоН = Цена.Наценка;
Цена.Цена = Ц.Цена.Получить(датаРекв);
Цена.Наценка = Ц.Наценка.Получить(датаРекв);
Цена.Записать();
Сообщить("Обновление цены "+Цена.КатегорияЦены.Наименование+" для единицы "+Цена.Единица.Наименование+". Изменение цены с "+БылоЦ+" на "+
Цена.Цена+", изменение наценки с "+БылоН+" на "+Ц.Наценка.Получить(ДатаРекв));
прервать;
КонецЕсли;
КонецЦикла;
Если Найдено = 0 Тогда
Цена.ИспользоватьДату(ДатаРекв);
Цена.Новый();
Цена.Записать();
Цена.Наименование = Ц.Наименование;
Цена.Валюта = Там.Константа.БазоваяВалюта;
Цена.Цена = Ц.ТекущийЭлемент().Цена.Получить(датаРекв);
Цена.Наценка = Ц.ТекущийЭлемент().Наценка.Получить(датаРекв);
ЕТам.ВыбратьЭлементы();
Пока ЕТам.ПолучитьЭлемент() = 1 Цикл
Если ЕТам.ПометкаУдаления() = 1 Тогда
продолжить;
КонецЕсли;
Если (Ц.Единица.Получить(датаРекв).Наименование = ЕТам.Наименование) и (Ц.Единица.Получить(датаРекв).Коэффициент = Етам.Коэффициент) и
(Ц.Единица.Получить(датаРекв).Единица.Наименование = ЕТам.Единица.Наименование) Тогда
Найдено = 1;
Прервать;
КонецЕсли;
КонецЦикла;
Если Найдено = 0 Тогда
Сообщить("*Не получилось найти единицу товара для цены "+КЦТам.Наименование+"* Цена не записана!");
иначе
Цена.Единица = ЕТам.ТекущийЭлемент();
Цена.КатегорияЦены = КЦТам.ТекущийЭлемент();
Цена.АЦ = Ц.АЦ.Получить(ДатаРекв);
Если Кто.НайтиПоНаименованию(Ц.АвторДока.Получить(ДатаРекв).Наименование,0) = 0 Тогда
Цена.АвторДока = Кто.ТекущийЭлемент();
КонецЕсли;
Цена.Записать();
Сообщить("Цена "+Ц.КатегорияЦены+" с единицей "+Ед+" не найдена! Создана новая цена.");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Выводит:
Найдено ТМЦ с кодом 010100001. Имя ему АПВ-2,5
Записи на дату 24.05.14
Использовали там дату
!!! Ошибка записи учетной цены !!!
Обновление цены Дистрибуция для единицы м.. Изменение цены с 0.525 на 0.525, изменение наценки с 25 на 25
Обновление цены Закуп. без НДС для единицы м.. Изменение цены с 0.347 на 0.347, изменение наценки с -7.05 на -7.05
Обновление цены Закупочная счет для единицы м.. Изменение цены с 0 на 0, изменение наценки с 0 на 0
Обновление цены ЗакупочнаяСНДС для единицы м.. Изменение цены с 0 на 0, изменение наценки с 0 на 0
Обновление цены Монтажная для единицы м.. Изменение цены с 0.4536 на 0.4536, изменение наценки с 8 на 8
Обновление цены Оптовая 1 для единицы м.. Изменение цены с 0.525 на 0.525, изменение наценки с 25 на 25
Обновление цены Оптовая Киев для единицы м.. Изменение цены с 0.483 на 0.483, изменение наценки с 15 на 15
Обновление цены Розничная для единицы м.. Изменение цены с 0.567 на 0.567, изменение наценки с 35 на 35
Обновление цены Специальная для единицы м.. Изменение цены с 0.441 на 0.441, изменение наценки с 5 на 5
В итоге. Все цены обновились, а учетна цена (периодический реквизит ТМЦ) осталась.
Были опробованы варианты с:
ТМЦ = Там.CreateObject("Справочник.ТМЦ");
ТТТ = СоздатьОбъект("Справочник.ТМЦ");
ТТТ.НайтиЭлемент(ТекущийЭлемент());
ТТТ1 = Там.CreateObject("Справочник.ТМЦ");
Если ТМЦ.НайтиПоКоду(ТекущийЭлемент().Код) = 1 тогда
Сообщить("Найдено ТМЦ с кодом "+ТМЦ.Код+". Имя ему "+Тмц.Наименование);
попытка
ТМЦ.ИспользоватьДату(Датарекв);
Сообщить("Использовали там дату ");
ТМЦ.УчетнаяЦена = ТТТ.УчетнаяЦена.Получить(ДатаРекв);
Сообщить("Должна записаться "+ТТТ.УчетнаяЦена.Получить(ДатаРекв));
Сообщить("Установили там дату");
ТМЦ.Записать();
Сообщить("Записали");
исключение
Сообщить("!!! Ошибка записи учетной цены !!!");
КонецПопытки;
КонецЕсли;
Итог такой же. Где ошибаюсь?

Поправочка. В нижнем варианте. Пишет, что цена записана, но в базе, где должна быть обновлениа, не обновляется. Код пересмотрел уже раз 20. В упор не вижу где ошибка. Причем обновление справочника Цены, в котором тоже присутствуют периодические реквизиты прошло без проблем.
! | Правила, п.13 |
Релиз 27. Конфигурация - глубоко переделанная ПУБ.