Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - 1Cv7 ВСД в ГИС Меркурий - КБ99 Redmine

Проект

Общее

Профиль

Интеграция с 1С 7.7 Бухгалтерия (записки с фронта).

Добавил(а) Анисимов Михаил больше 6 лет назад

Если кому то будет интересно то могу выкладывать проблемы и решения с которыми я столкнулся или столкнусь при интеграции данного продукта с не комплексной конфигурацией.

Вводные:
1) УС на базе 1С 7.7 Бухгалтерия
2) Уже давно реализован партионный учет материалов, товаров, готовой продукции, полуфабрикатов. То есть в системе есть полная прослеживаемость что-куда.
3) Есть входное сырье которое идет с ВСД.
4) Мы производственная компания. Половина нашей продукции подлежит ВСД (кормовые добавки).
5) У нас есть агентские договора на реализацию нашей продукции через представителей.


Ответы (51)

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Накатил обновление на имеющуюся УС:
) все объекты имеют префикс ВСД_, нет наложения по именам и выделяются среди остальных справочников/функций/обработок
) использование внешних компонент таких как 1CPP Formex

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

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Получил письмо с реквизитами доступа к тестовому контуру. Начинаем процесс.

Изменения в Меркурий_ГлобальныйМодуль:

1) Внес изменения в формирование пути для хранения настроек (это мои личные заморочки, можно было оставить как есть)
2) Отсутствует переменная глПользователь, но имеется глТекущийПользователь - внес изменения в модуль
3) Изменил путь загрузки ВК 1sqlite.dll, так как все библиотеки общего назначения хранятся по другому пути.
4) Изменил процедуры ПолучитьИНН и ПолучитьКПП, так как структура Контрагента в КОмплексной и Бухгалтериях отличаются.

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

Делаю первую инициализацию:
1) Непонятно назначение параметра intiator_login (может ошибка? initiator ) по имеющемуся видео совпадает с vetdoctor_login
2) Отправитель_ХозСубъект - должны создать сами? GUID присвоить самим? он равен IssuserID? Без этого параметра инициализация не запускается.

При первой инциализации вышла ошибка при получении ИНН и некоторые данные не загрузились. После этого выполнил изменения п.4 см выше.
УРА вроде все данные загрузились. Справочник продукции заполнился. Страны заполнились, регион только свой, и город тоже. Площадка тоже появилась.

Из настроек вижу что возможны проблемы с реквизитами "Грузополучатель" В Расходной накладной Есть поле Контрагент, и есть поле Грузополучатель, если Грузополучатель не заполнено то считается что груз получает контрагент. Посмотрим ....

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) кб99 Синявский Филипп больше 6 лет назад

Михаил, спасибо! Думаю эта информация будет интересна многим.

Вы переносили справочники ?
  • ВидыСвойств
  • ЗначенияСвойств
  • СвойстваКонтрагентов
  • СвойстваНоменклатуры

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Эти справочники нет. Имеются в наличии собственные (не из базовой бухгалтерии):

1) Свойства_Виды
2) Свойства_ВариантыЗначений
3) Свойства_Значения

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

Мне проще добавить новое поле в номенклатуру и материалы (в бухгалтерии это разные справочники) поле ВСД_Номенклатура, или в справочник ВСД_Продукция_Элемент добавить поле Номенклатура. Пока думаю.

В моей ситуации надо делать связь 1 к 1. Насколько я понял с 2018 года это будет актуально для всех.

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Так как много где используется глобальная переменная глПользователь, решил ее добавить в свой глобальник.

Всплыли несколько моментов:
реквизит ОснованяФирма
реквизит Филиал

их нет в Бухгалтериях, она не подразумевает многофирменность в одной базе.

Далее в конфигурации имеются реквизит Автор, но привязка не к пользователю а к сотруднику.

Внес изменения (желательно чтобы они отобразились в след обновлениях, упростит интеграцию другим с другими системами):
1) в подключаемый глобальныймодуль добавил функцию ПолучитьАвтора() здесь я возвращаю то что мне надо
2) в обработке обмен_тест заменяю строки Партия.Автор = глПользователь на Партия.Автор = ВыпМодуль.ПолучитьАвтора();

Аналогичные пункты делаю с Фирма и Филиал (возвращаю пустое значение)

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) кб99 Синявский Филипп больше 6 лет назад

Анисимов Михаил писал:

В моей ситуации надо делать связь 1 к 1.

Часто бывают случаи, когда несколько ваших товаров соответствуют 1 товару клиента, например

тушка 9 калибр
тушка 8 калибр
тушка 7 калибр

соответствуют 1 товару "тушка" в торговой сети.
связь многие к 1.
Для этого сделана свертка по значению свойств.

Делаю первую инициализацию:
1) Непонятно назначение параметра intiator_login (может ошибка? initiator ) по имеющемуся видео совпадает с vetdoctor_login
2) Отправитель_ХозСубъект - должны создать сами? GUID присвоить самим? он равен IssuserID? Без этого параметра инициализация не запускается.

да, опечатка в названии реквизита, правильно initiator_login - должен быть ваш логин
vetdoctor_login - логин ветврача, в тестовой версии они одинаковые, в рабочей отличаются.

2. Да, ХозСубъект для вашей организации нужно создать, обязательно указать ИНН.
GUID ХозСубъекта отправителя можно не указывать - будет загружен из Меркурия
да, IssuserID = GUID ХозСубъекта отправителя

Внес изменения (желательно чтобы они отобразились в след обновлениях, упростит интеграцию другим с другими системами):
1) в подключаемый глобальныймодуль добавил функцию ПолучитьАвтора() здесь я возвращаю то что мне надо
2) в обработке обмен_тест заменяю строки Партия.Автор = глПользователь на Партия.Автор = ВыпМодуль.ПолучитьАвтора();

ок, добавлю

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Если подходить более глобально, то лучше функции которые относятся к обработке данных непосредственно из определенной конфигурации разместить в отдельном выполняемом модуле. Например теже ПолучитьИНН ПолучитьКПП.
Филипп как на это смотрите? правда это приведет к переработке имеющегося модуля. Но я думаю что стоит на это замахнуться. Проще будет интегрировать другие решения. Если будет ваше одобрение то активно приму участие в таком проекте.
Если все изменения делать в текущем выполняемом модуле = в дальнейшем появятся сложности с обновлениями ((

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

@Часто бывают случаи, когда несколько ваших товаров соответствуют 1 товару клиента, например

тушка 9 калибр
тушка 8 калибр
тушка 7 калибр

соответствуют 1 товару "тушка" в торговой сети.
связь многие к 1.
Для этого сделана свертка по значению свойств.@

Вообщем то продавец не особо знает что у покупателя и как, и подстраиваться под каждого ...

связь многие к одному можно реализовать доп полем в номенклатуре УС, вполне приемлимый вариант. Или полноценно связывать в справочнике ВСД_Продукция_Элемент без использования свойств (плюс такого метода нет изменения стандартных объектов). Но это дело желания.

Идеальный для меня вариант, все перенести в интеграционные функции, а там уже как решит внедренец, или это свойства или иное решение. В базовом варианте оставить как сделано у вас.

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) кб99 Синявский Филипп больше 6 лет назад

Анисимов Михаил писал(а):

Если подходить более глобально, то лучше функции которые относятся к обработке данных непосредственно из определенной конфигурации разместить в отдельном выполняемом модуле. Например теже ПолучитьИНН ПолучитьКПП.
Филипп как на это смотрите? правда это приведет к переработке имеющегося модуля. Но я думаю что стоит на это замахнуться. Проще будет интегрировать другие решения. Если будет ваше одобрение то активно приму участие в таком проекте.
Если все изменения делать в текущем выполняемом модуле = в дальнейшем появятся сложности с обновлениями ((

Давайте попробуем...

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Ок тогда произведены следующие изменения.

Создан файл Меркурий_ГлобальныйМодуль_Интеграция.txt
В него переброшены функции из файла Меркурий_ГлобальныйМодуль_Интеграция.txt

Функция ПолучитьИНН(ВыбКлиент)
Функция ПолучитьКПП(ВыбКлиент)
Функция ПолучитьАвтора()
Функция ПолучитьОсновнуюФирму()
Функция ПолучитьФилиал()

В файле Меркурий_ГлобальныйМодуль.txt внесены изменения:
1) в начале файле определены функции которые перенесены в Меркурий_ГлобальныйМодуль_Интеграция.txt

//{Предварительное описание функций и процедур описанных в модуле ГлобальныйМодуль_Интеграция
Функция ПолучитьИНН(ВыбКлиент) Далее
Функция ПолучитьКПП(ВыбКлиент) Далее
Функция ПолучитьАвтора() Далее
Функция ПолучитьОсновнуюФирму() Далее
Функция ПолучитьФилиал() Далее
//}


2) удалены функции которые перенесены

В обработку Меркурий_параметры_тест внесены изменения (их надо на все обработки)
1) Добавлена переменная ПутьГлобальныйМодульИнтеграция
2) В конце модуля изменено:

    //Проверка на загруженность ВК 1CPP
    Попытка
        ВыпМодуль = СоздатьОбъект("ВыполняемыйМодуль");
    Исключение
        ЗагрузитьВнешнююКомпоненту("1cpp.dll");
        ВыпМодуль = СоздатьОбъект("ВыполняемыйМодуль");
    КонецПопытки;

    ПутьГлобальныйМодуль             = "Меркурий_ГлобальныйМодуль.txt"; 
    ПутьГлобальныйМодульИнтеграция     = "Меркурий_ГлобальныйМодуль_Интеграция.txt"; 

3) Функция ПриОткрытии изменено

Процедура ПриОткрытии()

    ИмяФайла="";
    КаталогОбработки="";
    ТекстМодуля="";

    РасположениеФайла(КаталогОбработки, ИмяФайла);

    //{Загрузка стандартного общего модуля
    ГлобМодуль=СоздатьОбъект("Текст");
    ГлобМодуль.Открыть(КаталогОбработки+ПутьГлобальныйМодуль);
    Н=1; 
    Для Н=1 по ГлобМодуль.КоличествоСтрок() Цикл
        Стр=ГлобМодуль.ПолучитьСтроку(Н); 
        ТекстМодуля=ТекстМодуля+Стр+РазделительСтрок;
    КонецЦикла;
    //}

    //{Загрузка дополнительного интеграционного модуля
    ГлобМодуль=СоздатьОбъект("Текст");
    ГлобМодуль.Открыть(КаталогОбработки+ПутьГлобальныйМодульИнтеграция);
    Н=1;
    Для Н=1 по ГлобМодуль.КоличествоСтрок() Цикл
        Стр=ГлобМодуль.ПолучитьСтроку(Н); 
        ТекстМодуля=ТекстМодуля+Стр+РазделительСтрок;
    КонецЦикла;
    //}

    ВыпМодуль.УстановитьМодуль(ТекстМодуля);
    ВыпМодуль.НазначитьКонтекст(Контекст);
    ВыпМодуль.КомпилироватьМодуль();
    ВыпМодуль.ВыполнитьМодуль();

    Попытка        
        ВыпМодуль.ПриОткрытии();
    Исключение
            Сообщить("Библиотека не зарегистрирована","!");
            Сообщить(ОписаниеОшибки());
            Возврат;        
    КонецПопытки;
КонецПроцедуры

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Неправильно оценил объем ВСД документов.. Поэтому принял решение об увеличении размерности номеров. Было 8 стало 10, 3 знака используется под префикс.

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Продолжаем.

Решил добавить новых ХС.
При добавлении нового ХС в справочнике ВСД_ХозСубъект не проставился ИНН из карточки контрагента (причина в разности конфигурации).
Логично было бы вызвать уже ранее определенную интеграционную функцию ПолучитьИНН. Стал переделывать и встрял в загрузку исполняемого модуля, так как функция РасположениеФайла актуально только для внешних отчетов.

Получается надо где то хранить путь к каталогу с обработками. Пока сделал через дополнительную функцию глобального модуля ... но столкнулся с другими проблемами при компиляции подключаемого модуля ...

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) кб99 Синявский Филипп больше 6 лет назад

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

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) кб99 Синявский Филипп больше 6 лет назад

в след релизе:
в глобальном модуле убрал использование переменной глПользователь

глПользователь - используется только в создании документов ВСД.
Модуль для создание ВСД для вашей базы вы можете переопределять в модулях:
  • Меркурий_Подключаемый_Создание_ВСД_исходящий.ert
  • Меркурий_Подключаемый_Создание_ВСД_транзакция.ert

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

1) В глобмальный модуль конфигурации добавляем переменные:

Перем глМеркурий Экспорт;
Перем глМеркурийИнтеграция Экспорт;

Добавлем код в процедуру
Процедура ПриНачалеРаботыСистемы()
....

//эту загрузку можно переписать как удобнее, у меня 1CPP загружается так
Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "LIB\"    + "1cpp.dll")    <>    1    Тогда
Предупреждение("Компонента 1cpp.dll не найдена!");
СтатусВозврата(0);
Возврат;
КонецЕсли;

....
//{Подключение модуля интеграции Меркурий
глМеркурий = СоздатьОбъект("Меркурий");
КаталогМеркурий = глМеню.НайтиКаталог("<Меркурий>",0); //здесь указать путь к каталогу обработок
КаталогБиблиотек = КаталогПрограммы() + "LIB\"; //путь к хранилищу стандартных библиотек
ФайлНастроекПользователя = КаталогПользователя()+"Меркурий_Константы"; //имя базового файла настроек пользователя, Тест или рабочий а так же расширение проставятся сами.
ТестовыйРежимРаботыМодуля = Число(ВосстановитьЗначение("Меркурий_РежимРаботыМодуля"));
глМеркурий.Инициализация(КаталогМеркурий,КаталогБиблиотек,ФайлНастроекПользователя,ТестовыйРежимРаботыМодуля);

глМеркурийИнтеграция            = СоздатьОбъект("МеркурийИнтеграция");            //Интеграционный модуль, переопределенные функции
глМеркурийИнтеграция.Инициализация(глМеркурий);
//}
....
КонецПроцедуры

2) В каталог базы данных копируем файл defcls.prm
Содержимое файла правим на актуальный путь нахождения модулей.

3) В каталог где хранятся обработки копируем файлы
Меркурий.prm
Меркурий.ert (это бывший ГлобальныйМодуль.txt с изменениями)
МеркурийИнтеграция.ert

4) Изменения
4.1) Подключаемый модуль (глобальный модуль) сделан в виде объекта (его можно дебагить в отладчике).
4.2) Все процедуры переделаны в функции (интуитивное решение)
4.3) Добавленны служебные процедуры по инициализации класса а так же для поддержки механизма переопределения функций (для интеграции).
В начале каждой процедуры добавлен код

...    
Функция ПолучитьОтветХС(applicationID, ХС) Экспорт
//{Проверим на переопределение функции, если переопределена вызовем из перекрывающего модуля
ОбъектВыполнения = ПроверитьПереопределениеФункции("ПолучитьОтветХС");
Если ПустоеЗначение(ОбъектВыполнения)=0 Тогда
Возврат ОбъектВыполнения.ПолучитьОтветХС(applicationID, ХС);
КонецЕсли;
//}
//далее стандартное поведение функции    
...

в каждую новую функцию этот код надо добавлчть (изменяя имена функции),

4.4) Модуль МеркурийИнтеграция - необходим для переопределения стандартных функций из модуля Меркурий.
Настройка переопределения выполняется при его инициализации, смотреть код там все вроде понятно. Этого модуля может и не быть вовсе, тогда убрать его определение в глобальном модуле.

4.5) Функции в модуле Меркурий переделаны (отвязаны от текущего контекста выполнения). Протестированы пока не все функции.

4.6) Переделан механизм перехода на тестовую и рабочую версии серверов. В обработке Меркурий_Параметры добавлена новая кнопка, через которую происходит переключение между тестовой и рабочей версии. Анализ имени запускаем обработки на наличие _ТЕСТ не выполняется. (Пока актуально только для уже переработанных обработок).

4.7) Сгруппированы параметры в обработке Меркурий_Параметры

4.8) Проведено тестирование процедур в обработке Меркурий_Параметры - все работает, внесены изменения в код.

4.9) Занимаюсь переработкой/тестирование модуля Меркурий_Обмен ....

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Продолжение обновления:
1) исправлены файлы defcls.prm - неправильная кодировка в русских путях
2) По результатам правки обработки Меркурий_Обмен, большинство функций перенесено в класс Меркурий, выделено несколько новых функций по получению данных: ПолучитьФактическийАдрес, ПолучитьПолноеНаименование. Выполнена их переопределение в модуле интеграции.
3) Более или менее проверил функционирование Меркурий_Обмен. Пока без документов (только справочники).

продолжаем интеграцию ...

Возник вопрос по стабильности работы с ВСД при блокировках транзакций, есть у кого какой опыт? Вообще мои записки интересны кому либо?

P.S. Думаю на механизмом связи собственного справочника продукции и справочника продукции в меркурии. Ну не нравится мне механизм свойств.

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Поцелуев Олег больше 6 лет назад

"Вообще мои записки интересны кому либо?" - чрезвычайно, через некоторое время предстоит, возможно, двигаться в этом направлении но немного другой дорогой...

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Продолжаемс.

1) Привязку к своей номенклатуре решил делать через доп поля в справочниках Материалы и Номенклатура. Получиться связь много к 1. Посмотрим куда это меня приведет в дальнейшем. Часть функций придется переписать.

2) Решил заняться документами ВСД. Так как у нас производственное предприятие - начал именно с производственной ВСД. И тут же нарвался на ошибку "Указанная единица измерения не разрешена для данной вырабатываемой продукции". Производим витамины для кошек и собак, это все попадает в "Кормовые добавки", Выглядит это как таблетки расфасованные в коробки. И что указывать в качестве еденицы измерения? Где узнать для каких видов продукции какие ед. изм разрешены?

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Хммм ... меркурий дал указать ед. изм. Коробка.
Документ выгрузился и подтвердился.

Вопрос автору. После подтверждения производственного ВСД, выработанные партии должны проставиться в документ?

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) кб99 Синявский Филипп больше 6 лет назад

Михаил, во-первых хочу поблагодарить за проделанную работу по систематизации модуля.

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

По сути изменений:
1. Переход на классы - в принципе одобряю.
Плюсы:
  • Позволяет делать отладку
    Минусы:
  • дополнительно нужно прописывать настройки к классам в defcls.prm

2. Переопределение функций - в принципе одобряю
Хотя по опыту - переопределение возможно потребуется только для 3 функций

Функция ПолучитьИНН(ВыбКлиент)
Функция ПолучитьКПП(ВыбКлиент)
Функция ПолучитьОГРН(ВыбКлиент)

3. Смена версии - переменной - не одобряю
не работает для нескольких пользователей - в начальных версиях было такая реализация, к сожалению, это не удобно.
Если у вас несколько операторов выписывают ВСД, тогда будут неожиданности...

P.S. Рефакторинг методов сделаю на этой неделе.
Приведу код в красивый вид, Обещаю, честно-честно!

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) кб99 Синявский Филипп больше 6 лет назад

После подтверждения производственного ВСД, выработанные партии должны проставиться в документ?

по результату оформления ВСД_Производство создаются элементы справочника ВСД_Партии
которые вы уже можете списывать

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Логично было бы проставить ссылку на эту партию в самом производственном ВСД.

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

у меня пока такой список:

    Меркурий.ПереопределитьФункцию("ПолучитьИНН"                            ,Сам());
    Меркурий.ПереопределитьФункцию("ПолучитьКПП"                            ,Сам());
    Меркурий.ПереопределитьФункцию("ПолучитьАвтора"                            ,Сам());
    Меркурий.ПереопределитьФункцию("ПолучитьОсновнуюФирму"                    ,Сам());
    Меркурий.ПереопределитьФункцию("ПолучитьФилиал"                            ,Сам());
    Меркурий.ПереопределитьФункцию("ПолучитьФактическийАдресКонтрагента"    ,Сам());
    Меркурий.ПереопределитьФункцию("ПолучитьПолноеНаименование"                ,Сам());

3) Я просто столкнулся с проблемой определения тестовая версия это или нет внутри стандартных объектов, где нет привязки к имени файла запущенной обработки. Например в модуле ВСД_ХозСубъекты идет вызов функции ПолучитьИНН ... и все приплыли. Можно реализовать через доп константу - одна на всю базу. Правда тогда нет возможности выбрать чтобы с одной базой разные сотрудники могли пользоваться или тестом или рабочей. Хотя я не вижу такой необходимости. Тестовая есть тестовая и делаться должна только на тестовой базе (отладка/обучение и т.д.).

4) очень жду рефакториинга.

P.S. Пустил договор на покупку ПО на согласование, есть некоторые замечания. После прохождения инстанций вышлю наши замечания.

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Филипп спасибо за достаточно оперативное изменение кода!!!

Начал разбираться есть пара вопросов:
1) Необходимо сделать дополнительные функции:

ПолучитьФактическийАдресКонтрагента()
ПолучитьПолноеНаименование()

так как базы отличаются.

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

3) Функционал по обмену ВСД планируется переносить в класс? Просто есть две обработки (обмен и групповая обработка) с дублированием функций по отправке/приему.

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Не сохранил обработку перед добавлением. Добавлю сюда еще раз.

RE: Интеграция с 1С 7.7 Бухгалтерия (записки с фронта). - Добавил(а) Анисимов Михаил больше 6 лет назад

Филипп, рассмотрите мой вариант по определению режима работы модуля (тест или рабочий). В нем полностью сохранена ваша функциональность (по имени файла обработки), но добавлена возможность по изменению этого режима по своему усмотрению.

Далее так же часть "констант" таких как каталог хранения обработок, каталог модулей обработок вынес в функции модуля интеграции (все что может меняется у конечного пользователя вынести в этот модуль).

В модуль меркурий_интеграция добавлено

Функция ОпределитьРежимРаботыМодуля(ИмяФайлаОбработки) экспорт        //определение режима работы модуля, по умолчанию по вхождению слова ТЕСТ в имя файла обработки
    //базовое определение режима работы модуля, по имени файла
    возврат Найти( ВРЕГ(ИмяФайлаОбработки),"_ТЕСТ_");
КонецФункции    

Функция КаталогМодуля(КаталогОбработки) Экспорт                     //путь к каталогу где храняться обработки модуля, по умолчанию переданный каталог
    Возврат КаталогОбработки;
КонецФункции // КаталогМодуля

Функция КаталогБиблиотек() Экспорт                                     //путь к хранилищу стандартных библиотек, изменить путь в случае необходимости
    возврат КаталогИБ();                    
КонецФункции // КаталогБиблиотек

В модуль Меркурий_Глобальный внесены изменения:

Переменная ЭтоТестовыйРежим добавлен признак экспорта

Перем ЭтоТестовыйРежим Экспорт;

Изменена процедура Инициализация(), добавлено присвоение значения переменной ЭтоТестовыйРежим = _РежимРаботы;

Функция Инициализация( _КаталогМодуля, _КаталогБиблиотек, _РежимРаботы) Экспорт
    //КаталогМодуля                     - каталог где лежат все обработки
    //КаталогДополнительныхБиблиотек    - каталог хранения дополнительных библиотек (например 1sqlite)
    //РежимРаботы                        - 0 = это рабочий режим
    //                                      1 = это тестовый режим    

    ЭтоТестовыйРежим = _РежимРаботы;
    КаталогОбработки = _КаталогМодуля;

    ЭтоSQL = ФС.СуществуетФайл(КаталогИБ()+"1cv7.dba");    
    Если ЭтоSQL=1 Тогда 
        Попытка
            RS = СоздатьОбъект("ODBCRecordset");
            RS.УстБД1С();     
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;    
    Иначе        
        Попытка
            базаДанных = СоздатьОбъект("SQLiteBase");
        Исключение

            Если ЗагрузитьВнешнююКомпоненту(_КаталогБиблиотек + "1sqlite.dll")    <>    1    Тогда ////mbIkola    
            //Если ЗагрузитьВнешнююКомпоненту("1sqlite.dll") <> 1    Тогда
                Предупреждение("Компонента 1sqlite.dll не найдена!");
                СтатусВозврата(0);
                Возврат 0;
            КонецЕсли;
            базаДанных = СоздатьОбъект("SQLiteBase");
        КонецПопытки;    
        базаДанных.Открыть(":memory:");    
    КонецЕсли;    

    Возврат ВыборВерсии();

КонецФункции // Инициализация

В обработке Меркурий_Параметры изменена процедура ПриОткрытии

Процедура ПриОткрытии()

    ИмяФайла="";
    КаталогОбработки="";    
    РасположениеФайла(КаталогОбработки, ИмяФайла);

    //{Подключение модуля интеграции Меркурий         

    //Интеграционный модуль для переопределения функций, плюс несколько базовых функций
    глМеркурийИнтеграция            = СоздатьОбъект("МеркурийИнтеграция");
    ТестовыйРежимРаботыМодуля        = глМеркурийИнтеграция.ОпределитьРежимРаботыМодуля(ИмяФайла);    // определение режима работы модуля
    КаталогБиблиотек            = глМеркурийИнтеграция.КаталогБиблиотек();                         // путь к хранилищу стандартных библиотек DLL
    КаталогМодуля                = глМеркурийИнтеграция.КаталогМодуля(КаталогОбработки);            // путь к каталогу обработок модуля меркурий

    ГМ = СоздатьОбъект("Меркурий_ГлобальныйМодуль");
    ГМ.Инициализация(КаталогМодуля, КаталогБиблиотек, ТестовыйРежимРаботыМодуля);        
    ГМ.ЗагрузитьПараметры(Контекст);

    //Переопределение функций, если они определены в модуле
    глМеркурийИнтеграция.Инициализация(ГМ);    
    //}

    Если ГМ.ЭтоТестовыйРежим=0 Тогда     
        ИмяDLL = "SoapDLL_work";
    Иначе        
        ИмяDLL = "SoapDLL_test";
    КонецЕсли;

КонецПроцедуры

Измененный файлы приложены. Надеюсь на дальнейшее плодотворное сотрудничество.

(1-25/51)