Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=3758)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ В документе не подвязывается значение реквизита

Автор: wmatik 07.06.11, 10:28

1С Предприятие 7.7(сетевая версия) - 7.70.027
Конфигурация: Производство-Услуги-Бухгалтерия для Украины(7.70.010)
Есть документ,в котором необходимо, при выборе ТМЦ (Справочник ТМЦ) в отдельной колонке подвязывался определенный код (этот код находится тоже в справочнике ТМЦ). Код:

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

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


Пробовала другие реквизиты выводить (например Код) выводит, а вот тот код кот мне нужен (КодДК) не хочет. Подскажите пожалуйста в чем может быть причина.Спасибо

Автор: -=VJ=- 07.06.11, 10:39

Цитата(wmatik @ 07.06.11, 10:28) *
Подскажите пожалуйста в чем может быть причина.Спасибо


Например в том, что СтНомерКарт - периодический реквизит.

Автор: igmig65 07.06.11, 10:45

Цитата
КодДК = ТМЦ.СтНомерКарт

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

Автор: wmatik 07.06.11, 10:56

я не правильный код вставила,вот так должна выглядеть строка:

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

Где КодПоКл - это реквизит справочника ТМЦ

Автор: igmig65 07.06.11, 11:04

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

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

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

Автор: wmatik 07.06.11, 11:09

igmig65, написала в формуле ТМЦ.КодПоКл и ничего(

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

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

Автор: -=VJ=- 07.06.11, 11:14

Цитата(igmig65 @ 07.06.11, 11:04) *
выдала неизвестный объект.


Нет, было бы просто пустое значение.

Автор: wmatik 07.06.11, 11:14

igmig65, когда ставлю тип значения КодДК строка выводит ТМЦ

Автор: igmig65 07.06.11, 11:14

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

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

вам нужно добавить поле Текст, там нет типазначения.

Автор: wmatik 07.06.11, 11:17

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

Код

Автор: igmig65 07.06.11, 11:17

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

Автор: wmatik 07.06.11, 11:19

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

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

Автор: igmig65 07.06.11, 11:21

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

вы скорей всего добавили поле ввода с типом значения????а нужно в форму кинуть ТЕКСТ

Автор: wmatik 07.06.11, 11:25

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

Автор: igmig65 07.06.11, 11:29

ну незнаю, проверьте в отладчике при выборе ТМЦ, что вам вернет ТМЦ.КодПоКл.Код

Автор: wmatik 07.06.11, 11:30

а можете подсказать как проверить,а то я не умею пользоваться отладчиком

Автор: -=VJ=- 07.06.11, 11:30

Цитата(wmatik @ 07.06.11, 11:25) *
В итоге ничего не выводит, пусто


После

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


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

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


Или

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


Увидите, по крайней мере, хотя бы результат.

Автор: wmatik 07.06.11, 11:47

пусто

Автор: -=VJ=- 07.06.11, 11:48

Цитата(wmatik @ 07.06.11, 11:47) *
пусто


В обоих случаях?

Автор: wmatik 07.06.11, 11:57

в первом пусто,во втором 1

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

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

и что надо изменить,чтобы заполнялась колонка?

Автор: -=VJ=- 07.06.11, 11:59

Цитата(wmatik @ 07.06.11, 11:57) *
и что надо изменить,чтобы заполнялась колонка?


Поставить колонке тип не "текст", а "выражение".

Автор: wmatik 07.06.11, 12:02

Цитата(-=VJ=- @ 07.06.11, 12:59) *
Поставить колонке тип не "текст", а "выражение".

Ниче не пойму, сейчас же тип колонки КодДК строка, причем тут текст или выражение (это же в таблице такие свойства)

Автор: igmig65 07.06.11, 12:51

Всиавьте в табчасть поле ТЕКСТ, там нет закладки ТИП, а на закладке дополнительно в поле ФОРМУЛА напишите: ТМЦ.КодПоКл

Автор: wmatik 07.06.11, 12:57

все получилось, а вот можно как-то с помощью другой процедуры это значение получать? просто получается что колонка заполняется, только после того как заполнится номер карточки, а надо бы сделать, чтобы при заполнении тмц

Автор: mister-x 07.06.11, 13:23

У вашомі коді КодДК

КодДК = ТМЦ.КодПоКл;
заповнюється після пошуку номера карточки - отже, логічно номер карточки має бути вже заповненим і записаним в ТМЦ. Прописати в формулі в колонці КодДК
ТМЦ.КодПоКл
.

Автор: wmatik 07.06.11, 13:52

Сделала немного иначе, а именно:
В формуле КодДК написала такую процедуру ПриВыбореТМЦ():

Процедура ПриВыбореТМЦ()
             КодДК=ТМЦ.КодПоКл.Код
         КонецПроцедуры

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

Автор: igmig65 07.06.11, 13:58

Вариант правильный, только зачем было добавлять реквизит КодДК(тип-строка), чтоб базу лишний раз набивать? Ведь к этому коду есть прямой доступ ч-з ТМЦ - ТМЦ.КодПоКл.Код. Уже сотый раз повторяю, ненужно вам КодДК, просто в табчасть кидаете ТЕКСТ, для отображения этого кода. Он будет автоматом заполняться при выборе ТМЦ, и доступ к нему прямой по той же ссылке.

Автор: wmatik 07.06.11, 14:02

просто у меня к этому реквизиту КодДК привязан отчет, он (отчет) будет заполнятся, если будет ТЕКСТ?

Автор: igmig65 07.06.11, 14:06

Зачем вам текст, это только для отображения в диалоге дока, чтоб вы видели в самом документе, а в отчете, просто там где у вас стоит Формула КодДК, замените на ТМЦ.КодПоКл.Код.
и будет вам счастье ohmy.gif

Автор: 5_kopeek 07.06.11, 14:13

Цитата(wmatik @ 07.06.11, 13:52) *
Сделала немного иначе, а именно:
В формуле КодДК написала такую процедуру ПриВыбореТМЦ():
Процедура ПриВыбореТМЦ()
             КодДК=ТМЦ.КодПоКл.Код
         КонецПроцедуры

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

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

Автор: wmatik 07.06.11, 14:24

у реквизита ТМЦ уже есть формула

Автор: 5_kopeek 07.06.11, 14:35

Тогда либо записать формулу в таком виде
УжеВведеннаяФормула();ПриВыбореТМЦ()
, либо, что лучше, дописать текст процедуры ПриВыбореТМЦ() в уже сущесвующую процедуру, которая указана в формуле. Только лучше писать в таком виде:

    Если ТМЦ.Выбран()=1 Тогда
        КодДК=ТМЦ.КодПоКл.Код;        
    КонецЕсли; // ТМЦ.Выбран()=1

Автор: wmatik 07.06.11, 14:50

у реквизита ТМЦ в формуле вот такая запись: ГлПриИзмененииТовара(Контекст), в глобальник не хочется лезть

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

Так и какой тип ставить реквизита КодДК?

Автор: mister-x 07.06.11, 15:01

Цитата
Так и какой тип ставить реквизита КодДК?
Текст.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua