ТиС 8.7 Печать ценников
20.03.2006
00:31
#1
Мир всем! Давно не был здесь. Рад снова посетить это ресурс, хоть и по нужде.
Вопрос 1.
В документ "Ценник товаров" добавил строку, которая выдаёт при печати производителя. А единицу товара, убрал.
Так вот при печати отдельно взятого ценника из справочника "номенклатура" СтранаПроизводитель при печати есть, а когда печатаешь сразу несколько ценников на листе, выделив папку с товаром, в том же справочнике или в любом другом Производитель не выводится на печать.
2. В справочнике "Прайсы", тоже путаница. Там при выделении папки или отдельно взятого товара при печати просто показывается Выражение СтранаПроисхождения, вместо имени страны - вот так:
СтранаПроисхождения<>>
Переменная не определена(СтранаПроисхождения)
------
Спасибо всем.
Вопрос 1.
В документ "Ценник товаров" добавил строку, которая выдаёт при печати производителя. А единицу товара, убрал.
Так вот при печати отдельно взятого ценника из справочника "номенклатура" СтранаПроизводитель при печати есть, а когда печатаешь сразу несколько ценников на листе, выделив папку с товаром, в том же справочнике или в любом другом Производитель не выводится на печать.
2. В справочнике "Прайсы", тоже путаница. Там при выделении папки или отдельно взятого товара при печати просто показывается Выражение СтранаПроисхождения, вместо имени страны - вот так:
СтранаПроисхождения<>>
Переменная не определена(СтранаПроисхождения)
------
Спасибо всем.
20.03.2006
14:51
#3
"Вот код ПрайсЛиста:
[c1code]//******************************************************************************
// ОПИСАНИЕ МОДУЛЬНЫХ ПЕРЕМЕННЫХ
Перем СтарыйЭлемент;
Перем ИнформационнаяСтрока;
Перем КатегорииЦен;
Перем ТипЦены;
Перем ТоварВПрайсе;
Перем КонтПодб; // контекст подбора
Перем ФормаСпискаЦен; // контекст формы списка подчиненного справочника "Цены"
// переменная используется при подборе
// может принимать следующие значения
// 0 - не добавлять дубль
// 1 - спрашивать при нахождении дубля
// 2 - добавлять дубль без вопросов
// значение по умолчанию 1
Перем ДублироватьПриПодборе;
// используется в обработке подбора вместе с ДублироватьПриПодборе
// если значение - ДА, то в процедуре ДобавитьТовар, после вопроса,
// значение ДублироватьПриПодборе устанавливется либо в 0, либо в 2
Перем ДобавлениеГруппы;
//******************************************************************************
// "СЛУЖЕБНЫЕ" ПРОЦЕДУРЫ И ФУНКЦИИ
//******************************************************************************
// Название: СформироватьИнформационнуюСтроку()
// Параметры:
// НЕТ
// Возвращаемое значение:
// Строка с дополнительной информацией
// Описание:
// процедура предназначена для формирования информационной
// строки для текущего элемента в списке. К такой
// может относится информация которую из-за большого объема
// нет смысла помещать в список, либо при размещении ее в
// колонке будет заметная ухудшение производительности
// (к примеру сложновычисляемая информация из регистра и т.д.)
Функция СформироватьИнформационнуюСтроку()
Перем Цена, Валюта;
Перем ТекТовар;
Если ТекущийЭлемент()<>СтарыйЭлемент Тогда
// новый элемент не равен текущему
// так как функция будет вызываться каждый раз при перерисовки формы
// (необязательно, что в этот момент будет выбран другой элемент в списке),
// то чтобы не выполнять ненужные вычисления проверяем, что в списке
// выбран элемент, отличный от того, для которого была сформирована
// информационная строка
Если ТекущийЭлемент().ЭтоГруппа()=0 Тогда
Если ПустоеЗначение(ТипЦены) = 0 Тогда
// вычислим цену товара
ТекТовар = ТекущийЭлемент().Товар;
Цена = глВернутьЦену(ТекТовар, ТипЦены);
Если ПустоеЗначение(Цена) = 0 Тогда
// нашли цену
Цена.ИспользоватьДату(РабочаяДата());
ИнформационнаяСтрока = Формат(Цена.Цена,глФорматСуммы) + " " + Цена.Валюта + " за " + Цена.Единица.ТипЕдиницы;
Иначе
// нет цены товара в указанной категории цен
ИнформационнаяСтрока = "Цена отсутствует"
КонецЕсли;
Иначе
ИнформационнаяСтрока = """";
КонецЕсли;
Иначе
ИнформационнаяСтрока = """";
КонецЕсли;
КонецЕсли;
СтарыйЭлемент = ТекущийЭлемент();
Возврат ИнформационнаяСтрока;
КонецФункции
//******************************************************************************
Процедура Подбор()
РодительДляПрайса=ТекущийЭлемент().Родитель;
ОткрытьПодбор("Номенклатура","ДляПрайса",КонтПодб);
КонтПодб.РодительДляПрайса.ВыборГруппы(1);
КонтПодб.РодительДляПрайса=РодительДляПрайса;
УстановитьЗначениеВПодборе("РодительДляПрайса",РодительДляПрайса);
КонецПроцедуры
//******************************************************************************
// ПРОЦЕДУРЫ И ФУНКЦИИ, ВЫЗЫВАЕМЫЕ ИЗ ФОРМУЛ ЭЛЕМЕНТОВ ДИАЛОГА
//******************************************************************************
Процедура ПечатьПрайса()
ОткрытьФорму("Обработка.ПечатьПрайсЛиста"+"#", "Прайс_лист");
КонецПроцедуры
//******************************************************************************
Процедура ПриИзмененииТипаЦены()
Перем Позиция;
// получаем позицию текущей строки
Позиция = ТипыЦен.ТекущаяСтрока();
// запоминаем значение из текущей строки
Если Позиция > 0 Тогда
ТипЦены = ТипыЦен.ПолучитьЗначение(Позиция);
Иначе
ТипЦены = ПустоеЗначение("Справочник.Цены");
КонецЕсли;
// для перерисовки инф. строки нужно очистить значение
// переменной СтарыйЭлемент
СтарыйЭлемент = ПустоеЗначение("Справочник.Номенклатура");
КонецПроцедуры
//******************************************************************************
Процедура ПечатьЦенника()
Перем ПечЕдиница, ПечНаименование,ПечРозн;
Перем ЦенаТовара;
Если ПустоеЗначение(ТипЦены) = 1 Тогда
Предупреждение("Не задан тип цены!");
Возврат;
КонецЕсли;
// Создание Таблицы для выходного отчета
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Ценник");
ЧислоСтрок=0;
Столбик=1;
Ряд=0;
ВыбТовар=ТекущийЭлемент();
Если ПустоеЗначение(ВыбТовар) = 1 Тогда
Предупреждение("Выберите товар или группу товаров!");
Возврат;
КонецЕсли;
Если ВыбТовар.ЭтоГруппа()=1 Тогда
Колво=0;
ТоварВПрайсе = СоздатьОбъект("Справочник.Прайс_лист");
ТоварВПрайсе.ВключатьПодчиненные(1);
ТоварВПрайсе.ИспользоватьРодителя(ВыбТовар);
ТоварВПрайсе.ВыбратьЭлементы();
Пока ТоварВПрайсе.ПолучитьЭлемент()>0 Цикл
Если ТоварВПрайсе.ПометкаУдаления()=1 Тогда
Продолжить;
КонецЕсли;
Если ТоварВПрайсе.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
ПечНаименование=ТоварВПрайсе.Товар.Наименование;
ЦенаТовара = глВернутьЦену(ТоварВПрайсе.Товар,ТипЦены);
Если ПустоеЗначение(ЦенаТовара) = 1 Тогда
// пропускаем товары без цен
Продолжить;
КонецЕсли;
Колво=Колво+1;
ПечЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
ВремЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
Если ТипЦены.СуммаВключаетНП = 0 Тогда
// розничная цена включает налог с продаж
СтавкаНПпроц=глПолучитьСтавкуНП(ТоварВПрайсе.Товар,РабочаяДата());
// добавим НП
ВремЦена = ВремЦена * (100+СтавкаНПпроц) / 100;
КонецЕсли;
ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2"))+" "+ЦенаТовара.Валюта.Получить(РабочаяДата());
Столбик=?(Столбик=0,1,0);
Ряд=?(Столбик=0,Ряд+1,Ряд);
Если Ряд>3 Тогда
Таб.НоваяСтраница();
Ряд=1;
КонецЕсли;
Если Столбик=0 Тогда
Таб.ВывестиСекцию("Товар|Ценник");
Иначе
Таб.ПрисоединитьСекцию("Товар|Ценник");
КонецЕсли;
глОживить(1);
КонецЦикла;
Если Колво=0 Тогда
Предупреждение("В группе """""+ВыбТовар+""""" нет ни одного товара с типом цены """""+ТипЦены+"""");
Возврат;
КонецЕсли;
Иначе
ПечНаименование=ВыбТовар.Товар.Наименование;
ЦенаТовара = глВернутьЦену(ВыбТовар.Товар,ТипЦены);
Если ПустоеЗначение(ЦенаТовара) = 1 Тогда
// пропускаем товары без цен
Предупреждение("У товара """""+ВыбТовар.Товар.Наименование+
""""" не найден тип цены '"+ТипЦены.Наименование+"""");
Возврат;
КонецЕсли;
ПечЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
ВремЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
Если ТипЦены.СуммаВключаетНП = 0 Тогда
// добавим НП
СтавкаНПпроц = глПолучитьСтавкуНП(ВыбТовар.Товар, РабочаяДата());
ВремЦена = ВремЦена * (100 + СтавкаНПпроц) / 100;
КонецЕсли;
ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2"))+" "+ЦенаТовара.Валюта.Получить(РабочаяДата());
Таб.ВывестиСекцию("Товар");
КонецЕсли;
//Вызов выходного отчета в окно просмотра и редактирования.
Таб.Опции(0,0,0,0,ПарСтрСпр);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("Ценник товаров","""");
ВыбТовар=0;
КонецПроцедуры
//******************************************************************************
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//******************************************************************************
Процедура ПриОткрытии()
Перем КатегорииЦен,ТекТипЦены;
// заполним список ТипыЦен
КатегорииЦен = СоздатьОбъект("Справочник.КатегорииЦен");
КатегорииЦен.ВыбратьЭлементы();
Пока КатегорииЦен.ПолучитьЭлемент() = 1 Цикл
Если КатегорииЦен.ПометкаУдаления() = 1 Тогда
// пропускаем помеченнные на удаление
Продолжить;
КонецЕсли;
ТипыЦен.ДобавитьЗначение(КатегорииЦен.ТекущийЭлемент());
КонецЦикла;
// восстановим значение последненго использованного типа цены
ТекТипЦены = ВосстановитьЗначение("ТипЦеныПрайса");
// первая в списке цена и будет ценой по умолчанию
Если ТипыЦен.РазмерСписка() > 0 Тогда
// проверим, а вдруг удалили все категории цен
Поз = ТипыЦен.НайтиЗначение(ТекТипЦены);
Если Поз > 0 Тогда
// если тип цены был сохранен, то установим
// список в сохраненную позицию
ТипыЦен.ТекущаяСтрока(Поз);
Иначе
ТипыЦен.ТекущаяСтрока(1);
КонецЕсли;
ПриИзмененииТипаЦены();
КонецЕсли;
КонецПроцедуры
//******************************************************************************
Процедура ПриЗаписи() // Предопределенная процедура
// в процедуре при записи проверятся заполнение обязательных реквизитов
Перем Описани;
Перем ФлагОшибки;
// изначально считаем, что не все обязательные поля заполнены
ФлагОшибки = 1;
// проверка обязательных полей
Если ПустоеЗначение(Товар) = 1 Тогда
Описание = "Не заполнено поле 'Товар'";
Активизировать("Товар");
Иначе
// все обязательные поля заполнены
ФлагОшибки = 0;
КонецЕсли;
Если ФлагОшибки=1 Тогда
// не заполнено обязательное поле
Предупреждение(Описание);
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры // ПриЗаписи
//******************************************************************************
Процедура ПриЗакрытии()
Перем ТекТипЦены;
Перем Поз;
Поз = ТипыЦен.ТекущаяСтрока();
Если Поз > 0 Тогда
ТекТипЦены = ТипыЦен.ПолучитьЗначение(Поз);
Иначе
ТекТипЦены = ПолучитьПустоеЗначение("Справочник.Цены");
КонецЕсли;
СохранитьЗначение("ТипЦеныПрайса", ТекТипЦены);
КонецПроцедуры
//******************************************************************************
Процедура ДобавитьТовар(Товар, ГруппаПрайса)
Перем ТоварДляПоиска;
Перем ТоварДляДобавления;
Перем ДопСТрокаВопроса;
Если ДублироватьПриПодборе < 2 Тогда
// выбор единицы измерения
ТоварДляПоиска = СоздатьОбъект("Справочник.Прайс_лист");
Если ТоварДляПоиска.НайтиПоРеквизиту("Товар",Товар,1)=1 Тогда
// товар уже есть в прайсе
Если ТоварДляПоиска.ПометкаУдаления() = 1 Тогда
// убираем пометку удаления
ТоварДляПоиска.СнятьПометкуУдаления();
Возврат;
КонецЕсли;
Если ДублироватьПриПодборе = 0 Тогда
// не добавлять
Сообщить("Товар " + СокрЛП(Товар.Наименование) + " уже есть в прайс-листе!");
Возврат;
Иначе
Если ДобавлениеГруппы = ДА Тогда
ДопСТрокаВопроса = РазделительСтрок+"Добавить? (использовать для других повторов)";
Иначе
ДопСТрокаВопроса = РазделительСтрок+"Добавить?";
КонецЕсли;
// ДублироватьПриПодборе = 1, нужно спросить
РезВопроса = Вопрос("Товар " + СокрЛП(Товар.Наименование) +
" уже есть в прайс-листе! " + ДопСТрокаВопроса, "Да+Нет");
Если ДобавлениеГруппы = ДА Тогда
Если РезВопроса <> "Да" Тогда
ДублироватьПриПодборе = 0;
// дубли и дальше не добавлять
Возврат;
Иначе
// добавлять дубли не спрашивая
ДублироватьПриПодборе = 2;
КонецЕсли;
Иначе
Если РезВопроса <> "Да" Тогда
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ТоварДляДобавления = СоздатьОбъект("Справочник.Прайс_лист");
Если ПустоеЗначение(ГруппаПрайса) = 0 Тогда
ТоварДляДобавления.ИспользоватьРодителя(ГруппаПрайса);
КонецЕсли;
ТоварДляДобавления.Новый();
ТоварДляДобавления.Товар = Товар;
ТоварДляДобавления.Наименование = Товар.Наименование;
ТоварДляДобавления.Записать();
КонецПроцедуры
//******************************************************************************
// ГруппаТоваров - группа из справочника номенклатура
// ГруппаПрайса - группа и справочника прайс_лист, куда вставляем "ГруппаТоваров"
Процедура ДобавитьГруппуТоваров(ГруппаТоваров,ГруппаПрайса)
Перем ТекущийРодительДляПрайса, ГруппаПрайсаДляПоиска;
Перем ВыборкаТоваров;
Если (ГруппаПрайса.Уровень() < 3) И (ПустоеЗначение(ГруппаТоваров) = 0) Тогда
// создаем группы в прайсе
ГруппаПрайсаДляПоиска = СоздатьОбъект("Справочник.Прайс_лист");
ГруппаПрайсаДляПоиска.ИспользоватьРодителя(ГруппаПрайса);
Если ГруппаПрайсаДляПоиска.НайтиПоНаименованию(ГруппаТоваров.Наименование, 1, 1) = 0 Тогда
// группу с таким именем не нашли. Создадим новую
ТекущийРодительДляПрайса = СоздатьОбъект("Справочник.Прайс_лист");
ТекущийРодительДляПрайса.ИспользоватьРодителя(ГруппаПрайса);
ТекущийРодительДляПрайса.НоваяГруппа();
ТекущийРодительДляПрайса.Наименование = ГруппаТоваров.Наименование;
ТекущийРодительДляПрайса.Записать();
Иначе
// группа с таким именем уже есть. будем использовать ее
ТекущийРодительДляПрайса = ГруппаПрайсаДляПоиска.ТекущийЭлемент();
КонецЕсли;
Иначе
// в прайсе не может быть группы ниже 3-го уровня
// поэтому добавляем товары в текущую группу
ТекущийРодительДляПрайса = ГруппаПрайса;
КонецЕсли;
ВыборкаТоваров = СоздатьОбъект("Справочник.Номенклатура");
Если ПустоеЗначение(ГруппаТоваров) = 0 Тогда
ВыборкаТоваров.ИспользоватьРодителя(ГруппаТоваров);
КонецЕсли;
ВыборкаТоваров.ВключатьПодчиненные(0);
ВыборкаТоваров.ВыбратьЭлементы();
Пока ВыборкаТоваров.ПолучитьЭлемент() = 1 Цикл
Если ВыборкаТоваров.ПометкаУдаления() = 1 Тогда
Продолжить;
КонецЕсли;
Если ВыборкаТоваров.ЭтоГруппа() = 1 Тогда
ДобавитьГруппуТоваров(ВыборкаТоваров.ТекущийЭлемент(),ТекущийРодительДляПрайса.ТекущийЭлемент());
Иначе
ДобавитьТовар(ВыборкаТоваров.ТекущийЭлемент(), ТекущийРодительДляПрайса.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//******************************************************************************
Процедура ОбработкаПодбора(Выбор) // предопределенная процедура
Если Выбор.ЭтоГруппа() = 1 Тогда
// добавляем группу товаров
ДобавлениеГруппы = ДА;
НачатьТранзакцию();
//Попытка
ДобавитьГруппуТоваров(Выбор, КонтПодб.РодительДляПрайса);
//Исключение
// ОтменитьТранзакцию();
// Сообщить(ОписаниеОшибки());
// Возврат;
//КонецПопытки;
ЗафиксироватьТранзакцию();
Иначе
// добавляем товар
ДобавитьТовар(Выбор, КонтПодб.РодительДляПрайса);
ДобавлениеГруппы = НЕТ;
КонецЕсли;
ДублироватьПриПодборе = 1;
КонецПроцедуры // ОбработкаПодбора
//******************************************************************************
// ТЕЛО МОДУЛЯ
ТоварВПрайсе=СоздатьОбъект("Справочник.Прайс_лист");
Форма.КнопкаПоУмолчанию("КнЗакрыть");
ИнформационнаяСтрока = """";
ДублироватьПриПодборе = 1;
ДобавлениеГруппы = НЕТ;[/c1code]
Помогите подправить код, чтоб высвечивалась страна производитель в ценнике.
А с таблицей, я справлюсь
Спасибо."
[c1code]//******************************************************************************
// ОПИСАНИЕ МОДУЛЬНЫХ ПЕРЕМЕННЫХ
Перем СтарыйЭлемент;
Перем ИнформационнаяСтрока;
Перем КатегорииЦен;
Перем ТипЦены;
Перем ТоварВПрайсе;
Перем КонтПодб; // контекст подбора
Перем ФормаСпискаЦен; // контекст формы списка подчиненного справочника "Цены"
// переменная используется при подборе
// может принимать следующие значения
// 0 - не добавлять дубль
// 1 - спрашивать при нахождении дубля
// 2 - добавлять дубль без вопросов
// значение по умолчанию 1
Перем ДублироватьПриПодборе;
// используется в обработке подбора вместе с ДублироватьПриПодборе
// если значение - ДА, то в процедуре ДобавитьТовар, после вопроса,
// значение ДублироватьПриПодборе устанавливется либо в 0, либо в 2
Перем ДобавлениеГруппы;
//******************************************************************************
// "СЛУЖЕБНЫЕ" ПРОЦЕДУРЫ И ФУНКЦИИ
//******************************************************************************
// Название: СформироватьИнформационнуюСтроку()
// Параметры:
// НЕТ
// Возвращаемое значение:
// Строка с дополнительной информацией
// Описание:
// процедура предназначена для формирования информационной
// строки для текущего элемента в списке. К такой
// может относится информация которую из-за большого объема
// нет смысла помещать в список, либо при размещении ее в
// колонке будет заметная ухудшение производительности
// (к примеру сложновычисляемая информация из регистра и т.д.)
Функция СформироватьИнформационнуюСтроку()
Перем Цена, Валюта;
Перем ТекТовар;
Если ТекущийЭлемент()<>СтарыйЭлемент Тогда
// новый элемент не равен текущему
// так как функция будет вызываться каждый раз при перерисовки формы
// (необязательно, что в этот момент будет выбран другой элемент в списке),
// то чтобы не выполнять ненужные вычисления проверяем, что в списке
// выбран элемент, отличный от того, для которого была сформирована
// информационная строка
Если ТекущийЭлемент().ЭтоГруппа()=0 Тогда
Если ПустоеЗначение(ТипЦены) = 0 Тогда
// вычислим цену товара
ТекТовар = ТекущийЭлемент().Товар;
Цена = глВернутьЦену(ТекТовар, ТипЦены);
Если ПустоеЗначение(Цена) = 0 Тогда
// нашли цену
Цена.ИспользоватьДату(РабочаяДата());
ИнформационнаяСтрока = Формат(Цена.Цена,глФорматСуммы) + " " + Цена.Валюта + " за " + Цена.Единица.ТипЕдиницы;
Иначе
// нет цены товара в указанной категории цен
ИнформационнаяСтрока = "Цена отсутствует"
КонецЕсли;
Иначе
ИнформационнаяСтрока = """";
КонецЕсли;
Иначе
ИнформационнаяСтрока = """";
КонецЕсли;
КонецЕсли;
СтарыйЭлемент = ТекущийЭлемент();
Возврат ИнформационнаяСтрока;
КонецФункции
//******************************************************************************
Процедура Подбор()
РодительДляПрайса=ТекущийЭлемент().Родитель;
ОткрытьПодбор("Номенклатура","ДляПрайса",КонтПодб);
КонтПодб.РодительДляПрайса.ВыборГруппы(1);
КонтПодб.РодительДляПрайса=РодительДляПрайса;
УстановитьЗначениеВПодборе("РодительДляПрайса",РодительДляПрайса);
КонецПроцедуры
//******************************************************************************
// ПРОЦЕДУРЫ И ФУНКЦИИ, ВЫЗЫВАЕМЫЕ ИЗ ФОРМУЛ ЭЛЕМЕНТОВ ДИАЛОГА
//******************************************************************************
Процедура ПечатьПрайса()
ОткрытьФорму("Обработка.ПечатьПрайсЛиста"+"#", "Прайс_лист");
КонецПроцедуры
//******************************************************************************
Процедура ПриИзмененииТипаЦены()
Перем Позиция;
// получаем позицию текущей строки
Позиция = ТипыЦен.ТекущаяСтрока();
// запоминаем значение из текущей строки
Если Позиция > 0 Тогда
ТипЦены = ТипыЦен.ПолучитьЗначение(Позиция);
Иначе
ТипЦены = ПустоеЗначение("Справочник.Цены");
КонецЕсли;
// для перерисовки инф. строки нужно очистить значение
// переменной СтарыйЭлемент
СтарыйЭлемент = ПустоеЗначение("Справочник.Номенклатура");
КонецПроцедуры
//******************************************************************************
Процедура ПечатьЦенника()
Перем ПечЕдиница, ПечНаименование,ПечРозн;
Перем ЦенаТовара;
Если ПустоеЗначение(ТипЦены) = 1 Тогда
Предупреждение("Не задан тип цены!");
Возврат;
КонецЕсли;
// Создание Таблицы для выходного отчета
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Ценник");
ЧислоСтрок=0;
Столбик=1;
Ряд=0;
ВыбТовар=ТекущийЭлемент();
Если ПустоеЗначение(ВыбТовар) = 1 Тогда
Предупреждение("Выберите товар или группу товаров!");
Возврат;
КонецЕсли;
Если ВыбТовар.ЭтоГруппа()=1 Тогда
Колво=0;
ТоварВПрайсе = СоздатьОбъект("Справочник.Прайс_лист");
ТоварВПрайсе.ВключатьПодчиненные(1);
ТоварВПрайсе.ИспользоватьРодителя(ВыбТовар);
ТоварВПрайсе.ВыбратьЭлементы();
Пока ТоварВПрайсе.ПолучитьЭлемент()>0 Цикл
Если ТоварВПрайсе.ПометкаУдаления()=1 Тогда
Продолжить;
КонецЕсли;
Если ТоварВПрайсе.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
ПечНаименование=ТоварВПрайсе.Товар.Наименование;
ЦенаТовара = глВернутьЦену(ТоварВПрайсе.Товар,ТипЦены);
Если ПустоеЗначение(ЦенаТовара) = 1 Тогда
// пропускаем товары без цен
Продолжить;
КонецЕсли;
Колво=Колво+1;
ПечЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
ВремЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
Если ТипЦены.СуммаВключаетНП = 0 Тогда
// розничная цена включает налог с продаж
СтавкаНПпроц=глПолучитьСтавкуНП(ТоварВПрайсе.Товар,РабочаяДата());
// добавим НП
ВремЦена = ВремЦена * (100+СтавкаНПпроц) / 100;
КонецЕсли;
ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2"))+" "+ЦенаТовара.Валюта.Получить(РабочаяДата());
Столбик=?(Столбик=0,1,0);
Ряд=?(Столбик=0,Ряд+1,Ряд);
Если Ряд>3 Тогда
Таб.НоваяСтраница();
Ряд=1;
КонецЕсли;
Если Столбик=0 Тогда
Таб.ВывестиСекцию("Товар|Ценник");
Иначе
Таб.ПрисоединитьСекцию("Товар|Ценник");
КонецЕсли;
глОживить(1);
КонецЦикла;
Если Колво=0 Тогда
Предупреждение("В группе """""+ВыбТовар+""""" нет ни одного товара с типом цены """""+ТипЦены+"""");
Возврат;
КонецЕсли;
Иначе
ПечНаименование=ВыбТовар.Товар.Наименование;
ЦенаТовара = глВернутьЦену(ВыбТовар.Товар,ТипЦены);
Если ПустоеЗначение(ЦенаТовара) = 1 Тогда
// пропускаем товары без цен
Предупреждение("У товара """""+ВыбТовар.Товар.Наименование+
""""" не найден тип цены '"+ТипЦены.Наименование+"""");
Возврат;
КонецЕсли;
ПечЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
ВремЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
Если ТипЦены.СуммаВключаетНП = 0 Тогда
// добавим НП
СтавкаНПпроц = глПолучитьСтавкуНП(ВыбТовар.Товар, РабочаяДата());
ВремЦена = ВремЦена * (100 + СтавкаНПпроц) / 100;
КонецЕсли;
ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2"))+" "+ЦенаТовара.Валюта.Получить(РабочаяДата());
Таб.ВывестиСекцию("Товар");
КонецЕсли;
//Вызов выходного отчета в окно просмотра и редактирования.
Таб.Опции(0,0,0,0,ПарСтрСпр);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("Ценник товаров","""");
ВыбТовар=0;
КонецПроцедуры
//******************************************************************************
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//******************************************************************************
Процедура ПриОткрытии()
Перем КатегорииЦен,ТекТипЦены;
// заполним список ТипыЦен
КатегорииЦен = СоздатьОбъект("Справочник.КатегорииЦен");
КатегорииЦен.ВыбратьЭлементы();
Пока КатегорииЦен.ПолучитьЭлемент() = 1 Цикл
Если КатегорииЦен.ПометкаУдаления() = 1 Тогда
// пропускаем помеченнные на удаление
Продолжить;
КонецЕсли;
ТипыЦен.ДобавитьЗначение(КатегорииЦен.ТекущийЭлемент());
КонецЦикла;
// восстановим значение последненго использованного типа цены
ТекТипЦены = ВосстановитьЗначение("ТипЦеныПрайса");
// первая в списке цена и будет ценой по умолчанию
Если ТипыЦен.РазмерСписка() > 0 Тогда
// проверим, а вдруг удалили все категории цен
Поз = ТипыЦен.НайтиЗначение(ТекТипЦены);
Если Поз > 0 Тогда
// если тип цены был сохранен, то установим
// список в сохраненную позицию
ТипыЦен.ТекущаяСтрока(Поз);
Иначе
ТипыЦен.ТекущаяСтрока(1);
КонецЕсли;
ПриИзмененииТипаЦены();
КонецЕсли;
КонецПроцедуры
//******************************************************************************
Процедура ПриЗаписи() // Предопределенная процедура
// в процедуре при записи проверятся заполнение обязательных реквизитов
Перем Описани;
Перем ФлагОшибки;
// изначально считаем, что не все обязательные поля заполнены
ФлагОшибки = 1;
// проверка обязательных полей
Если ПустоеЗначение(Товар) = 1 Тогда
Описание = "Не заполнено поле 'Товар'";
Активизировать("Товар");
Иначе
// все обязательные поля заполнены
ФлагОшибки = 0;
КонецЕсли;
Если ФлагОшибки=1 Тогда
// не заполнено обязательное поле
Предупреждение(Описание);
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры // ПриЗаписи
//******************************************************************************
Процедура ПриЗакрытии()
Перем ТекТипЦены;
Перем Поз;
Поз = ТипыЦен.ТекущаяСтрока();
Если Поз > 0 Тогда
ТекТипЦены = ТипыЦен.ПолучитьЗначение(Поз);
Иначе
ТекТипЦены = ПолучитьПустоеЗначение("Справочник.Цены");
КонецЕсли;
СохранитьЗначение("ТипЦеныПрайса", ТекТипЦены);
КонецПроцедуры
//******************************************************************************
Процедура ДобавитьТовар(Товар, ГруппаПрайса)
Перем ТоварДляПоиска;
Перем ТоварДляДобавления;
Перем ДопСТрокаВопроса;
Если ДублироватьПриПодборе < 2 Тогда
// выбор единицы измерения
ТоварДляПоиска = СоздатьОбъект("Справочник.Прайс_лист");
Если ТоварДляПоиска.НайтиПоРеквизиту("Товар",Товар,1)=1 Тогда
// товар уже есть в прайсе
Если ТоварДляПоиска.ПометкаУдаления() = 1 Тогда
// убираем пометку удаления
ТоварДляПоиска.СнятьПометкуУдаления();
Возврат;
КонецЕсли;
Если ДублироватьПриПодборе = 0 Тогда
// не добавлять
Сообщить("Товар " + СокрЛП(Товар.Наименование) + " уже есть в прайс-листе!");
Возврат;
Иначе
Если ДобавлениеГруппы = ДА Тогда
ДопСТрокаВопроса = РазделительСтрок+"Добавить? (использовать для других повторов)";
Иначе
ДопСТрокаВопроса = РазделительСтрок+"Добавить?";
КонецЕсли;
// ДублироватьПриПодборе = 1, нужно спросить
РезВопроса = Вопрос("Товар " + СокрЛП(Товар.Наименование) +
" уже есть в прайс-листе! " + ДопСТрокаВопроса, "Да+Нет");
Если ДобавлениеГруппы = ДА Тогда
Если РезВопроса <> "Да" Тогда
ДублироватьПриПодборе = 0;
// дубли и дальше не добавлять
Возврат;
Иначе
// добавлять дубли не спрашивая
ДублироватьПриПодборе = 2;
КонецЕсли;
Иначе
Если РезВопроса <> "Да" Тогда
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ТоварДляДобавления = СоздатьОбъект("Справочник.Прайс_лист");
Если ПустоеЗначение(ГруппаПрайса) = 0 Тогда
ТоварДляДобавления.ИспользоватьРодителя(ГруппаПрайса);
КонецЕсли;
ТоварДляДобавления.Новый();
ТоварДляДобавления.Товар = Товар;
ТоварДляДобавления.Наименование = Товар.Наименование;
ТоварДляДобавления.Записать();
КонецПроцедуры
//******************************************************************************
// ГруппаТоваров - группа из справочника номенклатура
// ГруппаПрайса - группа и справочника прайс_лист, куда вставляем "ГруппаТоваров"
Процедура ДобавитьГруппуТоваров(ГруппаТоваров,ГруппаПрайса)
Перем ТекущийРодительДляПрайса, ГруппаПрайсаДляПоиска;
Перем ВыборкаТоваров;
Если (ГруппаПрайса.Уровень() < 3) И (ПустоеЗначение(ГруппаТоваров) = 0) Тогда
// создаем группы в прайсе
ГруппаПрайсаДляПоиска = СоздатьОбъект("Справочник.Прайс_лист");
ГруппаПрайсаДляПоиска.ИспользоватьРодителя(ГруппаПрайса);
Если ГруппаПрайсаДляПоиска.НайтиПоНаименованию(ГруппаТоваров.Наименование, 1, 1) = 0 Тогда
// группу с таким именем не нашли. Создадим новую
ТекущийРодительДляПрайса = СоздатьОбъект("Справочник.Прайс_лист");
ТекущийРодительДляПрайса.ИспользоватьРодителя(ГруппаПрайса);
ТекущийРодительДляПрайса.НоваяГруппа();
ТекущийРодительДляПрайса.Наименование = ГруппаТоваров.Наименование;
ТекущийРодительДляПрайса.Записать();
Иначе
// группа с таким именем уже есть. будем использовать ее
ТекущийРодительДляПрайса = ГруппаПрайсаДляПоиска.ТекущийЭлемент();
КонецЕсли;
Иначе
// в прайсе не может быть группы ниже 3-го уровня
// поэтому добавляем товары в текущую группу
ТекущийРодительДляПрайса = ГруппаПрайса;
КонецЕсли;
ВыборкаТоваров = СоздатьОбъект("Справочник.Номенклатура");
Если ПустоеЗначение(ГруппаТоваров) = 0 Тогда
ВыборкаТоваров.ИспользоватьРодителя(ГруппаТоваров);
КонецЕсли;
ВыборкаТоваров.ВключатьПодчиненные(0);
ВыборкаТоваров.ВыбратьЭлементы();
Пока ВыборкаТоваров.ПолучитьЭлемент() = 1 Цикл
Если ВыборкаТоваров.ПометкаУдаления() = 1 Тогда
Продолжить;
КонецЕсли;
Если ВыборкаТоваров.ЭтоГруппа() = 1 Тогда
ДобавитьГруппуТоваров(ВыборкаТоваров.ТекущийЭлемент(),ТекущийРодительДляПрайса.ТекущийЭлемент());
Иначе
ДобавитьТовар(ВыборкаТоваров.ТекущийЭлемент(), ТекущийРодительДляПрайса.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//******************************************************************************
Процедура ОбработкаПодбора(Выбор) // предопределенная процедура
Если Выбор.ЭтоГруппа() = 1 Тогда
// добавляем группу товаров
ДобавлениеГруппы = ДА;
НачатьТранзакцию();
//Попытка
ДобавитьГруппуТоваров(Выбор, КонтПодб.РодительДляПрайса);
//Исключение
// ОтменитьТранзакцию();
// Сообщить(ОписаниеОшибки());
// Возврат;
//КонецПопытки;
ЗафиксироватьТранзакцию();
Иначе
// добавляем товар
ДобавитьТовар(Выбор, КонтПодб.РодительДляПрайса);
ДобавлениеГруппы = НЕТ;
КонецЕсли;
ДублироватьПриПодборе = 1;
КонецПроцедуры // ОбработкаПодбора
//******************************************************************************
// ТЕЛО МОДУЛЯ
ТоварВПрайсе=СоздатьОбъект("Справочник.Прайс_лист");
Форма.КнопкаПоУмолчанию("КнЗакрыть");
ИнформационнаяСтрока = """";
ДублироватьПриПодборе = 1;
ДобавлениеГруппы = НЕТ;[/c1code]
Помогите подправить код, чтоб высвечивалась страна производитель в ценнике.
А с таблицей, я справлюсь
Спасибо."
20.03.2006
16:02
#4
Еще можно 2 вопроса
1) "Справочник.Прайс_лист" - имеет реквизит "СтранаПроисхождения" ?
2) на форме "ВыбТовар" какой тип имеет, "Справочник.Номенклатура" или тоже "Справочник.Прайс_лист".
1) "Справочник.Прайс_лист" - имеет реквизит "СтранаПроисхождения" ?
2) на форме "ВыбТовар" какой тип имеет, "Справочник.Номенклатура" или тоже "Справочник.Прайс_лист".
20.03.2006
16:17
#5
1. Нет, такого реквизита в справочнике Прайс_лист нет.
2. Свойства реквизита ТОВАР имеет тип значения - Справочник.Номенклатура
2. Свойства реквизита ТОВАР имеет тип значения - Справочник.Номенклатура
20.03.2006
16:34
#6
"попробуй может поможет
Процедура ПечатьЦенника()
Перем ПечЕдиница, ПечНаименование,ПечРозн;
Перем ЦенаТовара;
спрТовар = СоздатьОбъект("Справочник.Номенклатура"); //добавить
И
спрТовар.НайтиПоНаименованию(ТоварВПрайсе.Товар.Наименование,1,1); //добавить
ПечСтрана = спрТовар.СтранаПроисхождения; //добавить
//перед
ПечНаименование=ТоварВПрайсе.Товар.Наименование;
ЦенаТовара = глВернутьЦену(ТоварВПрайсе.Товар,ТипЦены);
И
ПечСтрана в табличку подсунуть"
Процедура ПечатьЦенника()
Перем ПечЕдиница, ПечНаименование,ПечРозн;
Перем ЦенаТовара;
спрТовар = СоздатьОбъект("Справочник.Номенклатура"); //добавить
И
спрТовар.НайтиПоНаименованию(ТоварВПрайсе.Товар.Наименование,1,1); //добавить
ПечСтрана = спрТовар.СтранаПроисхождения; //добавить
//перед
ПечНаименование=ТоварВПрайсе.Товар.Наименование;
ЦенаТовара = глВернутьЦену(ТоварВПрайсе.Товар,ТипЦены);
И
ПечСтрана в табличку подсунуть"
21.03.2006
02:38
#7
Нет не работает.
Как сделать, чтобы при выводе на печать группы в ценнике показывало СтранаПроизводитель?
Показывает, только при отдельном выделении из списка.
Как сделать, чтобы при выводе на печать группы в ценнике показывало СтранаПроизводитель?
Показывает, только при отдельном выделении из списка.
21.03.2006
02:44
#8
"Мне в принципе всё равно в справочнике номенклатура сделать печать ценников или в прайс_лист.
Код ПрайсЛист выше.
А вот код Номеклатура.
-------
//******************************************************************************
// ОПИСАНИЕ МОДУЛЬНЫХ ПЕРЕМЕННЫХ
//******************************************************************************
Перем СтарыйЭлемент;
Перем ИнформационнаяСтрока;
Перем ТипЦены, ИнфЦена;
Перем ТипРеализОтчета;
Перем гСписокОбработок;
Перем гСписПодчСправочников;
Перем гСписСтатусовКомиссионеров;
Перем гСписСтатусовПоставщиков;
//******************************************************************************
// "СЛУЖЕБНЫЕ" ПРОЦЕДУРЫ И ФУНКЦИИ
//******************************************************************************
Функция ПредставлениеТекущегоЭлемента()
Эл = ТекущийЭлемент();
Стр = СокрЛП(Эл.ПолнНаименование);
Стр = Стр + ?(Эл.ВидТовара <> Перечисление.ВидыТоваров.Товар, " (" + Эл.ВидТовара + ") ", """");
Стр = Стр + ?(ПустоеЗначение(Эл.Артикул) = 0, " Артикул: " + СокрЛП(Эл.Артикул), """");
Стр = Стр + ?(ПустоеЗначение(Эл.Комментарий) = 0, " Комментарий: " + СокрЛП(Эл.Комментарий), """");
Возврат Стр;
КонецФункции
//******************************************************************************
Процедура ФормТекстИнформации(ВидДопИнформации)
Заголовок = "Информация по товару";
Если ТекущийЭлемент().ЭтоГруппа() = 0 Тогда
Если Найти("Остатки,Резерв,Заказ,Поставщики,Комиссионеры",ВидДопИнформации) > 0 Тогда
Заголовок = Заголовок + " (" + ТекущийЭлемент().БазоваяЕдиница + ")";
КонецЕсли;
Если Найти("Поставщики,Комиссионеры", ВидДопИнформации) > 0 Тогда
Заголовок = СтрЗаменить(Заголовок, ")", """") + " / " + ТекущийЭлемент().ВалютаУчета + ")";
КонецЕсли;
КонецЕсли;
Форма.ФормТекстИнформации.Заголовок(Заголовок + ":");
КонецПроцедуры
//******************************************************************************
Процедура ДобавитьКолонкиВТаблицу(ВидДопИнформации)
ФормТабДопИнформации.Очистить();
Если ВидДопИнформации = "Цены" Тогда
ФормТабДопИнформации.НоваяКолонка("КатегорияЦены", , , , "Тип цены", 18);
ФормТабДопИнформации.НоваяКолонка("Цена", , , , "Цена", 8, глФорматСуммы, 2);
ФормТабДопИнформации.НоваяКолонка("Валюта", , , , "Вал.", 4);
ФормТабДопИнформации.НоваяКолонка("Единица", , , , "Ед.", 4);
ИначеЕсли ВидДопИнформации = "СвойстваНоменклатуры" Тогда
ФормТабДопИнформации.НоваяКолонка("ВидСвойства", , , , "Вид свойства", 15);
ФормТабДопИнформации.НоваяКолонка("ЗначениеСвойства", , , , "Значение", 16);
ИначеЕсли ВидДопИнформации = "Единицы" Тогда
ФормТабДопИнформации.НоваяКолонка("ТипЕдиницы", , , , "Единица", 8);
ФормТабДопИнформации.НоваяКолонка("Коэффициент", , , , "Коэффициент", 10, , 2);
ФормТабДопИнформации.НоваяКолонка("Вес", , , , "Вес", 10, , 2);
ИначеЕсли ВидДопИнформации = "Комплектация" Тогда
ФормТабДопИнформации.НоваяКолонка("Товар", , , , "Товар", 26);
ФормТабДопИнформации.НоваяКолонка("Количество", , , , "Количество", 10, , 2);
ИначеЕсли ВидДопИнформации = "Аналоги" Тогда
ФормТабДопИнформации.НоваяКолонка("Наименование", , , , "Наименование", 26);
ФормТабДопИнформации.НоваяКолонка("Каталог", , , , "Каталог", 10);
ИначеЕсли ВидДопИнформации = "Остатки" Тогда
ФормТабДопИнформации.НоваяКолонка("Склад", , , , "Склад", 28);
ФормТабДопИнформации.НоваяКолонка("Остаток", , , , "Остаток", 8, , 2);
ИначеЕсли ВидДопИнформации = "Поставщики" Тогда
ФормТабДопИнформации.НоваяКолонка("Поставщик", , , , "Поставщик", 26);
ФормТабДопИнформации.НоваяКолонка("Остаток", , , , "Ост.", 8, , 2);
ФормТабДопИнформации.НоваяКолонка("Цена", , , , "Цена", 10, глФорматСуммы, 2);
ИначеЕсли ВидДопИнформации = "Комиссионеры" Тогда
ФормТабДопИнформации.НоваяКолонка("Комиссионер", , , , "Комиссионер", 26);
ФормТабДопИнформации.НоваяКолонка("Остаток", , , , "Ост.", 8, , 2);
ФормТабДопИнформации.НоваяКолонка("Цена", , , , "Цена", 10, глФорматСуммы, 2);
ИначеЕсли ВидДопИнформации = "Резерв" Тогда
ФормТабДопИнформации.НоваяКолонка("ПоСчету", , , , "По счету", 26);
ФормТабДопИнформации.НоваяКолонка("Резерв", , , , "Резерв", 8, , 2);
ИначеЕсли ВидДопИнформации = "Заказ" Тогда
ФормТабДопИнформации.НоваяКолонка("Остаток", , , , "Остаток", 10, , 2);
ФормТабДопИнформации.НоваяКолонка("Резерв", , , , "Резерв", 10, , 2);
ФормТабДопИнформации.НоваяКолонка("Заказ", , , , "Заказано", 10, , 2);
ИначеЕсли ВидДопИнформации = "ГТД" Тогда
КонецЕсли;
ФормТабДопИнформации.НоваяКолонка("Объект");
ФормТабДопИнформации.ВидимостьКолонки("Объект", 0);
КонецПроцедуры
//******************************************************************************
Функция ПредставлениеПодчЭлемента(Эл)
Стр = """";
Если Эл.Вид() = "Цены" Тогда
Эл.ИспользоватьДату(РабочаяДата());
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.КатегорияЦены = СокрЛП(Эл.КатегорияЦены.Наименование);
ФормТабДопИнформации.Цена = Эл.Цена;
ФормТабДопИнформации.Валюта = Эл.Валюта;
ФормТабДопИнформации.Единица = Эл.Единица.ТипЕдиницы;
ИначеЕсли Эл.Вид() = "СвойстваНоменклатуры" Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.ВидСвойства = Эл.ВидСвойства;
ФормТабДопИнформации.ЗначениеСвойства = СокрЛП(Эл.ЗначениеСвойства.Наименование);
ИначеЕсли Эл.Вид() = "Единицы" Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.ТипЕдиницы = СокрЛП(Эл.ТипЕдиницы.Наименование);
ФормТабДопИнформации.Коэффициент = Эл.Коэффициент;
ФормТабДопИнформации.Вес = ?(ПустоеЗначение(Эл.Вес) = 0, Эл.Вес, """");
ИначеЕсли Эл.Вид() = "Комплектация" Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.Товар = Эл.Товар.Наименование;
ФормТабДопИнформации.Количество = Эл.Количество;
ИначеЕсли Эл.Вид() = "Аналоги" Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.Наименование = Эл.Наименование;
ФормТабДопИнформации.Каталог = Эл.Каталог;
КонецЕсли;
ФормТабДопИнформации.Сортировать("Объект+");
Возврат Стр;
КонецФункции
//******************************************************************************
Функция СформироватьИнформационнуюСтроку()
Если ТекущийЭлемент().ЭтоГруппа() = 1 Тогда
СтарыйЭлемент = ТекущийЭлемент();
ФормТабДопИнформации.УдалитьСтроки();
Возврат ТекущийЭлемент().ПолноеНаименование();
ИначеЕсли ПустоеЗначение(ТекущийЭлемент()) = 1 Тогда
СтарыйЭлемент = """";
ФормТабДопИнформации.УдалитьСтроки();
Возврат """";
КонецЕсли;
Если ТекущийЭлемент() <> СтарыйЭлемент Тогда
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
ФормТекстИнформации(ВидДопИнформации);
ФормТабДопИнформации.УдалитьСтроки();
СтарыйЭлемент = ТекущийЭлемент();
Если ВидДопИнформации = "Остатки" Тогда
СпрСклады = СоздатьОбъект("Справочник.МестаХранения");
СпрСклады.ВыбратьЭлементы();
Пока СпрСклады.ПолучитьЭлемент() = 1 Цикл
Фирма = ПолучитьПустоеЗначение("Справочник.Фирмы");
Склад = СпрСклады.ТекущийЭлемент();
Ост = Регистр.ОстаткиТоваров.СводныйОстаток(Фирма, ТекущийЭлемент(), Склад, "ОстатокТовара");
Если ПустоеЗначение(Ост) = 0 Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Склад = Склад;
ФормТабДопИнформации.Остаток = Ост;
КонецЕсли;
КонецЦикла;
ИначеЕсли ВидДопИнформации = "Поставщики" Тогда
Фирма = ПолучитьПустоеЗначение("Справочник.Фирмы");
Рег = СоздатьОбъект("Регистр.ПартииТоваров");
Рег.УстановитьЗначениеФильтра("Фирма", Фирма, 1);
Рег.УстановитьЗначениеФильтра("Товар", ТекущийЭлемент(), 1);
Рег.УстановитьЗначениеФильтра("Статус", гСписСтатусовПоставщиков, 2);
Рег.ВыбратьИтоги();
Пока Рег.ПолучитьИтог() = 1 Цикл
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Поставщик = Рег.Поставщик;
ФормТабДопИнформации.Остаток = Рег.ОстатокТовара;
Если ФормТабДопИнформации.Остаток <> 0 Тогда
ФормТабДопИнформации.Цена = (Рег.Стоимость + Рег.НДС + Рег.СтоимостьНП) / ФормТабДопИнформации.Остаток;
Иначе
ФормТабДопИнформации.Цена = Рег.Стоимость + Рег.НДС + Рег.СтоимостьНП;
КонецЕсли;
ФормТабДопИнформации.Объект = Рег.ПрихДокумент;
КонецЦикла;
ИначеЕсли ВидДопИнформации = "Комиссионеры" Тогда
Фирма = ПолучитьПустоеЗначение("Справочник.Фирмы");
Рег = СоздатьОбъект("Регистр.ПартииТоваров");
Рег.УстановитьЗначениеФильтра("Фирма", Фирма, 1);
Рег.УстановитьЗначениеФильтра("Товар", ТекущийЭлемент(), 1);
Рег.УстановитьЗначениеФильтра("Статус", гСписСтатусовКомиссионеров, 2);
Рег.ВыбратьИтоги();
Пока Рег.ПолучитьИтог() = 1 Цикл
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Комиссионер = Рег.Контрагент;
ФормТабДопИнформации.Остаток = Рег.ОстатокТовара;
Если ФормТабДопИнформации.Остаток <> 0 Тогда
ФормТабДопИнформации.Цена = Рег.ПродСтоимость / ФормТабДопИнформации.Остаток;
Иначе
ФормТабДопИнформации.Цена = Рег.ПродСтоимость;
КонецЕсли;
ФормТабДопИнформации.Объект = Рег.ПрихДокумент;
КонецЦикла;
ИначеЕсли ВидДопИнформации = "Резерв" Тогда
Рег = СоздатьОбъект("Регистр.РезервыТоваров");
Рег.УстановитьЗначениеФильтра("Товар", ТекущийЭлемент(), 1);
Рег.ВыбратьИтоги();
Пока Рег.ПолучитьИтог() = 1 Цикл
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.ПоСчету = Рег.ПоСчету;
ФормТабДопИнформации.Резерв = Рег.РезервТовара;
ФормТабДопИнформации.Объект = Рег.ПоСчету;
КонецЦикла;
ИначеЕсли ВидДопИнформации = "Заказ" Тогда
Фирма = ПолучитьПустоеЗначение("Справочник.Фирмы");
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Остаток = Регистр.ОстаткиТоваров.СводныйОстаток(Фирма, ТекущийЭлемент(), , "ОстатокТовара");
ФормТабДопИнформации.Резерв = Регистр.РезервыТоваров.СводныйОстаток(ТекущийЭлемент(), , "РезервТовара");
ФормТабДопИнформации.Заказ = Регистр.ОжидаемыеТовары.СводныйОстаток(ТекущийЭлемент(), , "ОжидаемыйТовар");
ИначеЕсли ВидДопИнформации = "ГТД" Тогда
Иначе
ЭлПодчСправочника = СоздатьОбъект("Справочник." + ВидДопИнформации);
ЭлПодчСправочника.ИспользоватьВладельца(ТекущийЭлемент());
ЭлПодчСправочника.ВыбратьЭлементы();
Пока ЭлПодчСправочника.ПолучитьЭлемент() = 1 Цикл
Если ЭлПодчСправочника.ПометкаУдаления() = 1 Тогда Продолжить КонецЕсли;
ПредставлениеПодчЭлемента(ЭлПодчСправочника.ТекущийЭлемент());
КонецЦикла;
// Это альтернативный вариант получения элементов подчиненных справочников
// возможно на сетевой базе SQL будет работать эффективнее
//ТекЭл = ТекущийЭлемент();
//ТекстЗапроса = "
//|Обрабатывать НеПомеченныеНаУдаление;
//|Эл = Справочник.*.ТекущийЭлемент;
//|Влад = Справочник.*.Владелец;
//|Группировка Эл;
//|Условие (Влад = ТекЭл);";
//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "*", ВидДопИнформации);
//Запрос = СоздатьОбъект("Запрос");
//Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат ПредставлениеТекущегоЭлемента() КонецЕсли;
//Пока Запрос.Группировка(1) = 1 Цикл ПредставлениеПодчЭлемента(Запрос.Эл) КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат ПредставлениеТекущегоЭлемента();
КонецФункции
//******************************************************************************
Процедура ПриВыбореВидаДопИнформации()
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
ФормТекстИнформации(ВидДопИнформации);
ДобавитьКолонкиВТаблицу(ВидДопИнформации);
Если гСписПодчСправочников.Принадлежит(ВидДопИнформации) = 1 Тогда
Форма.ИспользоватьСлой("ДляРедактированияПодчЭлементов", 1)
Иначе
Форма.ИспользоватьСлой("ДляРедактированияПодчЭлементов", 0)
КонецЕсли;
СтарыйЭлемент = """";
СформироватьИнформационнуюСтроку();
КонецПроцедуры
//******************************************************************************
//******************************************************************************
// ПРОЦЕДУРЫ И ФУНКЦИИ, ВЫЗЫВАЕМЫЕ ИЗ ФОРМУЛ ЭЛЕМЕНТОВ ДИАЛОГА
//******************************************************************************
//******************************************************************************
Процедура ПриВыбореЯчейкиТаблицы(Таб)
Поз = Таб.ТекущаяСтрока();
Если Поз = 0 Тогда Возврат КонецЕсли;
Попытка
Зн = Таб.ПолучитьЗначение(Поз, "Объект");
Исключение КонецПопытки;
ОткрытьФормуМодально(Зн);
Таб.УдалитьСтроку(Поз);
СтарыйЭлемент = """";
СформироватьИнформационнуюСтроку();
Таб.ТекущаяСтрока(Поз);
КонецПроцедуры
//******************************************************************************
Процедура ДобавитьЗначениеВТаблицу(Таб, Режим)
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
Если ПравоДоступа("ВводНового", "Справочник." + ВидДопИнформации) = 0 Тогда
Предупреждение("Недостаточно прав доступа!");
Возврат;
КонецЕсли;
Если (ТекущийЭлемент().ЭтоГруппа() = 1) Или (ПустоеЗначение(ТекущийЭлемент()) = 1) Тогда
Таб.УдалитьСтроки();
Возврат;
КонецЕсли;
РазмерТабДоДобавленияНового = Таб.КоличествоСтрок();
ОткрытьФормуМодально("Элемент." + ВидДопИнформации, , , , ТекущийЭлемент());
СтарыйЭлемент = """";
СформироватьИнформационнуюСтроку();
Если (Режим = 1) И (Таб.КоличествоСтрок() > РазмерТабДоДобавленияНового) Тогда
ДобавитьЗначениеВТаблицу(Таб, Режим);
КонецЕсли;
КонецПроцедуры
//******************************************************************************
Процедура УдалитьЗначениеИзТаблицы(Таб, Режим="""")
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
Если ПравоДоступа("ПометкаНаУдаление", "Справочник." + ВидДопИнформации) = 0 Тогда
Предупреждение("Недостаточно прав доступа!");
Возврат;
КонецЕсли;
Если (ТекущийЭлемент().ЭтоГруппа() = 1) Или (ПустоеЗначение(ТекущийЭлемент()) = 1) Тогда
Таб.УдалитьСтроки();
Возврат;
КонецЕсли;
ЭлПодчСправочника = СоздатьОбъект("Справочник." + ВидДопИнформации);
ЭлПодчСправочника.ИспользоватьВладельца(ТекущийЭлемент());
Если Режим = "Все" Тогда
Если Вопрос("Пометить на удаление все подчиненные элементы?", 4) <> 6 Тогда Возврат КонецЕсли;
ЭлПодчСправочника.ВыбратьЭлементы();
Пока ЭлПодчСправочника.ПолучитьЭлемент() = 1 Цикл
ЭлПодчСправочника.Удалить(0);
КонецЦикла;
Таб.УдалитьСтроки();
Возврат;
КонецЕсли;
Поз = Таб.ТекущаяСтрока();
Если Поз = 0 Тогда Возврат КонецЕсли;
Зн = Таб.ПолучитьЗначение(Поз, "Объект");
Если ЭлПодчСправочника.НайтиЭлемент(Зн) = 0 Тогда Возврат КонецЕсли;
ЭлПодчСправочника.Удалить(0);
Таб.УдалитьСтроку(Поз);
Если Таб.КоличествоСтрок() < Поз Тогда
Таб.ТекущаяСтрока(Поз - 1);
Иначе
Таб.ТекущаяСтрока(Поз);
КонецЕсли;
КонецПроцедуры
//******************************************************************************
Процедура ВыборОбработки()
Зн = """"; Поз = """";
Если гСписокОбработок.ВыбратьЗначение(Зн, , Поз, , 1) = 1 Тогда
ОткрытьФорму("Обработка." + Зн);
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
//******************************************************************************
// Название: ПоказатьПодч()
// Параметры:
// ВидСправочника - вид справочника, форму списка которого нужно открыть.
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элементов диалога:
// Кнопка "Цены", "Аналоги" и "Значения свойств".
// Описание:
// Открывается форма списка подчиненного справочника, заданного параметром
// ВидСправочника
Процедура ПоказатьПодч(ВидСправочника)
Перем ФормаСпискаЦен;
Если ПустоеЗначение(ТекущийЭлемент()) = 0 Тогда
Если ЭтоГруппа() = 0 Тогда
ТекТовар = ТекущийЭлемент();
ОткрытьФорму("Справочник." + ВидСправочника, ТекТовар);
Иначе
Синоним = Метаданные.Справочник(ВидСправочника).Представление();
Предупреждение(Синоним + " для группы не показываются. Выберите товар.");
КонецЕсли;
Иначе
Предупреждение("Выберите товар.");
КонецЕсли;
КонецПроцедуры // ПоказатьПодч
//******************************************************************************
// Название: ПоказатьИсторию()
// Параметры:
// НЕТ
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элементов диалога:
// Кнопка "История",.
// Описание:
// Открывается форма обработки для редактирования периодических реквизитов
Процедура ПоказатьИсторию()
Если ПустоеЗначение(ТекущийЭлемент()) = 1 Тогда
Предупреждение("Не выбран товар");
Возврат;
КонецЕсли;
Если ТекущийЭлемент().ЭтоГруппа() = 1 Тогда
Предупреждение("Выберите товар, а не группу");
Возврат;
КонецЕсли;
глРедактироватьИсториюЗначений(Контекст,
"СтавкаНДС,СтавкаНП",
"История периодических реквизитов ("+ТекущийЭлемент()+")");
КонецПроцедуры // ПоказатьИсторию
// *****************************************************************************
Функция ПолучитьЦенуТовара(пТовар, пКатегорияЦены, пЦена, пЕдиница, пВалюта)
Если ПустоеЗначение(пКатегорияЦены) = 0 Тогда
ЦенаТовара = глВернутьЦену(пТовар, пКатегорияЦены);
Если ПустоеЗначение(ЦенаТовара) = 0 Тогда
пЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
пВалюта = ЦенаТовара.Валюта.Получить(РабочаяДата());
пЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
Если пКатегорияЦены.СуммаВключаетНП = 0 Тогда
// цена не включает НП.
ПроцНП = глПолучитьСтавкуНП(пТовар, РабочаяДата());
пЦена = пЦена * (100 + ПроцНП) / 100;
КонецЕсли;
Иначе
Возврат 0;
КонецЕсли;
Иначе
Возврат 0;
КонецЕсли;
Возврат 1;
КонецФункции
//******************************************************************************
// Название: ПечатьЭтикетки()
// Параметры:
// НЕТ
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элемента диалога:
// кнопка "Этикетка"
// НЕТ
// Описание:
// создание печатной формы этикетки со штрихкодом
// Если текущий элемент группа, то выдается предупреждение
Процедура ПечатьЭтикетки()
Перем КомпонентABC;
Перем Цена, Единица, Валюта;
ВыбТовар = ТекущийЭлемент();
Если ВыбТовар.ЭтоГруппа() = 1 Тогда
Предупреждение("Выберите товар, а не группу.");
Возврат;
КонецЕсли;
ТипЦены = СоздатьОбъект("Справочник.КатегорииЦен");
Если ТипЦены.Выбрать("Выберите тип цены", "ФормаСписка") = 0 Тогда Возврат КонецЕсли;
ТипЦены = ТипЦены.ТекущийЭлемент();
ПечНаименование = СокрП(ВыбТовар.Наименование);
ПечАртикул = СокрП(ВыбТовар.Артикул);
Если ПолучитьЦенуТовара(ВыбТовар, ТипЦены, Цена, Единица, Валюта) = 1 Тогда
ПечЕдиница = СокрЛП(Единица.ТипЕдиницы);
ПечШтрихкод = Строка(Единица.ШтрихКод);
ПечЦена = СокрЛП(Формат(Цена, "Ч15.2")) + " " + Валюта;
Иначе
// печатаем этикетку с базовой единицей без цены
ПечЕдиница = СокрП(ВыбТовар.БазоваяЕдиница);
ПечШтрихКод = Строка(ВыбТовар.ШтрихКод);
ПечЦена = """";
КонецЕсли;
Если ПустоеЗначение(ПечШтрихкод) = 1 Тогда
Предупреждение("Штрих код товара не задан.");
Возврат;
КонецЕсли;
Если РаботаСПринтеромЭтикеток = 1 Тогда
// печатаем этикетку на специализированном принтере
глКомандаПринтеруЭтикеток(
"Печатать",
ПечШтрихКод + ";" + ПечНаименование + ", " + ПечЕдиница + ";" + ПечАртикул + ";" + ПечЦена);
Иначе
Попытка
КомпонентABC=СоздатьОбъект("BARCODE.BarcodeCtrl.1");
Исключение
Предупреждение(ОписаниеОшибки() + РазделительСтрок
+ "Компонент ActiveBarcode не установлен на данном компьютере!" + РазделительСтрок
+ "Порядок установки компоненты ActiveBarcode описан в документации.");
Возврат;
КонецПопытки;
// Создание Таблицы для выходного отчета
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Этикетка");
Таб.ВывестиСекцию("Товар|Этикетка");
//Вызов выходного отчета в окно просмотра и редактирования.
Таб.Опции(0, 0, 0, 0, ПарСтрСпр);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("Этикетка", """");
КонецЕсли;
КонецПроцедуры // ПечатьЭтикетки
//******************************************************************************
Процедура ПечатьЦенника()
Перем ПечЕдиница, ПечНаименование,ПечРозн;
Перем ЦенаТовара;
Перем Таб;
Перем ЧислоСтрок;
Перем Столбик;
Перем Ряд;
ТипЦены = СоздатьОбъект("Справочник.КатегорииЦен");
Если ТипЦены.Выбрать("Выберите тип цены", "ФормаСписка") = 0 Тогда Возврат КонецЕсли;
ТипЦены = ТипЦены.ТекущийЭлемент();
// Создание Таблицы для выходного отчета
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Ценник");
ЧислоСтрок=0;
Столбик=1;
Ряд=0;
ВыбТовар=ТекущийЭлемент();
Если ПустоеЗначение(ВыбТовар) = 1 Тогда
Предупреждение("Выберите товар или группу товаров!");
Возврат;
КонецЕсли;
Если ВыбТовар.ЭтоГруппа()=1 Тогда
Тов = СоздатьОбъект("Справочник.Номенклатура");
Тов.ВключатьПодчиненные(1);
Тов.ИспользоватьРодителя(ВыбТовар);
Тов.ВыбратьЭлементы();
Пока Тов.ПолучитьЭлемент()>0 Цикл
Если Тов.ПометкаУдаления()=1 Тогда
Продолжить;
КонецЕсли;
Если Тов.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
ПечНаименование = Тов.ПолнНаименование;
ЦенаТовара = глВернутьЦену(Тов,ТипЦены);
Если ПустоеЗначение(ЦенаТовара) = 1 Тогда Продолжить КонецЕсли;
ПечЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
ВремЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
Если ТипЦены.СуммаВключаетНП = 0 Тогда // добавим НП
СтавкаНПпроц = глПолучитьСтавкуНП(Тов,РабочаяДата());
ВремЦена = ВремЦена * (100 + СтавкаНПпроц) / 100;
КонецЕсли;
ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2"))+" "+ЦенаТовара.Валюта.Получить(РабочаяДата());
Столбик=?(Столбик=0,1,0);
Ряд=?(Столбик=0,Ряд+1,Ряд);
Если Ряд>3 Тогда
Таб.НоваяСтраница();
Ряд=1;
КонецЕсли;
Если Столбик=0 Тогда
Таб.ВывестиСекцию("Товар|Ценник");
Иначе
Таб.ПрисоединитьСекцию("Товар|Ценник");
КонецЕсли;
глОживить(1);
КонецЦикла;
Иначе
ПечНаименование = ВыбТовар.ПолнНаименование;
ЦенаТовара = глВернутьЦену(ВыбТовар, ТипЦены);
Если ПустоеЗначение(ЦенаТовара) = 1 Тогда
Предупреждение("У товара - " + ВыбТовар + " не задана цена по категории: " + ТипЦены);
Возврат;
КонецЕсли;
ПечЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
ВремЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
Если ТипЦены.СуммаВключаетНП = 0 Тогда // добавим НП
СтавкаНПпроц = глПолучитьСтавкуНП(ВыбТовар,РабочаяДата());
ВремЦена = ВремЦена * (100 + СтавкаНПпроц) / 100;
КонецЕсли;
ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2"))+" "+ЦенаТовара.Валюта.Получить(РабочаяДата());
Таб.ВывестиСекцию("Товар");
КонецЕсли;
//Вызов выходного отчета в окно просмотра и редактирования.
Таб.Опции(0,0,0,0,ПарСтрСпр);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("Ценник товаров","""");
ВыбТовар=0;
КонецПроцедуры
//********************************************************************************
// НАЗНАЧЕНИЕ: выбор из выпадающего меню способа печати
Процедура ВыборПечати()
Перем СписокПечати, ВидПечати;
СписокПечати = СоздатьОбъект("СписокЗначений");
СписокПечати.ДобавитьЗначение(1, "Каталог товаров");
СписокПечати.ДобавитьЗначение(2, "Ценник");
СписокПечати.ДобавитьЗначение(3, "Этикетка");
Если СписокПечати.ВыбратьЗначение(ВидПечати, , , , 1) = 1 Тогда
Если ВидПечати = 1 Тогда
// каталог товаров
ОткрытьФорму("Обработка.ПечатьПрайсЛиста"+"#", "Номенклатура");
ИначеЕсли ВидПечати = 2 Тогда
// ценник
ПечатьЦенника();
ИначеЕсли ВидПечати = 3 Тогда
// этикетка
ПечатьЭтикетки();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//******************************************************************************
// Название: СформироватьОтчет()
// Параметры:
// НЕТ
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элемента диалога:
// кнопки "Остатки товаров" и "Учет реализации"
// НЕТ
// Описание:
// печать отчета "УпрОстаткиТоваров"
Процедура СформироватьОтчет()
Перем ДопУточнение, ТипОтчета;
СписокОтчетов = СоздатьОбъект("СписокЗначений");
СписокОтчетов.ДобавитьЗначение(2, "Остатки");
СписокОтчетов.ДобавитьЗначение(1, "Учет реализации");
Если СписокОтчетов.ВыбратьЗначение(ТипОтчета, , , , 1) = 0 Тогда
// отказ от выбора
Возврат;
КонецЕсли;
Если ПустоеЗначение(ТекущийЭлемент()) = 1 Тогда
Предупреждение("Не выбран товар или группа!");
Возврат;
КонецЕсли;
Расшифровка = СоздатьОбъект("СписокЗначений");
Расшифровка.Установить("Обновить",1);
ПустойСписок = СоздатьОбъект("СписокЗначений");
Если ТипОтчета = 1 Тогда
// Отчет Упр.реализация
Если ТипРеализОтчета.ВыбратьЗначение(ДопУточнение,,,,1) = 1 Тогда
// все настройки помещаем в список
Расшифровка.Установить("Отчет", "УпрРеализация");
Расшифровка.Установить("ДатаНачала", Мин(РабочаяДата(),ПолучитьДатуТА(),Константа.ОсновнаяДатаНачалаОтчета));
Расшифровка.Установить("ДатаКонца", Мин(РабочаяДата(),ПолучитьДатуТА()));
Расшифровка.Установить("ВыбТовар", ТекущийЭлемент());
Расшифровка.Установить("ВыбКлиент", ПолучитьПустоеЗначение("Справочник.Контрагенты"));
Расшифровка.Установить("ВыбВалюта", ?(ТекущийЭлемент().ЭтоГруппа()=0,ТекущийЭлемент().ВалютаУчета,Рубли));
Расшифровка.Установить("РежимПоказа", 1); // по стоимости
Расшифровка.Установить("ДеталПоНакладным", 1);
Расшифровка.Установить("ДеталПоВсемДокументам", 1);
Если ДопУточнение = "Прием товара" Тогда
// печатаем отчет Упр. реализация в разрезе приема
Расшифровка.Установить("ВидОтчета", 1); // по принятым на реализацию товарам
Иначе
// печатаем отчет Упр. реализация в разрезе передачи
Расшифровка.Установить("ВидОтчета", 2); // по отданным на реализацию товарам
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
ИначеЕсли ТипОтчета = 2 Тогда
// выводим отчет УпрОстаткиТоваров
// по текущему в списке товару или группе товараов
// на всех складах
Расшифровка.Установить("Отчет", "УпрОстаткиТоваров");
Расшифровка.Установить("ДатаНачала", ПолучитьДатуТА());
Расшифровка.Установить("ДатаКонца", ПолучитьДатуТА());
// все настройки помещаем в список
Расшифровка.Установить("ВидОтчета", 3); // остатки с себестоимостью
Расшифровка.Установить("ВалютаИтогов", ?(ТекущийЭлемент().ЭтоГруппа()=0,ТекущийЭлемент().ВалютаУчета,Рубли));
Расшифровка.Установить("ПоказатьОстатки", 1); // все ненулевые остатки
Расшифровка.Установить("ВыбТовар", ТекущийЭлемент());
Расшифровка.Установить("ВыбСклад", ПолучитьПустоеЗначение("Справочник.МестаХранения"));
Расшифровка.Установить("ДеталПоСкладам", 0);
Расшифровка.Установить("ДеталПоДокументам", 0);
КонецЕсли;
глРасшифровка = Расшифровка;
глФлагРасшифровки = 1;
глОбновить = Число(Расшифровка.Получить("Обновить"));
глТаблица = 0;
ОткрытьФорму("Отчет."+Расшифровка.Получить("Отчет")+"#");
глФлагРасшифровки = 0;
глРасшифровка = 0;
глОбновить = 0;
КонецПроцедуры // СформироватьОтчет
//******************************************************************************
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//******************************************************************************
Процедура ПриОткрытии()
Форма.ИспользоватьСлой("Основной", 2);
Форма.ИспользоватьСлой("ДляРедактированияПодчЭлементов", 1);
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
ФормТекстИнформации(ВидДопИнформации);
ДобавитьКолонкиВТаблицу(ВидДопИнформации);
КонецПроцедуры
//******************************************************************************
Процедура ПриЗакрытии()
КонецПроцедуры
//******************************************************************************
// ТЕЛО МОДУЛЯ
ИнформационнаяСтрока = """";
гСписСтатусовПоставщиков = СоздатьОбъект("СписокЗначений");
гСписСтатусовКомиссионеров = СоздатьОбъект("СписокЗначений");
гСписПодчСправочников = СоздатьОбъект("СписокЗначений");
гСписСтатусовПоставщиков.ДобавитьЗначение(Купленный);
гСписСтатусовПоставщиков.ДобавитьЗначение(Принятый);
гСписСтатусовКомиссионеров.ДобавитьЗначение(ОтданныйКупленный);
гСписСтатусовКомиссионеров.ДобавитьЗначение(ОтданныйПринятый);
гСписПодчСправочников.ДобавитьЗначение("Цены", "Цены");
гСписПодчСправочников.ДобавитьЗначение("Единицы", "Единицы измерения");
гСписПодчСправочников.ДобавитьЗначение("Комплектация", "Состав набора");
гСписПодчСправочников.ДобавитьЗначение("СвойстваНоменклатуры", "Значения свойств");
гСписПодчСправочников.ДобавитьЗначение("Аналоги", "Аналоги в других классификаторах");
гСписПодчСправочников.Выгрузить(ФормВидДопИнформации);
ФормВидДопИнформации.ДобавитьЗначение("Остатки", "Остатки по складам");
ФормВидДопИнформации.ДобавитьЗначение("Поставщики", "Партии по поставщикам");
ФормВидДопИнформации.ДобавитьЗначение("Комиссионеры", "Партии отданные на реализацию");
ФормВидДопИнформации.ДобавитьЗначение("Резерв", "Зарезервировано по счетам");
ФормВидДопИнформации.ДобавитьЗначение("Заказ", "Осталось, зарезервировано, заказано");
ФормВидДопИнформации.ТекущаяСтрока(1);
ТипРеализОтчета = СоздатьОбъект("СписокЗначений");
ТипРеализОтчета.ДобавитьЗначение("Прием товара");
ТипРеализОтчета.ДобавитьЗначение("Передача товара");
гСписокОбработок = СоздатьОбъект("СписокЗначений");
гСписокОбработок.ДобавитьЗначение("ПодборНоменклатурыДляГрупповойОбработки", "Групповая обработка элементов");
гСписокОбработок.ДобавитьЗначение("СвойстваОбъектов", "Установка и просмотр значений свойств");
//******************************************************************************
-------"
Код ПрайсЛист выше.
А вот код Номеклатура.
-------
//******************************************************************************
// ОПИСАНИЕ МОДУЛЬНЫХ ПЕРЕМЕННЫХ
//******************************************************************************
Перем СтарыйЭлемент;
Перем ИнформационнаяСтрока;
Перем ТипЦены, ИнфЦена;
Перем ТипРеализОтчета;
Перем гСписокОбработок;
Перем гСписПодчСправочников;
Перем гСписСтатусовКомиссионеров;
Перем гСписСтатусовПоставщиков;
//******************************************************************************
// "СЛУЖЕБНЫЕ" ПРОЦЕДУРЫ И ФУНКЦИИ
//******************************************************************************
Функция ПредставлениеТекущегоЭлемента()
Эл = ТекущийЭлемент();
Стр = СокрЛП(Эл.ПолнНаименование);
Стр = Стр + ?(Эл.ВидТовара <> Перечисление.ВидыТоваров.Товар, " (" + Эл.ВидТовара + ") ", """");
Стр = Стр + ?(ПустоеЗначение(Эл.Артикул) = 0, " Артикул: " + СокрЛП(Эл.Артикул), """");
Стр = Стр + ?(ПустоеЗначение(Эл.Комментарий) = 0, " Комментарий: " + СокрЛП(Эл.Комментарий), """");
Возврат Стр;
КонецФункции
//******************************************************************************
Процедура ФормТекстИнформации(ВидДопИнформации)
Заголовок = "Информация по товару";
Если ТекущийЭлемент().ЭтоГруппа() = 0 Тогда
Если Найти("Остатки,Резерв,Заказ,Поставщики,Комиссионеры",ВидДопИнформации) > 0 Тогда
Заголовок = Заголовок + " (" + ТекущийЭлемент().БазоваяЕдиница + ")";
КонецЕсли;
Если Найти("Поставщики,Комиссионеры", ВидДопИнформации) > 0 Тогда
Заголовок = СтрЗаменить(Заголовок, ")", """") + " / " + ТекущийЭлемент().ВалютаУчета + ")";
КонецЕсли;
КонецЕсли;
Форма.ФормТекстИнформации.Заголовок(Заголовок + ":");
КонецПроцедуры
//******************************************************************************
Процедура ДобавитьКолонкиВТаблицу(ВидДопИнформации)
ФормТабДопИнформации.Очистить();
Если ВидДопИнформации = "Цены" Тогда
ФормТабДопИнформации.НоваяКолонка("КатегорияЦены", , , , "Тип цены", 18);
ФормТабДопИнформации.НоваяКолонка("Цена", , , , "Цена", 8, глФорматСуммы, 2);
ФормТабДопИнформации.НоваяКолонка("Валюта", , , , "Вал.", 4);
ФормТабДопИнформации.НоваяКолонка("Единица", , , , "Ед.", 4);
ИначеЕсли ВидДопИнформации = "СвойстваНоменклатуры" Тогда
ФормТабДопИнформации.НоваяКолонка("ВидСвойства", , , , "Вид свойства", 15);
ФормТабДопИнформации.НоваяКолонка("ЗначениеСвойства", , , , "Значение", 16);
ИначеЕсли ВидДопИнформации = "Единицы" Тогда
ФормТабДопИнформации.НоваяКолонка("ТипЕдиницы", , , , "Единица", 8);
ФормТабДопИнформации.НоваяКолонка("Коэффициент", , , , "Коэффициент", 10, , 2);
ФормТабДопИнформации.НоваяКолонка("Вес", , , , "Вес", 10, , 2);
ИначеЕсли ВидДопИнформации = "Комплектация" Тогда
ФормТабДопИнформации.НоваяКолонка("Товар", , , , "Товар", 26);
ФормТабДопИнформации.НоваяКолонка("Количество", , , , "Количество", 10, , 2);
ИначеЕсли ВидДопИнформации = "Аналоги" Тогда
ФормТабДопИнформации.НоваяКолонка("Наименование", , , , "Наименование", 26);
ФормТабДопИнформации.НоваяКолонка("Каталог", , , , "Каталог", 10);
ИначеЕсли ВидДопИнформации = "Остатки" Тогда
ФормТабДопИнформации.НоваяКолонка("Склад", , , , "Склад", 28);
ФормТабДопИнформации.НоваяКолонка("Остаток", , , , "Остаток", 8, , 2);
ИначеЕсли ВидДопИнформации = "Поставщики" Тогда
ФормТабДопИнформации.НоваяКолонка("Поставщик", , , , "Поставщик", 26);
ФормТабДопИнформации.НоваяКолонка("Остаток", , , , "Ост.", 8, , 2);
ФормТабДопИнформации.НоваяКолонка("Цена", , , , "Цена", 10, глФорматСуммы, 2);
ИначеЕсли ВидДопИнформации = "Комиссионеры" Тогда
ФормТабДопИнформации.НоваяКолонка("Комиссионер", , , , "Комиссионер", 26);
ФормТабДопИнформации.НоваяКолонка("Остаток", , , , "Ост.", 8, , 2);
ФормТабДопИнформации.НоваяКолонка("Цена", , , , "Цена", 10, глФорматСуммы, 2);
ИначеЕсли ВидДопИнформации = "Резерв" Тогда
ФормТабДопИнформации.НоваяКолонка("ПоСчету", , , , "По счету", 26);
ФормТабДопИнформации.НоваяКолонка("Резерв", , , , "Резерв", 8, , 2);
ИначеЕсли ВидДопИнформации = "Заказ" Тогда
ФормТабДопИнформации.НоваяКолонка("Остаток", , , , "Остаток", 10, , 2);
ФормТабДопИнформации.НоваяКолонка("Резерв", , , , "Резерв", 10, , 2);
ФормТабДопИнформации.НоваяКолонка("Заказ", , , , "Заказано", 10, , 2);
ИначеЕсли ВидДопИнформации = "ГТД" Тогда
КонецЕсли;
ФормТабДопИнформации.НоваяКолонка("Объект");
ФормТабДопИнформации.ВидимостьКолонки("Объект", 0);
КонецПроцедуры
//******************************************************************************
Функция ПредставлениеПодчЭлемента(Эл)
Стр = """";
Если Эл.Вид() = "Цены" Тогда
Эл.ИспользоватьДату(РабочаяДата());
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.КатегорияЦены = СокрЛП(Эл.КатегорияЦены.Наименование);
ФормТабДопИнформации.Цена = Эл.Цена;
ФормТабДопИнформации.Валюта = Эл.Валюта;
ФормТабДопИнформации.Единица = Эл.Единица.ТипЕдиницы;
ИначеЕсли Эл.Вид() = "СвойстваНоменклатуры" Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.ВидСвойства = Эл.ВидСвойства;
ФормТабДопИнформации.ЗначениеСвойства = СокрЛП(Эл.ЗначениеСвойства.Наименование);
ИначеЕсли Эл.Вид() = "Единицы" Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.ТипЕдиницы = СокрЛП(Эл.ТипЕдиницы.Наименование);
ФормТабДопИнформации.Коэффициент = Эл.Коэффициент;
ФормТабДопИнформации.Вес = ?(ПустоеЗначение(Эл.Вес) = 0, Эл.Вес, """");
ИначеЕсли Эл.Вид() = "Комплектация" Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.Товар = Эл.Товар.Наименование;
ФормТабДопИнформации.Количество = Эл.Количество;
ИначеЕсли Эл.Вид() = "Аналоги" Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Объект = Эл;
ФормТабДопИнформации.Наименование = Эл.Наименование;
ФормТабДопИнформации.Каталог = Эл.Каталог;
КонецЕсли;
ФормТабДопИнформации.Сортировать("Объект+");
Возврат Стр;
КонецФункции
//******************************************************************************
Функция СформироватьИнформационнуюСтроку()
Если ТекущийЭлемент().ЭтоГруппа() = 1 Тогда
СтарыйЭлемент = ТекущийЭлемент();
ФормТабДопИнформации.УдалитьСтроки();
Возврат ТекущийЭлемент().ПолноеНаименование();
ИначеЕсли ПустоеЗначение(ТекущийЭлемент()) = 1 Тогда
СтарыйЭлемент = """";
ФормТабДопИнформации.УдалитьСтроки();
Возврат """";
КонецЕсли;
Если ТекущийЭлемент() <> СтарыйЭлемент Тогда
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
ФормТекстИнформации(ВидДопИнформации);
ФормТабДопИнформации.УдалитьСтроки();
СтарыйЭлемент = ТекущийЭлемент();
Если ВидДопИнформации = "Остатки" Тогда
СпрСклады = СоздатьОбъект("Справочник.МестаХранения");
СпрСклады.ВыбратьЭлементы();
Пока СпрСклады.ПолучитьЭлемент() = 1 Цикл
Фирма = ПолучитьПустоеЗначение("Справочник.Фирмы");
Склад = СпрСклады.ТекущийЭлемент();
Ост = Регистр.ОстаткиТоваров.СводныйОстаток(Фирма, ТекущийЭлемент(), Склад, "ОстатокТовара");
Если ПустоеЗначение(Ост) = 0 Тогда
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Склад = Склад;
ФормТабДопИнформации.Остаток = Ост;
КонецЕсли;
КонецЦикла;
ИначеЕсли ВидДопИнформации = "Поставщики" Тогда
Фирма = ПолучитьПустоеЗначение("Справочник.Фирмы");
Рег = СоздатьОбъект("Регистр.ПартииТоваров");
Рег.УстановитьЗначениеФильтра("Фирма", Фирма, 1);
Рег.УстановитьЗначениеФильтра("Товар", ТекущийЭлемент(), 1);
Рег.УстановитьЗначениеФильтра("Статус", гСписСтатусовПоставщиков, 2);
Рег.ВыбратьИтоги();
Пока Рег.ПолучитьИтог() = 1 Цикл
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Поставщик = Рег.Поставщик;
ФормТабДопИнформации.Остаток = Рег.ОстатокТовара;
Если ФормТабДопИнформации.Остаток <> 0 Тогда
ФормТабДопИнформации.Цена = (Рег.Стоимость + Рег.НДС + Рег.СтоимостьНП) / ФормТабДопИнформации.Остаток;
Иначе
ФормТабДопИнформации.Цена = Рег.Стоимость + Рег.НДС + Рег.СтоимостьНП;
КонецЕсли;
ФормТабДопИнформации.Объект = Рег.ПрихДокумент;
КонецЦикла;
ИначеЕсли ВидДопИнформации = "Комиссионеры" Тогда
Фирма = ПолучитьПустоеЗначение("Справочник.Фирмы");
Рег = СоздатьОбъект("Регистр.ПартииТоваров");
Рег.УстановитьЗначениеФильтра("Фирма", Фирма, 1);
Рег.УстановитьЗначениеФильтра("Товар", ТекущийЭлемент(), 1);
Рег.УстановитьЗначениеФильтра("Статус", гСписСтатусовКомиссионеров, 2);
Рег.ВыбратьИтоги();
Пока Рег.ПолучитьИтог() = 1 Цикл
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Комиссионер = Рег.Контрагент;
ФормТабДопИнформации.Остаток = Рег.ОстатокТовара;
Если ФормТабДопИнформации.Остаток <> 0 Тогда
ФормТабДопИнформации.Цена = Рег.ПродСтоимость / ФормТабДопИнформации.Остаток;
Иначе
ФормТабДопИнформации.Цена = Рег.ПродСтоимость;
КонецЕсли;
ФормТабДопИнформации.Объект = Рег.ПрихДокумент;
КонецЦикла;
ИначеЕсли ВидДопИнформации = "Резерв" Тогда
Рег = СоздатьОбъект("Регистр.РезервыТоваров");
Рег.УстановитьЗначениеФильтра("Товар", ТекущийЭлемент(), 1);
Рег.ВыбратьИтоги();
Пока Рег.ПолучитьИтог() = 1 Цикл
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.ПоСчету = Рег.ПоСчету;
ФормТабДопИнформации.Резерв = Рег.РезервТовара;
ФормТабДопИнформации.Объект = Рег.ПоСчету;
КонецЦикла;
ИначеЕсли ВидДопИнформации = "Заказ" Тогда
Фирма = ПолучитьПустоеЗначение("Справочник.Фирмы");
ФормТабДопИнформации.НоваяСтрока();
ФормТабДопИнформации.Остаток = Регистр.ОстаткиТоваров.СводныйОстаток(Фирма, ТекущийЭлемент(), , "ОстатокТовара");
ФормТабДопИнформации.Резерв = Регистр.РезервыТоваров.СводныйОстаток(ТекущийЭлемент(), , "РезервТовара");
ФормТабДопИнформации.Заказ = Регистр.ОжидаемыеТовары.СводныйОстаток(ТекущийЭлемент(), , "ОжидаемыйТовар");
ИначеЕсли ВидДопИнформации = "ГТД" Тогда
Иначе
ЭлПодчСправочника = СоздатьОбъект("Справочник." + ВидДопИнформации);
ЭлПодчСправочника.ИспользоватьВладельца(ТекущийЭлемент());
ЭлПодчСправочника.ВыбратьЭлементы();
Пока ЭлПодчСправочника.ПолучитьЭлемент() = 1 Цикл
Если ЭлПодчСправочника.ПометкаУдаления() = 1 Тогда Продолжить КонецЕсли;
ПредставлениеПодчЭлемента(ЭлПодчСправочника.ТекущийЭлемент());
КонецЦикла;
// Это альтернативный вариант получения элементов подчиненных справочников
// возможно на сетевой базе SQL будет работать эффективнее
//ТекЭл = ТекущийЭлемент();
//ТекстЗапроса = "
//|Обрабатывать НеПомеченныеНаУдаление;
//|Эл = Справочник.*.ТекущийЭлемент;
//|Влад = Справочник.*.Владелец;
//|Группировка Эл;
//|Условие (Влад = ТекЭл);";
//ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "*", ВидДопИнформации);
//Запрос = СоздатьОбъект("Запрос");
//Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат ПредставлениеТекущегоЭлемента() КонецЕсли;
//Пока Запрос.Группировка(1) = 1 Цикл ПредставлениеПодчЭлемента(Запрос.Эл) КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат ПредставлениеТекущегоЭлемента();
КонецФункции
//******************************************************************************
Процедура ПриВыбореВидаДопИнформации()
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
ФормТекстИнформации(ВидДопИнформации);
ДобавитьКолонкиВТаблицу(ВидДопИнформации);
Если гСписПодчСправочников.Принадлежит(ВидДопИнформации) = 1 Тогда
Форма.ИспользоватьСлой("ДляРедактированияПодчЭлементов", 1)
Иначе
Форма.ИспользоватьСлой("ДляРедактированияПодчЭлементов", 0)
КонецЕсли;
СтарыйЭлемент = """";
СформироватьИнформационнуюСтроку();
КонецПроцедуры
//******************************************************************************
//******************************************************************************
// ПРОЦЕДУРЫ И ФУНКЦИИ, ВЫЗЫВАЕМЫЕ ИЗ ФОРМУЛ ЭЛЕМЕНТОВ ДИАЛОГА
//******************************************************************************
//******************************************************************************
Процедура ПриВыбореЯчейкиТаблицы(Таб)
Поз = Таб.ТекущаяСтрока();
Если Поз = 0 Тогда Возврат КонецЕсли;
Попытка
Зн = Таб.ПолучитьЗначение(Поз, "Объект");
Исключение КонецПопытки;
ОткрытьФормуМодально(Зн);
Таб.УдалитьСтроку(Поз);
СтарыйЭлемент = """";
СформироватьИнформационнуюСтроку();
Таб.ТекущаяСтрока(Поз);
КонецПроцедуры
//******************************************************************************
Процедура ДобавитьЗначениеВТаблицу(Таб, Режим)
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
Если ПравоДоступа("ВводНового", "Справочник." + ВидДопИнформации) = 0 Тогда
Предупреждение("Недостаточно прав доступа!");
Возврат;
КонецЕсли;
Если (ТекущийЭлемент().ЭтоГруппа() = 1) Или (ПустоеЗначение(ТекущийЭлемент()) = 1) Тогда
Таб.УдалитьСтроки();
Возврат;
КонецЕсли;
РазмерТабДоДобавленияНового = Таб.КоличествоСтрок();
ОткрытьФормуМодально("Элемент." + ВидДопИнформации, , , , ТекущийЭлемент());
СтарыйЭлемент = """";
СформироватьИнформационнуюСтроку();
Если (Режим = 1) И (Таб.КоличествоСтрок() > РазмерТабДоДобавленияНового) Тогда
ДобавитьЗначениеВТаблицу(Таб, Режим);
КонецЕсли;
КонецПроцедуры
//******************************************************************************
Процедура УдалитьЗначениеИзТаблицы(Таб, Режим="""")
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
Если ПравоДоступа("ПометкаНаУдаление", "Справочник." + ВидДопИнформации) = 0 Тогда
Предупреждение("Недостаточно прав доступа!");
Возврат;
КонецЕсли;
Если (ТекущийЭлемент().ЭтоГруппа() = 1) Или (ПустоеЗначение(ТекущийЭлемент()) = 1) Тогда
Таб.УдалитьСтроки();
Возврат;
КонецЕсли;
ЭлПодчСправочника = СоздатьОбъект("Справочник." + ВидДопИнформации);
ЭлПодчСправочника.ИспользоватьВладельца(ТекущийЭлемент());
Если Режим = "Все" Тогда
Если Вопрос("Пометить на удаление все подчиненные элементы?", 4) <> 6 Тогда Возврат КонецЕсли;
ЭлПодчСправочника.ВыбратьЭлементы();
Пока ЭлПодчСправочника.ПолучитьЭлемент() = 1 Цикл
ЭлПодчСправочника.Удалить(0);
КонецЦикла;
Таб.УдалитьСтроки();
Возврат;
КонецЕсли;
Поз = Таб.ТекущаяСтрока();
Если Поз = 0 Тогда Возврат КонецЕсли;
Зн = Таб.ПолучитьЗначение(Поз, "Объект");
Если ЭлПодчСправочника.НайтиЭлемент(Зн) = 0 Тогда Возврат КонецЕсли;
ЭлПодчСправочника.Удалить(0);
Таб.УдалитьСтроку(Поз);
Если Таб.КоличествоСтрок() < Поз Тогда
Таб.ТекущаяСтрока(Поз - 1);
Иначе
Таб.ТекущаяСтрока(Поз);
КонецЕсли;
КонецПроцедуры
//******************************************************************************
Процедура ВыборОбработки()
Зн = """"; Поз = """";
Если гСписокОбработок.ВыбратьЗначение(Зн, , Поз, , 1) = 1 Тогда
ОткрытьФорму("Обработка." + Зн);
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
//******************************************************************************
// Название: ПоказатьПодч()
// Параметры:
// ВидСправочника - вид справочника, форму списка которого нужно открыть.
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элементов диалога:
// Кнопка "Цены", "Аналоги" и "Значения свойств".
// Описание:
// Открывается форма списка подчиненного справочника, заданного параметром
// ВидСправочника
Процедура ПоказатьПодч(ВидСправочника)
Перем ФормаСпискаЦен;
Если ПустоеЗначение(ТекущийЭлемент()) = 0 Тогда
Если ЭтоГруппа() = 0 Тогда
ТекТовар = ТекущийЭлемент();
ОткрытьФорму("Справочник." + ВидСправочника, ТекТовар);
Иначе
Синоним = Метаданные.Справочник(ВидСправочника).Представление();
Предупреждение(Синоним + " для группы не показываются. Выберите товар.");
КонецЕсли;
Иначе
Предупреждение("Выберите товар.");
КонецЕсли;
КонецПроцедуры // ПоказатьПодч
//******************************************************************************
// Название: ПоказатьИсторию()
// Параметры:
// НЕТ
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элементов диалога:
// Кнопка "История",.
// Описание:
// Открывается форма обработки для редактирования периодических реквизитов
Процедура ПоказатьИсторию()
Если ПустоеЗначение(ТекущийЭлемент()) = 1 Тогда
Предупреждение("Не выбран товар");
Возврат;
КонецЕсли;
Если ТекущийЭлемент().ЭтоГруппа() = 1 Тогда
Предупреждение("Выберите товар, а не группу");
Возврат;
КонецЕсли;
глРедактироватьИсториюЗначений(Контекст,
"СтавкаНДС,СтавкаНП",
"История периодических реквизитов ("+ТекущийЭлемент()+")");
КонецПроцедуры // ПоказатьИсторию
// *****************************************************************************
Функция ПолучитьЦенуТовара(пТовар, пКатегорияЦены, пЦена, пЕдиница, пВалюта)
Если ПустоеЗначение(пКатегорияЦены) = 0 Тогда
ЦенаТовара = глВернутьЦену(пТовар, пКатегорияЦены);
Если ПустоеЗначение(ЦенаТовара) = 0 Тогда
пЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
пВалюта = ЦенаТовара.Валюта.Получить(РабочаяДата());
пЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
Если пКатегорияЦены.СуммаВключаетНП = 0 Тогда
// цена не включает НП.
ПроцНП = глПолучитьСтавкуНП(пТовар, РабочаяДата());
пЦена = пЦена * (100 + ПроцНП) / 100;
КонецЕсли;
Иначе
Возврат 0;
КонецЕсли;
Иначе
Возврат 0;
КонецЕсли;
Возврат 1;
КонецФункции
//******************************************************************************
// Название: ПечатьЭтикетки()
// Параметры:
// НЕТ
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элемента диалога:
// кнопка "Этикетка"
// НЕТ
// Описание:
// создание печатной формы этикетки со штрихкодом
// Если текущий элемент группа, то выдается предупреждение
Процедура ПечатьЭтикетки()
Перем КомпонентABC;
Перем Цена, Единица, Валюта;
ВыбТовар = ТекущийЭлемент();
Если ВыбТовар.ЭтоГруппа() = 1 Тогда
Предупреждение("Выберите товар, а не группу.");
Возврат;
КонецЕсли;
ТипЦены = СоздатьОбъект("Справочник.КатегорииЦен");
Если ТипЦены.Выбрать("Выберите тип цены", "ФормаСписка") = 0 Тогда Возврат КонецЕсли;
ТипЦены = ТипЦены.ТекущийЭлемент();
ПечНаименование = СокрП(ВыбТовар.Наименование);
ПечАртикул = СокрП(ВыбТовар.Артикул);
Если ПолучитьЦенуТовара(ВыбТовар, ТипЦены, Цена, Единица, Валюта) = 1 Тогда
ПечЕдиница = СокрЛП(Единица.ТипЕдиницы);
ПечШтрихкод = Строка(Единица.ШтрихКод);
ПечЦена = СокрЛП(Формат(Цена, "Ч15.2")) + " " + Валюта;
Иначе
// печатаем этикетку с базовой единицей без цены
ПечЕдиница = СокрП(ВыбТовар.БазоваяЕдиница);
ПечШтрихКод = Строка(ВыбТовар.ШтрихКод);
ПечЦена = """";
КонецЕсли;
Если ПустоеЗначение(ПечШтрихкод) = 1 Тогда
Предупреждение("Штрих код товара не задан.");
Возврат;
КонецЕсли;
Если РаботаСПринтеромЭтикеток = 1 Тогда
// печатаем этикетку на специализированном принтере
глКомандаПринтеруЭтикеток(
"Печатать",
ПечШтрихКод + ";" + ПечНаименование + ", " + ПечЕдиница + ";" + ПечАртикул + ";" + ПечЦена);
Иначе
Попытка
КомпонентABC=СоздатьОбъект("BARCODE.BarcodeCtrl.1");
Исключение
Предупреждение(ОписаниеОшибки() + РазделительСтрок
+ "Компонент ActiveBarcode не установлен на данном компьютере!" + РазделительСтрок
+ "Порядок установки компоненты ActiveBarcode описан в документации.");
Возврат;
КонецПопытки;
// Создание Таблицы для выходного отчета
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Этикетка");
Таб.ВывестиСекцию("Товар|Этикетка");
//Вызов выходного отчета в окно просмотра и редактирования.
Таб.Опции(0, 0, 0, 0, ПарСтрСпр);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("Этикетка", """");
КонецЕсли;
КонецПроцедуры // ПечатьЭтикетки
//******************************************************************************
Процедура ПечатьЦенника()
Перем ПечЕдиница, ПечНаименование,ПечРозн;
Перем ЦенаТовара;
Перем Таб;
Перем ЧислоСтрок;
Перем Столбик;
Перем Ряд;
ТипЦены = СоздатьОбъект("Справочник.КатегорииЦен");
Если ТипЦены.Выбрать("Выберите тип цены", "ФормаСписка") = 0 Тогда Возврат КонецЕсли;
ТипЦены = ТипЦены.ТекущийЭлемент();
// Создание Таблицы для выходного отчета
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Ценник");
ЧислоСтрок=0;
Столбик=1;
Ряд=0;
ВыбТовар=ТекущийЭлемент();
Если ПустоеЗначение(ВыбТовар) = 1 Тогда
Предупреждение("Выберите товар или группу товаров!");
Возврат;
КонецЕсли;
Если ВыбТовар.ЭтоГруппа()=1 Тогда
Тов = СоздатьОбъект("Справочник.Номенклатура");
Тов.ВключатьПодчиненные(1);
Тов.ИспользоватьРодителя(ВыбТовар);
Тов.ВыбратьЭлементы();
Пока Тов.ПолучитьЭлемент()>0 Цикл
Если Тов.ПометкаУдаления()=1 Тогда
Продолжить;
КонецЕсли;
Если Тов.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
ПечНаименование = Тов.ПолнНаименование;
ЦенаТовара = глВернутьЦену(Тов,ТипЦены);
Если ПустоеЗначение(ЦенаТовара) = 1 Тогда Продолжить КонецЕсли;
ПечЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
ВремЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
Если ТипЦены.СуммаВключаетНП = 0 Тогда // добавим НП
СтавкаНПпроц = глПолучитьСтавкуНП(Тов,РабочаяДата());
ВремЦена = ВремЦена * (100 + СтавкаНПпроц) / 100;
КонецЕсли;
ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2"))+" "+ЦенаТовара.Валюта.Получить(РабочаяДата());
Столбик=?(Столбик=0,1,0);
Ряд=?(Столбик=0,Ряд+1,Ряд);
Если Ряд>3 Тогда
Таб.НоваяСтраница();
Ряд=1;
КонецЕсли;
Если Столбик=0 Тогда
Таб.ВывестиСекцию("Товар|Ценник");
Иначе
Таб.ПрисоединитьСекцию("Товар|Ценник");
КонецЕсли;
глОживить(1);
КонецЦикла;
Иначе
ПечНаименование = ВыбТовар.ПолнНаименование;
ЦенаТовара = глВернутьЦену(ВыбТовар, ТипЦены);
Если ПустоеЗначение(ЦенаТовара) = 1 Тогда
Предупреждение("У товара - " + ВыбТовар + " не задана цена по категории: " + ТипЦены);
Возврат;
КонецЕсли;
ПечЕдиница = ЦенаТовара.Единица.Получить(РабочаяДата());
ВремЦена = ЦенаТовара.Цена.Получить(РабочаяДата());
Если ТипЦены.СуммаВключаетНП = 0 Тогда // добавим НП
СтавкаНПпроц = глПолучитьСтавкуНП(ВыбТовар,РабочаяДата());
ВремЦена = ВремЦена * (100 + СтавкаНПпроц) / 100;
КонецЕсли;
ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2"))+" "+ЦенаТовара.Валюта.Получить(РабочаяДата());
Таб.ВывестиСекцию("Товар");
КонецЕсли;
//Вызов выходного отчета в окно просмотра и редактирования.
Таб.Опции(0,0,0,0,ПарСтрСпр);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("Ценник товаров","""");
ВыбТовар=0;
КонецПроцедуры
//********************************************************************************
// НАЗНАЧЕНИЕ: выбор из выпадающего меню способа печати
Процедура ВыборПечати()
Перем СписокПечати, ВидПечати;
СписокПечати = СоздатьОбъект("СписокЗначений");
СписокПечати.ДобавитьЗначение(1, "Каталог товаров");
СписокПечати.ДобавитьЗначение(2, "Ценник");
СписокПечати.ДобавитьЗначение(3, "Этикетка");
Если СписокПечати.ВыбратьЗначение(ВидПечати, , , , 1) = 1 Тогда
Если ВидПечати = 1 Тогда
// каталог товаров
ОткрытьФорму("Обработка.ПечатьПрайсЛиста"+"#", "Номенклатура");
ИначеЕсли ВидПечати = 2 Тогда
// ценник
ПечатьЦенника();
ИначеЕсли ВидПечати = 3 Тогда
// этикетка
ПечатьЭтикетки();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//******************************************************************************
// Название: СформироватьОтчет()
// Параметры:
// НЕТ
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элемента диалога:
// кнопки "Остатки товаров" и "Учет реализации"
// НЕТ
// Описание:
// печать отчета "УпрОстаткиТоваров"
Процедура СформироватьОтчет()
Перем ДопУточнение, ТипОтчета;
СписокОтчетов = СоздатьОбъект("СписокЗначений");
СписокОтчетов.ДобавитьЗначение(2, "Остатки");
СписокОтчетов.ДобавитьЗначение(1, "Учет реализации");
Если СписокОтчетов.ВыбратьЗначение(ТипОтчета, , , , 1) = 0 Тогда
// отказ от выбора
Возврат;
КонецЕсли;
Если ПустоеЗначение(ТекущийЭлемент()) = 1 Тогда
Предупреждение("Не выбран товар или группа!");
Возврат;
КонецЕсли;
Расшифровка = СоздатьОбъект("СписокЗначений");
Расшифровка.Установить("Обновить",1);
ПустойСписок = СоздатьОбъект("СписокЗначений");
Если ТипОтчета = 1 Тогда
// Отчет Упр.реализация
Если ТипРеализОтчета.ВыбратьЗначение(ДопУточнение,,,,1) = 1 Тогда
// все настройки помещаем в список
Расшифровка.Установить("Отчет", "УпрРеализация");
Расшифровка.Установить("ДатаНачала", Мин(РабочаяДата(),ПолучитьДатуТА(),Константа.ОсновнаяДатаНачалаОтчета));
Расшифровка.Установить("ДатаКонца", Мин(РабочаяДата(),ПолучитьДатуТА()));
Расшифровка.Установить("ВыбТовар", ТекущийЭлемент());
Расшифровка.Установить("ВыбКлиент", ПолучитьПустоеЗначение("Справочник.Контрагенты"));
Расшифровка.Установить("ВыбВалюта", ?(ТекущийЭлемент().ЭтоГруппа()=0,ТекущийЭлемент().ВалютаУчета,Рубли));
Расшифровка.Установить("РежимПоказа", 1); // по стоимости
Расшифровка.Установить("ДеталПоНакладным", 1);
Расшифровка.Установить("ДеталПоВсемДокументам", 1);
Если ДопУточнение = "Прием товара" Тогда
// печатаем отчет Упр. реализация в разрезе приема
Расшифровка.Установить("ВидОтчета", 1); // по принятым на реализацию товарам
Иначе
// печатаем отчет Упр. реализация в разрезе передачи
Расшифровка.Установить("ВидОтчета", 2); // по отданным на реализацию товарам
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
ИначеЕсли ТипОтчета = 2 Тогда
// выводим отчет УпрОстаткиТоваров
// по текущему в списке товару или группе товараов
// на всех складах
Расшифровка.Установить("Отчет", "УпрОстаткиТоваров");
Расшифровка.Установить("ДатаНачала", ПолучитьДатуТА());
Расшифровка.Установить("ДатаКонца", ПолучитьДатуТА());
// все настройки помещаем в список
Расшифровка.Установить("ВидОтчета", 3); // остатки с себестоимостью
Расшифровка.Установить("ВалютаИтогов", ?(ТекущийЭлемент().ЭтоГруппа()=0,ТекущийЭлемент().ВалютаУчета,Рубли));
Расшифровка.Установить("ПоказатьОстатки", 1); // все ненулевые остатки
Расшифровка.Установить("ВыбТовар", ТекущийЭлемент());
Расшифровка.Установить("ВыбСклад", ПолучитьПустоеЗначение("Справочник.МестаХранения"));
Расшифровка.Установить("ДеталПоСкладам", 0);
Расшифровка.Установить("ДеталПоДокументам", 0);
КонецЕсли;
глРасшифровка = Расшифровка;
глФлагРасшифровки = 1;
глОбновить = Число(Расшифровка.Получить("Обновить"));
глТаблица = 0;
ОткрытьФорму("Отчет."+Расшифровка.Получить("Отчет")+"#");
глФлагРасшифровки = 0;
глРасшифровка = 0;
глОбновить = 0;
КонецПроцедуры // СформироватьОтчет
//******************************************************************************
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//******************************************************************************
Процедура ПриОткрытии()
Форма.ИспользоватьСлой("Основной", 2);
Форма.ИспользоватьСлой("ДляРедактированияПодчЭлементов", 1);
ВидДопИнформации = ФормВидДопИнформации.ПолучитьЗначение(ФормВидДопИнформации.ТекущаяСтрока());
ФормТекстИнформации(ВидДопИнформации);
ДобавитьКолонкиВТаблицу(ВидДопИнформации);
КонецПроцедуры
//******************************************************************************
Процедура ПриЗакрытии()
КонецПроцедуры
//******************************************************************************
// ТЕЛО МОДУЛЯ
ИнформационнаяСтрока = """";
гСписСтатусовПоставщиков = СоздатьОбъект("СписокЗначений");
гСписСтатусовКомиссионеров = СоздатьОбъект("СписокЗначений");
гСписПодчСправочников = СоздатьОбъект("СписокЗначений");
гСписСтатусовПоставщиков.ДобавитьЗначение(Купленный);
гСписСтатусовПоставщиков.ДобавитьЗначение(Принятый);
гСписСтатусовКомиссионеров.ДобавитьЗначение(ОтданныйКупленный);
гСписСтатусовКомиссионеров.ДобавитьЗначение(ОтданныйПринятый);
гСписПодчСправочников.ДобавитьЗначение("Цены", "Цены");
гСписПодчСправочников.ДобавитьЗначение("Единицы", "Единицы измерения");
гСписПодчСправочников.ДобавитьЗначение("Комплектация", "Состав набора");
гСписПодчСправочников.ДобавитьЗначение("СвойстваНоменклатуры", "Значения свойств");
гСписПодчСправочников.ДобавитьЗначение("Аналоги", "Аналоги в других классификаторах");
гСписПодчСправочников.Выгрузить(ФормВидДопИнформации);
ФормВидДопИнформации.ДобавитьЗначение("Остатки", "Остатки по складам");
ФормВидДопИнформации.ДобавитьЗначение("Поставщики", "Партии по поставщикам");
ФормВидДопИнформации.ДобавитьЗначение("Комиссионеры", "Партии отданные на реализацию");
ФормВидДопИнформации.ДобавитьЗначение("Резерв", "Зарезервировано по счетам");
ФормВидДопИнформации.ДобавитьЗначение("Заказ", "Осталось, зарезервировано, заказано");
ФормВидДопИнформации.ТекущаяСтрока(1);
ТипРеализОтчета = СоздатьОбъект("СписокЗначений");
ТипРеализОтчета.ДобавитьЗначение("Прием товара");
ТипРеализОтчета.ДобавитьЗначение("Передача товара");
гСписокОбработок = СоздатьОбъект("СписокЗначений");
гСписокОбработок.ДобавитьЗначение("ПодборНоменклатурыДляГрупповойОбработки", "Групповая обработка элементов");
гСписокОбработок.ДобавитьЗначение("СвойстваОбъектов", "Установка и просмотр значений свойств");
//******************************************************************************
-------"
Читают тему
(гостей: 1)