Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как вынести из регистра накопления остатков информацию о наличии товаров на складе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Стажёр
Здравствуйте!
Необходимо решить такую задачку: Необходимо проверить наличие товара на складе (сколько выбранного товара имеется в наличии на складе).
Подскажите пожалуйста, что я делаю не правильно?

Процедура ТМЦПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

    ОстаткиТМЦ=РегистрыНакопления.уатПартииТоваровНаСкладах;

    ТекТМЦ=ЭлементыФормы.ТМЦ.ТекущиеДанные.НаименованиеТМЦ;

    Отбор=Новый Структура();

    Отбор.Вставить("Номенклатура",ТекТМЦ);

    ТаблицаОст=ОстаткиТМЦ.Остатки(МоментВремени(),Отбор,"Номенклатура","Количество");

    НаличиеНаЦентральномСкладе=ТаблицаОст.Итог("Количество");

КонецПроцедуры
World1С
А что в итоге не получается или получается?
Стажёр
в итоге в колонке НаличиеНаЦентральномСкладе не отображается остаток
Batchir
ТаблицаОст=ОстаткиТМЦ.Остатки(МоментВремени(),Отбор,"Номенклатура","Количество");

А чему равен МоментВремени() в момент вывода строк? Попробуйте заменить на ТекущаяДата() и посмотреть результат
ТаблицаОст=ОстаткиТМЦ.Остатки(ТекущаяДата(),Отбор,"Номенклатура","Количество");
Batchir
И для того что бы в колонке что то показалось нужно туда что то записать. В Вашем случае это (проявление телепатии)
ОформлениеСтроки.Ячейки.НаличиеНаЦентральномСкладе.Значение=ТаблицаОст.Итог("Количество");

но могу ошибаться, т.к. понятия не имею что из себя представляет колонка НаличиеНаЦентральномСкладе
Стажёр
МоментВремени() равен сегодняшней дате. Замени на ТекущаяДата(), ничего не изменилось. (
Batchir
Цитата(Стажёр @ 02.11.10, 8:55) необходимо зарегистрироваться для просмотра ссылки
МоментВремени() равен сегодняшней дате. Замени на ТекущаяДата(), ничего не изменилось. (

Ну тогда ковыряйте регистр напрямую или через отчеты (возможно в нем просто отсутствуют нужные движения или остатки), т.к. у меня выше описанный код на типовой УТ дал результат остатков партий
Стажёр
а может ошибка все же в задании НаличиеНаЦентральномСкладе у меня это реквизит табличной части документа тип число
Batchir
Подождите, Вы знаете что такое отладчик, извините если обидел?
1. Посмотрите в отладчике чему равен НаличиеНаЦентральномСкладе при выполнении строки НаличиеНаЦентральномСкладе=ТаблицаОст.Итог("Количество");
2. Если это документ (а я почти уверен что это документ), то добавлять реквизит в документ, который будет при каждом открытии документа менятся - за это двойка.
Для таких случаев размещают просто колонку в табличной части на форме и в неё уже выводят нужные данные, выше описывал как.
ОформлениеСтроки.Ячейки.НаличиеНаЦентральномСкладе.Значение=ТаблицаОст.Итог("Количество");

Повторюсь. Это просто колонка, без привязки к данным
Стажёр
Отладчик выдает при выполнении строки НаличиеНаЦентральномСкладе=ТаблицаОст.Итог("Количество"); значение типа Число

при выполнении строки ОформлениеСтроки.Ячейки.НаличиеНаЦентральномСкладе.Значение=ТаблицаОст.Итог("Количество");
ошибка:
Поле объекта не обнаружено (НаличиеНаЦентральномСкладе)
ОформлениеСтроки.НаличиеНаЦентральномСкладе.Значение=ТаблицаОст.Итог("Количество");
World1С
Странно ведь вам объяснили как нельзя лучше.

Цитата
а может ошибка все же в задании НаличиеНаЦентральномСкладе у меня это реквизит табличной части документа тип число

вопрос/ответ
Цитата
Для таких случаев размещают просто колонку в табличной части на форме и в неё уже выводят нужные данные, выше описывал как.


В табличной части отыщите свою колонку/реквезит и в свойствах колонки поле "Данные" должно быть пустым или равным имени колонки.
Пример:
// Пример 3. Заполнение колонки табличного поля при отображении таблицы значений
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
  Перем Стр;
     ТЗ.Колонки.Добавить("Картинка");
       // Заполнение таблицы значений
       Для Сч = 0 по 10 Цикл
             Стр = ТЗ.Добавить();
                 Если Сч % 2 = 0 Тогда
                    Стр.Картинка = БиблиотекаКартинок.Справка;
                 Иначе
                    Стр.Картинка = БиблиотекаКартинок.Важно;
                 КонецЕсли;
       КонецЦикла;
    ЭлементыФормы.ТабличноеПоле1.Колонки.Колонка1.ДанныеКартинки = "Картинка";
КонецПроцедуры
Batchir
1. Удаляем из метаданных реквизит табличной части НаличиеНаЦентральномСкладе
2. На форме на табалице щелкаем правой кнопкой "Добавить колонку" и добавляем новую, имя - НаличиеНаЦентральномСкладе (всё больше ничего не надо)
3. В процедуру при выводе строки вставляем код :
Процедура ТМЦПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    ОстаткиТМЦ=РегистрыНакопления.ПартииТоваровНаСкладах;
    ТекТМЦ=ДанныеСтроки.НаименованиеТМЦ;// ВНИМАНИЕ на эту строку, сравните то что было у Вас.
                      // Возможно здесь проблема, вместо ссылки даете строку
    Отбор=Новый Структура();
    Отбор.Вставить("Номенклатура",ТекТМЦ);
    ТаблицаОст=ОстаткиТМЦ.Остатки(МоментВремени(),Отбор,"Номенклатура","Количество");
    ОформлениеСтроки.Ячейки.НаличиеНаЦентральномСкладе.Значение=ТаблицаОст.Итог("Количество");
КонецПроцедуры
Стажёр
Извините, еще мало опыта и знаний. В свойствах колонки поле "Данные" пустое
Стажёр
Цитата(Batchir @ 02.11.10, 13:41) необходимо зарегистрироваться для просмотра ссылки
1. Удаляем из метаданных реквизит табличной части НаличиеНаЦентральномСкладе
2. На форме на табалице щелкаем правой кнопкой "Добавить колонку" и добавляем новую, имя - НаличиеНаЦентральномСкладе (всё больше ничего не надо)
3. В процедуру при выводе строки вставляем код :
Процедура ТМЦПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    ОстаткиТМЦ=РегистрыНакопления.ПартииТоваровНаСкладах;
    ТекТМЦ=ДанныеСтроки.НаименованиеТМЦ;// ВНИМАНИЕ на эту строку, сравните то что было у Вас.
                                                                              // Возможно здесь проблема, вместо ссылки даете строку
    Отбор=Новый Структура();
    Отбор.Вставить("Номенклатура",ТекТМЦ);
    ТаблицаОст=ОстаткиТМЦ.Остатки(МоментВремени(),Отбор,"Номенклатура","Количество");
    ОформлениеСтроки.Ячейки.НаличиеНаЦентральномСкладе.Значение=ТаблицаОст.Итог("Количество");
КонецПроцедуры



Спасибо большое, все получилось, вы меня очень выручили)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.