AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.01.2009, 12:09   #1  
gega is offline
gega
Участник
 
4 / 10 (1) +
Регистрация: 25.06.2008
Господа специалисты, скажите пожалуйста:

1. можно ли реализовать импорт данных в разные фирмы? То есть чтобы, например, из одного файла с данными они по определенному признаку раскидывались по разным фирмам.

2. можно ли реализовать автоматический Учет импортированных инвойсов из п.1?

Если возможно, пожалуйста, приведите примеры кода.

Заранее всем спасибо.
Старый 20.01.2009, 13:21   #2  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
1. Ну а почему нет? В файле достаточно указать фирмы для заголовков документов
2. Можно. Кодеюнит вызываемый при нажатии кнопки "Учёт" смотреть не пробовали? Он маленький
Старый 20.01.2009, 13:40   #3  
gega is offline
gega
Участник
 
4 / 10 (1) +
Регистрация: 25.06.2008
Дело в том, что наши специалисты утверждают, что это невозможно. Насколько я понял, невозможно написать код, который бы открывал нужную фирму, импортировал в нее инвойсы и учитывал их.

Собираются даже брать специального человека, который бы вручную открывал фирму, импортировал туда инвойсы и учитывал их. Затем открывал другую фирму и т.д.
Старый 20.01.2009, 13:54   #4  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
Инвойсы в данном случае это лишь данные в файле, которые должны импортироваться в соответствующие таблицы. Для переменной типа Record есть метод CHANGECOMPANY, позволяющий работать с записями соответствующей таблицы, но для любой другой фирмы того же сервера.
С учётом чуть сложнее. Тут нужно будет зайти в каждую фирму и вызвать механизм автоучёта для импортированных в неё инвойсов.
Старый 20.01.2009, 14:36   #5  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Не все так однозначно.
Некоторые данные действительно загрузить в разные фирмы достаточно просто, используя для этого метод CHANGECOMPANY.
Примером может послужить, тот же импорт курсов валют, включенный FP1 для NAV5.

А вот с документами сложнее, т.к. требуется выполнить присвоение номера из серии номеров. Не могу сказать как сейчас, но в версии 4.0, номер выдавался из серии принадлежащей текущей компании, а не указанной в CHANGECOMPANY.
Старый 20.01.2009, 14:53   #6  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
Ну если использовать серию номеров и прочее, то никто не мешает загружать не сразу в заказы, а сперва в некоторые промежуточные таблицы, а создание непосредственно документов, как и учёт вызывать заходя в каждую фирму.
Старый 20.01.2009, 15:16   #7  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Цитата:
Сообщение от grif Посмотреть сообщение
Ну если использовать серию номеров и прочее, то никто не мешает загружать не сразу в заказы, а сперва в некоторые промежуточные таблицы, а создание непосредственно документов, как и учёт вызывать заходя в каждую фирму.
Согласен.

Но если для создания и учета нужно заходить в каждую компанию, так может и загрузку тоже выполнять для каждой компании отдельно
Старый 20.01.2009, 15:21   #8  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Насколько я помню достаточно вынести все используемые методы в таблицу, тогда они будут выполнятся в контексте указанной в changecompany фирмы.
К примеру:
SalesHeader.changecompany(newCompany);
SalesHeader.init;
SalesHeader."No.':=NosMgt.InitSeries....
вернет номерок и серии номеров текущей фирмы.

В случае:
SalesHeader.init;
SalesHeader."No.'
SalesHeader.insert(true) - код в триггере OnInsert присвоит номер из серии номеров фирмы newCompany.

В вашем gega случае просто пишется функция по автоучету в 36 таблице.
Код может выглядет примерно так:
Function Autopost(var lSH record 36)
begin
if lSH.find('-') then repeat
if codeunit.run(codeunit::"Sales Post", lSH) then;
until lSH.next=0;
end;

Вызов примерно так:
lSH.changecompany(newCompany);
...устанавливаем фильтры
lSH.autopost(lSH);
Старый 20.01.2009, 16:10   #9  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
А строки как добавить?

И insert(true), тоже не дался - берет серийные номера из текущей компании.
Старый 20.01.2009, 17:24   #10  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от grif Посмотреть сообщение
Инвойсы в данном случае это лишь данные в файле, которые должны импортироваться в соответствующие таблицы. Для переменной типа Record есть метод CHANGECOMPANY, позволяющий работать с записями соответствующей таблицы, но для любой другой фирмы того же сервера.
Не забываем про Permission к таблицам и для компаний
Цитата:
С учётом чуть сложнее. Тут нужно будет зайти в каждую фирму и вызвать механизм автоучёта для импортированных в неё инвойсов.
Или написать CU, который будет это делать и гасить все запросы с помощью, например GUIALLOWED (ведь реально нажатие на кнопку это вызов кода..)
Старый 20.01.2009, 17:31   #11  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Цитата:
Сообщение от apanko Посмотреть сообщение
А строки как добавить?

И insert(true), тоже не дался - берет серийные номера из текущей компании.
Вы правы. Все переменные после смены фирмы ссылаются на текущую фирму.
Года 3 назад разруливали похожую проблему - делали некое подобие мультифирменного учета.
Разрулили как сейчас вспомнил частично передачей имени фирмы по части таблиц и кодеюнитов (вот почему insert(true) работал ,
частично обработчиком.
В нужной фирме создавались только заголовки доков, документ в текущей фирме кидался в квоту продажи
(исключительно заголовок и строки без валидэйтов и триггеров).
Далее в нужной фирме вызывался обработчик, который тянул данные из исходной фирмы с честными валидэйтами.
Старый 20.01.2009, 18:38   #12  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
Цитата:
Сообщение от gega Посмотреть сообщение
Дело в том, что наши специалисты утверждают, что это невозможно. Насколько я понял, невозможно написать код, который бы открывал нужную фирму, импортировал в нее инвойсы и учитывал их.

Собираются даже брать специального человека, который бы вручную открывал фирму, импортировал туда инвойсы и учитывал их. Затем открывал другую фирму и т.д.
почему не возможно? возможно...
но взять специального человека наверное будет дешевле...
Старый 21.01.2009, 18:59   #13  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
А мне кажется, что можно реализовать следующим образом:
Написать программку или батник, который будет по ссылке открывать некий отчет или форму в нужной фирме.
В форме или отчете зашита логика импорта данных.

Или же в том же наве сделать подобный финт, и не писать батник.
Старый 22.01.2009, 14:32   #14  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
Или открыть в где-нибудь в терминале кол-во окон навижен, соответствующее кол-ву фирм и в каждом быть в соответствующей и иметь запущеной форму, которая по таймеру будет периодически опрашивать какую-либо папку на предмет загрузки файлов. Запустить всю эту фигную как раз можно батником тем же.
Старый 22.01.2009, 15:30   #15  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Цитата:
Сообщение от grif Посмотреть сообщение
Или открыть в где-нибудь в терминале кол-во окон навижен, соответствующее кол-ву фирм и в каждом быть в соответствующей и иметь запущеной форму, которая по таймеру будет периодически опрашивать какую-либо папку на предмет загрузки файлов. Запустить всю эту фигную как раз можно батником тем же.
NAS-ы будут дешевле.

UPD http://www.mibuso.com/dlinfo.asp?FileID=924 - это чтобы запустить JobQueue для множества компаний с помощью только двух NAS (не проверял).
Старый 04.02.2009, 15:59   #16  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от RedFox Посмотреть сообщение
Не забываем про Permission к таблицам и для компаний
Почти спам - сегодня случайно наткнулся на 406 кодеюнит и строки:
Код:
CASE TableID OF DATABASE::"Reason Code":
	WITH ReasonCode DO
	  IF CopyTable THEN BEGIN
		CHANGECOMPANY(NewCompanyName);
		IF FIND('-') THEN
		  REPEAT
			CHANGECOMPANY(COMPANYNAME);
			INSERT(TRUE);
			CHANGECOMPANY(NewCompanyName);
		  UNTIL NEXT = 0;
	  END;
...
  DATABASE::Family:
	WITH Family DO
	  IF CopyTable THEN BEGIN
		CHANGECOMPANY(NewCompanyName);
		IF FIND('-') THEN
		  REPEAT
			CHANGECOMPANY(COMPANYNAME);
			INSERT(TRUE);
			CHANGECOMPANY(NewCompanyName);
		  UNTIL NEXT = 0;
	  END;
Я бы просто переделал перенос по какому-то правилу, чтобы с NAS-ами не возиться
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:05.