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

Спасибо.


 ! 

Правила, п.5.
 
Vofka
Боюсь, что с такой постановкой вопроса вам лучше обратиться к специалисту.
Ardi
В документе "Реализация" и других нажать кнопку "Подбор".
nazarenko
Цитата(Ardi @ 07.10.12, 14:56) необходимо зарегистрироваться для просмотра ссылки
В документе "Реализация" и других нажать кнопку "Подбор".


При нажатии кнопки подбор остаток можно увидеть
только по одной текущей позиции.
А нужно что бы при открытии справочника "Номенклатура"
(через меню Справочники-Номенклатура) остатки отображались рядом с наименованием каждого товара!
Очень нужно!
Ardi
Цитата(nazarenko @ 07.10.12, 15:22) необходимо зарегистрироваться для просмотра ссылки
Очень нужно!

Есть варианты:
1) Обучение программированию - 4500 грн., 40 часов лекций, 200 часов самостоятельных занятий.
2) Вызвать специалиста - 450 грн.

Цитата(nazarenko @ 07.10.12, 15:22) необходимо зарегистрироваться для просмотра ссылки
При нажатии кнопки подбор остаток можно увидеть
только по одной текущей позиции.

Нифига подобного, там варианты.
nazarenko
Цитата(Vofka @ 07.10.12, 14:30) необходимо зарегистрироваться для просмотра ссылки
Боюсь, что с такой постановкой вопроса вам лучше обратиться к специалисту.


Я сам программист (в 1С 7.7 программирую более 10 лет!).
А вот с 8-ой пока не очень. Что называется 1-раз в первый класс!
Vofka
Если я не ошибаюсь, то в какой-то книге Радченко (по-моему "Простые примеры разработки") есть пример, который демонстрирует то, что вам нужно.
nazarenko
Цитата(Ardi @ 07.10.12, 15:30) необходимо зарегистрироваться для просмотра ссылки
Есть варианты:
1) Обучение программированию - 4500 грн., 40 часов лекций, 200 часов самостоятельных занятий.
2) Вызвать специалиста - 450 грн.


Нифига подобного, там варианты.


Варианты есть при нажатии кнопки подбор?
И там есть возможность видеть остатки по всем позициям сразу?

Или можно видеть остатки по всем позициям сразу при открытии
справочника из меню Справочники-Номенклатура?

Цитата(Vofka @ 07.10.12, 15:57) необходимо зарегистрироваться для просмотра ссылки
Если я не ошибаюсь, то в какой-то книге Радченко (по-моему "Простые примеры разработки") есть пример, который демонстрирует то, что вам нужно.


Спасибо за наводку!
Ardi
Цитата(nazarenko @ 07.10.12, 17:00) необходимо зарегистрироваться для просмотра ссылки
Варианты есть при нажатии кнопки подбор?
И там есть возможность видеть остатки по всем позициям сразу?

В подборе можно видеть остатки и резервы по всем сразу.

Цитата(nazarenko @ 07.10.12, 15:37) необходимо зарегистрироваться для просмотра ссылки
Я сам программист (в 1С 7.7 программирую более 10 лет!).
А вот с 8-ой пока не очень. Что называется 1-раз в первый класс!

Вот немного неправильный вариант. Правильно делать "При получении данных"
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    //РОМ    
    Если ДанныеСтроки.Ссылка.ЭтоГруппа Тогда
        Возврат;
    КонецЕсли;
    мПоискОбъектовВСпискахДанных.СписокПриВыводеСтрокиСпискаОтбораДанных(Элемент, ОформлениеСтроки, ДанныеСтроки);
    
    запрос = Новый Запрос;
    если  РольДоступна("ПолныеПрава") или ИмяПользователя() = "Менеджер по продажам2" Тогда
        запрос.Текст = "ВЫБРАТЬ
                       |    ЦеныНоменклатурыСрезПоследних.Валюта,
                       |    ЦеныНоменклатурыСрезПоследних.Цена,
                       |    ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
                       |    ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование,
                       |    1 КАК Поле1
                       |ИЗ
                       |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                       |            ,
                       |            Номенклатура = &Номенкл
                       |                И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
                       |
                       |ОБЪЕДИНИТЬ
                       |
                       |ВЫБРАТЬ
                       |    ЦеныНоменклатурыКонтрагентовСрезПоследних.Валюта,
                       |    ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,
                       |    ЦеныНоменклатурыКонтрагентовСрезПоследних.ЕдиницаИзмерения,
                       |    ЦеныНоменклатурыКонтрагентовСрезПоследних.ТипЦен.Наименование,
                       |    2
                       |ИЗ
                       |    РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Номенклатура = &Номенкл) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
                       |
                       |ОБЪЕДИНИТЬ
                       |
                       |ВЫБРАТЬ
                       |    3,
                       |    ТоварыНаСкладахОстатки.КоличествоОстаток,
                       |    3,
                       |    3,
                       |    3
                       |ИЗ
                       |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                       |            ,
                       |            Номенклатура = &Номенкл
                       |                И (&ВсеСклады
                       |                    ИЛИ Склад = &ВыбСклад)) КАК ТоварыНаСкладахОстатки
                       |
                       |ОБЪЕДИНИТЬ
                       |
                       |ВЫБРАТЬ
                       |    4,
                       |    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,
                       |    4,
                       |    4,
                       |    4
                       |ИЗ
                       |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                       |            ,
                       |            Номенклатура = &Номенкл
                       |                И (&ВсеСклады
                       |                    ИЛИ Склад = &ВыбСклад)) КАК ТоварыВРезервеНаСкладахОстатки";
    Иначе
        запрос.Текст = "ВЫБРАТЬ
                       |    ЦеныНоменклатурыСрезПоследних.Валюта,
                       |    ЦеныНоменклатурыСрезПоследних.Цена,
                       |    ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
                       |    ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование,
                       |    1 КАК Поле1
                       |ИЗ
                       |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                       |            ,
                       |            Номенклатура = &Номенкл
                       |                И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
                       |
                       |ОБЪЕДИНИТЬ
                       |
                       |ВЫБРАТЬ
                       |    NULL,
                       |    NULL,
                       |    NULL,
                       |    NULL,
                       |    2
                       |
                       |ОБЪЕДИНИТЬ
                       |
                       |ВЫБРАТЬ
                       |    3,
                       |    ТоварыНаСкладахОстатки.КоличествоОстаток,
                       |    3,
                       |    3,
                       |    3
                       |ИЗ
                       |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                       |            ,
                       |            Номенклатура = &Номенкл
                       |                И (&ВсеСклады
                       |                    ИЛИ Склад = &ВыбСклад)) КАК ТоварыНаСкладахОстатки
                       |
                       |ОБЪЕДИНИТЬ
                       |
                       |ВЫБРАТЬ
                       |    4,
                       |    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,
                       |    4,
                       |    4,
                       |    4
                       |ИЗ
                       |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                       |            ,
                       |            Номенклатура = &Номенкл
                       |                И (&ВсеСклады
                       |                    ИЛИ Склад = &ВыбСклад)) КАК ТоварыВРезервеНаСкладахОстатки";
    КонецЕсли;
    Запрос.УстановитьПараметр("Номенкл",ДанныеСтроки.Ссылка);
    Запрос.УстановитьПараметр("ТипЦен",Константы.ТипыЦенНоменклатурыРозница.Получить());
         Запрос.УстановитьПараметр("ВсеСклады",  ВыбСклад.Пустая());
    Запрос.УстановитьПараметр("ВыбСклад",  ВыбСклад);

    ааа=запрос.Выполнить().Выгрузить();
    ТоварОстаток=0;
    ТоварРезерв=0;
    Если     ааа.Количество()>0 Тогда
        ОформлениеСтроки.Ячейки.ЦенаРозничная.Значение=  "";
        ОформлениеСтроки.Ячейки.ЦенаЗакупочная.Значение=  "";
        ОформлениеСтроки.Ячейки.ОстатокТовара.Значение=  "";        
        
        для каждого ббб из ааа цикл
            если ббб.Поле1=1 Тогда
                //если  РольДоступна("ПолныеПрава") Тогда
                    ОформлениеСтроки.Ячейки.ЦенаРозничная.Значение=  ""+ббб.Цена+" " +ббб.Валюта;        
                //КонецЕсли;
            ИначеЕсли ббб.Поле1=2 Тогда
                если  РольДоступна("ПолныеПрава") или ИмяПользователя() = "Менеджер по продажам2" Тогда
                    ОформлениеСтроки.Ячейки.ЦенаЗакупочная.Значение=  ""+ббб.Цена+" " +ббб.Валюта;
                КонецЕсли;
            ИначеЕсли ббб.Поле1=3 Тогда
                ТоварОстаток=?(ббб.Цена=Null,0,ббб.Цена);
            ИначеЕсли ббб.Поле1=4 Тогда
                ТоварРезерв=?(ббб.Цена=Null,0,ббб.Цена);
            КонецЕсли;
        КонецЦикла;
    Иначе
        ОформлениеСтроки.Ячейки.ЦенаРозничная.Значение=  "";
    КонецЕсли;
    ОстатокСРезевром=ТоварОстаток-ТоварРезерв;
    ОформлениеСтроки.Ячейки.ОстатокТовара.Значение=  ""+?(ОстатокСРезевром=0,"",ОстатокСРезевром);
    ОформлениеСтроки.Ячейки.Резерв.Значение=  ""+?(ТоварРезерв=0,"",ТоварРезерв);        
    //РОМ
КонецПроцедуры
nazarenko
Цитата(Ardi @ 07.10.12, 18:09) необходимо зарегистрироваться для просмотра ссылки
В подборе можно видеть остатки и резервы по всем сразу.


ОГО какая БОЬШАЯ!!!
Спасибо за труды!
А нельзя как нибудь по "легче" написать?, пардон ))).

Что то типа как в 7.7
Ост = Ит.СКД(СчетТМЦ,"К",,МестоХранения,ТекущийЭлемент());

)))???

Так же не понятна фраза "При получении данных"?
Эта название процедуры?

Пишет ошибка
{Справочник.Номенклатура.Форма.ФормаСписка.Форма(1020,50)}: Переменная не определена (ВыбСклад)

Не выбран склад!
А как написать по всем складам?


 ! 

правила п.12,13
 
nazarenko

 ! 

Я не желаю читать правила...
 
nazarenko
Цитата(nazarenko @ 07.10.12, 23:28) необходимо зарегистрироваться для просмотра ссылки


ПРОЧЕЛ ПРАВИЛА!!! уже 2-а раза )))
nazarenko
Спасибо, все получилось!!!

Есть мнение, что при работе нескольких пользователей
данная програмка существенно будет замедлять работу 1С!

И ее, как Вы ранее отметели, более правильно написать
через событие ПриПолученииДанных!

Но как это сделать???

Спасибо за ответ!
Ardi
Поехали дальше
Процедура ПоказатьОстаткиВДокументе(ОформленияСтрок)
        Массив = Новый Массив;
        Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл
            Массив.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура);
        КонецЦикла;    
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Номенклатура,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокНаВыбраномСкладе,
        |    ТоварыНаСкладахОстатки1.КоличествоОстаток КАК ОстатокНаОстальныхСкладах
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &ВыбСклад) КАК ТоварыНаСкладахОстатки
        |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад <> &ВыбСклад) КАК ТоварыНаСкладахОстатки1
        |        ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыНаСкладахОстатки1.Номенклатура
        |ГДЕ
        |    ТоварыНаСкладахОстатки.Номенклатура В(&спНоменклатура)";
        Запрос.УстановитьПараметр("ВыбСклад",УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнойСклад"));
        Запрос.УстановитьПараметр("спНоменклатура",Массив);
        ТЗ=запрос.Выполнить().Выгрузить();
        Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл
            строкаТЗ=тз.Найти(Новый Структура("Номенклатура",ОформлениеСтроки.ДанныеСтроки.Номенклатура));
            строкаТЗ=тз.Найти(ОформлениеСтроки.ДанныеСтроки.Номенклатура, "Номенклатура");
            Если строкаТЗ = Неопределено Тогда
                зн1=""; зн2="";
            Иначе
                зн1=строкаТЗ.ОстатокНаВыбраномСкладе;
                зн2=строкаТЗ.ОстатокНаОстальныхСкладах;
            КонецЕсли;
            ОформлениеСтроки.Ячейки.ОстатокТекущегоСклада.Значение=зн1;
            ОформлениеСтроки.Ячейки.ОстатокОстальныхСкладов.Значение=зн2;
        КонецЦикла;     
КонецПроцедуры

Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
        ПоказатьОстаткиВДокументе(ОформленияСтрок);
КонецПроцедуры
nazarenko
Я конечно, в 1С 8, плохо ориентируюсь!
Добавил "ДокументСписокПриПолученииДанных(..."
в справочнике номенклатура (форма сприска).
Эта процедура не выполняется!
Ее нужно вызывать (подключить/прицепить к событию)???
Ardi
Нужно стать на табличную часть, открыть свойства - там привязываются процедуры.
Fynjy
Цитата(Ardi @ 07.10.12, 18:09) необходимо зарегистрироваться для просмотра ссылки
Вот немного неправильный вариант. Правильно делать "При получении данных"

Ацкий код ...
nazarenko
Пишет ошибку:
Поле объекта не обнаружено (Номенклатура)
для строки
Массив.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура);


Для меня это вообще загадка природы! )))
Что там надо писать?
Vofka
Цитата(nazarenko @ 09.10.12, 10:16) необходимо зарегистрироваться для просмотра ссылки
Что там надо писать?

Телепатирую... 10%..50%...100% complete!!!
Массив.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
nazarenko
УРА!!!
ЗАРАБОТАЛО!!!

Всем спасибо! )))

Как бы еще цену прикрутить?
sava1
Цитата(nazarenko @ 09.10.12, 10:36) необходимо зарегистрироваться для просмотра ссылки
Как бы еще цену прикрутить?

добавить в запрос выборку из регистра сведений ценыНоменклатуры
Vofka
Правила, пункт 6. Закрыто.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.