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

                Возврат;
            Иначе
                ТМЦ = 0;
                Ткст = "Карточка с номером "+НомерКарт+" не найдена!";
                //Сообщить(Ткст,"!!!");
            КонецЕсли;
        КонецЕсли;
        //
    КонецЦикла;
КонецЕсли;
Если ПустоеЗначение(ТМЦ)  = 1 Тогда
    НоменклНомер = "";
КонецЕсли;
КонецПроцедуры
// ===============================
Процедура НайтиАртикул()
    Если СокрЛП(НоменклНомер) <> "" Тогда
    Спр = СоздатьОбъект("Справочник.ТМЦ");
    СпрНом = СоздатьОбъект("Справочник.НомераКарточек");
    СпрАрт = СоздатьОбъект("Справочник.Артикулы");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.ЭтоГруппа() = 0 Тогда
            СпрАрт.ИспользоватьВладельца(Спр);
            СпрАрт.НайтиПоКоду(НоменклНомер);
            Если (СпрАрт.Выбран() = 1) И (СпрАрт.Склад = МестоХранения) Тогда
                ТМЦ = Спр.ТекущийЭлемент();
                Ед = ТМЦ.ЕдиницаПоУмолчанию;
                КодДК = ТМЦ.СтНомерКарт;
                Коэффициент = 1;
                СпрНом.ИспользоватьВладельца(ТМЦ);
                СпрНом.ВыбратьЭлементы();
                Пока СпрНом.ПолучитьЭлемент() = 1 Цикл
                    Если СпрНом.Склад = МестоХранения Тогда
                        Номеркарт = СокрЛП(СпрНом.Код);
                    КонецЕсли;
                КонецЦикла;
                Возврат;
            Иначе
                ТМЦ = 0;


Пробовала другие реквизиты выводить (например Код) выводит, а вот тот код кот мне нужен (КодДК) не хочет. Подскажите пожалуйста в чем может быть причина.Спасибо
-=VJ=-
Цитата(wmatik @ 07.06.11, 10:28) необходимо зарегистрироваться для просмотра ссылки
Подскажите пожалуйста в чем может быть причина.Спасибо


Например в том, что СтНомерКарт - периодический реквизит.
igmig65
Цитата
КодДК = ТМЦ.СтНомерКарт

Если вам нужно показать СтНомерКарт того ТМЦ, которое выбрали в доке, то добавьте поле Текст в табл.часть дока, и в формуле напишите ТМЦ.СтНомерКарт
wmatik
я не правильный код вставила,вот так должна выглядеть строка:
КодДК = ТМЦ.КодПоКл;

Где КодПоКл - это реквизит справочника ТМЦ
igmig65
Цитата
я не правильный код вставила,вот так должна выглядеть строка:
КодДК = ТМЦ.КодПоКл;

Значит в формулу: ТМЦ.КодПоКл
Цитата
Например в том, что СтНомерКарт - периодический реквизит.

Если б был периодич., то помоему в приведенном коде строка КодДК = ТМЦ.КодПоКл, выдала неизвестный объект.
wmatik
igmig65, написала в формуле ТМЦ.КодПоКл и ничего(

Забыла указать, как формируется КодПоКл. В справочнике ТМЦ Есть реквизит КодПоКл,тип значения - справочник (КодыПоКлассификатору).

Забыла указать, как формируется КодПоКл. В справочнике ТМЦ Есть реквизит КодПоКл,тип значения - справочник (КодыПоКлассификатору).
-=VJ=-
Цитата(igmig65 @ 07.06.11, 11:04) необходимо зарегистрироваться для просмотра ссылки
выдала неизвестный объект.


Нет, было бы просто пустое значение.
wmatik
igmig65, когда ставлю тип значения КодДК строка выводит ТМЦ
igmig65
Цитата
Забыла указать, как формируется КодПоКл. В справочнике ТМЦ Есть реквизит КодПоКл,тип значения - справочник (КодыПоКлассификатору).

Возможно в этом справочнике в форме нет наименования и оно незаполняется програмно, а какой рекв. спр. КодыПоКлассификатору вам нужно показать?
Цитата
igmig65, когда ставлю тип значения КодДК строка выводит ТМЦ

вам нужно добавить поле Текст, там нет типазначения.
wmatik
Цитата(igmig65 @ 07.06.11, 12:14) необходимо зарегистрироваться для просмотра ссылки
а какой рекв. спр. КодыПоКлассификатору вам нужно показать?

Код
igmig65
Значит в формулу: ТМЦ.КодПоКл.Код
только в поле ТЕКСТ, а вы реквизит добавляете
wmatik
Цитата(igmig65 @ 07.06.11, 12:17) необходимо зарегистрироваться для просмотра ссылки
Значит в формулу: ТМЦ.КодПоКл.Код
только в поле ТЕКСТ, а вы реквизит добавляете

Все равно выдает - ТМЦ
igmig65
Цитата
Все равно выдает - ТМЦ

вы скорей всего добавили поле ввода с типом значения????а нужно в форму кинуть ТЕКСТ
wmatik
я сделала так:
Реквизит КодДК (тип значения-строка)
В табличную часть документа добавила Текст, в формуле написала ТМЦ.КодПоКл.Код
В итоге ничего не выводит, пусто
igmig65
ну незнаю, проверьте в отладчике при выборе ТМЦ, что вам вернет ТМЦ.КодПоКл.Код
wmatik
а можете подсказать как проверить,а то я не умею пользоваться отладчиком
-=VJ=-
Цитата(wmatik @ 07.06.11, 11:25) необходимо зарегистрироваться для просмотра ссылки
В итоге ничего не выводит, пусто


После

КодДК = ТМЦ.КодПоКл;


Вставьте строку

Сообщить(ТМЦ.КодПоКл);


Или

Сообщить(ПустоеЗначение(ТМЦ.КодПоКл));


Увидите, по крайней мере, хотя бы результат.
wmatik
пусто
-=VJ=-
Цитата(wmatik @ 07.06.11, 11:47) необходимо зарегистрироваться для просмотра ссылки
пусто


В обоих случаях?
wmatik
в первом пусто,во втором 1

нет, вру, в первом пусто, во втором случае 0

нет,даже не так, в первом случае выдает то,что надо -нужный код

и что надо изменить,чтобы заполнялась колонка?
-=VJ=-
Цитата(wmatik @ 07.06.11, 11:57) необходимо зарегистрироваться для просмотра ссылки
и что надо изменить,чтобы заполнялась колонка?


Поставить колонке тип не "текст", а "выражение".
wmatik
Цитата(-=VJ=- @ 07.06.11, 12:59) необходимо зарегистрироваться для просмотра ссылки
Поставить колонке тип не "текст", а "выражение".

Ниче не пойму, сейчас же тип колонки КодДК строка, причем тут текст или выражение (это же в таблице такие свойства)
igmig65
Всиавьте в табчасть поле ТЕКСТ, там нет закладки ТИП, а на закладке дополнительно в поле ФОРМУЛА напишите: ТМЦ.КодПоКл
wmatik
все получилось, а вот можно как-то с помощью другой процедуры это значение получать? просто получается что колонка заполняется, только после того как заполнится номер карточки, а надо бы сделать, чтобы при заполнении тмц
mister-x
У вашомі коді КодДК
КодДК = ТМЦ.КодПоКл;
заповнюється після пошуку номера карточки - отже, логічно номер карточки має бути вже заповненим і записаним в ТМЦ. Прописати в формулі в колонці КодДК
ТМЦ.КодПоКл
.
wmatik
Сделала немного иначе, а именно:
В формуле КодДК написала такую процедуру ПриВыбореТМЦ():
Процедура ПриВыбореТМЦ()
             КодДК=ТМЦ.КодПоКл.Код
         КонецПроцедуры

Все заполняет. Насколько такой вариант правильный?
igmig65
Вариант правильный, только зачем было добавлять реквизит КодДК(тип-строка), чтоб базу лишний раз набивать? Ведь к этому коду есть прямой доступ ч-з ТМЦ - ТМЦ.КодПоКл.Код. Уже сотый раз повторяю, ненужно вам КодДК, просто в табчасть кидаете ТЕКСТ, для отображения этого кода. Он будет автоматом заполняться при выборе ТМЦ, и доступ к нему прямой по той же ссылке.
wmatik
просто у меня к этому реквизиту КодДК привязан отчет, он (отчет) будет заполнятся, если будет ТЕКСТ?
igmig65
Зачем вам текст, это только для отображения в диалоге дока, чтоб вы видели в самом документе, а в отчете, просто там где у вас стоит Формула КодДК, замените на ТМЦ.КодПоКл.Код.
и будет вам счастье ohmy.gif
5_kopeek
Цитата(wmatik @ 07.06.11, 13:52) необходимо зарегистрироваться для просмотра ссылки
Сделала немного иначе, а именно:
В формуле КодДК написала такую процедуру ПриВыбореТМЦ():
Процедура ПриВыбореТМЦ()
             КодДК=ТМЦ.КодПоКл.Код
         КонецПроцедуры

Все заполняет. Насколько такой вариант правильный?

Чтобы КодДК заполнялся при выборе ТМЦ, формулу ПриВыбореТМЦ() необходтмо вписать для реквизита ТМЦ, а не КодДК.
wmatik
у реквизита ТМЦ уже есть формула
5_kopeek
Тогда либо записать формулу в таком виде
УжеВведеннаяФормула();ПриВыбореТМЦ()
, либо, что лучше, дописать текст процедуры ПриВыбореТМЦ() в уже сущесвующую процедуру, которая указана в формуле. Только лучше писать в таком виде:
    Если ТМЦ.Выбран()=1 Тогда
        КодДК=ТМЦ.КодПоКл.Код;        
    КонецЕсли; // ТМЦ.Выбран()=1
wmatik
у реквизита ТМЦ в формуле вот такая запись: ГлПриИзмененииТовара(Контекст), в глобальник не хочется лезть

Цитата(5_kopeek @ 07.06.11, 15:35) необходимо зарегистрироваться для просмотра ссылки
Тогда либо записать формулу в таком виде
УжеВведеннаяФормула();ПриВыбореТМЦ()
, либо, что лучше, дописать текст процедуры ПриВыбореТМЦ() в уже сущесвующую процедуру, которая указана в формуле. Только лучше писать в таком виде:
    Если ТМЦ.Выбран()=1 Тогда
        КодДК=ТМЦ.КодПоКл.Код;        
    КонецЕсли; // ТМЦ.Выбран()=1

Так и какой тип ставить реквизита КодДК?
mister-x
Цитата
Так и какой тип ставить реквизита КодДК?
Текст.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.