helpf.pro
Регистрация

Ошибка Поле объекта недоступно для записи

bless18
01.09.2010 11:59Прочитано: 10449
Здравствуйте!
В процедуре ОбработкаПроведения() В строках
Код 1C v 8.х
 
Движение.СубконтоДт = ТекСтрокаТМЗ.Товар;
Движение.СубконтоДт = ЭтотОбъект.Получил;

выдается ошибка "Поле объекта недоступно для записи"
это разве неправильная запись назначения СубконтоДт?
Yandex
Возможно, вас также заинтересует
Реклама на портале
bless18
01.09.2010 12:00Ответ № 1
На всякий случай пришлю код проведения по всему регистру бухгалтерии:
Код 1C v 8.х
 
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Для Каждого ТекСтрокаТМЗ Из ТМЗ Цикл
// регистр Типовой

//Проводки
Ошибки = 0;
ИтогоУчет = 0;

//Подготовка
Если ТекСтрокаТМЗ.СуммаУчет = 0 Тогда
Продолжить;
КонецЕсли;
Счет = ТекСтрокаТМЗ.ВидТМЗ.СчетТМЗ;
СчетКредит = ТекСтрокаТМЗ.ВидСписания.СчетРасходов;
Субконто1 = Счет.ВидыСубконто[0];
Субконто2 = Счет.ВидыСубконто[1];

ВидСубконто = Счет.ВидыСубконто[0].ВидСубконто;
Типсубконто = ВидСубконто.ТипЗначения.Типы()[0];
ОписаниеТиповВидаСубконто = ВидСубконто.ТипЗначения;



Движение = Движения.Типовой.Добавить();
Движение.Период = Дата;
//Себестоимость
Движение.СчетДт = Счет;
ТекСтрокаТМЗ.Товар = ОписаниеТиповВидаСубконто.ПривестиЗначение(ТекСтрокаТМЗ.СубконтоСписания1);
//ТекСтрокаТМЗ["Товар"] = Субконто1.ВидСубконто.ТипЗначения.ПривестиЗначение();
ЭтотОбъект.Получил = ОписаниеТиповВидаСубконто.ПривестиЗначение(ТекСтрокаТМЗ.СубконтоСписания2);
Движение.СубконтоДт = ТекСтрокаТМЗ.Товар;
Движение.СубконтоДт = ЭтотОбъект.Получил;

Движение.СчетКт = ТекСтрокаТМЗ.ВидСписания;
//ТекСтрокаТМЗ["СубконтоСписания1"] = Субконто1.ВидСубконто.ТипЗначения.ПривестиЗначение();
//ТекСтрокаТМЗ["СубконтоСписания2"] = Субконто2.ВидСубконто.ТипЗначения.ПривестиЗначение();
ТекСтрокаТМЗ["СубконтоСписания1"] = ОписаниеТиповВидаСубконто.ПривестиЗначение(ТекСтрокаТМЗ.СубконтоСписания1);
ТекСтрокаТМЗ["СубконтоСписания2"] = ОписаниеТиповВидаСубконто.ПривестиЗначение(ТекСтрокаТМЗ.СубконтоСписания2);

Движение.СубконтоКт = ТекСтрокаТМЗ["СубконтоСписания1"];
Движение.СубконтоКт = ТекСтрокаТМЗ["СубконтоСписания2"];

Если (Счет.Количественный = Истина) Или (СчетКредит.Количественный = Истина) Тогда
Движение.КоличествоДт = ТекСтрокаТМЗ.Количество;
Движение.КоличествоКт = ТекСтрокаТМЗ.Количество;
КонецЕсли;

Движение.Содержание = ТекСтрокаТМЗ.ВидСписания.Наименование;
Движение.НомерЖурнала = "ТВ";
Движение.Организация = Организация;
Движение.Сумма = ТекСтрокаТМЗ.СуммаУчет;
ИтогоУчет = Окр(ИтогоУчет + ТекСтрокаТМЗ.СуммаУчет, 2);

// Для Каждого ТекСтрокаТМЗ Из ТМЗ Цикл
Если ТекСтрокаТМЗ.ВидСписания.Пустая()Тогда
ТекСтрокаТМЗ.ВидСписания = ТекСтрокаТМЗ.ВидТМЗ;
Если НЕ Счет.Пустая() Тогда
ТекСтрокаТМЗ["СубконтоСписания1"] = Субконто1.ВидСубконто.ТипЗначения.ПривестиЗначение();
ТекСтрокаТМЗ["СубконтоСписания2"] = Субконто2.ВидСубконто.ТипЗначения.ПривестиЗначение();
КонецЕсли;
КонецЕсли;
// КонецЦикла;

//Ставки а/д на ГП
Спр = Справочники.ВидыДеятельности;
СпрСтавки = Справочники.СтавкиНалогов;

СчетНП = ПланыСчетов.Типовой.НезавершенноеПроизводство;
СчетГП = ПланыСчетов.Типовой.ГотоваяПродукция;
СчетНалогов = ПланыСчетов.Типовой.НалогиКОплате;
Ставки = СпрСтавки.Выбрать().Ссылка;
СтавкаПродАД = Ставки.СтавкаПродАД;
СчетЗатратАД = Ставки.СчетАД;
СтатьяЗатратАД = Ставки.СтатьяАД;
СуммаАД = 0;

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

Пока Выборка.Следующий() Цикл //Пока СпрСтавки.ПолучитьЭлемент() = 1 Цикл
Если СпрСтавки.Выбрать().ВидДеятельности = Константы.ВидДеятельностиГП Тогда
Ставки = СпрСтавки.Выбрать().Ссылка;
Прервать;
КонецЕсли
КонецЦикла;

//Контроль ТМЗ
Если (Счет.ВидыСубконто[0] = ПланыВидовХарактеристик.ВидыСубконтоТиповые.Номенклатура) Тогда
Если (Константы.СебестоимостьПосреднему = 0) И
(ТекСтрокаТМЗ.ЦенаУчет <> ТекСтрокаТМЗ.Товар.ЦенаУчет) И (ТекСтрокаТМЗ.Товар.ЦенаУчет > 0) Тогда
Сообщить("Строка" + Формат(ТекСтрокаТМЗ.НомерСтроки, "Ч4") + ". Цена прихода не равна цене учетной в Справочнике");
Ошибки = Ошибки + 1;
КонецЕсли;
КонецЕсли;

//Контроль ОС, НМА
Если (Счет.ВидыСубконто[0] = ПланыВидовХарактеристик.ВидыСубконтоТиповые.ОсновныеСредства) Или
(Счет.ВидыСубконто[0] = ПланыВидовХарактеристик.ВидыСубконтоТиповые.НематериальныеАктивы) Тогда

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

//Контроль ошибок
Если (Ошибки > 0) И (Константы.КонтрольПроведенияДокументов = 1) Тогда
Если Вопрос("Есть ошибки, провести документ ?",1) <> 1 Тогда
Сообщить("Документ не проведен!");
Возврат;
КонецЕсли;
КонецЕсли;

Для Каждого ТекСтрокаТМЗ Из ТМЗ Цикл
// регистр Остатки Приход
Движение = Движения.Остатки.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Организация = Организация;
Движение.ТМЗ = ТекСтрокаТМЗ.ВидТМЗ;
Движение.Номенклатура = ТекСтрокаТМЗ.Товар;
Движение.Получил = Получил;
Движение.ВалютаПрихода = Константы.ОснВалюта;
Движение.Количество = ТекСтрокаТМЗ.Количество;
Счет = ТекСтрокаТМЗ.ВидТМЗ.СчетТМЗ;
Если ТекСтрокаТМЗ.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Если Счет.ВидыСубконто[0] = ПланыВидовХарактеристик.ВидыСубконтоТиповые.Номенклатура Тогда
Если Не ТекСтрокаТМЗ.Товар.Валюта.Пустая() Тогда
Движение.ВалютаТовара = ТекСтрокаТМЗ.Товар.Валюта;
Иначе
Движение.ВалютаТовара = Константы.ОтпВалюта;
КонецЕсли;
ИначеЕсли Счет.ВидыСубконто[0] = ПланыВидовХарактеристик.ВидыСубконтоТиповые.ОсновныеСредства Тогда
ЦенаПрихода = ТекСтрокаТМЗ.ЦенаУчет;
УстановитьНомерДокумента(ЭтотОбъект);
Если ЗначениеНеЗаполнено(ДатаПервДок) Тогда
ДатаПрихода = Дата;
Иначе
ДатаПрихода = ДатаПервДок;
КонецЕсли;
Движение.ВалютаПрихода = Константы.ОснВалюта;
КонецЕсли;
КонецЦикла;

E_Migachev
01.09.2010 13:35Ответ № 2
(0) это правильно написано, покажи целиком ошибку!
может он все-таки ругется на ЭтотОбъект.Получил = ОписаниеТиповВидаСубконто.ПривестиЗначение(ТекСтрокаТМЗ.СубконтоСписания2); ?
bless18
01.09.2010 13:45Ответ № 3
оказалось, что ругается из-за того, что нужно написать вместо
Код 1C v 8.х
 Движение.СубконтоДт = ТекСтрокаТМЗ.Товар;    

следующее:
Код 1C v 8.х
 		
Субконто1 = Счет.ВидыСубконто[0].ВидСубконто;
Движение.СубконтоДт[Субконто1] = ТекСтрокаТМЗ.Товар;
E_Migachev
01.09.2010 14:00Ответ № 4
(3) точно )
bless18
01.09.2010 14:26Ответ № 5
Вопрос закрыт!
Подсказка: Для быстрого поиска ответов - используйте 'Поиск'
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.