|
вывести КодНоменклатурыКонтрагента в ТЧ | ☑ | ||
---|---|---|---|---|
0
Pavel55555
24.01.17
✎
15:03
|
Доброго дня!
Платформа 8.3 Толстый клиент. УТ 10.3 Данные: Документ Заказ поставщику, необходимо вывести в ТЧ в колонку КодПост вывести КодНоменклатурыКонтрагента То что создал выводит нули: Процедура ПоказатьКодПост(КолонкиТабПоля, ЯчейкиСтрокиТабПоля, Номенклатура) Экспорт Если КолонкиТабПоля.КодПост.Видимость Тогда Если ТипЗнч(Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда КодПост = ПолучитьКодПост(Номенклатура); ЯчейкиСтрокиТабПоля.КодПост.УстановитьТекст(КодПост); Иначе ЯчейкиСтрокиТабПоля.КодПост.УстановитьТекст(""); КонецЕсли; КонецЕсли; КонецПроцедуры Функция ПолучитьКодПост(Контрагент, Код = Неопределено, Артикул = Неопределено, НаименованиеНоменклатурыКонтрагента = Неопределено, ЕдиницаИзмерения = Неопределено) //СтруктураВозврата = Новый Структура("Номенклатура", Справочники.Номенклатура.ПустаяСсылка()); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 1 | НоменклатураКонтрагентов.Номенклатура, | НоменклатураКонтрагентов.КодНоменклатурыКонтрагента |ИЗ | РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов |ГДЕ | НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = &Код | И НоменклатураКонтрагентов.Номенклатура.Ссылка = &Номенклатура"; //Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("Код", Код); //Запрос.УстановитьПараметр("НаименованиеНоменклатурыКонтрагента", НаименованиеНоменклатурыКонтрагента); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Код = ?(Выборка.Следующий(),Выборка.Выбрать,0); Возврат Код; //Результат = Запрос.Выполнить(); //Выборка = Результат.Выбрать(); // //Если Выборка.Следующий() Тогда // ЗаполнитьЗначенияСвойств(Выборка); // Возврат СтруктураВозврата; // //КонецЕсли; // //Возврат СтруктураВозврата; КонецФункции Функция из другого модуля, пытаюсь изменить. Может просто запросом создать? |
|||
1
Pavel55555
25.01.17
✎
10:06
|
Ребята кто нибудь мне поможет решить эту задачу?
Хотя бы подсказать что не так... |
|||
2
Lexey_
25.01.17
✎
10:16
|
(1) отладчика нет что ли?
|
|||
3
Pavel55555
26.01.17
✎
10:16
|
Функция ПолучитьКодПост(Номенклатура, Код = Неопределено) Экспорт
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураКонтрагентов.Номенклатура, | НоменклатураКонтрагентов.Контрагент, | НоменклатураКонтрагентов.КодНоменклатурыКонтрагента |ИЗ | РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов |ГДЕ | НоменклатураКонтрагентов.Номенклатура.Ссылка = &Номенклатура | И НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = &Код | И НоменклатураКонтрагентов.Контрагент = &Номенклатура"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("Код", Код); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.Код; //Иначе // Возврат неопределено КонецЕсли; КонецФункции Не пойму что не так, где я что пропустил? |
|||
4
Альбатрос
26.01.17
✎
10:17
|
| И НоменклатураКонтрагентов.Контрагент = &Номенклатура";
|
|||
5
Альбатрос
26.01.17
✎
10:18
|
Так и должно быть?
|
|||
6
Pavel55555
26.01.17
✎
10:25
|
В ТЧ товар же по контрагенту (поставщику) и у каждого свой код товара... у кого его нет.
|
|||
7
Альбатрос
26.01.17
✎
10:28
|
(6) Ааа... То есть у тебя одинаковые измерения в регистре, да?
| НоменклатураКонтрагентов.Номенклатура.Ссылка = &Номенклатура | И НоменклатураКонтрагентов.Контрагент = &Номенклатура"; |
|||
8
Альбатрос
26.01.17
✎
10:29
|
и .ссылка убери
|
|||
9
Pavel55555
26.01.17
✎
10:30
|
Поменял
| И НоменклатураКонтрагентов.Контрагент = &Номенклатура"; На | И НоменклатураКонтрагентов.Контрагент = &Контрагент"; Ссылка - убрал |
|||
10
Альбатрос
26.01.17
✎
10:31
|
(9) Ну и чо, работает?
|
|||
11
Pavel55555
26.01.17
✎
10:32
|
Пустые ячейки.
А вызов такой Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда КодПост = ПолучитьКодПост(ДанныеСтроки.Номенклатура); Если НЕ КодПост = Неопределено Тогда ОформлениеСтроки.Ячейки.КодПост.УстановитьТекст(КодПост); КонецЕсли; КонецЕсли; |
|||
12
Pavel55555
26.01.17
✎
10:35
|
Меня смущает Функция ПолучитьКодПост(Номенклатура, Код = Неопределено)
Неопределено! Но без неё выдает ошибку, недостаточно фактический данных |
|||
13
Альбатрос
26.01.17
✎
10:41
|
(12) Ты с программированием недавно познакомился, да?
|
|||
14
Альбатрос
26.01.17
✎
10:41
|
КодПост = ПолучитьКодПост(ДанныеСтроки.Номенклатура, <ДобавьСюдаКод>);
|
|||
15
Альбатрос
26.01.17
✎
10:42
|
Хотя я сомневаюсь, что он вообще нужен, я бы его убрал из условий запроса просто и все
|
|||
16
Pavel55555
26.01.17
✎
11:11
|
Да 1С недавно начал изучать, есть книга, но тонкий клиент там немного не то.
|
|||
17
Pavel55555
26.01.17
✎
11:12
|
Можно вызвать и
ПолучитьКодПост(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Номенклатура); Но от пишет: Слишком много фактических параметров (ПолучитьКодПост) |
|||
18
Pavel55555
26.01.17
✎
11:14
|
Здесь ячейка не указывается
ПолучитьКодПост(мКолонкиТовары, ОформлениеСтроки.Ячейки.КодПост, ДанныеСтроки.Номенклатура); |
|||
19
Альбатрос
26.01.17
✎
11:23
|
Чувак, у тебя объявлена функция с 2 параметрами. Один из этих параметров модно не заполнять при вызове этой функции и тогда он будет равен неопределено. Но твой запрос в любом случае использует этот параметр в своем условии. И вот теперь у тебя 2 выхода: либо не использовать параметр в запросе, либо указывать этот параметр при вызове функции.
|
|||
20
Pavel55555
26.01.17
✎
12:12
|
Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
КодПост = ПолучитьКодПост (ДанныеСтроки.Номенклатура); Если НЕ КодПост = Неопределено Тогда ОформлениеСтроки.Ячейки.КодПост.УстановитьТекст(КодПост); КонецЕсли; КонецЕсли; Функция ПолучитьКодПост(Номенклатура) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураКонтрагентов.Номенклатура, | НоменклатураКонтрагентов.Контрагент, | НоменклатураКонтрагентов.КодНоменклатурыКонтрагента КАК КодНоменклатурыКонтрагента |ИЗ | РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов |ГДЕ | НоменклатураКонтрагентов.Номенклатура = &Номенклатура | И НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = &Код | И НоменклатураКонтрагентов.Контрагент = &Контрагент"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("Код", Код); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.Код; КонецЕсли; КонецФункции Ни черта.... :( Перем Код; в голове модуля |
|||
21
Альбатрос
27.01.17
✎
09:19
|
Убери вот эту строку из запроса:
| И НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = &Код |
|||
22
Pavel55555
02.02.17
✎
09:33
|
(21) Убрал, безрезультатно...
А зачем её убирать в ней же и есть сам смысл, нужен же Код? |
|||
23
Ёпрст
02.02.17
✎
09:49
|
(20) полный ПЭ.
>>>Возврат Выборка.Код; вот это вообще зачет, учитывая, что в запросе нет таких псевдонимов и имён полей. А так, всё в топку, весь код запихать в ПриПолученииДанных. Там для всей Номенклатуры из табличной части одним запросом поиметь код номенклатуры поставщика и в обходе оформления строк его установить в ячейку табличного поля. Усё. |
|||
24
Pavel55555
02.02.17
✎
14:20
|
(23) Такого плана?
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказПоставщикуТовары.Номенклатура, | НоменклатураКонтрагентов.КодНоменклатурыКонтрагента |ИЗ | Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары, | РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов |ГДЕ | НоменклатураКонтрагентов.Номенклатура = &Номенклатура | И НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = &Код"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл |
|||
25
Ёпрст
02.02.17
✎
14:21
|
(24) нет.
1. фильтровать нужно по списку номенклатуры 2.Зачем ты делаешь условие на КодНоменклатурыКонтрагента ? И его же потом получаешь ? |
|||
26
Ёпрст
02.02.17
✎
14:23
|
+25 + зачем тебе все табличные части всех документов ?
|
|||
27
vicof
02.02.17
✎
14:27
|
(24) Предлагаю заплатить программисту и посмотреть за его работой.
|
|||
28
Ёпрст
02.02.17
✎
14:37
|
На вот, развлекайся
ЗЫ: можно и оптимальнее написать, но мне лень. На табличное поле не забудь событие повесить ПриПолученииДанных в свойствах Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок) Если Не ЗначениеЗаполнено(Контрагент) Тогда Возврат; КонецЕсли; СписокНоменклатура = Новый СписокЗначений; Для каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл СписокНоменклатура.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура); КонецЦикла; Если СписокНоменклатура.Количество()=0 Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураКонтрагентов.Номенклатура, | НоменклатураКонтрагентов.КодНоменклатурыКонтрагента |ИЗ | РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов |ГДЕ | НоменклатураКонтрагентов.Номенклатура В(&СписокНоменклатура)"; Запрос.УстановитьПараметр("СписокНоменклатура",СписокНоменклатура); ТабличкаТоваров = Запрос.Выполнить().Выгрузить(); Если ТабличкаТоваров.Количество()=0 Тогда Возврат; КонецЕсли; Для каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл СтрокаПоиска = ТабличкаТоваров.Найти(ОформлениеСтроки.ДанныеСтроки.Номенклатура, "Номенклатура"); Если СтрокаПоиска <> Неопределено Тогда ОформлениеСтроки.Ячейки.КодПост.Значение = СтрокаПоиска.КодНоменклатурыКонтрагента; ОформлениеСтроки.Ячейки.КодПост.ЦветФона = WebЦвета.СветлоЗеленый; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
29
Ёпрст
02.02.17
✎
14:38
|
Чорт, поправочка, клиентоса забыл:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураКонтрагентов.Номенклатура, | НоменклатураКонтрагентов.КодНоменклатурыКонтрагента |ИЗ | РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов |ГДЕ | НоменклатураКонтрагентов.Номенклатура В(&СписокНоменклатура) | И НоменклатураКонтрагентов.Контрагент = &Контрагент"; Запрос.УстановитьПараметр("СписокНоменклатура",СписокНоменклатура); Запрос.УстановитьПараметр("Контрагент",Контрагент); |
|||
30
Pavel55555
07.02.17
✎
15:06
|
(29) Класс высший уровень! Большое спасибо!
Я бы сам до пенсии ковырял это кусок модуля. Подскажите хорошую книгу по 1С 8.3 Толстый клиент. У меня есть 1С:ПРЕДПРИЯТИЕ 8.3 Практическое пособие разработчика (примеры и типовые приемы) 2013 М.Г. Радченко, Е.Ю. Хрусталева - мне не очень то и понравилась. во-первых тонкий клиент, во-вторых не очень и подробно написано, всё поверхностно, я не доволен. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |