1С Предприятие 7.7(сетевая версия) - 7.70.027
Конфигурация: Производство-Услуги-Бухгалтерия для Украины(7.70.010)
Есть документ,в котором необходимо, при выборе ТМЦ (Справочник ТМЦ) в отдельной колонке подвязывался определенный код (этот код находится тоже в справочнике ТМЦ). Код:
Процедура НайтиКарточку()
Если СокрЛП(НомерКарт) <> "" Тогда
Спр = СоздатьОбъект("Справочник.ТМЦ");
СпрНом = СоздатьОбъект("Справочник.НомераКарточек");
СпрАрт = СоздатьОбъект("Справочник.Артикулы");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.ЭтоГруппа() = 0 Тогда
СпрНом.ИспользоватьВладельца(Спр);
СпрНом.НайтиПоКоду(НомерКарт);
Если (СпрНом.Выбран() = 1) И (СпрНом.Склад = МестоХранения) Тогда
ТМЦ = Спр.ТекущийЭлемент();
Ед = ТМЦ.ЕдиницаПоУмолчанию;
Коэффициент = 1;
КодДК = ТМЦ.СтНомерКарт;
СпрАрт.ИспользоватьВладельца(ТМЦ);
СпрАрт.ВыбратьЭлементы();
Пока СпрАрт.ПолучитьЭлемент() = 1 Цикл
Если СпрАрт.Склад = МестоХранения Тогда
НоменклНомер = СокрЛП(СпрАрт.Код);
КонецЕсли;
КонецЦикла;
Возврат;
Иначе
ТМЦ = 0;
Ткст = "Карточка с номером "+НомерКарт+" не найдена!";
//Сообщить(Ткст,"!!!");
КонецЕсли;
КонецЕсли;
//
КонецЦикла;
КонецЕсли;
Если ПустоеЗначение(ТМЦ) = 1 Тогда
НоменклНомер = "";
КонецЕсли;
КонецПроцедуры
// ===============================
Процедура НайтиАртикул()
Если СокрЛП(НоменклНомер) <> "" Тогда
Спр = СоздатьОбъект("Справочник.ТМЦ");
СпрНом = СоздатьОбъект("Справочник.НомераКарточек");
СпрАрт = СоздатьОбъект("Справочник.Артикулы");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.ЭтоГруппа() = 0 Тогда
СпрАрт.ИспользоватьВладельца(Спр);
СпрАрт.НайтиПоКоду(НоменклНомер);
Если (СпрАрт.Выбран() = 1) И (СпрАрт.Склад = МестоХранения) Тогда
ТМЦ = Спр.ТекущийЭлемент();
Ед = ТМЦ.ЕдиницаПоУмолчанию;
КодДК = ТМЦ.СтНомерКарт;
Коэффициент = 1;
СпрНом.ИспользоватьВладельца(ТМЦ);
СпрНом.ВыбратьЭлементы();
Пока СпрНом.ПолучитьЭлемент() = 1 Цикл
Если СпрНом.Склад = МестоХранения Тогда
Номеркарт = СокрЛП(СпрНом.Код);
КонецЕсли;
КонецЦикла;
Возврат;
Иначе
ТМЦ = 0;
я не правильный код вставила,вот так должна выглядеть строка:
КодДК = ТМЦ.КодПоКл;
igmig65, написала в формуле ТМЦ.КодПоКл и ничего(
Забыла указать, как формируется КодПоКл. В справочнике ТМЦ Есть реквизит КодПоКл,тип значения - справочник (КодыПоКлассификатору).
Забыла указать, как формируется КодПоКл. В справочнике ТМЦ Есть реквизит КодПоКл,тип значения - справочник (КодыПоКлассификатору).
igmig65, когда ставлю тип значения КодДК строка выводит ТМЦ
Значит в формулу: ТМЦ.КодПоКл.Код
только в поле ТЕКСТ, а вы реквизит добавляете
я сделала так:
Реквизит КодДК (тип значения-строка)
В табличную часть документа добавила Текст, в формуле написала ТМЦ.КодПоКл.Код
В итоге ничего не выводит, пусто
ну незнаю, проверьте в отладчике при выборе ТМЦ, что вам вернет ТМЦ.КодПоКл.Код
а можете подсказать как проверить,а то я не умею пользоваться отладчиком
КодДК = ТМЦ.КодПоКл;
Сообщить(ТМЦ.КодПоКл);
Сообщить(ПустоеЗначение(ТМЦ.КодПоКл));
пусто
в первом пусто,во втором 1
нет, вру, в первом пусто, во втором случае 0
нет,даже не так, в первом случае выдает то,что надо -нужный код
и что надо изменить,чтобы заполнялась колонка?
Всиавьте в табчасть поле ТЕКСТ, там нет закладки ТИП, а на закладке дополнительно в поле ФОРМУЛА напишите: ТМЦ.КодПоКл
все получилось, а вот можно как-то с помощью другой процедуры это значение получать? просто получается что колонка заполняется, только после того как заполнится номер карточки, а надо бы сделать, чтобы при заполнении тмц
У вашомі коді КодДК
КодДК = ТМЦ.КодПоКл;
заповнюється після пошуку номера карточки - отже, логічно номер карточки має бути вже заповненим і записаним в ТМЦ. Прописати в формулі в колонці КодДК ТМЦ.КодПоКл
.
Сделала немного иначе, а именно:
В формуле КодДК написала такую процедуру ПриВыбореТМЦ():
Процедура ПриВыбореТМЦ()
КодДК=ТМЦ.КодПоКл.Код
КонецПроцедуры
Вариант правильный, только зачем было добавлять реквизит КодДК(тип-строка), чтоб базу лишний раз набивать? Ведь к этому коду есть прямой доступ ч-з ТМЦ - ТМЦ.КодПоКл.Код. Уже сотый раз повторяю, ненужно вам КодДК, просто в табчасть кидаете ТЕКСТ, для отображения этого кода. Он будет автоматом заполняться при выборе ТМЦ, и доступ к нему прямой по той же ссылке.
просто у меня к этому реквизиту КодДК привязан отчет, он (отчет) будет заполнятся, если будет ТЕКСТ?
Зачем вам текст, это только для отображения в диалоге дока, чтоб вы видели в самом документе, а в отчете, просто там где у вас стоит Формула КодДК, замените на ТМЦ.КодПоКл.Код.
и будет вам счастье
Процедура ПриВыбореТМЦ()
КодДК=ТМЦ.КодПоКл.Код
КонецПроцедуры
у реквизита ТМЦ уже есть формула
Тогда либо записать формулу в таком виде
УжеВведеннаяФормула();ПриВыбореТМЦ()
, либо, что лучше, дописать текст процедуры ПриВыбореТМЦ() в уже сущесвующую процедуру, которая указана в формуле. Только лучше писать в таком виде:
Если ТМЦ.Выбран()=1 Тогда
КодДК=ТМЦ.КодПоКл.Код;
КонецЕсли; // ТМЦ.Выбран()=1
у реквизита ТМЦ в формуле вот такая запись: ГлПриИзмененииТовара(Контекст), в глобальник не хочется лезть
Если ТМЦ.Выбран()=1 Тогда
КодДК=ТМЦ.КодПоКл.Код;
КонецЕсли; // ТМЦ.Выбран()=1
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua