|
v7: Артикул + остатки + цена опт + цена розница | ☑ | ||
---|---|---|---|---|
0
Козаностра
20.02.15
✎
11:12
|
- Идентификатор "Конфигурация "Бухгалтерия+Торговля+Склад+Зарплата+ Кадры" для Украины"
- Комментарий "7.70.009" Кто подскажет как сделать вывод прайс листа вида Артикул + остатки + цена опт + цена розница. Возможно уже есть готовые решения. Буду признателен за помощь и наводки. |
|||
1
VladZ
20.02.15
✎
11:14
|
Заходишь в отчет "Прайс-лист". И смотришь, чего не хватает.
|
|||
2
Козаностра
20.02.15
✎
11:52
|
Вы меня извините если я туплю, я зелёный совсем в 1с, не хватает остатков, каких туда добавить?))
http://firepic.org/images/2015-02/20/wuqk75zd06ku.jpg |
|||
3
Ёпрст
20.02.15
✎
12:12
|
(2) посмотреть, на что влияет галка "не включать отсутствующие" и из этого запроса поиметь останки
|
|||
4
Козаностра
20.02.15
✎
12:29
|
Не включает товары которых нет, ( не формирует их в прайс ) остатки от этого показываться не стали
|
|||
5
Ёпрст
20.02.15
✎
12:34
|
(4) ё..
открой модуль формы отчета, который твой прайс выводит, там ищи по тексту, где твоя "галка" участвует, там будет запрос на получение останков, из него получишь свои останки, добавишь поле в макет и выведешь.. усё. |
|||
6
VladZ
20.02.15
✎
13:57
|
(2) Хм... Кто, интересно, делает конфы для Украины... Вижу уже вторую конфу, в которой интерфейс сделан в стиле "студенты делали".
|
|||
7
Maniac
20.02.15
✎
13:59
|
Это 7.7
На восьмерку переходите. |
|||
8
Козаностра
20.02.15
✎
14:56
|
Просьба, мне как зелёному валенку объяснять.
|
|||
9
Козаностра
20.02.15
✎
14:58
|
Я вообще не в курсе откуда она что и кто там делал, я веб мастер по профессии ))
|
|||
10
Козаностра
20.02.15
✎
17:25
|
Ёпрст - вы имели ввиду здесь?
// =============================== // ОПИСАНИЕ МОДУЛЬНЫХ ПЕРЕМЕННЫХ Перем СписокПодбора,СправочникПодбора; // СписокПодбора - список, в который отбираются элементы // (используется для множественных фильтров) // СправочникПодбора - строка - идентификатор справочника, из которого осуществляется отбор // (используется для множественных фильтров) Перем СписокТоваров; // список товаров для фильтрации Перем ВидСправочника; // Вид печатаемого справочника (Номенклатура или прайс-лист) // Определяется параметром. По умолчанию - прайс Перем ЗаголовокТаблицы; // Заголовок печатной формы // =============================== // "СЛУЖЕБНЫЕ" ПРОЦЕДУРЫ И ФУНКЦИИ // =============================== // ПРОЦЕДУРЫ И ФУНКЦИИ, ВЫЗЫВАЕМЫЕ ИЗ ФОРМУЛ ЭЛЕМЕНТОВ ДИАЛОГА // =============================== // Название: Сдвиг // Параметры: // Режим - строка: "Вверх" или "Вниз",- определяющая направление сдвига // Список - список, в котором происходит сдвиг // Возвращаемое значение: // НЕТ // Вызывается из формул элементов диалога: // кнопки со стрелками вверх и вниз // Наименование,. // Описание: // сдвигает текущую позицию в списке на 1 элемент вниз или вверх // Процедура Сдвиг(Режим,Список) Перем ТекущПредставление; Перем СледующПредставление; ТекущаяСтрока=Список.ТекущаяСтрока(); Если ТекущаяСтрока<=0 Тогда Возврат; КонецЕсли; Если Режим="Вверх" Тогда Если ТекущаяСтрока=1 Тогда СледующСтрока=Список.РазмерСписка(); Иначе СледующСтрока=ТекущаяСтрока-1; КонецЕсли; ИначеЕсли Режим="Вниз" Тогда Если ТекущаяСтрока=Список.РазмерСписка() Тогда СледующСтрока=1; Иначе СледующСтрока=ТекущаяСтрока+1; КонецЕсли; Иначе Возврат; КонецЕсли; ТекущЗначение=Список.ПолучитьЗначение(ТекущаяСтрока,ТекущПредставление); СледующЗначение=Список.ПолучитьЗначение(СледующСтрока,СледующПредставление); Список.УстановитьЗначение(СледующСтрока,ТекущЗначение,ТекущПредставление,1); Список.УстановитьЗначение(ТекущаяСтрока,СледующЗначение,СледующПредставление,1); Список.ТекущаяСтрока(СледующСтрока); КонецПроцедуры // Сдвиг // =============================== // Название: РаботаСоСписком // Параметры: // Режим - строка, принимающая 4 значения: // "Добавить" // "ДобавитьНесколько" // "Удалить" // "УдалитьВсе" // Список - список значений, в котором задается множественный фильтр // ТипСправочника - строка, содержащая идентификатор справочнника, по // которому осуществляется мноджественный фильтр // Возвращаемое значение: // НЕТ // Вызывается из формул элементов диалога: // кнопок работы с множественными фильтрами ("...",".....","X","XX") // Наименование,. // Описание: // процедура предназначена для добавления и удаления элементов // из множественных фильтров Процедура РаботаСоСписком(Режим,Список,ТипСправочника) Перем ТекПоз; Перем ТекЭлемент; Перем Фрм; Если ТипСправочника = "Категории" Тогда ТипСправочника = "ВидыКатегории"; КонецЕсли; ТекПоз = Список.ТекущаяСтрока(); Если ТекПоз>0 Тогда ТекЭлемент=Список.ПолучитьЗначение(ТекПоз); КонецЕсли; Если Режим="Добавить" Тогда // добавляем в список один элемент СписокПодбора = Список; СправочникПодбора = ВРег(ТипСправочника); // открываем окно подбора ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,0,ТекЭлемент); Фрм.ВыборГруппы(1); ИначеЕсли Режим="ДобавитьНесколько" Тогда // добавляем в список несколько элементов СписокПодбора = Список; СправочникПодбора = ВРег(ТипСправочника); // открываем окно подбора ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,1,ТекЭлемент); Фрм.ВыборГруппы(1); ИначеЕсли Режим="УдалитьВсе" Тогда // удаляем все элементы из списка Список.УдалитьВсе(); ИначеЕсли Режим="Удалить" Тогда // удаляем из списка один элемент Если ТекПоз>0 Тогда Список.УдалитьЗначение(ТекПоз); КонецЕсли; КонецЕсли; КонецПроцедуры // работа со списком // =============================== // Название: Выполнить // Параметры: // НЕТ // Возвращаемое значение: // НЕТ // Вызывается из формул элементов диалога: // Кнопки "Печать" // Описание: // выполняет печать прайс-листа // Процедура Печать() Перем СписокПозиций, СписокТоваров; СписокТоваров = СоздатьОбъект("СписокЗначений"); СписокПозиций = СоздатьОбъект("СписокЗначений"); НаложенФильтрПоТоварам=0; // накладываем множественный фильтр по товарам Если МФНоменклатура.РазмерСписка()<>0 Тогда Для Индекс=1 По МФНоменклатура.РазмерСписка() Цикл Позиция = МФНоменклатура.ПолучитьЗначение(Индекс); НоменкВложенаВДругую=0; Для Индекс2=1 По МФНоменклатура.РазмерСписка() Цикл Если Индекс2<>Индекс Тогда Позиция2 = МФНоменклатура.ПолучитьЗначение(Индекс2); Если Позиция2.ЭтоГруппа()>0 Тогда Если Позиция.ПринадлежитГруппе(Позиция2)>0 Тогда НоменкВложенаВДругую=1; Прервать; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Если НоменкВложенаВДругую=1 Тогда Продолжить; КонецЕсли; Если Позиция.ЭтоГруппа()>0 Тогда СпрПозиций = СоздатьОбъект("Справочник."+ВидСправочника); СпрПозиций.ИспользоватьРодителя(Позиция.ТекущийЭлемент()); СпрПозиций.ВыбратьЭлементы(1); Пока СпрПозиций.ПолучитьЭлемент()>0 Цикл Если СпрПозиций.ЭтоГруппа()=0 Тогда СписокПозиций.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент()); Если Нрег(ВидСправочника) = "прайс_лист" Тогда СписокТоваров.ДобавитьЗначение(СпрПозиций.Товар.ТекущийЭлемент()); Иначе СписокТоваров.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент()); КонецЕсли; КонецЕсли; КонецЦикла; Иначе СписокПозиций.ДобавитьЗначение(Позиция.ТекущийЭлемент()); Если Нрег(ВидСправочника) = "прайс_лист" Тогда СписокТоваров.ДобавитьЗначение(Позиция.Товар.ТекущийЭлемент()); Иначе СписокТоваров.ДобавитьЗначение(Позиция.ТекущийЭлемент()); КонецЕсли; КонецЕсли; КонецЦикла; Если СписокПозиций.РазмерСписка()=0 Тогда Предупреждение("Список позиций пуст"); Возврат; КонецЕсли; НаложенФильтрПоТоварам=1; КонецЕсли; // не включать отсутствующие Если ТолькоПрисутствующие<>0 Тогда ВремРегистры=СоздатьОбъект("Регистры"); Рег=ВремРегистры.ОстаткиТоваров; Если РабочаяДата()<ПолучитьДатуТА() Тогда Рег.ВременныйРасчет(); Если НаложенФильтрПоТоварам=1 Тогда Рег.УстановитьЗначениеФильтра("Товар",СписокТоваров,2); КонецЕсли; Рег.УстановитьЗначениеФильтра("Фирма",ВыбФирма); ВремРегистры.РассчитатьРегистрыПО(РабочаяДата()); КонецЕсли; Если НаложенФильтрПоТоварам=1 Тогда ЧислоТов = СписокПозиций.РазмерСписка(); Для Индекс = 1 По ЧислоТов Цикл НеУдовлетвФильтру=0; Номенк = СписокТоваров.ПолучитьЗначение(ЧислоТов+1-Индекс); // накладываем фильтр по присутствию/отсутствию Если Номенк.ВидТМЦ<>Перечисление.ВидыТМЦ.Товар Тогда НеУдовлетвФильтру=1; Иначе Кол = ВремРегистры.ОстаткиТоваров.СводныйОстаток(ВыбФирма,Номенк,,,,"ОстатокТовара"); Если Кол<=0 Тогда НеУдовлетвФильтру=1; КонецЕсли; КонецЕсли; Если НеУдовлетвФильтру=1 Тогда СписокПозиций.УдалитьЗначение(ЧислоТов+1-Индекс); КонецЕсли; КонецЦикла; Иначе СпрПозиций = СоздатьОбъект("Справочник."+ВидСправочника); СпрПозиций.ВыбратьЭлементы(); Пока СпрПозиций.ПолучитьЭлемент()>0 Цикл Если СпрПозиций.ЭтоГруппа()=0 Тогда Если Нрег(ВидСправочника) = "прайс_лист" Тогда Номенк = СпрПозиций.Товар.ТекущийЭлемент(); Иначе Номенк = СпрПозиций.ТекущийЭлемент(); КонецЕсли; Если Номенк.ВидТМЦ=Перечисление.ВидыТМЦ.Товар Тогда Кол = ВремРегистры.ОстаткиТоваров.СводныйОстаток(ВыбФирма,Номенк.ТекущийЭлемент(),,,,,"ОстатокТовара"); Если Кол>0 Тогда СписокПозиций.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент()); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Если СписокПозиций.РазмерСписка()=0 Тогда Предупреждение("Список позиций пуст"); Возврат; КонецЕсли; НаложенФильтрПоТоварам=1; КонецЕсли; Если МФКатНоменклатуры.РазмерСписка() > 0 Тогда ТекстЗапроса = " |Обрабатывать НеПомеченныеНаУдаление; |КатегорияПозиции = Справочник.КатегорииТоваров.ТекущийЭлемент; |Товар = Справочник.КатегорииТоваров.Владелец; |КатегорияТов = Справочник.КатегорииТоваров.Категория; |Группировка Товар Без Групп; |Группировка КатегорияТов Без Групп; |Условие (КатегорияТов В МФКатНоменклатуры); |Условие (Товар В СписокТоваров);"; // выполняем запрос Запрос = СоздатьОбъект("Запрос"); Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда Возврат; КонецЕсли; СписокТоваров.УдалитьВсе(); ЧислоКатегорийВСписке = МФКатНоменклатуры.РазмерСписка(); // выгружаем все отобранные товары в список Запрос.ВНачалоВыборки(); Пока Запрос.Группировка("Товар") = 1 Цикл Если Запрос.Товар.Выбран() = 1 Тогда Если ТипМФКатНоменклатуры.ТекущаяСтрока() = 2 Тогда // одновременно все категории должны быть в списке МФКатегории ПозицияСправочника = Запрос.Товар.ТекущийЭлемент(); // ячитаем число категорий ЧислоКатегорий = 0; Пока Запрос.Группировка("КатегорияТов") = 1 Цикл Если Запрос.КатегорияТов.Выбран() = 1 Тогда ЧислоКатегорий = ЧислоКатегорий + 1; КонецЕсли; КонецЦикла; // все категории будут тогда и только тогда, когда число отобранных // категорий будет не меньше размера списка МФКатегории Если ЧислоКатегорий >= ЧислоКатегорийВСписке Тогда СписокТоваров.ДобавитьЗначение(ПозицияСправочника.ТекущийЭлемент()); КонецЕсли; Иначе СписокТоваров.ДобавитьЗначение(Запрос.Товар.ТекущийЭлемент()); КонецЕсли; КонецЕсли; КонецЦикла; Если НаложенФильтрПоТоварам = 1 Тогда РазмерСпискаПозиций = СписокПозиций.РазмерСписка(); Для Индекс = 1 по РазмерСпискаПозиций Цикл Если СписокТоваров.Принадлежит(?(НРег(ВидСправочника) = "прайс_лист", СписокПозиций.ПолучитьЗначение(РазмерСпискаПозиций - Индекс + 1).Товар, СписокПозиций.ПолучитьЗначение(РазмерСпискаПозиций - Индекс + 1))) = 0 Тогда СписокПозиций.УдалитьЗначение(РазмерСпискаПозиций - Индекс + 1); КонецЕсли; КонецЦикла; Иначе СпрПозиций = СоздатьОбъект("Справочник." + ВидСправочника); СпрПозиций.ВыбратьЭлементы(); Пока СпрПозиций.ПолучитьЭлемент() = 1 Цикл Если СпрПозиций.ЭтоГруппа() = 0 Тогда Если СписокТоваров.Принадлежит(?(НРег(ВидСправочника) = "прайс_лист", СпрПозиций.ТекущийЭлемент().Товар, СпрПозиций.ТекущийЭлемент())) = 1 Тогда СписокПозиций.ДобавитьЗначение(?(НРег(ВидСправочника) = "прайс_лист", СпрПозиций.ТекущийЭлемент(), СпрПозиций.Товар.ТекущийЭлемент())); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Если СписокПозиций.РазмерСписка() = 0 Тогда Предупреждение("Список позиций пуст"); Возврат; КонецЕсли; КонецЕсли; // теперь отбираем позиции справочника Если Нрег(ВидСправочника) = "прайс_лист" Тогда ТекстЗапроса = " |Период С '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"' По '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"'; |Позиция = Справочник.Прайс_лист.ТекущийЭлемент; |Товар = Справочник.Прайс_лист.Товар; |Группировка Позиция; |Условие (Позиция В СписокПозиций); |"; ИначеЕсли Нрег(ВидСправочника) = "тмц" Тогда ТекстЗапроса = " |Период С '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"' По '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"'; |Позиция = Справочник.ТМЦ.ТекущийЭлемент; |Товар = Справочник.ТМЦ.ТекущийЭлемент; |Группировка Позиция; |Условие (Позиция В СписокПозиций); |"; КонецЕсли; // выполняем запрос Запрос = СоздатьОбъект("Запрос"); Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда Возврат; КонецЕсли; // Создание Таблицы для выходного отчета Таб=СоздатьОбъект("Таблица"); Ном=0; Если (ЕдиницаПечати.ТекущаяСтрока()<>1)И(ЕдиницаПечати.ТекущаяСтрока()<>2) Тогда ПечатьВФиксЕдиницах = 0; Иначе ПечатьВФиксЕдиницах = 1; КонецЕсли; Если ВалютаПечати.Выбран()=0 Тогда ПечатьВФиксВалюте = 0; Заг=""; Иначе ПечатьВФиксВалюте = 1; Валюта = ВалютаПечати; Заг="Цены указаны в "+СокрЛП(Валюта.Кратко); КонецЕсли; Таб.ВывестиСекцию("Отчет"); Таб.ВывестиСекцию("Шапка|НазваниеПозиции"); Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс); Таб.ПрисоединитьСекцию("Шапка|Цена"); КонецЦикла; СписокГрупп = СоздатьОбъект("СписокЗначений"); Цена = СоздатьОбъект("Справочник.Цены"); Цена.ИспользоватьДату(РабочаяДата()); Пока Запрос.Группировка("Позиция")>0 Цикл Если Запрос.Позиция.Выбран()=0 Тогда Продолжить; КонецЕсли; глОживить(1); Если Запрос.Позиция.ЭтоГруппа()=1 тогда СписокГрупп.ДобавитьЗначение(Запрос.Позиция.ТекущийЭлемент()); Продолжить; КонецЕсли; Цена.ИспользоватьВладельца(Запрос.Товар.ТекущийЭлемент()); Если Нрег(ВидСправочника) = "прайс_лист" Тогда НашлиНенулевуюЦену=0; Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс).ТекущийЭлемент(); Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)<=0 Тогда Продолжить; КонецЕсли; Если Цена.Цена=0 Тогда Продолжить; КонецЕсли; НашлиНенулевуюЦену=1; Прервать; КонецЦикла; Если НашлиНенулевуюЦену=0 Тогда Продолжить; КонецЕсли; КонецЕсли; Пока СписокГрупп.РазмерСписка()>0 Цикл Гр = СписокГрупп.ПолучитьЗначение(1); Если Запрос.Позиция.ПринадлежитГруппе(Гр)>0 Тогда Если Гр.Уровень()=1 Тогда Таб.ВывестиСекцию("Группа1|НазваниеПозиции"); ИначеЕсли Гр.Уровень()=2 Тогда Таб.ВывестиСекцию("Группа2|НазваниеПозиции"); Иначе Таб.ВывестиСекцию("Группа3|НазваниеПозиции"); КонецЕсли; КонецЕсли; СписокГрупп.УдалитьЗначение(1); КонецЦикла; Если ПечатьВФиксЕдиницах=1 Тогда Если ЕдиницаПечати.ТекущаяСтрока()=1 Тогда Единица = Запрос.Товар.ЕдиницаПоУмолчанию; ИначеЕсли ЕдиницаПечати.ТекущаяСтрока()=2 Тогда Единица = глВернутьБазовуюЕдиницуТовара(Запрос.Товар.ТекущийЭлемент()); КонецЕсли; КонецЕсли; Ном=Ном+1; Таб.ВывестиСекцию("Товар|НазваниеПозиции"); Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс).ТекущийЭлемент(); Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)<=0 Тогда ПечЦена = ""; Иначе Если ПечатьВФиксВалюте=0 Тогда Валюта = Цена.Валюта; КонецЕсли; Если ПечатьВФиксЕдиницах=0 Тогда Единица = Цена.Единица; КонецЕсли; ЧЦена = Цена.Цена; Если Единица<>Цена.Единица Тогда ЧЦена = ?(Цена.Единица.Коэффициент = 0,ЧЦена * Единица.Коэффициент / 1,ЧЦена * Единица.Коэффициент / Цена.Единица.Коэффициент); КонецЕсли; ЧЦена = глПересчет(ЧЦена,Цена.Валюта,РабочаяДата(),Валюта,РабочаяДата(),); ПечЦена = СокрЛП(глФРМ(ЧЦена,Валюта,?(ПечатьВФиксВалюте=0,1,0)))+?(ПечатьВФиксЕдиницах=0," / "+СокрЛП(Строка(Единица)),""); КонецЕсли; Таб.ПрисоединитьСекцию("Товар|Цена"); КонецЦикла; КонецЦикла; //Вызов выходного отчета в окно просмотра и редактирования. Таб.ПовторятьПриПечатиСтроки(1,5); Таб.Опции(0,0,5,0,ПарСтрСпр); Таб.Защита(Константа.ФлагЗащитыТаблиц); Таб.ТолькоПросмотр(1); Таб.Показать(ВидСправочника,""); КонецПроцедуры // =============================== // ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ // =============================== Процедура ПриОткрытии() // Предопределенная процедура // Определяем какой спрвочник печатается Если ПустоеЗначение(Форма.Параметр) = 1 Тогда ВидСправочника = "Прайс_лист"; Иначе ВидСправочника = СокрЛП(Форма.Параметр); КонецЕсли;   |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |