Страницы

Поиск по вопросам

Показаны сообщения с ярлыком . Показать все сообщения
Показаны сообщения с ярлыком . Показать все сообщения

воскресенье, 15 марта 2020 г.

1c взаимодействие с java

#java #1с


На предприятии есть 1с 8.2 конфигурация управление торговлей. Хочу написать на android
клиент для менеджеров, чтобы они могли со своих телефонов сбрасывать заявки сразу в 1с. 

Подскажите с помощью чего это лучше провернуть, готовое решение от 1с не предлагать,
ибо хочется своими руками и без участи программистов 1с. Первое что мне пришло в голову,
напрямую лепить данные в базу 1с, которая развёрнута с помощью Microsoft SQL Server,
но я не уверен что 1с сможет эти данные подхватывать. 

Может есть готовое API или ещё что то? 
    


Ответы

Ответ 1



Вот чисто беспроблемный варианты - это сделать почтовый ящик, и отправлять заявки сгенерированные в клиенте на него, а чтобы 1С их забирала. Или можно через dropbox попробовать. А в SQL писать можно конечно, но как уже сказали структура специфическая + встает вопрос а как ты из внешки будешь цепляться ? Вряд ли ИТшники согласятся Скуль на котором база предприятия светить во внешку. Формат на ваше усмотрение. Делаете почтовый ящик какой-то отдельный для данных задач, из Androida легко отправить на почту. В 1с, нужно сделать регламентное задание (фоновое), которое будет читать данные и формировать документ Заявок (примеров чтения из почтового ящика на infostart.ru дофига). Все равно на стороне 1С придется делать фоновое задание, которое преобразует входящие данные в удобоваримый 1Совский вид. Ну просто нет шансов что вы на уровне таблиц sql простроите все связи между элементами данных так же, как это требуется для работы самой 1С, это лучше делать уже через встроенные 1Совские механизмы.

Ответ 2



Привет, да твой вариант вполне рабочий, единственный момент что у 1с своеобразная структура базы, но все волне решаемо. Есть еще вариант сделать WebApi сервер, например на битрексе, который будет принимать данные от пользователей и выгружать уже их в 1с. Правда в данном случае появится задержка между отправкой и появлении в 1с

Ответ 3



1С нормально работает и с почтой, и с XML, и с базами данных. Т.е. можно и вариант с почтой, но я бы лучше делал либо файлы в XML, либо даже создал бы отдельно стоящую базу данных, куда скидывал бы заявки, а в 1С эту базу подсоединил бы как внешний источник данных, и оттуда их подхватывал. Всё-таки XML и базы данных как-то надёжнее и удобнее писем, по-моему. И без программистов 1С не получится ни один из вариантов, в том числе и предложенных выше, потому что 1С нужно "научить" принимать заявки в виде письма, т.е. написать механизм конвертации входящий инфы в заявки.

Ответ 4



Платформа 8.3 позволяет вести разработку под android. Общение между мобильным клиентом и самой 1С происходит с использованием web-сервисов, создаваемых на стороне рабочей БД. Данный механизм является наиболее правильным т.к. обеспечивает наибольшую скорость обмена данными. Работать напрямую с SQL нельзя т.к. ОЧЕНЬ ОПАСНО. А использовать web-сервисы можно как для связки с другой 1С или мобильными клиентами 1С, так и вообще с любой системой. Это может быть и приложение под Android или iOS, и просто сайт на PHP или ASP.NET, и любое другое приложение.

Ответ 5



Решений можно подобрать очень много. От самых простых, до самых сложных, в зависимости от уже имеющейся инфраструктуры. Обмен файлами по ftp, mail, http. Форматы: xml, json, свой велосипед. Работа с 1С из любого языка через OLE с использованием пула соединений для скорости.Работа с 1С через OLE Можно организовать web-сервер и общаться с 1С с помощью встроенных в платформу web-сервисов Использование внешних web-сервисов в 1С:Предприятие 8.

Ответ 6



Кроме HTTP и Веб сервисов можно использовать WebSocket и в частности SignalR 1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp Там есть примеры и на Xamarin скачать примеры можно здесь https://yadi.sk/d/G67GAnc-nrUJ9 Кроме того сейчас модно использовать ODATA Как мне с сайта (который НЕ стоит на IIS) переслать запрос на web-сервер, оттуда к 1С и потом обратно?

четверг, 13 февраля 2020 г.

Управляемое и обычное приложение 1с 8.2

#1с


Подскажите пожалуйста, делаю простую процедуру:
Процедура ПриНачалеРаботыСистемы()
    Предупреждение("Внимание!",60);
    Сообщить("Сегодня " + ТекущаяДата()); 
КонецПроцедуры

в управляемом приложении все запускается и работает, а в обычном нет (меняем в конфигураторе
- свойства - Основной режим запуска:). Вопрос: Почему не работает и где про это можно
почитать подробно, какие еще моменты не будут работать в обычном и управляемом. Ну
и как тогда надо сделать, чтобы заработало?)    


Ответы

Ответ 1



Для обычного приложения свой модуль. Когда меняете в свойствах конфигурации Основной режим запуска на "Обычное приложение" появляется чуть ниже ссылка на модуль обычного приложения (также появляется дополнительный пункт контекстного меню для конфигурации). В этом модуле нужно создать соответствующий обработчик ПриНачалеРаботыСистемы. Вот статейка про различные виды модулей в 1С.

Ответ 2



А еще есть очень интересная в этом плане книга от 1С - Архитектура и работа с данными "1С:Предприятие 8.2" из серии "Профессиональная разработка"

суббота, 8 февраля 2020 г.

Передача данных между формами

#1с


Добрый день.
Только начал разбираться с 1С программированием и столкнулся с проблемой.
1С:Предприятие 8.2 (8.2.13.219) нетиповая конфигурация
Есть справочник контрагентов. У каждого контрагента есть связанные с ним события.
Открываем форму выбранного контрагента, в этой форме есть кнопка "добавить документы",
при нажатии на которую выскакивает форма выбора документов, в которой можно выбрать
"Событие". Выбираем событие, открывается форма создания события.
Вопрос: как передать данные (например самого контрагента) в форму события из открытой
формы выбранного контрагента?
Или как мне сослаться на конкретную форму? чтобы, находясь в самой форме события,
взять все, что мне надо, из формы контрагента.
Что должно получиться: из формы контрагента вызываем форму события, и в поля ввода
формы события сразу подставляется значения, взятые из формы контрагента.

свойства кнопки добавления 
нажимаем кнопку, открывается окно выбора документа, в котором выбираем событие, после
чего отрывается форма события    


Ответы

Ответ 1



В модуле документа "Событие" должна быть процедура ОбработкаЗаполнения(Основание). Система автоматически вызывает эту процедуру и передает в нее параметром "Основание" данные объекта "по ссылке", который явился инициатором заполнения. В вашем случае это контрагент. Вот тут вам и нужно посмотреть, какой тип имеет основание, если это справочникСсылка.Контрагенты тогда заполняете, если нет продолжаете по умолчанию. Выглядеть будет примерно так: Если ТипЗнч(Основание) = Тип("СправочникСсылка.Контрагенты") тогда <Заполняем какие то реквизиты> <При необходимости выходим из процедуры методом Возврат;> КонецЕсли;

Ответ 2



Если вы используете событие ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>), то в параметры записываете Структуру Структура = Новый Структура("Контрагент", Контрагент) Далее при создании формы события проверяете существует ли свойство "Контрагент" в параметрах(метод структуры "свойство"), если да, то заполняете необходимый реквизит. Надеюсь, я правильно понял вопрос

среда, 29 января 2020 г.

1С альтернатива [закрыт]

#1с #erp


        
             
                
                    
                        
                            Закрыт. Этот вопрос не по теме. Ответы на него в данный
момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он соответствовал тематике «Stack Overflow на русском».
                        
                        Закрыт 4 года назад.
                                                                                
           
                
        
Доброго времени суток!
Подскажите, может кто сталкивался, слышал. Существуют ли в природе, в идеях, забытых
разработках, альтернативы платформе 1С. В первую очередь с точки зрения программиста
- то есть мощный конструктор хранилищ данных и форм, плюс отчеты.
Интересна любая информация, то есть скажем, старое опен-сорс, которое возможно довести
до ума пойдет не менее чем промышленное и тиражное. САП - не предлагать))    


Ответы

Ответ 1



Вспомнился "Дебет Плюс" на базе Eclipse RCP и JS-скриптов.

Ответ 2



Существует еще решение от мелкомягких. Ничего конкретного про эту штуку сказать не могу, к сожалению. Просто когда я проходил практику на одном довольно-таки крупном предприятии, там работала специально нанятая команда разработчиков, которая занималась внедрением MS Dynamics (тогда она еще называлась Axapta). Знаю только что в ней используется специальный язык на подобии с++, называющийся X++.

Ответ 3



Мы в свое время перебрали достаточно вариантов. Нужно был решение для торг сети, в несколько десятков магазинов и 1С ну ни как не подходила. В результате используем такую альтернативу 1С и конфу для Торговли. Это платформа на Оракле, легко расширяется, если хорошо знаете PL/SQL и html - то уже можете писать свои модули и конфигурации. Свяжитесь с разработчиками, может они помогут с тех. консультацией. Из того, что еще есть, посмотрите Парус, ВысшийСорт:Предприятие из местных разработок. MS Dynamics хвалят, из известных контор Камаз вроде перешли с 1С на динамикс, но там уже совсем неприличные деньги :)

Ответ 4



Читал про Ultima ERP. Откровенно говоря странные ребята, но стек технологий классный.

Ответ 5



Есть аналог 1с это XAF от DevExpress, там тоже можно быстро создать приложение.https://www.devexpress.com/Products/NET/Application_Framework/demos.xml

Ответ 6



Начнём со старенького топика на LOR, возможно будет интересно проследить судьбу решений. Далее, два обзора бесплатных альтернатив. Из этого следует, что сами 1С считают основным конкурентом немецкий SAP. А вообще, что считать конкурентом - зависит от масштаба, ведь многие бизнесы сами пишут решения автоматизации под свои задачи на всём, вплоть до Common Lisp, что для специфичных кейсов всяко удобнее чем встроеные средства разработки 1С, унылость (не убогость, пусть, но унылось) которых воспета неоднократно. С другой стороны, большая часть русского рынка автоматизации бизнесов, особенно в торговле, по разным причинам ( обсуждение которых выходит за рамки топика), монопольно занята этой компанией и прямых конкурентов, увы, не имеет.

четверг, 23 января 2020 г.

1C. PHP Fatal error: Unknown: Cannot use output buffering in output buffering display handlers in Unknown on line 0, referer

#php #битрикс #1с


При вызове метода 1С вылетает ошибка


  PHP Fatal error:  Unknown: Cannot use output buffering in output buffering display
handlers in Unknown on line 0, referer


Сам метод возвращает документ для печати. Пытался увеличить memory_limit но это не
помогло
    


Ответы

Ответ 1



В файле /etc/php/7.0/cli/php.ini отключите output_buffering для php-cli, он у вас скорее всего установлен в 4096, а должен быть отключен по умолчанию.

понедельник, 23 декабря 2019 г.

Как создать собственную асинхронную процедуру в 1С?

#1с #асинхронность


В 1С есть возможность использования встроенных асинхронных вызовов с помощью описания
оповещения. Мне необходимо "обернуть" несколько асинхронных вызовов в один свой, так
чтобы со стороны основного кода выполнялся всего один такой вызов.

Можно ли создать свои асинхронные методы и как? 
    


Ответы

Ответ 1



Доброго времени суток, платформа «1С:Предприятие 8» не дает возможности реализовывать свои асинхронные процедуры и функции. Реализовать асинхронную обработку ("обернуть"), все-таки, возможность есть, с помощью процедуры: ВыполнитьОбработкуОповещения(<ВыполняемоеОповещение>, <Результат>) Этот метод используется для того, чтобы выполнить процедуру обработчика оповещения. Чтобы указать на этот обработчик, в метод передаётся описание оповещения. Этот метод требуется в сложных «многоуровневых» алгоритмах асинхронных вызовов, так как описание оповещения может быть сконструировано в начале алгоритма, а реальное использование этого обработчика может понадобиться через несколько вложенных процедур. Пример: Вопрос во вложенной процедуре, после которой есть код Рассмотрим более сложный случай, когда после вызова вложенной функции выполнятся некоторый код. Например, так: Казалось бы, следуя рекомендациям, надо просто заменить вложенную процедуру двумя процедурами: Однако в этом случае алгоритм, следующий за вызовом вложенной процедуры, будет выполнен ещё до того, как пользователь ответит на вопрос. Ведь, как мы знаем, исполнение кода не останавливается после выполнения блокирующего метода (Сравнение модального и немодального режимов работы): Поэтому в такой ситуации нужно не только использовать блокирующий метод с вызовом оповещения, но ещё и выполнять асинхронный вызов самой вложенной процедуры, также используя оповещение: Здесь во вложенную процедуру мы сразу передаём описание оповещения, в котором содержится тот код, который должен быть выполнен после вложенной процедуры (последняя процедура). Вызывая блокирующий метод, мы передаём ему «его» описание оповещения (ВложеннаяПроцедураЗавершение), а также, через дополнительные параметры, то описание оповещения, которое нужно будет выполнить после того, как будут обработаны интерактивные действия пользователя (ОбработкаКомандыЗавершение). (Источник) P.S. Необходимо помнить, что при работе с синхронными вызовами значения передаются по Ссылке (в синхронные процедуры и функции), а при асинхронных вызовах по Значению. Пример: Вопрос в обработчике формы ПередЗакрытием Особенность диалога с пользователем в этом (и многих других) обработчиках заключается в том, что в зависимости от реакции пользователя принимается решение: продолжать дальнейшие действия, или отказаться от них. Для этого используется параметр процедуры Отказ. При одном ответе пользователя мы отказываемся от продолжения (Отказ = Истина). При другом ответе пользователя - продолжаем дальнейшие действия. В данном случае сложность заключается в том, что ответ пользователя мы узнаем уже после того, как выйдем из контекста этого обработчика. В процедуре, обрабатывающей оповещение. А параметр Отказ нужно установить именно в этом обработчике. Поэтому мы действуем в два приёма: В первый раз безусловно отменяем дальнейшие действия (Отказ = Истина) и выводим вопрос пользователю; В обработчике оповещения, в зависимости от реакции пользователя, либо снова программно закрываем форму, либо ничего не делаем. Проблема заключается в том, что обработчик ПередЗакрытием будет выполнен два раза. И чтобы отличить первое его выполнение от второго (когда ответ пользователя уже известен) мы используем клиентскую переменную ВыполняетсяЗакрытие в качестве флага. В первый проход её значение равно Ложь, и это значит, что нужно отказаться от закрытия и задать вопрос. Во второй проход её значение равно Истина, и это значит, что вопрос задавать не надо: (Источник)

Ответ 2



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

среда, 18 декабря 2019 г.

Возможен ли обмен 1c 1c bitrix через связку nginx + php-fpm?

#nginx #1с #php_fpm #битрикс


у нас есть инет-магазин, на битриксе и настроен новый обмен с 1ской через wsap22
модуль для apache. Сейчас появилась потребность в переводе сайта на связку nginx+php-fpm,
все переделано, кроме собственно этого обмена. Вопросы на засыпку:


Есть ли аналог wsap22 для nginx для обмена 1с? 
Если нет, то можно ли каким-то другим способом организовать обмен? Будет ли это быстрее-медленнее,
чем сейчас?

    


Ответы

Ответ 1



Есть ли аналог wsap22 для nginx для обмена 1с? Нету. И подозреваю что не будет. Если нет, то можно ли каким-то другим способом организовать обмен? Будет ли это быстрее-медленнее, чем сейчас? Я подозреваю что 1С у вас в интернете и тонкие клиенты подсоединяются к ней через ISS. Сайт сбрасывает заказы в 1С через ISS. Поэтому настраиваем 1c<->apache-backend(wsap22)<->nginx для снижения расходов по памяти и процессору. Работает быстрее чем просто ISS.

пятница, 13 декабря 2019 г.

Создание dll для 1С

#delphi #dll #1с


Есть dll без исходников, для нее есть интерфейс на delphi. Стоит задача подружить
эту библиотеку с 1С. На сколько понял с прочитанного в интернете, на основе интерфейса
можно сделать dll по COM технологии.

Пример интерфейса:

 unit Unit1;
    interface

    uses Windows,
      Messages,
      Classes,
      SysUtils,
      Forms;


type 
    TBonusCountersPrintQuery = packed record
        Card: array[0..15] of char;
    end;

    TListCountersPrint = packed record         
        Lines: array[0..PACKET_COUNTERS_PR_MAX_LINE_COUNT - 1] of TCounterLine;
    end;

    TCounterLine = packed record
        LineNo: word;
        IsLast: byte;
        Num_Counter: word;
        N_Counter: array[0..9] of char;
        Value_Counter: Cardinal;
    end;

type
    THWE_ProcessBonusListCountersPrint = function(vBonusCountersPrintQuery: TBonusCountersPrintQuery;
var vListCountersPrint: TListCountersPrint): Integer; stdcall;

function ProcessBonusListCountersPrint(vBonusCountersPrintQuery: TBonusCountersPrintQuery;
var vListCountersPrint: TListCountersPrint): Integer; stdcall;

implementation

var
    HWE_ProcessBonusListCountersPrint          : THWE_ProcessBonusListCountersPrint;

function init_dynamic(ALibrary: string): Boolean;
begin
  hLib := SafeLoadLibrary(ALibrary);

  Result := (hLib <> 0);

  if Result then
  begin

    @HWE_ProcessBonusListCountersPrint := GetProcAddress(hLib, 'ProcessBonusListCountersPrint');

    Result := Assigned(HWE_ProcessBonusListCountersPrint);
  end;
end;

function ProcessBonusListCountersPrint(vBonusCountersPrintQuery: TBonusCountersPrintQuery;
var vListCountersPrint: TListCountersPrint): Integer;
begin
  result := HW_FAILURE;
  if hLib <> 0 then result := HWE_ProcessBonusListCountersPrint(vBonusCountersPrintQuery,
vListCountersPrint);
end;

initialization

finalization

end.


Как правильно написать такую dll, чтобы функция из примера была доступна из 1С?
    


Ответы

Ответ 1



Ваша библиотека будет связующим звеном между 1C и сторонней библиотекой без исходного кода: 1C -> ВашаБиблиотекаCOM -> СтороняяБиблиотека То, что вы описали - попытка реализовать связь: ВашаComБиблиотека -> СтороняяБиблиотека Осталось реализовать связь между 1C и вашей библиотекой. Чтобы начать разработку библиотеки по технологии COM в Delphi нужно выбрать: File -> New -> Other и там найти ActiveX Library, новый проект будет выглядить приблизительно так: Далее к проекту добавить COM-сервер: File -> New -> Other и найти COM Object, выглядеть в новых версиях Delphi будет как-то так: В старых версиях Delphi так: В полях ClassName (CoClassName) нужно ввести английское название, по которому 1C и будет загружать вашу библиотеку после регистрации в системе, например: MaximLibrary1C Подробнее о пошаговом создании COM-библиотеки можете почитать здесь: http://www.introligator.org/articles/3/78 После написания прослойки (куда вы перенесете свой вышеописанный код) и окончания разработки на целевой машине вашу новую .dll нужно зарегистрировать в системе, как-то так: regsvr32 c:\Library\Project1.dll Конечно, имя проекта лучше задать более вменяемое, а не Project1. На машине с Delphi зарегистрировать можно из среды в меню "Run". Из самой 1C вашу библиотеку после регистрации в системе можно будет загружать как-то так: МояБиблиотека = Новый COMОбъект("MaximLibrary1C"); // вызываем метод в библиотеке МояБиблиотека.1C_ProcessBonusListCountersPrint();

Ответ 2



Попробуйте технологию Native API – собственный интерфейс системного программирования 1С:Предприятия 8. 1CNativeLib - библиотека Delphi для создания внешних компонент (ВК) 1С по технологии Native API. Позволяет заниматься непосредственно функционалом Внешней Компоненты, не отвлекаясь на соблюдение инструкций, предоставленных фирмой 1С. Внешняя компонента NativeAPI на Delphi Инфостарт Внешняя компонента собранная на библиотеке, указанной вше

Ответ 3



Проблема решена. Очень помогла книга "Delphi и 1С - Предприятие. Программирование информационного обмена" Попов С.А. 2007 год.

среда, 10 июля 2019 г.

Двойное выполнение скрипта php

Есть простой импорт данных каталога из 1С на сайт. 1С загружает csv файл в папку и обращается к php файлу импорта(GET запрос). В этом файле идет добавление данных в бд.
Проблема в том что с недавнего времени началось дублирование данных. Каждая позиция каталога добавлена 2 раза, в файле лога содержится двойной текст сообщения. Как будто скрипт одновременно запущен(открыт) с 2 мест. Причем такое дублирование происходит не всегда, похоже что через 1-2 раза. В самом скрипте видимых ошибок нет, к тому же долгое время все работало нормально.
С 1С не знаком и нет доступа, поэтому со стороны 1С посмотреть не могу.
Прошу подсказать в чем и с какой стороны(сайт/1С) может быть причина такой ошибки.


Ответ

посмотреть в access логи веб-сервера, увидите, скорее всего, дублированные запросы.
чтобы вылечить ошибку, можете лочить (создать лок-файл с именем равным ip-адресу клиента, допустим) выполнение импорта при старте скрипта для каждого ip-адреса, в конце скрипта - удалять файл. если файл с таким ip существует, не делать ничего.
т.е. в любой момент времени с 1-го айпи будет возможен только один процесс импорта.

можно доработать скрипт по-другому.
сохраняете куда-нибудь md5(file_get_contents("old_csv_file")), сравниваете md5(file_get_contents("new_csv_file")), если они равны - ничего не делаете.
потом сходить к программисту 1с и настучать по голове, если он почему-то отправляет двойные запросы.
и да, проверить свой код на всякий случай, чтобы вы сами в исследовательских целях где-нибудь не оставили двойную вставку данных в бд, конечно же.
P.S. в любом случае, вставить проверку на добавление дублирущихся данных будет хорошим тоном. Лучше даже не делать это на уровне php-скрипта, а делать на уровне БД.
если у вашего прайс-листа есть, допустим, артикул, сделайте его в БД уникальным ключом и в случае появления дублирующихся данных просто апдейтить текущие значения.
лучше всего - реализовать и md5-проверку и перезапись в бд, вдруг 1с начнет присылать прайслисты, которые содержат и дубликаты и уникальные значения, но при этом в целом данные отличаются от предыдущего прайс-листа.
ваша задача как программиста - или предусмотреть максимально возможное количество решений работы с плохими данными, или не давать загружать плохие данные вовсе, чтобы ребята на той стороне не расслаблялись. Это, в конечном итоге, зависит от ваших бизнес-задач.

среда, 5 июня 2019 г.

1c взаимодействие с java

На предприятии есть 1с 8.2 конфигурация управление торговлей. Хочу написать на android клиент для менеджеров, чтобы они могли со своих телефонов сбрасывать заявки сразу в 1с.
Подскажите с помощью чего это лучше провернуть, готовое решение от 1с не предлагать, ибо хочется своими руками и без участи программистов 1с. Первое что мне пришло в голову, напрямую лепить данные в базу 1с, которая развёрнута с помощью Microsoft SQL Server, но я не уверен что 1с сможет эти данные подхватывать.
Может есть готовое API или ещё что то?


Ответ

Вот чисто беспроблемный варианты - это сделать почтовый ящик, и отправлять заявки сгенерированные в клиенте на него, а чтобы 1С их забирала. Или можно через dropbox попробовать. А в SQL писать можно конечно, но как уже сказали структура специфическая + встает вопрос а как ты из внешки будешь цепляться ? Вряд ли ИТшники согласятся Скуль на котором база предприятия светить во внешку.
Формат на ваше усмотрение. Делаете почтовый ящик какой-то отдельный для данных задач, из Androida легко отправить на почту. В 1с, нужно сделать регламентное задание (фоновое), которое будет читать данные и формировать документ Заявок (примеров чтения из почтового ящика на infostart.ru дофига). Все равно на стороне 1С придется делать фоновое задание, которое преобразует входящие данные в удобоваримый 1Совский вид. Ну просто нет шансов что вы на уровне таблиц sql простроите все связи между элементами данных так же, как это требуется для работы самой 1С, это лучше делать уже через встроенные 1Совские механизмы.

воскресенье, 14 апреля 2019 г.

Передача данных между формами

Добрый день. Только начал разбираться с 1С программированием и столкнулся с проблемой. 1С:Предприятие 8.2 (8.2.13.219) нетиповая конфигурация Есть справочник контрагентов. У каждого контрагента есть связанные с ним события. Открываем форму выбранного контрагента, в этой форме есть кнопка "добавить документы", при нажатии на которую выскакивает форма выбора документов, в которой можно выбрать "Событие". Выбираем событие, открывается форма создания события. Вопрос: как передать данные (например самого контрагента) в форму события из открытой формы выбранного контрагента? Или как мне сослаться на конкретную форму? чтобы, находясь в самой форме события, взять все, что мне надо, из формы контрагента. Что должно получиться: из формы контрагента вызываем форму события, и в поля ввода формы события сразу подставляется значения, взятые из формы контрагента. свойства кнопки добавления нажимаем кнопку, открывается окно выбора документа, в котором выбираем событие, после чего отрывается форма события


Ответ

В модуле документа "Событие" должна быть процедура ОбработкаЗаполнения(Основание). Система автоматически вызывает эту процедуру и передает в нее параметром "Основание" данные объекта "по ссылке", который явился инициатором заполнения. В вашем случае это контрагент. Вот тут вам и нужно посмотреть, какой тип имеет основание, если это справочникСсылка.Контрагенты тогда заполняете, если нет продолжаете по умолчанию. Выглядеть будет примерно так: Если ТипЗнч(Основание) = Тип("СправочникСсылка.Контрагенты") тогда <Заполняем какие то реквизиты> <При необходимости выходим из процедуры методом Возврат;> КонецЕсли;

воскресенье, 31 марта 2019 г.

1С альтернатива [закрыт]

Доброго времени суток! Подскажите, может кто сталкивался, слышал. Существуют ли в природе, в идеях, забытых разработках, альтернативы платформе 1С. В первую очередь с точки зрения программиста - то есть мощный конструктор хранилищ данных и форм, плюс отчеты. Интересна любая информация, то есть скажем, старое опен-сорс, которое возможно довести до ума пойдет не менее чем промышленное и тиражное. САП - не предлагать))


Ответ

Вспомнился "Дебет Плюс" на базе Eclipse RCP и JS-скриптов.

пятница, 19 октября 2018 г.

Создание dll для 1С

Есть dll без исходников, для нее есть интерфейс на delphi. Стоит задача подружить эту библиотеку с 1С. На сколько понял с прочитанного в интернете, на основе интерфейса можно сделать dll по COM технологии.
Пример интерфейса:
unit Unit1; interface
uses Windows, Messages, Classes, SysUtils, Forms;
type TBonusCountersPrintQuery = packed record Card: array[0..15] of char; end;
TListCountersPrint = packed record Lines: array[0..PACKET_COUNTERS_PR_MAX_LINE_COUNT - 1] of TCounterLine; end;
TCounterLine = packed record LineNo: word; IsLast: byte; Num_Counter: word; N_Counter: array[0..9] of char; Value_Counter: Cardinal; end;
type THWE_ProcessBonusListCountersPrint = function(vBonusCountersPrintQuery: TBonusCountersPrintQuery; var vListCountersPrint: TListCountersPrint): Integer; stdcall;
function ProcessBonusListCountersPrint(vBonusCountersPrintQuery: TBonusCountersPrintQuery; var vListCountersPrint: TListCountersPrint): Integer; stdcall;
implementation
var HWE_ProcessBonusListCountersPrint : THWE_ProcessBonusListCountersPrint;
function init_dynamic(ALibrary: string): Boolean; begin hLib := SafeLoadLibrary(ALibrary);
Result := (hLib <> 0);
if Result then begin
@HWE_ProcessBonusListCountersPrint := GetProcAddress(hLib, 'ProcessBonusListCountersPrint');
Result := Assigned(HWE_ProcessBonusListCountersPrint); end; end;
function ProcessBonusListCountersPrint(vBonusCountersPrintQuery: TBonusCountersPrintQuery; var vListCountersPrint: TListCountersPrint): Integer; begin result := HW_FAILURE; if hLib <> 0 then result := HWE_ProcessBonusListCountersPrint(vBonusCountersPrintQuery, vListCountersPrint); end;
initialization
finalization
end.
Как правильно написать такую dll, чтобы функция из примера была доступна из 1С?


Ответ

Ваша библиотека будет связующим звеном между 1C и сторонней библиотекой без исходного кода:
1C -> ВашаБиблиотекаCOM -> СтороняяБиблиотека
То, что вы описали - попытка реализовать связь:
ВашаComБиблиотека -> СтороняяБиблиотека
Осталось реализовать связь между 1C и вашей библиотекой.
Чтобы начать разработку библиотеки по технологии COM в Delphi нужно выбрать: File -> New -> Other и там найти ActiveX Library, новый проект будет выглядить приблизительно так:

Далее к проекту добавить COM-сервер: File -> New -> Other и найти COM Object, выглядеть в новых версиях Delphi будет как-то так:

В старых версиях Delphi так:

В полях ClassName (CoClassName) нужно ввести английское название, по которому 1C и будет загружать вашу библиотеку после регистрации в системе, например: MaximLibrary1C
Подробнее о пошаговом создании COM-библиотеки можете почитать здесь: http://www.introligator.org/articles/3/78
После написания прослойки (куда вы перенесете свой вышеописанный код) и окончания разработки на целевой машине вашу новую .dll нужно зарегистрировать в системе, как-то так:
regsvr32 c:\Library\Project1.dll
Конечно, имя проекта лучше задать более вменяемое, а не Project1. На машине с Delphi зарегистрировать можно из среды в меню "Run". Из самой 1C вашу библиотеку после регистрации в системе можно будет загружать как-то так:
МояБиблиотека = Новый COMОбъект("MaximLibrary1C"); // вызываем метод в библиотеке МояБиблиотека.1C_ProcessBonusListCountersPrint();