Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
04 мар 2025, 16:26

орп

Автор sali, 28 фев 2025, 08:06

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

antoneus

Эхх, молодежь

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

...ну и заполняем табличные части.

sali

antoneus, antoneus, &НаСервере
функция СоздатьРеализациюНаСервере()   

Если Константы.ФункциональнаяОпцияВестиРозничныеПродажи.Получить() Тогда   

Товары = Справочники.Номенклатура.НайтиПоНаименованию("товары");         
ВЫБОРКА  = ШАПКА.Выгрузить();
выборка.Свернуть("НомерМагазина, НомерСмены, ЭтоВозврат, ФиксНомер, ВидОплаты");             

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

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

Иначе
Сообщить("Настройте параметры учета - розничные продажи");
КонецЕсли;

НовыйДокумент.Записать(РежимЗаписиДокумента.Запись); 
Возврат НовыйДокумент.Ссылка;

КонецФункции   
заполняет немного некорректно.

antoneus

Хорошо, что немного, значит исправить будет легко.

Максим75

antoneus, да там полный бардак. создается док в цикле, пишется один после цикла, да еще и все это кино в функции.
что планировалось получить - х.з. с таким кодом.

sali

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


этот записывает магазин и смену одинаковые - корректно. у меня там 3 магазина - записался только один

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

sali

antoneus, я у вас в последний раз спрошу сегодня . здравствуйте.
вот как условия здесь подставить чтобы записывалось верно, имею ввиду если в чеках есть товары и допустим 1 возврат ,то - он запишет все товары в тч Товары и возврат он запишет в тч Товары и в тч Возврат товаров?

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

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

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


sali

antoneus, здесь как раз пример могу привести Снимок экрана (181).pngСнимок экрана (182).png
  <doc_hd ID_ARTIX_DOCUMENT="628985373" SHOP_NUMBER="5489" DAT_SALE="2025-02-20" CASH_CODE="1" IS_RETURN="1" FISCALIDENTIFIER="74317380440801149824" NOM_SHIFT="1111" CASHLESS="0" VID_OPL="MIR Credit">
    <doc_det ID_GOOD="00-00000040" KOL_GOOD="1" PRICE="199.00" STO_GOOD="224.00" />
    <doc_det ID_GOOD="00-00000041" KOL_GOOD="1" PRICE="4.00" STO_GOOD="33.00" />
  </doc_hd>
  <doc_hd ID_ARTIX_DOCUMENT="628985374" SHOP_NUMBER="5489" DAT_SALE="2025-02-20" CASH_CODE="1" IS_RETURN="0" FISCALIDENTIFIER="74327380440801149824" NOM_SHIFT="1111" CASHLESS="0" VID_OPL="MIR Credit">
    <doc_det ID_GOOD="00-00000048" KOL_GOOD="1" PRICE="199.50" STO_GOOD="299.25" />
  </doc_hd>


здесь должно быть 2 возврата (тч возвраты) и 1 товар (тч товары)

antoneus

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

sali

antoneus, хы-хы я также сделал, не написал ранее , проверял :zebzdr:  :ooifh:  :btbzdb:
спасибо, за уделенное время

Теги:
Рейтинг@Mail.ru

Поиск