Подскажите, пожайлуста, как написать программку с помощью которой выводились бы остатки (к-во) номенклатуры в списке справочника номенклатура (рядом с каждым наименованием). Для 1С: 8.2 УТП для Украины 1.2.9.1 от 23.08.2012. В типовой конфигурации остатки выводятся внизу только для одной текущей позиции.
В документе "Реализация" и других нажать кнопку "Подбор".
При нажатии кнопки подбор остаток можно увидеть только по одной текущей позиции. А нужно что бы при открытии справочника "Номенклатура" (через меню Справочники-Номенклатура) остатки отображались рядом с наименованием каждого товара! Очень нужно!
Варианты есть при нажатии кнопки подбор? И там есть возможность видеть остатки по всем позициям сразу?
В подборе можно видеть остатки и резервы по всем сразу.
Цитата(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,"",ТоварРезерв); //РОМ КонецПроцедуры
Процедура ПоказатьОстаткиВДокументе(ОформленияСтрок) Массив = Новый Массив; Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл Массив.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокНаВыбраномСкладе, | ТоварыНаСкладахОстатки1.КоличествоОстаток КАК ОстатокНаОстальныхСкладах |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &ВыбСклад) КАК ТоварыНаСкладахОстатки | ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад <> &ВыбСклад) КАК ТоварыНаСкладахОстатки1 | ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыНаСкладахОстатки1.Номенклатура |ГДЕ | ТоварыНаСкладахОстатки.Номенклатура В(&спНоменклатура)"; Запрос.УстановитьПараметр("ВыбСклад",УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнойСклад")); Запрос.УстановитьПараметр("спНоменклатура",Массив); ТЗ=запрос.Выполнить().Выгрузить(); Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл строкаТЗ=тз.Найти(Новый Структура("Номенклатура",ОформлениеСтроки.ДанныеСтроки.Номенклатура)); строкаТЗ=тз.Найти(ОформлениеСтроки.ДанныеСтроки.Номенклатура, "Номенклатура"); Если строкаТЗ = Неопределено Тогда зн1=""; зн2=""; Иначе зн1=строкаТЗ.ОстатокНаВыбраномСкладе; зн2=строкаТЗ.ОстатокНаОстальныхСкладах; КонецЕсли; ОформлениеСтроки.Ячейки.ОстатокТекущегоСклада.Значение=зн1; ОформлениеСтроки.Ячейки.ОстатокОстальныхСкладов.Значение=зн2; КонецЦикла; КонецПроцедуры
Я конечно, в 1С 8, плохо ориентируюсь! Добавил "ДокументСписокПриПолученииДанных(..." в справочнике номенклатура (форма сприска). Эта процедура не выполняется! Ее нужно вызывать (подключить/прицепить к событию)???
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!