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

Ует ТМЗ определение типа справочника

bless18
20.08.2010 15:19Прочитано: 2090
Здравствуйте!
Столкнулась с такой проблемой, необходимо переписать учет ТМЗ с версии 7.7 на 8.1
Имеется документ Поступление товаров с табличной частью ТМЗ. Ее реквизиты СчетКт - тип Справочник.ВидыСписания, СубконтоСписания1, СубконтоСписания2 - тип Справочник.Ссылка,ВидТМЗ - Справочник.СсылкаВидыТМЗ, Наименование - тип Справочник.Ссылка
Нужно, чтобы при выборе СчетКт автоматически брались нужные значения субконто по этому счету, то есть, если СчетКт = ТМЗ, то Субконто1 = Номенклатура, Субконто2 = МестаХранения.
Yandex
Возможно, вас также заинтересует
Реклама на портале
bless18
20.08.2010 15:20Ответ № 1
Это работает по следующему коду
Код 1C v 8.х
 
Процедура ПриВыбореВидаСписания(Субконто1, Субконто2)
СтрокаТЗ = ЭлементыФормы.ТМЗ.ТекущиеДанные;
ИмяКолонки = ЭлементыФормы.ТМЗ.ТекущаяКолонка.Имя;
МаксКоличествоСубконто = Метаданные.ПланыСчетов.Типовой.МаксКоличествоСубконто;

Если (ИмяКолонки = "СчетКт") Тогда

Счет = СтрокаТЗ.ВидСписания.СчетРасходов;

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

Процедура ПриВыбореСуб()
СтрокаТЗ = ЭлементыФормы.ТМЗ.ТекущиеДанные;
Суб1Выб = СтрокаТЗ.СубконтоСписания1;
Суб2Выб = СтрокаТЗ.СубконтоСписания2;
КонецПроцедуры
Процедура ТМЗСубконтоСписания1ПриИзменении(Элемент)
ПриВыбореСуб();
КонецПроцедуры
Процедура ТМЗСубконтоСписания2ПриИзменении(Элемент)
ПриВыбореСуб();
КонецПроцедуры
// В соответствии с выбранным счетом назначили субконто
bless18
20.08.2010 15:25Ответ № 2
Теперь необходимо, чтобы в поле ТЧ Товар выбирался соответсвующий тип справочника
В семерке код такой:
Код 1C v 7.x
 
Процедура ПриВыбореТовара()
Если СчетТМЗ.ВидСубконто(1) = ВидыСубконто.Номенклатура Тогда
ЦенаУчет = Товар.ЦенаУчет;
ИначеЕсли СчетТМЗ.ВидСубконто(1) = ВидыСубконто.Номенклатура Тогда
ЦенаУчет = Товар.ЦенаУчет;
КонецЕсли;
КонецПроцедуры

Все прекрасно работает, пишу подобное на восьмерке поле Товар не получает тип соответсвующего справочника. Подскажите, как можно устранить эту проблему
bless18
20.08.2010 16:09Ответ № 3
На 8.1 написала такой код:
Код 1C v 8.х
 
СтрокаТЗ = ЭлементыФормы.ТМЗ.ТекущиеДанные;
ИмяКолонки = ЭлементыФормы.ТМЗ.ТекущаяКолонка.Имя;
Если СтрокаТЗ["СубконтоСписания1"] = Справочники.МестаХранения Тогда
ЦенаУчетная = СтрокаТЗ.Товар.ЦенаУчетная;
СтрокаТЗ.Товар = Справочники.Номенклатура;
Если СтрокаТЗ["СубконтоСписания2"] = Справочники.МестаХранения Тогда
ЦенаУчетная = СтрокаТЗ.Товар.ЦенаУчетная;
СтрокаТЗ.Товар = Справочники.Номенклатура;
КонецЕсли;
КонецЕсли;
bless18
20.08.2010 16:10Ответ № 4
Но Колонка Товар по-прежнемк имеет тип разных справочников
E_Migachev
20.08.2010 16:20Ответ № 5
так наверное:
Код 1C v 8.х
 
СтрокаТЗ = ЭлементыФормы.ТМЗ.ТекущиеДанные;
ИмяКолонки = ЭлементыФормы.ТМЗ.ТекущаяКолонка.Имя;
Если СтрокаТЗ["СубконтоСписания1"] = Справочники.МестаХранения Тогда
ЦенаУчетная = СтрокаТЗ.Товар.ЦенаУчетная;
СтрокаТЗ.Товар = Справочники.Номенклатура;
ИначеЕсли СтрокаТЗ["СубконтоСписания2"] = Справочники.МестаХранения Тогда
ЦенаУчетная = СтрокаТЗ.Товар.ЦенаУчетная;
СтрокаТЗ.Товар = Справочники.Номенклатура;
КонецЕсли;


а СубконтоСписания1" - это реквизит табличной части?
bless18
20.08.2010 19:18Ответ № 6
(5) E_Migachev, с таким кодом, ксожалению, тип табличного поля Товар так и остается неопределенным
Да, СубконтоСписания1 является реквизитом табличной части, как и СубконтоСписания2
E_Migachev
23.08.2010 10:58Ответ № 7
(6) а ) , понял что ты имеешь ввиду, нужно присвоить Тип поля Товар,точно не помню как, попробуй программно:
Код 1C v 8.х
 СтрокаТЗ.Товар = Новый ОписаниеТипов("СправочникСсылка.МестаХранения")
// или
СтрокаТЗ.Товар = Тип("СправочникСсылка.МестаХранения");


или в Конфигураторе в Свойствах ячейки товар Укажи в Использовании - Связь по Типу: ЭлементыФормы.ТМЗ.ТекущиеДанные.СубконтоСписания1

Отпиши потом как получилось *13
bless18
23.08.2010 12:26Ответ № 8
Попробовала первый и второй способ, что-то не хочет работать.
Смотрю в семерке есть процедуры Подбор() и ОбработкаПодбора()
Код 1C v 7.x
 
Процедура ПриВыбореТовара()
Если СчетТМЗ.ВидСубконто(1) = ВидыСубконто.Номенклатура Тогда
ЦенаУчет = Товар.ЦенаУчет;
ИначеЕсли СчетТМЗ.ВидСубконто(1) = ВидыСубконто.Номенклатура Тогда
ЦенаУчет = Товар.ЦенаУчет;
КонецЕсли;
КонецПроцедуры
//_____________________________________________________________________________
Процедура Подбор()
Спр = СоздатьОбъект("Справочник.ВидыТМЗРаботУслуг");
Если Спр.Выбрать("Укажите вид ТМЗ","") = 1 Тогда
ВидТМЗВыбр = Спр.ТекущийЭлемент();
КонецЕсли;
СчетТМЗ = ВидТМЗВыбр.СчетТМЗ;
Если СчетТМЗ.ВидСубконто(1) = ВидыСубконто.Номенклатура Тогда
ОткрытьПодбор("Справочник.Номенклатура","Учет");
ИначеЕсли СчетТМЗ.ВидСубконто(1) = ВидыСубконто.ОсновныеСредства Тогда
ОткрытьПодбор("Справочник.ОсновныеСредства","");
ИначеЕсли СчетТМЗ.ВидСубконто(1) = ВидыСубконто.НематериальныеАктивы Тогда
ОткрытьПодбор("Справочник.НематериальныеАктивы","");
КонецЕсли;
КонецПроцедуры
//_____________________________________________________________________________
Процедура ОбработкаПодбора(ВыбрТовар)
НоваяСтрока();
Товар = ВыбрТовар;
Кол = 0;
Если ВвестиЧисло(Кол,"Введите количество",10,3)=0 Тогда
АктивизироватьСтроку();
УдалитьСтроку();
Возврат;
КонецЕсли;
Если Кол = 0 Тогда
АктивизироватьСтроку();
УдалитьСтроку();
Иначе
Цена = Товар.ЦенаУчет;
ЦенаНов = 0;
ВвестиЧисло(ЦенаНов,"Введите учетную цену "+СокрЛП(Формат(Цена,"Ч15.4")),15,4);
ЦенаУчет = ?(ЦенаНов=0,Цена,ЦенаНов);
Количество = Кол;
ВидСписания = ВидСписанияВыб;
СубконтоСписания1 = Суб1Выб;
СубконтоСписания2 = Суб2Выб;
ВидТМЗ = ВидТМЗВыб;
ПриВыбореВидаТМЗ();
Пересчет();
АктивизироватьСтроку();
КонецЕсли;
КонецПроцедуры


Предполагаю, что они как-то влияют на определение типа поля "Товар"
bless18
23.08.2010 13:22Ответ № 9
Написала такую вещь:
Код 1C v 8.х
 
Процедура ТМЗТоварПриИзменении(Элемент)
СтрокаТЗ = ЭлементыФормы.ТМЗ.ТекущиеДанные;
ИмяКолонки = ЭлементыФормы.ТМЗ.ТекущаяКолонка.Имя;

Спр = Справочники.ВидыТМЗРаботУслуг.СоздатьЭлемент();

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


Если СтрокаТЗ["СубконтоСписания1"] = Справочники.Номенклатура Тогда
ЦенаУчетная = СтрокаТЗ.Товар.ЦенаУчетная;
СтрокаТЗ.Товар = Новый ОписаниеТипов("Справочник.Номенклатура");
//СтрокаТЗ.Товар = Справочники.Номенклатура;
ИначеЕсли СтрокаТЗ["СубконтоСписания2"] = Справочники.МестаХранения Тогда
ЦенаУчетная = СтрокаТЗ.Товар.ЦенаУчетная;
СтрокаТЗ.Товар = Новый ОписаниеТипов("Справочник.МестаХранения");
КонецЕсли;

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


Но программа даже не заходит в эту процедуру, в чем же может быть дело? *09
E_Migachev
23.08.2010 14:34Ответ № 10
ПолучитьФорму - это получить форму выбора, тебе это не зачем, т.к процедура при изменени срабатывает после выбора товара!
Стоп!,*18 а если ты уже выбрала товар, то зачем ты пытаешься еще программно его выбрать?
bless18
23.08.2010 15:41Ответ № 11
Поняла.. это тупо *13
Теперь делаю так - пытаюсь назначить тип Товару так
Код 1C v 8.х
 
Процедура ПриВыбореВидаТМЗ()
СтрокаТЗ = ЭлементыФормы.ТМЗ.ТекущиеДанные;
ИмяКолонки = ЭлементыФормы.ТМЗ.ТекущаяКолонка.Имя;
МаксКоличествоСубконто = Метаданные.ПланыСчетов.Типовой.МаксКоличествоСубконто;


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

КонецЦикла;


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

То есть назначаю субконто, а затем присваиваю его тип полю "Товар". Но тип не присваивается, значение остается неопределенным *13
bless18
23.08.2010 15:44Ответ № 12
Ой, простите, не заполнила значение поля "Товар" ), заработало вроде как правильно по последнему коду
E_Migachev
23.08.2010 15:44Ответ № 13
)
bless18
23.08.2010 18:25Ответ № 14
Вопрос закрыт!
Подсказка: Для быстрого перемещения к последнему ответу или к вопросу используйте или .
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.