подскажите есть ли какая та краткая форма проверки товаров и чеков чтобы определять в какую тч записывать?
допустим, у нас есть данные чеков, загруженные в 1с с xml файла. теперь нужно создать документ орп и подставить все чеки в нужные тч: тч товары, услуги, возврат товаров/услуг, оплата безналом и туда товары впихнуть
допустим, у нас есть данные чеков, загруженные в 1с с xml файла. теперь нужно создать документ орп и подставить все чеки в нужные тч: тч товары, услуги, возврат товаров/услуг, оплата безналом и туда товары впихнуть
По теме из базы знаний
- Универсальный обмен данными XML (с гибкими отборами и сохранением вариантов настроек)
- Загрузка данных в БП 3.0 (Универсальный обмен данными XML)
- Загрузка из УПД поставщика (XLS, XLSX, ODS или MXL) "Поступлений товаров и услуг" и счетов-фактур в 1С:Бухгалтерию 3.0
- Универсальная выгрузка, загрузка и резервное копирование настроек программы
- Загрузка данных GasKit 9 в 1С:Бухгалтерию 3.0 (формат xml)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6) 1с?
у меня пока такое заполнение
у меня пока такое заполнение
&НаКлиенте
Процедура СоздатьРеализацию(Команда)
Если НЕ ЗначениеЗаполнено(Объект.ДанныеФайлаРеализации) Тогда
Сообщить("Заполните табличную часть!");
Возврат;
Иначе
СсылкаНаРозничныеПродажи = СоздатьРеализациюНаСервере();
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаРозничныеПродажи);
ОткрытьФорму("Документ.ОтчетОРозничныхПродажах.Форма.ФормаДокумента", ПараметрыФормы);
КонецЕсли;
КонецПроцедуры
&НаСервере
функция СоздатьРеализациюНаСервере()
Если Константы.ФункциональнаяОпцияВестиРозничныеПродажи.Получить() Тогда
НовыйДокумент = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
Для Каждого СтрокаДанных Из Объект.ДанныеФайлаРеализации Цикл
товарном = Справочники.номенклатура.найтипонаименованию("товары");
Если СтрокаДанных.Номенклатура.Родитель = товарном Тогда
Строка = НовыйДокумент.Товары.Добавить();
Строка.Номенклатура = СтрокаДанных.Номенклатура;
Строка.Количество = СтрокаДанных.Количество;
Строка.Всего = СтрокаДанных.Сумма;
Строка.Сумма = СтрокаДанных.Сумма;
Строка.Цена = СтрокаДанных.Цена;
Строка.БезналичныйРасчет = ?(СтрокаДанных.ОплатаБезналом = Ложь, ложь, истина);
Организация = справочники.Организации.ОрганизацияПоУмолчанию();
СчетаУчетаНоменклатуры = БухгалтерскийУчетПовтИсп.ПолучитьСчетаУчетаНоменклатуры(Организация, Строка.Номенклатура.Ссылка);
ЗаполнитьЗначенияСвойств(Строка, СчетаУчетаНоменклатуры);
иНАЧЕ
Строка = НовыйДокумент.уСЛУГИ.Добавить()
// если группа товары и оплата безналом истина = записывать в тч.возвраты
// Строка.СчетСебестоимости = СчетаУчетаНоменклатуры.СчетРасходов;
// Строка.СтатьяДоходов = СчетаУчетаНоменклатуры.СтатьяДоходов;
// Строка.СчетРасходовНДС = СчетаУчетаНоменклатуры.СтатьяРасходов;
// Строка.СчетДоходов = СчетаУчетаНоменклатуры.СчетДоходов;
КонецЕсли;
КонецЦикла;
Иначе
Сообщить("Настройте параметры учета - розничные продажи");
КонецЕсли;
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
Возврат НовыйДокумент.Ссылка;
КонецФункции
Показать
(14) у это уже сам пользователь должен заполнить на какой склад от кого и какой договор + касса. однако еще проблема в ом что создается 2 документа.
когда на форме загрузки нажимаем "создать документ" переходим в форму документа орп и он почему-то пустой. лааааадно, заполним его проведем или запишем не суть. идем в орп форма списка видим два дока - в одном вся тч заполнена только , в другом лишь шапка. вот как это исправить?
когда на форме загрузки нажимаем "создать документ" переходим в форму документа орп и он почему-то пустой. лааааадно, заполним его проведем или запишем не суть. идем в орп форма списка видим два дока - в одном вся тч заполнена только , в другом лишь шапка. вот как это исправить?
(30)
Каким чудесным образом происходит формирование XML?
Каким чудесным образом происходит загрузка чеков из XML?
Каким чудесным образом происходит формирование ОРП?
допустим, у нас есть данные чеков, загруженные в 1с с xml файла. теперь нужно создать документ орп и подставить все чеки в нужные тч: тч товары, услуги, возврат товаров/услуг, оплата безналом и туда товары впихнуть
Каким чудесным образом происходит формирование XML?
Каким чудесным образом происходит загрузка чеков из XML?
Каким чудесным образом происходит формирование ОРП?
(36)
(36)
вот таким. чтение файла может и коряво написано, но было удобнее так
формирование XML? загрузка чеков из XML?
&НаСервере
Процедура ПрочитатьРеализациюНаСервере()
Объект.ДанныеФайлаРеализации.Очистить();
Попытка
ПарсерРеализации = Новый ЧтениеXML;
ПарсерРеализации.ОткрытьФайл(Объект.ПутьКФайлуРеализация);
Исключение
Сообщить("При открытии файла произошла ошибка. Операция прервана!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ПостроительРеализация = Новый ПостроительDOM;
ДокументРеализация = ПостроительРеализация.Прочитать(ПарсерРеализации);
Для Каждого Элемент1 Из ДокументРеализация.ЭлементДокумента.ДочерниеУзлы Цикл
Если Элемент1.ИмяУзла = "doc_hd" Тогда
Док_НД_Релиз = Элемент1;
Для Каждого Элемент2 Из Элемент1.ДочерниеУзлы Цикл
Если Элемент2.ИмяУзла = "doc_det" Тогда
Док_Дет_Релиз = Элемент2;
СТР = Шапка.Добавить();
Стр.ФиксНомер = Док_НД_Релиз.Атрибуты[5].ЗначениеУзла;
Стр.НомерМагазина = Док_НД_Релиз.Атрибуты[1].ЗначениеУзла;
Стр.НомерСмены = Док_НД_Релиз.Атрибуты[6].ЗначениеУзла;
Стр.ОплатаБезналом = ?(Док_НД_Релиз.Атрибуты[7].ЗначениеУзла = "0", истина, ложь);
Стр.ВидОплаты = Док_НД_Релиз.Атрибуты[8].ЗначениеУзла;
Стр.ЭтоВозврат = ?(Док_НД_Релиз.Атрибуты[4].ЗначениеУзла = "1", истина, ложь);
Стр.ДатаПродажи = Док_НД_Релиз.Атрибуты[2].ЗначениеУзла;
СтрШапки = РеквизитыШапки.Добавить();
СтрШапки.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(Док_Дет_Релиз.Атрибуты[0].ЗначениеУзла);
СтрШапки.Количество = Док_Дет_Релиз.Атрибуты[1].ЗначениеУзла;
СтрШапки.Цена = Док_Дет_Релиз.Атрибуты[2].ЗначениеУзла;
СтрШапки.Сумма = СтрШапки.Цена * СтрШапки.Количество;
СтрШапки.НомерМагазина = Док_НД_Релиз.Атрибуты[1].ЗначениеУзла;
СтрШапки.НомерСмены = Док_НД_Релиз.Атрибуты[6].ЗначениеУзла;
НоваСтрока = Объект.ДанныеФайлаРеализации.Добавить();
НоваСтрока.ФиксНомер = Стр.ФиксНомер;
НоваСтрока.НомерМагазина = Стр.НомерМагазина;
НоваСтрока.НомерСмены = Стр.НомерСмены;
НоваСтрока.ДатаПродажи = Стр.ДатаПродажи;
НоваСтрока.ОплатаБезналом = Стр.ОплатаБезналом;
НоваСтрока.ВидОплаты = Стр.ВидОплаты;
НоваСтрока.ЭтоВозврат = Стр.ЭтоВозврат;
НоваСтрока.Номенклатура = СтрШапки.Номенклатура;
НоваСтрока.Количество = СтрШапки.Количество ;
НоваСтрока.Цена = СтрШапки.Цена;
НоваСтрока.Сумма = СтрШапки.Сумма;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ПарсерРеализации.Закрыть();
КонецПроцедуры
Показать(36)
формирование ОРП?
&НаКлиенте
Процедура СоздатьРеализацию(Команда)
Если НЕ ЗначениеЗаполнено(Объект.ДанныеФайлаРеализации) Тогда
Сообщить("Заполните табличную часть!");
Возврат;
Иначе
СсылкаНаРозничныеПродажи = СоздатьРеализациюНаСервере();
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаРозничныеПродажи);
ОткрытьФорму("Документ.ОтчетОРозничныхПродажах.Форма.ФормаДокумента", ПараметрыФормы);
КонецЕсли;
КонецПроцедуры
&НаСервере
функция СоздатьРеализациюНаСервере()
Если Константы.ФункциональнаяОпцияВестиРозничныеПродажи.Получить() Тогда
Товары = Справочники.Номенклатура.НайтиПоНаименованию("товары");
ВЫБОРКА = ШАПКА.Выгрузить();
выборка.Свернуть("НомерМагазина, НомерСмены");
Для Каждого СтрокаДанных Из Выборка Цикл
НовыйДокумент = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Касса = Справочники.Кассы.НайтиПоРеквизиту("НомерМагазина", СтрокаДанных.НомерМагазина);
СтрокиТЧ = Объект.ДанныеФайлаРеализации.НайтиСтроки(Новый Структура("НомерМагазина, НомерСмены", СтрокаДанных.НомерМагазина, СтрокаДанных.НомерСмены));
Для каждого СтрокаТЧ из СтрокиТЧ Цикл
Если СтрокаТЧ.номенклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Товары") И СтрокаДанных.ЭтоВозврат Тогда
Строка = НовыйДокумент.Возвраты.Добавить();
НовыйДокумент.НомерСмены = строкатч.номерсмены;
ЗаполнитьСчетаУчета(Строка);
// Строка.НомерФискальногоЧека = СтрокаДанных.ФиксНомер;
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
ИначеЕсли СтрокаТЧ.номенклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("товары") Тогда
Строка = НовыйДокумент.Товары.Добавить();
НовыйДокумент.НомерСмены = строкатч.номерсмены;
ЗаполнитьСчетаУчета(Строка);
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
ИначеЕсли СтрокаТЧ.номенклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Услуги") И СтрокаДанных.ЭтоВозврат = Истина Тогда
Строка = НовыйДокумент.ВозвратУслуг.Добавить();
НовыйДокумент.НомерСмены = строкатч.номерсмены;
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
ИначеЕсли СтрокаТЧ.номенклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Услуги") Тогда
Строка = НовыйДокумент.Услуги.Добавить();
НовыйДокумент.НомерСмены = строкатч.номерсмены;
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
ИначеЕсли СтрокаТЧ.ОплатаБезналом = Истина Тогда
Строка = НовыйДокумент.Оплата.Добавить();
НовыйДокумент.НомерСмены = строкатч.номерсмены;
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
Строка.ВидОплаты = СтрокаДанных.ВидОплаты;
Конецесли;
Конеццикла;
конеццикла;
новыйдокумент.Записать(режимзаписидокумента.Запись);
Иначе
Сообщить("Настройте параметры учета - розничные продажи");
КонецЕсли;
//НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
Возврат НовыйДокумент.Ссылка;
КонецФункции
Показатьвот таким. чтение файла может и коряво написано, но было удобнее так
(37) это все в какой-то же обработке происходит? как пользователь понимает, какие файлы нужно загружать, а какие нет?
Видно, что номера смены/магазина есть в файле, в чем сложность сделать их список и сформировать документы по этому списку, если уж пользователь в этом процессе не участвует?
Видно, что номера смены/магазина есть в файле, в чем сложность сделать их список и сформировать документы по этому списку, если уж пользователь в этом процессе не участвует?
(39)
внешняя обработка.
пользователю просто кнопочки нажимать и всё.
(39)
для этого в чтение файла установлен фильтр.
(39)
я вам код показал где синим по белому прописано сворачивать по номеру магазина и смене
однако я теперь в тупике - поставив не там новыйокумент.записать() происходит дублирование и половина документов даже не правильно формируются
это все в какой-то же обработке происходит?
внешняя обработка.
пользователю просто кнопочки нажимать и всё.
(39)
как пользователь понимает, какие файлы нужно загружать, а какие нет?
для этого в чтение файла установлен фильтр.
(39)
Видно, что номера смены/магазина есть в файле, в чем сложность сделать их список и сформировать документы по этому списку,
я вам код показал где синим по белому прописано сворачивать по номеру магазина и смене
однако я теперь в тупике - поставив не там новыйокумент.записать() происходит дублирование и половина документов даже не правильно формируются
(41)
У вас какие-то сложности с запуском обработки в режиме отладки?
я вам код показал где синим по белому прописано сворачивать по номеру магазина и смене
однако я теперь в тупике - поставив не там новыйокумент.записать() происходит дублирование и половина документов даже не правильно формируются
однако я теперь в тупике - поставив не там новыйокумент.записать() происходит дублирование и половина документов даже не правильно формируются
У вас какие-то сложности с запуском обработки в режиме отладки?
(36)
(36)
если я вас затуманил этими словами и вы подумали , что человек кому придет файл реально знает откуда / с каких магазинов и смен - то извините, это не так. я хотел сказать, что просто файл прочитан и нужно правильно распределить товары по тч в доке орп
(36)
допустим, у нас есть данные чеков, загруженные в 1с с xml файла. теп
если я вас затуманил этими словами и вы подумали , что человек кому придет файл реально знает откуда / с каких магазинов и смен - то извините, это не так. я хотел сказать, что просто файл прочитан и нужно правильно распределить товары по тч в доке орп
(40) смотрел по отладке , запутываешься
сам уже в блокнот по файлу выписал что и как должно быть. по итогу 3 из 6 верно заполняются. остальные отрабатывают неправильно - либо в другом магазине такой же номер смены и добавляет и получается не 11 , а 14 товаров либо еще как-то . бывает дублирует просто непонятным образом, товары в первом доке записаны правильно, потом такой же документ дублируется , но товары могут записаться либо в возврат, либо все вместе в тч товары. в общем путаница большая
сам уже в блокнот по файлу выписал что и как должно быть. по итогу 3 из 6 верно заполняются. остальные отрабатывают неправильно - либо в другом магазине такой же номер смены и добавляет и получается не 11 , а 14 товаров либо еще как-то . бывает дублирует просто непонятным образом, товары в первом доке записаны правильно, потом такой же документ дублируется , но товары могут записаться либо в возврат, либо все вместе в тч товары. в общем путаница большая
(54)
(51)
вот как условия здесь подставить чтобы записывалось верно, имею ввиду если в чеках есть товары и допустим 1 возврат ,то - он запишет все товары в тч Товары и возврат он запишет в тч Товары и в тч Возврат товаров?
(51)
вот как условия здесь подставить чтобы записывалось верно, имею ввиду если в чеках есть товары и допустим 1 возврат ,то - он запишет все товары в тч Товары и возврат он запишет в тч Товары и в тч Возврат товаров?
Для Каждого СтрокаДанных Из Выборка Цикл
НовыйДокумент = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Касса = Справочники.Кассы.НайтиПоРеквизиту("НомерМагазина", СтрокаДанных.НомерМагазина);
СтрокиТЧ = Объект.ДанныеФайлаРеализации.НайтиСтроки(Новый Структура("НомерМагазина, НомерСмены", СтрокаДанных.НомерМагазина, СтрокаДанных.НомерСмены));
Для каждого СтрокаТЧ из СтрокиТЧ Цикл
Если СтрокаТЧ.номенклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Товары") тогда //и СтрокаТЧ.ЭтоВозврат Тогда
//Строка = НовыйДокумент.Возвраты.Добавить();
Строка = НовыйДокумент.Товары.Добавить();
НовыйДокумент.НомерСмены = строкатч.номерсмены;
//Строка.НомерФискальногоЧека = СтрокаТЧ.ФиксНомер;
ЗаполнитьСчетаУчета(Строка);
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
Если СтрокаТЧ.этовозврат Тогда
//Строка = НовыйДокумент.Товары.Добавить();
Строка = НовыйДокумент.Возвраты.Добавить();
ЗаполнитьСчетаУчета(Строка);
Строка.НомерФискальногоЧека = СтрокаТЧ.ФиксНомер;
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
КонецЕсли;
Если СтрокаТЧ.ОплатаБезналом = Истина Тогда
Строка = НовыйДокумент.Оплата.Добавить();
Строка.СуммаОплаты = СтрокаТЧ.Сумма;
Строка.ВидОплаты = СтрокаТЧ.ВидОплаты;
Конецесли;
ИначеЕсли СтрокаТЧ.номенклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Услуги") тогда //и СтрокаТЧ.ЭтоВозврат Тогда
//Строка = НовыйДокумент.ВозвратУслуг.Добавить();
Строка = НовыйДокумент.Услуги.Добавить();
НовыйДокумент.НомерСмены = строкатч.номерсмены;
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
Если СтрокаТЧ.этовозврат Тогда
Строка = НовыйДокумент.ВозвратУслуг.Добавить();
ДобавитьпозициюНоменклатуры(Строка, СтрокаТЧ);
КонецЕсли;
Если СтрокаТЧ.ОплатаБезналом = Истина Тогда
Строка = НовыйДокумент.Оплата.Добавить();
Строка.СуммаОплаты = СтрокаТЧ.Сумма;
Строка.ВидОплаты = СтрокаТЧ.ВидОплаты;
Конецесли;
КонецЕсли;
новыйдокумент.Записать(режимзаписидокумента.Запись);
Конеццикла;
Показать
(55)
Товары должны заполнится в любом случае, заполнять возвраты нужно только в случае, когда есть возврат, не?
вот как условия здесь подставить чтобы записывалось верно, имею ввиду если в чеках есть товары и допустим 1 возврат ,то - он запишет все товары в тч Товары и возврат он запишет в тч Товары и в тч Возврат товаров?
Товары должны заполнится в любом случае, заполнять возвраты нужно только в случае, когда есть возврат, не?
(56)
(56)
тогда документ же не правильным получиться, не?
ну у меня по крайней мере такая логика , если в чеке указано что это возврат значит все товары из чека заполняются в тч возвратов. если в таком же магазине за эту же смену есть чек с товаром и это не возврат - значит заполняем все эти товары в тч товары
(56)
сть возврат, не?
тогда документ же не правильным получиться, не?
ну у меня по крайней мере такая логика , если в чеке указано что это возврат значит все товары из чека заполняются в тч возвратов. если в таком же магазине за эту же смену есть чек с товаром и это не возврат - значит заполняем все эти товары в тч товары
(56) вот пример привожу.
<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 товар в документе должно отразиться 1 товар в тч товары с безналичными 200, а 22 товара в тч возврат с суммой 203
<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 товар в документе должно отразиться 1 товар в тч товары с безналичными 200, а 22 товара в тч возврат с суммой 203
Прикрепленные файлы:


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