Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
09 дек 2024, 15:55

Как добавить позицию характеристики номенклатуры в рмк

Автор sali, 25 ноя 2024, 10:51

0 Пользователей и 2 гостей просматривают эту тему.

sali

есть код который добавляет все нужное в рмк из подбора
&НаКлиенте
Процедура Подбор(Команда)
//ПараметрыФормы = Новый Структура;
//ПараметрыФормы.Вставить("", );
Оповещение = Новый ОписаниеОповещения("ПодборЗаверщение", ЭтотОбъект);
ОткрытьФорму("Обработка.РабочееМестоКассира.Форма.ФормаПодбора",, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры


&НаСервереБезКонтекста
Функция ЗаполнитьСвойстваНоменклатуры(Номенклатура, ВидЦен)

СвойстваНоменклатуры = Новый Структура();
СвойстваНоменклатуры.Вставить("Номенклатура", Номенклатура);
СвойстваНоменклатуры.Вставить("НоменклатураНаименование", "");
СвойстваНоменклатуры.Вставить("Весовой", Ложь);
СвойстваНоменклатуры.Вставить("Цена", 0);
СвойстваНоменклатуры.Вставить("ЕдиницаИзмерения", Неопределено);
СвойстваНоменклатуры.Вставить("СтавкаНДС", Неопределено);
СвойстваНоменклатуры.Вставить("СтавкаНСП", Неопределено);
СвойстваНоменклатуры.Вставить("ТипМаркировки", Неопределено);
СвойстваНоменклатуры.Вставить("ПризнакПредметаРасчета", Неопределено);
СвойстваНоменклатуры.Вставить("ИспользоватьХарактеристики", Неопределено);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| СправочникНоменклатура.Ссылка КАК Номенклатура,
| СправочникНоменклатура.Наименование КАК НоменклатураНаименование,
| СправочникНоменклатура.ПризнакПредметаРасчета КАК ПризнакПредметаРасчета,
| СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| СправочникНоменклатура.Весовой КАК Весовой,
| СправочникНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СправочникНоменклатура.СтавкаНСП КАК СтавкаНСП,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
| СправочникНоменклатура.ИспользоватьХарактеристики КАК ИспользоватьХарактеристики
|ИЗ
| Справочник.Номенклатура КАК СправочникНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| ,
| Номенклатура = &Номенклатура
| И ВидЦен = &ВидЦен) КАК ЦеныНоменклатурыСрезПоследних
| ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
| И СправочникНоменклатура.ЕдиницаИзмерения = ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения
|ГДЕ
| СправочникНоменклатура.Ссылка = &Номенклатура";
Запрос.УстановитьПараметр("ВидЦен", ВидЦен);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    ЗаполнитьЗначенияСвойств(СвойстваНоменклатуры, ВыборкаДетальныеЗаписи);
КонецЕсли;

Возврат СвойстваНоменклатуры;

КонецФункции


&НаКлиенте
Процедура ПодборЗаверщение(Результат, ДополнительныеПараметры) Экспорт

Если Результат = Неопределено Тогда
Возврат;
КонецЕсли; 

СтруктураПараметров = ЗаполнитьСвойстваНоменклатуры(Результат.Номенклатура, ВидЦен);
СтруктураПараметров.Вставить("Количество", 1);   
Если СтруктураПараметров.ИспользоватьХарактеристики = Истина Тогда
ОткрытьФорму("Справочник.Номенклатура.Форма.РедактированиеХарактеристик",,,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

Иначе
ДобавитьПозициюНоменклатуры(СтруктураПараметров);
КонецЕсли;

ПересчитатьДокументНаКлиенте();

КонецПроцедуры

и код с формы подбора
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПарамтрыПодбора = Новый Структура;
ПарамтрыПодбора.Вставить("Номенклатура", ВыбраннаяСтрока);   
Закрыть(ПарамтрыПодбора);
КонецПроцедуры 



не могу в процедуре ПодборЗаверщение "захватить" нужную х-ку чтобы перенести ее в рмк. характеристики здесь идут не отдельным справочником, а как реквизит, два. ИспользоватьХарактеристики - булево, хАРАКТЕРИСТИКИ - реквизит, переход на форму х-тик
Снимок экрана (39).pngСнимок экрана (40).pngСнимок экрана (41).png   

sali


sali

и еще. как в форму рмк передать что товар маркированный?

Максим75

sali, при открытии формы выбора необходимо передать некое оповещение (один из параметров открытия формы) и после закрытия формы в этом оповещении и обработать, что вернет форма (возвращает в РезультатОткрытияФормы или Неопределено или что-то что выбрали)

вот в типовой в РМК что пишут в событии начала выбора номенклатуры

ОбработчикОповещения = Новый ОписаниеОповещения("ОповещениеОткрытьФормуВыбораНоменклатурыТоварыНоменклатураНачалоВыбора", ЭтотОбъект);
ОткрытьФормуВыбораСправочника("Номенклатура",,ОбработчикОповещения);

ну вот просто возьмите и посмотрите, как реализовано РМК в типовой, там же все есть.

sali

Максим75, да я не знаю уже где и смотреть, искать информацию по рмк. где-то недоступно, где-то платить надо, где-то мало

sali

Максим75, скажите, а можно ли перебирать чеки в цикле по значению? к примеру
пока выборка.следующий() цикл
    для каждого типзнч(выборка.типденежныхсредств) = тип(перечисление.типыоплатыккт.наличные)/ или = "наличная оплата"/ тогда
        вкассе = выборка.суммаостаток;
    конеццикла;
конеццикла;

Максим75

sali, можно, но не в том виде, что у Вас.
посмотрите, что Вы написали во втором цикле и трезво содрогнитесь.

sali

Максим75:D  :D  да простите за это. но так хотя бы видно что конкретно имел ввиду

sali

Максим75, просто я до сих пор не могу получить остаток по кассе именно по наличным только .
запутался уже, нужно настроить движение по двум документам по наличке, то бишь условие ставить перед движением - если вид движение внесение/выемка и тип движения наличные  то записываем


sali

Максим75, у меня снова неправильные движения по остатку в кассе. хотя приделал одинаковые значения
код чтобы показать остаток
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Параметры.Свойство("КассоваяСмена", КассоваяСмена);
    Параметры.Свойство("КассаККМ", КассаККМ);
    Параметры.Свойство("ВидДвиженияНаличных", ВидДвиженияНаличных);
   
    Если ВидДвиженияНаличных = Перечисления.ВидыДвиженияНаличных.Внесение Тогда
        Заголовок = "Внесение";
        Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВнесение;
    Иначе
        Заголовок = "Выемка";       
        Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыемка;                       
       
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ДенежныеСредстваОстатки.СуммаОстаток КАК СуммаОстаток
        |ИЗ
        |    РегистрНакопления.ДенежныеСредства.Остатки КАК ДенежныеСредстваОстатки";
       
        РезультатЗапроса = Запрос.Выполнить();
       
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
       
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл   
            ВКассе = ВыборкаДетальныеЗаписи.СуммаОстаток;   
        КонецЦикла;   
    КонецЕсли; 
   

    СоздатьВнесениеВыемкаДСНаСервере();
КонецПроцедуры

движения
Процедура ОбработкаПроведения(Отказ, Режим)         
    Если ТипДенежныхСредств = Перечисления.ТипыОплатыККТ.Наличные ИЛИ ТипДенежныхСредств = "Наличная оплата" Тогда
        // регистр ДенежныеСредства Приход
        Движения.ДенежныеСредства.Записывать = Истина;
        Движение = Движения.ДенежныеСредства.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.КассаККМ = КассаККМ;
        Движение.Автор = Автор;
        Движение.ТипДенежныхСредств = ТипДенежныхСредств;
        Движение.ВидДвиженияНаличных = ВидДвиженияНаличных;
        Движение.Сумма = Сумма;             
    ИначеЕсли ТипДенежныхСредств = Перечисления.ТипыОплатыККТ.Наличные ИЛИ ТипДенежныхСредств = "Наличная оплата" Тогда
        // регистр ДенежныеСредства Расход
        Движения.ДенежныеСредства.Записывать = Истина;
        Движение = Движения.ДенежныеСредства.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.КассаККМ = КассаККМ;
        Движение.Автор = Автор;
        Движение.ТипДенежныхСредств = ТипДенежныхСредств;
        Движение.ВидДвиженияНаличных = ВидДвиженияНаличных;
        Движение.Сумма = Сумма;     
       КонецЕсли;

КонецПроцедуры

//документ чеки ккм
Процедура ОбработкаПроведения(Отказ, Режим)
    // регистр ДенежныеСредства Приход
    Движения.ДенежныеСредства.Записывать = Истина;
    Для Каждого ТекСтрокаОплаты Из Оплаты Цикл
        Движение = Движения.ДенежныеСредства.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.КассаККМ = КассаККМ;
        Движение.Автор = Автор;
        Движение.ТипДенежныхСредств = ТипДенежныхСредств;
        Движение.ВидДвиженияНаличных = ВидДвиженияНаличных;
        Движение.Сумма = ТекСтрокаОплаты.Сумма;
    КонецЦикла;
КонецПроцедуры

вид движения наличных - перечисления виды движения наличных(внесение/выемка)
тип денежных средств - справочник вид оплаты (есть реквизит там тип оплаты который ссылается на перечисления типы оплат ккт (наличные/электроно)Снимок экрана (43).pngСнимок экрана (45).png 

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск