Импорт из XML + запрет на объединение ячеек

Импорт из XML + запрет на объединение ячеек

Сообщение Pierburg » Пт янв 26, 2024 3:06 pm

Здравствуйте.
Дмитрий, работаем с маркетплейсами и объемы постоянно увеличиваются.
На данный момент на каждый день формируем одну расходную накладную на 1 маркетплейс, в поле серийного номера пишем номер задания. После этого по номеру очень удобно отслеживать возвраты
Проблема в том, что у разных заданий может быть одинаковая позиция с разной ценой, и при проведении накладной они объединяются, и цены соответственно по каждой позиции усредняются.
Хотелось бы иметь такую настройку, чтобы программа НЕ объединяла строки, а также делала загрузку серийного номера (номера задания для нас) через XML
Pierburg
 
Сообщения: 15
Зарегистрирован: Чт окт 10, 2013 9:27 am

Re: Импорт из XML + запрет на объединение ячеек

Сообщение dmitry » Сб янв 27, 2024 9:46 am

Накладную заполняете вручную, самостоятельно? Потому что вроде бы автоматически импортом из маркетплейса по API загрузится каждый заказ отдельно.
Или если вы пишите "загрузку серийного номера (номера задания для нас) через XML", то на сайте какой-то скрипт создает один файл за день?
Каким вариантом в Сервис / Интернет-магазин вы пользуетесь?

Может быть такое неожиданное решение: заполнять сначала счет (при его сохранении одинаковый товар не будет объединяться). По нему одним щелчком мыши можно создать накладную на продажу, двойной работы не будет.
Но в накладной для более сложных задач они должны объединяться, это не для красоты, а необходимость.
dmitry
Разработчик
 
Сообщения: 3903
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Импорт из XML + запрет на объединение ячеек

Сообщение Pierburg » Сб янв 27, 2024 12:05 pm

Попробую поподробнее описать ам процесс
Речь сейчас идет о маркетплейсах Озон, вайлдбериз, сберегамаркет и тд.
Допустим 20 января падают заказы, 21 января мы их должны отгрузить. За сутки может упасть до 100 заданий на маркетплейс. Утром 21 числа мы формируем расходную накладную на каждый маркетплейс. Скачиваем файл заданий в экселе, макросом выгружаем в XML и загружаем в расходную накладную
Для примера:
Товар1 - 2шт - 150р - 300р - Задание1 (в поле серийного номера)
Товар1 - 3шт - 200р - 600р - Задание2
Товар1 - 1шт - 300р - 300р - Задание3
После проведения получаем
Товар1 - 6шт - 150р - 1200р (Задание1/задание2/задание3)
Все 100шт номеров заданий приходиться заполнять вручную, возникают ошибки.

Серьезные трудности возникают тогда, когда некоторые товары возвращаются назад (до 30%)
Вернулось задание1. В итоге роемся в архивах маркетплейса, тратим на это уйму времени, находим цены и количество, считаем все это с копейками, редактируем расходную накладную. Получаем
Товар1 - 4шт - ____ - 900р
Даже если делать через Возврат покупателя, все равно тратится ну очень много времени на вбивание цен и количества. Согласен с вами, можно искать и в счете все править, а на основании него делать расходку, но тут при большом количестве возвратов опять возникает куча повторных действий и возможны ошибки

Пример №2
Товар1 - 1шт - 100р - 100р - Задание1
Товар1 - 1шт - 200р - 200р - Задание2
Товар1 - 1шт - 300р - 300р - Задание3
Получаем
Товар1 - 3шт - 200р - 600р - (Задание1/задание2/задание3)
Вернули назад задание1
Товар1 - 2шт - 250р - 500р - (задание1/задание2) - и пропадает номер последнего задания

Поэтому считаю что импорт серийников из XML явно необходим, без вариантов
Насчет построчного проведения расходной накладной (без объединения строк, как в счете) - я понимаю, что это займет больший размер БД и снизит скорость вычислений, но это не идет ни в какое сравнение с экономией времени и удобством работы. Так что иметь такую возможность очень бы хотелось.
Pierburg
 
Сообщения: 15
Зарегистрирован: Чт окт 10, 2013 9:27 am

Re: Импорт из XML + запрет на объединение ячеек

Сообщение dmitry » Вс янв 28, 2024 8:21 am

1. "Насчет построчного проведения расходной накладной (без объединения строк, как в счете) - я понимаю, что это займет больший размер БД и снизит скорость вычислений..."

Нет, не поэтому. Для более сложных задач - учета по партиям закупки. Но я подумаю, может быть какое-то индивидуальное решение...

2. "импорт серийников из XML явно необходим"

Вы используете вот это?

0.png
0.png (47.45 КБ) Просмотров: 6513


Могу добавить там импорт серийника и примечания по строке.

3. "макросом выгружаем в XML "

Это очень интересно. Выложите здесь его текст или пришлите на pr-4@ukr.net
dmitry
Разработчик
 
Сообщения: 3903
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Импорт из XML + запрет на объединение ячеек

Сообщение Pierburg » Пн янв 29, 2024 12:15 pm

1. Будем признательны если получится
2. Да, именно это и используем
3. Пожалуйста, макрос для WB

Sub Wildberries(control As IRibbonControl)
myTXT = ""
Err.Clear
Application.ScreenUpdating = False
'On Error Resume Next
Start1 = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "windows-1251" & Chr(34) & "?><DOC> <TYPE_ID>2</TYPE_ID> <TABLE> <TRANS>" & vbCrLf
End1 = "</TRANS> </TABLE> </DOC>"
myE = ActiveWorkbook.Sheets(1).Range("N" & ActiveWorkbook.Sheets(1).Rows.Count).End(xlUp).Row
For J = 2 To myE

'If ActiveWorkbook.Sheets(1).Range("A" & J) <> "" Then'

myTXT = myTXT & "<ROW> </ROW> <Article> <BarCode></BarCode> <Code>" & ActiveWorkbook.Sheets(1).Range("N" & J) & "</Code> <TextName> </TextName> <TypeID>1</TypeID> <FullFolderText>-</FullFolderText> </Article> <Person><Code>7721546864</Code> <TextName>Частное лицо (Wildberries)</TextName> <TypeID>1</TypeID> <FullFolderText> - </FullFolderText> <Adr> </Adr> <Tel> </Tel> <Memo> </Memo> </Person> <Sum> <Qnt>1</Qnt> <CurrID>0</CurrID> <Price>" & ActiveWorkbook.Sheets(1).Range("K" & J) & "</Price> </Sum>" & vbCrLf
'End If'
Next

myTXT = Start1 & myTXT & End1


Set fso = CreateObject("scripting.filesystemobject")
Set ts = fso.CreateTextFile("Z:\Wildberries\WB_" & Date & ".xml", True)
ts.Write myTXT: ts.Close

Set ts = Nothing: Set fso = Nothing


Application.ScreenUpdating = True
If Err > 0 Then MsgBox "Во время выполнения макроса были ошибки!": Exit Sub
On Error GoTo 0
' MsgBox "Макрос завершил свою работу!"
End Sub
Pierburg
 
Сообщения: 15
Зарегистрирован: Чт окт 10, 2013 9:27 am

Re: Импорт из XML + запрет на объединение ячеек

Сообщение dmitry » Вт янв 30, 2024 3:29 pm

Будет импортировать серийный номер (и примечание по строке на всякий случай).
Замените программу:
загрузить новую в архиве: https://pr4.com.ua/install/Predpr4.2.134.5.rar ,
закрыть запущенную,
извлечь файл в папку программы с заменой.
(в Справка / О программе будет 4.2.134.5)

В макросе после </Price> </Sum> добавить <SerialNum>" & ActiveWorkbook.Sheets(1).Range("буква столбца" & J) & "</SerialNum>
Будет: </Price> </Sum> <SerialNum>" & ActiveWorkbook.Sheets(1).Range("буква столбца" & J) & "</SerialNum> & vbCrLf
(если действительно цена не нужна).
dmitry
Разработчик
 
Сообщения: 3903
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Импорт из XML + запрет на объединение ячеек

Сообщение Pierburg » Ср авг 13, 2025 11:47 am

Дмитрий, можно ли выложить повторно.
Слетел весь сервер, восстановили из бэкапа,но прошлую версию. Спасибо.
Pierburg
 
Сообщения: 15
Зарегистрирован: Чт окт 10, 2013 9:27 am

Re: Импорт из XML + запрет на объединение ячеек

Сообщение dmitry » Чт авг 14, 2025 4:57 am

Выложить ссылку на новую версию программы? Тогда, в 2024 году новая была 4.2.134, сейчас 4.2.145.
В самой программе - Сервис / Обслуживание / Загрузить_обновление.
Если почему-то невозможно (блокируется), то загрузить с https://pr4.com.ua/obnov_ru.htm, закрыть программу, установить в папку программы.
dmitry
Разработчик
 
Сообщения: 3903
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Импорт из XML + запрет на объединение ячеек

Сообщение Pierburg » Чт авг 14, 2025 5:35 pm

благодарю
Pierburg
 
Сообщения: 15
Зарегистрирован: Чт окт 10, 2013 9:27 am

Re: Импорт из XML + запрет на объединение ячеек

Сообщение Pierburg » Вт авг 19, 2025 9:34 am

Дмитрий подскажите, как изменить каталог по умолчанию, который открывается при импорте XML файла?
Pierburg
 
Сообщения: 15
Зарегистрирован: Чт окт 10, 2013 9:27 am

Re: Импорт из XML + запрет на объединение ячеек

Сообщение Ватсон » Вт авг 19, 2025 1:23 pm

Присоединяюсь к вопросу. В одной из прошлых версий программа запоминала выбор пользователя. Сейчас принудительно перебрасывает в папку Исходящие. Вот бы вернуть как было :D
Ватсон
 
Сообщения: 307
Зарегистрирован: Сб ноя 12, 2011 12:04 am

Re: Импорт из XML + запрет на объединение ячеек

Сообщение dmitry » Ср авг 20, 2025 4:59 am

Это потому что в абсолютном большинстве случаев передают документы из одной БД в другую на одном компьютере. Заранее известно, что они будут находиться в папке Predprinim4\Исходящие.
Хорошо, со следующим обновлением будет запоминать последнюю указанную папку.
dmitry
Разработчик
 
Сообщения: 3903
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Импорт из XML + запрет на объединение ячеек

Сообщение Pierburg » Пт окт 31, 2025 11:14 am

1.Дмитрий подскажите, как сделать добавление нового расходного документа (а также добавить позиции в существующий документ) сторонним скриптом непосредственно в саму базу данных.
При попытке самостоятельно разобрать структуры таблицы DocumentRows просто взорвалась голова.

2. Как сделать так, чтобы подпрограмма выполнялась при сохранении документа?
/////
выкладываю текст подпрограммы для перенумерации ВСЕХ документов в связке по номеру первого созданного документа

Dim ID1=Op.ID 'получаем ID текущего документа
If ID1>0 Then
Dim NMixt = Predpr.DataMain.DBmain.OpenRecordset("SELECT RELATID FROM DocLinks WHERE ItemID=" & ID1) 'получаем номер связи
'Microsoft.VisualBasic.MsgBox("Номер микстуры " & NMixt(0))

If Nmixt.RecordCount > 0 Then ' если есть связи

Dim MinID = Predpr.DataMain.DBmain.OpenRecordset("SELECT Min(ITEMID) FROM DocLinks WHERE RELATID=" & NMixt(0)) ' Минимальный ID документа - первый созданный документ

DIM NMin = Predpr.DataMain.DBmain.OpenRecordset("SELECT Num FROM Documents WHERE ID=" & MinID(0)) ' получаем номер первого созданнго документа

Dim SpisokID = Predpr.DataMain.DBmain.OpenRecordset("SELECT ITEMID FROM DocLinks WHERE RELATID=" & NMixt(0)) ' Получаем ID документов в связи

Do Until SpisokID.EOF = True

Predpr.DataMain.DBmain.Execute("UPDATE Documents SET Num=" & NMin(0) & " WHERE ID=" & SpisokID(0))
'Microsoft.VisualBasic.MsgBox("123")
SpisokID.MoveNext
loop

Op.Num=NMin(0)
Op.Form.SetBoxText ("BoxNum", Op.Num)

end if
end if
Pierburg
 
Сообщения: 15
Зарегистрирован: Чт окт 10, 2013 9:27 am

Re: Импорт из XML + запрет на объединение ячеек

Сообщение dmitry » Сб ноя 01, 2025 6:11 am

Пока быстро про "2. Как сделать так, чтобы подпрограмма выполнялась при сохранении документа?".
Допустим, по накладной или счету создается оплата.
Тогда в Документы/Касса/Приход (и Банк/Поступление) в шаблон операции "Оплата нам" вставить программу.

1.png
1.png (81.58 КБ) Просмотров: 6048


If Op.ID > 0 Then Exit Sub
If Op.RelatDocID= 0 Then Exit Sub
Dim ParentOp as Predpr.Doc = Predpr.Datamain.Appdata.DocsCollection.Item(Op.RelatDocID)
Op.Num=ParentOp.Num
Dim BoxNum as Predpr.TextBoxEx = Predpr.GlobalFunction.GetControl(Op.Form, "BoxNum")
BoxNum.Text = Op.Num

(Она будет выполняться только перед первым сохранением при проведении связанного документа).

Если неизвестно, какой документ будет исходным, а какой созданный на основании его, то вставить и в счет, и в накладную, и в оплату.

P.S. И удобней будет продолжить в
(099) 213 89 85 Viber
(068) 220 21 52 Telegram

Маякните туда, я не спеша напишу перенумерацию уже существующих документов.
dmitry
Разработчик
 
Сообщения: 3903
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Импорт из XML + запрет на объединение ячеек

Сообщение dmitry » Вс ноя 02, 2025 6:14 am

Выкладываю здесь перенумерацию всех связанных документов по номеру первого.
1. Скопировать текст ниже.
2. В программе нажать клавиши Ctrl+F10.
3. Вставить текст, нажать ОК.

Dim Tmin As Predpr.TableSQL = DB.OpenRecordset("SELECT RelatID, Min(ItemID) AS [MinID] FROM DocLinks GROUP BY RelatID")
Dim Tdoc As Predpr.TableSQL = DB.OpenRecordset("SELECT ID, Num FROM Documents")
Dim RelID As Integer, Num As Integer
Do While Not Tmin.EOF
Tdoc.FindFirst("ID=" & Tmin("MinID"))
Num = Predpr.GlobalFunction.Nz(Tdoc("Num"), 0)
RelID = Tmin("RelatID")
DB.Execute("UPDATE Documents SET Num = " & Num & " WHERE ID In (SELECT ItemID FROM DocLinks WHERE RelatID=" & RelID & ")")
Tmin.MoveNext()
Loop
Tmin.Close()
Tdoc.Close()
dmitry
Разработчик
 
Сообщения: 3903
Зарегистрирован: Чт янв 27, 2011 3:43 pm

След.

Вернуться в Использование программы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron