Вход | Регистрация

1С:Предприятие ::

Метки: 

Два ККТ в БП 3.0

Я
   Deni1c
 
22.10.17 - 11:08
Торговля ведется с одного рабочего места,к базе подключены две ккт с передачей данных, позиции в чеке подбираются от разных организаций, при пробитии необходимо чтобы товар пробивался на свою организацию
Реализовывал подобное в рознице 1.0 делал как описано тут v8: Два ФКР на одном рабочем месте кассира, как подобное реализовать в Бухгалтерии предприятия 3.0, может кто то делал что то подобное
 
  Рекламное место пустует
   Deni1c
 
1 - 22.10.17 - 11:12
Если Константы.ДваФР.Получить() Тогда
        Запрос = Новый Запрос("
        |ВЫБРАТЬ * ПОМЕСТИТЬ ТабТов ИЗ &ТабТов КАК ТТ;
        |ВЫБРАТЬ *
        |ИЗ
        |    ТабТов КАК Товары
        |ГДЕ
        |    Товары.Номенклатура.ТоварОрганизации = &Организация");
        Запрос.УстановитьПараметр("ТабТов", Товары.Выгрузить());
        ВремДисконтнаяКарта = ДисконтнаяКарта;
        Оплаты = Оплата.Выгрузить();
        СписокОплат = Новый СписокЗначений;
        ПервыйПроход = 1;
        Организации = Справочники.Организации.Выбрать();
        Пока Организации.Следующий() Цикл
            Организация = Организации.Ссылка;
            Если Организация = Магазин.ОсновнойСклад.Организация Тогда
                Запрос.Текст = Запрос.Текст +" ИЛИ Товары.Номенклатура.ТоварОрганизации = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)";
            КонецЕсли;
            Запрос.УстановитьПараметр("Организация", Организация);
            Результат = Запрос.Выполнить();
            Если Не Результат.Пустой() Тогда
                Товары.Загрузить(Результат.Выгрузить());
                Оплата.Загрузить(Оплаты);
                ИтогСуммы = Товары.Итог("Сумма");
                ИтогОплат = Оплаты.Итог("Сумма");
                Если ИтогСуммы <> ИтогОплат Тогда
                    Если Оплата.Количество() = 1 Тогда
                        ФормаОплат = Оплата.Получить(0);
                        ФормаОплат.Сумма = ИтогСуммы;
                    Иначе
                        Для Каждого ФормаОплат Из Оплата Цикл
                            Если ПервыйПроход Тогда
                                СуммаОплаты = ИтогСуммы * Окр(ФормаОплат.Сумма / ИтогОплат, 2);
                                СписокОплат.Добавить(ФормаОплат.Сумма - СуммаОплаты);
                                ФормаОплат.Сумма = СуммаОплаты;
                            Иначе
                                ФормаОплат.Сумма = СписокОплат.Получить(ФормаОплат.НомерСтроки - 1).Значение;
                            КонецЕсли;
                        КонецЦикла;
                        ПервыйПроход = 0;
                    КонецЕсли;
                КонецЕсли;
                ДисконтнаяКарта = ВремДисконтнаяКарта;
                ФР = ПолучитьСерверТО().ПолучитьИдентификаторПоИдКассы(Организация);
                КассаККМ = ПолучитьСерверТО().ПолучитьКассуККМ(ФР);
                ПересчитатьАвтоматическиеСкидки();
                ЗавершитьЗакрытиеЧека2(Печать, РучнойРежим, ВыбратьДокументПечати);
            КонецЕсли;
        КонецЦикла;
    Иначе
        ЗавершитьЗакрытиеЧека2(Печать, РучнойРежим, ВыбратьДокументПечати);    
    КонецЕсли;
     
Так реализованов рознице где подобное сделать в бп не пойму
   Deni1c
 
2 - 22.10.17 - 11:20
Ткните пальце какую процедуру пилить в БП. Понятно что документ розничные продажи чек, модуль формы ФормаДокументаОбщая в какой процедуре допилить не мойму
   Deni1c
 
3 - 22.10.17 - 11:34
Похоже никто не реализовывал подобное в бп, понятно что в рознице 2.0 это реализовано, но руководство хочет торговать именно из бп 3.0 от розницы 1.0 уходим хотя к ней допилил обработку с ккт работает
   2S
 
4 - 22.10.17 - 11:37
(3) не делал, но просто рассуждения
1. Разделение товара по секциям
2. в БП обслуживание ТО не через внешние обработки?
   Deni1c
 
5 - 22.10.17 - 11:41
В БП 3.0 обслуживание ТО в конфиг зашито
   Deni1c
 
6 - 22.10.17 - 11:42
Разделение по секциям это если один ккт подключен и бьем товар по секциям, а мне нужно товар пробивать на разные ккт из одного документа чек
   Deni1c
 
7 - 22.10.17 - 11:45
В форме дописал табличную часть добавил реквизит ИндентификаторККТ, при подборе его заполняю, а вот как дальше пока загвоздка
   Deni1c
 
8 - 22.10.17 - 13:45
Копал нашел Процедура ПринятьОплатуЗавершение(Результат, ДополнительныеПараметры) Экспорт
    Если Результат <> Неопределено И ТипЗнч(Результат) = Тип("Структура") Тогда
        ПараметрыОповещения = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Результат);
        ПараметрыОповещения.Вставить("СписокОборудования", ДополнительныеПараметры.СписокОборудованияПечатьЧека);
        Если Результат.ОплатаКарта <> 0 Тогда
            СписокВидовОплатПоОрганизации = ВидыОплатПлатежнойКартой(Объект.Организация);
            
            Если СписокВидовОплатПоОрганизации.Количество() = 1 Тогда
                ОплатаКартойЗавершение(СписокВидовОплатПоОрганизации[0], ПараметрыОповещения);
            Иначе
                ОтборВидыОплат = Новый Структура("Организация, ТипОплаты, ПометкаУдаления", Объект.Организация, ПредопределенноеЗначение("Перечисление.ТипыОплат.ПлатежнаяКарта"), Ложь);
                ЗаголовокФормыВыбора = НСтр("ru = 'Выберите вид оплаты'");
                
                ОповещениеПриЗавершенииВыбора = Новый ОписаниеОповещения("ОплатаКартойЗавершение", ЭтотОбъект, ПараметрыОповещения);
                
                ПараметрыОткрытияФормы = Новый Структура("Отбор, Заголовок", ОтборВидыОплат, ЗаголовокФормыВыбора);
                ОткрытьФорму("Справочник.ВидыОплатОрганизаций.ФормаВыбора", ПараметрыОткрытияФормы, ЭтаФорма, УникальныйИдентификатор, , ,ОповещениеПриЗавершенииВыбора);
            КонецЕсли;
        Иначе
            НапечататьЧек(ПараметрыОповещения);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
 копать нужно тут
   h-sp
 
9 - 22.10.17 - 14:08
(8) наверно в НапечататьЧек копать
   Deni1c
 
10 - 02.11.17 - 03:56
Дописал протестил работает ниже код с дописками
Обработка Подбор Номенклатуры
1.    Процедура ОК(Команда)
    
    Отказ = НЕ ПроверитьЗаполнение();
    //Денис+   В параметры добавил ККТОрганизации

    Если НЕ Отказ Тогда
        ПараметрЗакрытия = Новый Структура("Номенклатура, Количество, Цена, Валюта,ККТОрганизации");
        ЗаполнитьЗначенияСвойств(ПараметрЗакрытия, ЭтотОбъект);
        Закрыть(ПараметрЗакрытия);
    КонецЕсли;
    
КонецПроцедуры
2.
&НаСервере


Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    СписокСвойств = "Номенклатура, Количество, ЕдиницаИзмерения, Цена, Валюта,
        |ЕстьКоличество, ЕстьЦена";
    ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры, СписокСвойств);
    
    Если НЕ ЕстьКоличество И НЕ ЕстьЦена Тогда
        Отказ = Истина;
    КонецЕсли;
    
    СвойстваНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, "Наименование, ЕдиницаИзмерения");
    
    Заголовок = СвойстваНоменклатуры.Наименование;
    Если НЕ ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда
        ЕдиницаИзмерения = СвойстваНоменклатуры.ЕдиницаИзмерения;
    КонецЕсли;
    
    Элементы.Количество.Видимость       = ЕстьКоличество;
    Элементы.ЕдиницаИзмерения.Видимость = ЕстьКоличество;
    
    Элементы.Цена.Видимость         = ЕстьЦена;
    Элементы.ВалютаЦены.Видимость   = ЕстьЦена;
    Элементы.Сумма.Видимость        = ЕстьЦена;
    Элементы.ВалютаСуммы.Видимость  = ЕстьЦена;
    
    Сумма = Цена * Количество;
    //Денис+

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

    //ЗначениеВРеквизитФормы(РезультатЗапроса, "ТаблицаЗапросаТЗ");

 
    ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме(ТабВКоде, "ТабРеквизит", "ТабНаФорме");
    //Денис-

    
    КонецПроцедуры
//Денис+

3.
//Денис+    

&НаСервере
&НаСервере
Процедура ВывестиТаблицуЗначенияВКодеВТаблицуНаФорме(ТабВКоде, ТабРеквизит, ТабНаФорме)
 
    // реквизит ТабРеквизит и соответствующий

    // ему элемент формы ТабНаФорме уже созданы

    // нами в визуальном режиме

 
    // 1. добавляем колонки из ТабВкоде в реквизит ТабРеквизит

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

 
    Для Каждого Колонка Из ТабВКоде.Колонки Цикл
 
        НовыйЭлемент = Элементы.Добавить(
            ТабРеквизит + "_" + Колонка.Имя, Тип("ПолеФормы"), Элементы[ТабНаФорме]
        );
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = ТабРеквизит + "." + Колонка.Имя;
    КонецЦикла;
 
    // 3. наконец, передаём данные из ТабВКоде в ТабРеквизит

 
    ЗначениеВРеквизитФормы(ТабВКоде, ТабРеквизит);
 
    // готово!    

 
КонецПроцедуры
Документ Розничная продажа (чек)
1.
&НаКлиенте
Процедура НапечататьЧек(ПараметрыОплаты)
    //Денис+

    АдресХранилищаВидаОперации=ПолучитьВидОперацииЧека();
    ВидОпер=ПолучитьИзВременногоХранилища(АдресХранилищаВидаОперации);
    Для Каждого Элемент Из ВидОпер Цикл
        КакаяОперация=Элемент.Значение;
    КонецЦикла;
    Если Объект.ВидОперации=КакаяОперация И Объект.Номер="" Тогда
        АдресХранилища=ПолучитьОрганизацииПробитияВозможногоЧека();
        ОрганизацииПробитияВозможногоЧека= ПолучитьИзВременногоХранилища(АдресХранилища);
        ПервыйПроход = 1;
        Для Каждого Элемент Из ОрганизацииПробитияВозможногоЧека Цикл
            ОрганизацияДляВозможногоПробитияЧека=Элемент.Значение;    
            АдресХранилищаСклада=ПолучитьСкладСписанияВозможногоЧека(Элемент.Значение);    
            СкладСписанияВозможногоЧекаТЗ=ПолучитьИзВременногоХранилища(АдресХранилищаСклада);
            Для Каждого Элемент Из СкладСписанияВозможногоЧекаТЗ Цикл
                СкладСписанияВозможногоЧека=Элемент.Значение;
            КонецЦикла;
            
            ПолучитьТаблицуТоваровДляПечатиНаНесколькоОрганизаций(ОрганизацияДляВозможногоПробитияЧека, СкладСписанияВозможногоЧека,ПервыйПроход);
            ПервыйПроход=0;
            
        КонецЦикла;
        Объект.Товары.Очистить();
        Объект.Оплата.Очистить();
        //Теперь нужно пробить чеки которые записаны

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

            //определимся если документу присвоен НомерЧекККТ то удаляем временный документ

            Если ЗначениеЗаполнено(Объект.НомерЧекаККМ)=Истина Тогда
                УдалениеВременноСозданныхДокументовЧеки(Элемент.Значение);
            КонецЕсли;    
        КонецЦикла;
        
    Иначе
        //Денис-

        ПараметрыОповещения = Новый Структура("ПараметрыОплаты , ПечататьТоварныйЧек, ОплатаКарта", ПараметрыОплаты , ПараметрыОплаты.ПечататьТоварныйЧек, ПараметрыОплаты.ОплатаКарта);
        
        Если ПараметрыОплаты.Свойство("ИдентификаторУстройстваЭТ") Тогда
            ПараметрыОповещения.Вставить("ИдентификаторУстройстваЭТ", ПараметрыОплаты.ИдентификаторУстройстваЭТ);
        КонецЕсли;
        
        СписокОборудования = ПараметрыОплаты.СписокОборудования;
        
        Если СписокОборудования.Количество() = 1 Тогда
            
            ВыбратьУстройствоЗавершение(СписокОборудования[0], ПараметрыОповещения);
            
        ИначеЕсли СписокОборудования.Количество() > 0 Тогда
            ТипыОборудования = Новый Массив;
            ТипыОборудования.Добавить(ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ФискальныйРегистратор"));
            ТипыОборудования.Добавить(ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ПринтерЧеков"));
            ТипыОборудования.Добавить(ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ККТ"));
            
            МассивСкладов = Новый Массив;
            МассивСкладов.Добавить(ПредопределенноеЗначение("Справочник.Склады.ПустаяСсылка"));
            МассивСкладов.Добавить(Объект.Склад);
            
            СтруктураОтбора = Новый Структура("Организация, Склад, ТипОборудования, УстройствоИспользуется", Объект.Организация, МассивСкладов, ТипыОборудования, Истина);
            
            ПараметрыФормыВыбора = Новый Структура("Отбор, Заголовок", СтруктураОтбора, НСтр("ru='Выберите фискальный регистратор (принтер чеков)'", "ru") );
            
            ОповещениеПриЗавершенииВыбора = Новый ОписаниеОповещения("ВыбратьУстройствоЗавершение", ЭтотОбъект, ПараметрыОповещения);
            
            ОткрытьФорму("Справочник.ПодключаемоеОборудование.Форма.ФормаВыбораИзСписка", ПараметрыФормыВыбора,ЭтаФорма,УникальныйИдентификатор,,,ОповещениеПриЗавершенииВыбора,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
        Иначе
            ВыбратьУстройствоЗавершение(Неопределено, ПараметрыОповещения);
        КонецЕсли;
        //Денис+

    КонецЕсли;
    //Денис-

КонецПроцедуры
2.    Добавлены следующие процедуры и функции
//Денис+

&НаСервере
Процедура УдалениеВременноСозданныхДокументовЧеки(СсылкаНадокумент)
ДокументПробития=СсылкаНадокумент;
ПолучаемДокументПробития= ДокументПробития.ПолучитьОбъект();
ПолучаемДокументПробития.УстановитьПометкуУдаления(Истина);
ПолучаемДокументПробития.Удалить();
КонецПроцедуры


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

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

АдресХранилищаНепробитыхЧеков =ПоместитьВоВременноеХранилище(Список,Новый УникальныйИдентификатор());
Возврат АдресХранилищаНепробитыхЧеков;

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

&НаСервере
 Функция ПолучитьОрганизацииПробитияВозможногоЧека();

Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |    Организации.Ссылка КАК Ссылка
             |ИЗ
             |    Справочник.Организации КАК Организации";
Результат = запрос.Выполнить();
Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"));

АдресХранилища =ПоместитьВоВременноеХранилище(Список,Новый УникальныйИдентификатор());
Возврат АдресХранилища;
КонецФункции

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


                //Объект.Товары.Загрузить(Результат.Выгрузить());

                //Объект.Оплата.Загрузить(Оплаты);

                ИтогСуммы = Объект.Товары.Итог("Сумма");
                ИтогОплат = Объект.Оплата.Итог("Сумма");
                   Если ИтогСуммы <> ИтогОплат Тогда
                        Если Объект.Оплата.Количество() = 1 Тогда
                             ФормаОплат = Объект.Оплата.Получить(0);
                             ФормаОплат.Сумма = ИтогСуммы;
                            // //Денис+

                            ФормаОплатНД=НовыйДокумент.Оплата.Получить(0);
                            ФормаОплатНД.Сумма= ИтогСуммы;
                            // //Денис-

                             
                        Иначе
                            Для Каждого ФормаОплат Из Объект.Оплата Цикл
                               Если НомерПрохода Тогда
                                   СуммаОплаты = ИтогСуммы * Окр(ФормаОплат.Сумма / ИтогОплат, 2);
                                   СписокОплат.Добавить(ФормаОплат.Сумма - СуммаОплаты);
                                   ФормаОплат.Сумма = СуммаОплаты;
                                  ////Денис+

                                   ФормаОплатНД.Сумма=СуммаОплаты;
                                  ////Денис-

                               Иначе
                                   ФормаОплат.Сумма = СписокОплат.Получить(ФормаОплат.НомерСтроки - 1).Значение;
                                  ////Денис+

                                   ФормаОплатНД.Сумма=СписокОплат.Получить(ФормаОплат.НомерСтроки - 1).Значение;
                                  ////Денис-

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

            // ДокуменЧекНапробитие= НовыйДокумент.Ссылка;

             
            
            КонецЕсли;
     
      //Ничего не меняем 

    
    
                          

КонецПроцедуры
//Денис-
 
  Рекламное место пустует
   Deni1c
 
11 - 02.11.17 - 04:03
При подборе номеклатуры еще сделал вывод в табличную часть остатков в разрезе складов


Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует