УТ 10.3 Помогите запрограммировать.

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. astronavt006 74 14.02.12 19:07 Сейчас в теме
Добрый вечер форумчане! Имеется конфигурация УТ 10.3 платформа8.2. В табличной части документа Реализация товаров и услуг хочу добавить поле для отображения остатка товара на складе по позиции. Создал Поле ввода, но для этого поля я так предполагаю надо написать код в модуле. Остатки должны браться из виртуальной ьаблицы ТоварыНаСкладах.Остатки. Подскажите пожалуйста какой должен быть код для поля, с чего начать? Просто я начинающий программист, для меня это сложно. А делать надо...
Вознаграждение за ответ
Показать полностью
Найденные решения
8. sdpj 44 18.02.12 15:33 Сейчас в теме
Должно работать - замени строку
Запрос.УстановитьПараметр("Номенклатура",Товары);

на
Запрос.УстановитьПараметр("Номенклатура",ТекСтрока.Номенклатура);


Но:
1. Запрос не будет работать, если склад, на котором ты проверяешь остатки - розничный, т.к. остатки по розничным складам хранятся в другом регистре "ТоварыВРознице"
2. Есть конструкция ЕСТЬNULL(<Выражение>, <Выражение>), которая позволит избавиться от многочисленных ВЫБОРов в твоем запросе
Например:
| ВЫБОР 
 | КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL 
 | ТОГДА 0 
 | ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток 
 | КОНЕЦ

можно заменить на
|ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток,0)

3. Обрати внимание, что запрос будет некорректным, если включен учет номенклатуры по характеристикам, сериям. Также если используется возможность указания склада в табличной части документа - причем он может отличаться от склада в шапке.

Удачи :)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. fomaOp 14.02.12 21:06 Сейчас в теме
(1) astronavt006,
Не совсем понятно, какую цель вы при этом преследуете...
Обычно оперативные остатки отражаются в обработке подбора номенклатуры, либо в справочнике "Номенклатура".
Если в этом есть острая необходимость, то можно использовать событие табличного поля "ПриПолученииДанных".



В данном примере не учтена возможность использования характеристик и серий номенклатуры, а так-же возможность указания складов в табличной части.

Фрагмент из статьи на ИТС: "Важно отметить, что в некоторых случаях обработчик события ПриПолученииДанных может вызываться табличным полем при обновлении более одного раза. Например, если текущая строка табличного поля находится в середине видимой области, то при обновлении обработчик события ПриПолученииДанных будет вызван табличным полем два раза: первый раз для группы строк, начиная с текущей строки до верхней видимой и второй раз для строки, следующей за текущей до нижней видимой строки. Такое поведение табличного поля связано с тем, что при обновлении табличное поле пытается сохранить позицию текущей строки в видимой области."

Использованный в примере код так-же взят из статьи на ИТС.
3. astronavt006 74 14.02.12 21:48 Сейчас в теме
Собрал вот такой запрос, но почему то свободные остатки отображаются не корректно.
Процедура ТоварыПриАктивизацииСтроки(Элемент)
ТекСтрока = ЭлементыФормы.Товары.ТекущаяСтрока;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Дт, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки";

Запрос.УстановитьПараметр("Дт", Ссылка.Дата);
Запрос.УстановитьПараметр("Номенклатура", ТекСтрока.Номенклатура);


Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();


ВыборкаДетальныеЗаписи.Следующий();
ЭлементыФормы.ОстатокТовара.Значение = ВыборкаДетальныеЗаписи.КоличествоОстаток;

КонецПроцедуры
4. Поручик 4675 15.02.12 02:48 Сейчас в теме
6. fomaOp 15.02.12 10:46 Сейчас в теме
(3) astronavt006,
Собрал вот такой запрос, но почему то свободные остатки отображаются не корректно.

В чём заключается не корректность?

ВыборкаДетальныеЗаписи.Следующий();
ЭлементыФормы.ОстатокТовара.Значение = ВыборкаДетальныеЗаписи.КоличествоОстаток;

Что произойдёт, если по указанной номенклатуре на заданную дату нет остатков?
5. pscorp 5 15.02.12 10:45 Сейчас в теме
А что тут значит неправильно отображаются свободные остатки? Здесь сейчас берутся остатки на складе. Если надо из них вычесть резервы и товары к передаче, то в запросе делайте соединение с таблицами ТоварыВРезервеНаСкладах.Остатки и ТоварыКПередаче.Остатки.
Конечно если соединять, то для производительности лучше использовать временные таблицы.
Если просто остатки неверны, то возможно это из-за того, что вы смотрите их на дату документа - а это имеет смысл? Зачем смотреть остатки если документ не сегодняшний.
У нас свободный остаток считается вот так (на временные таблицы еще не переделали, выбор используем, чтобы не прибавлять к свободному остатку, если что-то накосячено в резервах и там отрицательные резервы"

Запрос.Текст = "ВЫБРАТЬ
| ВЫБОР
| КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток
| КОНЕЦ - ВЫБОР
| КОГДА ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
| КОНЕЦ - ВЫБОР
| КОГДА ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток

| КОНЕЦ КАК СвободныйОстаток,
| ВЫБОР
| КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток
| КОНЕЦ КАК КоличествоОстаток,
| ВЫБОР
| КОГДА ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
| КОНЕЦ + ВЫБОР
| КОГДА ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток

| КОНЕЦ КАК КоличествоРезерв
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| &Дата,
| Номенклатура = &Номенклатура
| И Склад = &Склад) КАК ТоварыНаСкладахОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
| &Дата,
| Номенклатура = &Номенклатура
| И Склад = &Склад) КАК ТоварыВРезервеНаСкладахОстатки
| ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(
| &Дата,
| Номенклатура = &Номенклатура
| И Склад = &Склад) КАК ТоварыКПередачеСоСкладовОстатки
| ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура";


Запрос.УстановитьПараметр("Дата" ,ТекущаяДата());
Запрос.УстановитьПараметр("Склад",Склад);
Запрос.УстановитьПараметр("Номенклатура",Товар);
7. astronavt006 74 15.02.12 20:12 Сейчас в теме
Пипец, остатки не хотят считаться. В чём косяк? Волт код
Процедура ТоварыПриАктивизацииСтроки(Элемент)
ТекСтрока = ЭлементыФормы.Товары.ТекущаяСтрока;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ВЫБОР
| КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток
| КОНЕЦ - ВЫБОР
| КОГДА ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
| КОНЕЦ - ВЫБОР
| КОГДА ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток

| КОНЕЦ КАК СвободныйОстаток,
| ВЫБОР
| КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток
| КОНЕЦ КАК КоличествоОстаток,
| ВЫБОР
| КОГДА ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
| КОНЕЦ + ВЫБОР
| КОГДА ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток

| КОНЕЦ КАК КоличествоРезерв
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| &Дата,
| Номенклатура = &Номенклатура
| И Склад = &Склад) КАК ТоварыНаСкладахОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
| &Дата,
| Номенклатура = &Номенклатура
| И Склад = &Склад) КАК ТоварыВРезервеНаСкладахОстатки
| ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(
| &Дата,
| Номенклатура = &Номенклатура
| И Склад = &Склад) КАК ТоварыКПередачеСоСкладовОстатки
| ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура";


Запрос.УстановитьПараметр("Дата" ,ТекущаяДата());
Запрос.УстановитьПараметр("Склад",Склад);
Запрос.УстановитьПараметр("Номенклатура",Товары);


Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();


ВыборкаДетальныеЗаписи.Следующий();
ЭлементыФормы.ОстатокТовара.Значение = ВыборкаДетальныеЗаписи.КоличествоОстаток;


КонецПроцедуры
8. sdpj 44 18.02.12 15:33 Сейчас в теме
Должно работать - замени строку
Запрос.УстановитьПараметр("Номенклатура",Товары);

на
Запрос.УстановитьПараметр("Номенклатура",ТекСтрока.Номенклатура);


Но:
1. Запрос не будет работать, если склад, на котором ты проверяешь остатки - розничный, т.к. остатки по розничным складам хранятся в другом регистре "ТоварыВРознице"
2. Есть конструкция ЕСТЬNULL(<Выражение>, <Выражение>), которая позволит избавиться от многочисленных ВЫБОРов в твоем запросе
Например:
| ВЫБОР 
 | КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL 
 | ТОГДА 0 
 | ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток 
 | КОНЕЦ

можно заменить на
|ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток,0)

3. Обрати внимание, что запрос будет некорректным, если включен учет номенклатуры по характеристикам, сериям. Также если используется возможность указания склада в табличной части документа - причем он может отличаться от склада в шапке.

Удачи :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот