Носков Роман

2
Рейтинг

LediStile
Роман Носков



  •   Регистрация: 16.02.2017 (7 лет назад)

  •   Был(а) на сайте: 25.09.2023

Друзья
  • Гульнара А
Подписчики 1

Рейтинг 2


Комментарии

УчетПри подписании Сигаретной накладной через 1С-ЭДО накладная остается в состоянии "Ожидается подтверждение"#13 14.09.22 15:03
Может кому будет полезно. Обработка 1С:ЭДО для ДАЛИОН: ТРЕНД, редакция 3.0 (3.0.25.23) .
Ситуация такая, что пакеты от оператора пришли , но 1с не сумела их распаковать.
Переходим в "Текущие дела", ищем папку "Распаковать". Выделяем все документы и нажимаем на кнопку "распаковать пакеты". Подписываем. Статус поменялся.

Прикрепленные файлы:

Эдо_6.PNG
Эдо_2.PNG
ПубликацииИсправление ошибки подбора сотрудника в ЗУП 3.1.8.121#4 07.08.21 0:52
(3) сотрудники имеют разные коэффициенты. Ркс, мкс
ПубликацииИсправление ошибки подбора сотрудника в ЗУП 3.1.8.121#2 02.08.21 14:42
(1) Еще момент. Сотрудники сами создают табеля и им нужна корректировка. На новой форме сделали вывод табличный документ на форму вместо старой - отображение табличной части документа .К сожалению для нас, данные на новой форме отредактировать нельзя, а на старой можно. Это тоже один из вариантов, почему вернули старую форму.
ОбменДиадок. Подключаемый модуль. Отладка#15 30.07.21 17:33
Подключаю обработку ДиадокПРО 4.5.29 для конфигурации "ДАЛИОНТренд"

Отладка включается в режиме предприятия при нажатии на галочку ОТЛАДКА. Обработки выгружаются в каталог (лучше на сервере) "\\ИмяКаталогаОсновногоМодуля\libs". Сюда выгружаются обработки из макетов ____ВложенныеФайлы____ . Здесь вроде всё понятно. Но стоит задача, а как отладить обработку Модуль_ИнтеграцияУниверсальный, которая хранится в одном из макетов ТиповойМодульДиадокУФ(Модуль_ДиадокУФ). Сейчас я это сделал и попробую описать. Мне это нужно было для конфигурации "ДАЛИОНТренд".

// Может напишу что-то лишнего или не допишу что-то важного, не судите строго

1. В подключаемом модуле верну мою конфу
Код
Функция ИмяКонфигурации1С()   
   //Возврат "БП20";
   Возврат "ДАЛИОНТренд" //Новая конфигураци Далион Тренд 3.0   
КонецФункции


2. В обработке Модуль_ДиадокУФ необходимо определить мою конфигурацию "ДАЛИОНТренд":

Код
Функция МаркерКонфигурации()
   
   ИменаПодсистемПоМаркерам = Новый Соответствие;
   ИменаПодсистемПоМаркерам.Вставить("БП30", ИменаПодсистемБП());
   ИменаПодсистемПоМаркерам.Вставить("УТ11", ИменаПодсистемУТ());
   ИменаПодсистемПоМаркерам.Вставить("УНФ16", ИменаПодсистемУНФ());
   ИменаПодсистемПоМаркерам.Вставить("БГУ20", ИменаПодсистемБГУ());
   ИменаПодсистемПоМаркерам.Вставить("Розница", ИменаПодсистемРозница());
   ИменаПодсистемПоМаркерам.Вставить("АльфаАвто6", ИменаПодсистемАльфаАвто());
   ИменаПодсистемПоМаркерам.Вставить("ДАЛИОНТренд", ИменаПодсистемДалионТренд());
   
   ПодсистемыКонфигурации = ОписанияПодсистемКонфигурации();
   
   Результат = "";
   
   Для Каждого КлючИЗначение Из ИменаПодсистемПоМаркерам Цикл
      
      ПодходящиеПодсистемы = КлючИЗначение.Значение;
      
      Если ЕстьПодходящаяПодсистема(ПодсистемыКонфигурации, ПодходящиеПодсистемы) Тогда
         Результат = КлючИЗначение.Ключ;
         Прервать;
      КонецЕсли;
      
   КонецЦикла;
   
   Возврат Результат;
   
КонецФункции


Код
Функция ИменаПодсистемДалионТренд()
   
   Результат = Новый Массив;
   Результат.Добавить("ДАЛИОНТренд");   
   Возврат Результат;
   
КонецФункции



Код
   Функция ИмяФормыИнтеграции() Экспорт
      
      Если ПараметрыКлиентСервер.МаркерКонфигурации = "БП30" Тогда
         Результат = "Модуль_ИнтеграцияБП30";
      ИначеЕсли ПараметрыКлиентСервер.МаркерКонфигурации = "УТ11" Тогда
         Результат = "Модуль_ИнтеграцияУТ11";
      ИначеЕсли ПараметрыКлиентСервер.МаркерКонфигурации = "БГУ20" Тогда
         Результат = "Модуль_ИнтеграцияБГУ20";
      ИначеЕсли ПараметрыКлиентСервер.МаркерКонфигурации = "УНФ16" Тогда
         Результат = "Модуль_ИнтеграцияУНФ16";
      ИначеЕсли ПараметрыКлиентСервер.МаркерКонфигурации = "Розница" Тогда
         Результат = "Модуль_ИнтеграцияРозница";
      ИначеЕсли ПараметрыКлиентСервер.МаркерКонфигурации = "АльфаАвто6" Тогда
         Результат = "Модуль_ИнтеграцияАльфаАвто6";
      ИначеЕсли ПараметрыКлиентСервер.МаркерКонфигурации = "ДАЛИОНТренд" Тогда
         Результат = "Модуль_ИнтеграцияУниверсальный"; // рома 
      Иначе
         Результат = Неопределено;
      КонецЕсли;
      
      Возврат Результат;
      
   Конецфункции 


Вроде после таких махинаций правильно определяется конфигурация и это хорошо. Проверим:
[img]C:\fakepath\метеданные далион.PNG[/img]


3. Необходимо указать КаталогМодулейСервера, по сути каталог где хранится основная обработка diadocPro. Для отладки напишите РежимОтладкиСервера = ИСТИНА

Код
Функция ПараметрыИнициализацииМодуля()
   
   Результат = Новый Структура;
   Результат.Вставить("ВызовИзРасширения", Ложь);
   Результат.Вставить("РежимОтладкиСервера", Истина);  // признак отладки
   Результат.Вставить("КаталогМодулейСервера", "\\ИмяКаталогаОсновногоМодуля");  // путь моей обработки: "\\МойСервер\ИмяКаталогаОсновногоМодуля\Diadoc4_5.epr"
   Результат.Вставить("ОтправкаФайловСтарыйИнтерфейс", Ложь);
   Результат.Вставить("ИспользоватьФормуВводаНакладной", Ложь);
   Результат.Вставить("МаркерКонфигурации", ПолучитьМаркерКонфигурации());
   
   Возврат Результат;
   
КонецФункции



4. Здесь я определяю как должна действовать моя обработка "Модуль_ИнтеграцияУниверсальный"

Код
   Функция МетодСервера(Знач ИмяМодуля= "", ИмяМетода,
         Параметр0= NULL, Параметр1= NULL, Параметр2= NULL, Параметр3= NULL, Параметр4= NULL, 
         Параметр5= NULL, Параметр6= NULL, Параметр7= NULL, Параметр8= NULL, Параметр9= NULL) Экспорт
      
      Если НЕ ЗначениеЗаполнено(ИмяМодуля) Тогда
         
         ИмяМодуля = ПараметрыКлиентСервер.ИмяОбработки;
         
      ИначеЕсли ИмяМодуля = "Модуль_Интеграция" Тогда
         
         ИмяМодуля = ПараметрыКлиентСервер.ИмяФормыИнтеграции;
         
      ИначеЕсли ИмяМодуля = "Модуль_ИнтеграцияУниверсальный" Тогда
         
         ИмяМодуля = ПараметрыКлиентСервер.ИмяОбработки;         
         
      КонецЕсли;
      
      Результат = ВыполнитьМетод(ИмяМодуля, ИмяМетода
      , Параметр0, Параметр1, Параметр2, Параметр3, Параметр4 
      , Параметр5, Параметр6, Параметр7, Параметр8, Параметр9
      );
      
      Возврат Результат;
      
   КонецФункции

   Процедура ПовторноеИспользованиеСброситьЗначение(Знач ИмяМодуля= "", ИмяМетода,
      Параметр0= NULL, Параметр1= NULL, Параметр2= NULL, Параметр3= NULL, Параметр4= NULL, 
      Параметр5= NULL, Параметр6= NULL, Параметр7= NULL, Параметр8= NULL, Параметр9= NULL) Экспорт
      
      Если НЕ ЗначениеЗаполнено(ИмяМодуля) Тогда
         
         ИмяМодуля = ПараметрыКлиентСервер.ИмяОбработки;
         
      ИначеЕсли ИмяМодуля = "Модуль_Интеграция" Тогда
         
         ИмяМодуля = ПараметрыКлиентСервер.ИмяФормыИнтеграции;
         
      ИначеЕсли ИмяМодуля = "Модуль_ИнтеграцияУниверсальный" Тогда
         
         ИмяМодуля = ПараметрыКлиентСервер.ИмяОбработки; // Рома
         
      КонецЕсли;
      
      МассивПараметров= МассивПараметров(
      Параметр0, Параметр1, Параметр2, Параметр3, Параметр4, 
      Параметр5, Параметр6, Параметр7, Параметр8, Параметр9);
      
      УдалитьРезультатФункцииИзКэш(ИмяМодуля, ИмяМетода, МассивПараметров);
      
   КонецПроцедуры

Функция ИмяМенеджераИнтеграции()
   Возврат "Модуль_ИнтеграцияУниверсальный";
КонецФункции


Функция МенеджерИнтеграции_НоваяНоменклатураИнформационнойБазы(Номенклатура = Неопределено, Характеристика = Неопределено, Упаковка = Неопределено)
   
   Результат = МетодСервера("Модуль_ИнтеграцияУниверсальный", "НоваяНоменклатураИнформационнойБазы"
      , Номенклатура
      , Характеристика
      , Упаковка);
   
   Возврат Результат;
   
КонецФункции

Процедура МенеджерИнтеграции_НайтиНоменклатуруИнформационнойБазы(НоменклатураИБ, НоменклатураКонтрагента)
   
   МетодСервера("Модуль_ИнтеграцияУниверсальный", "НайтиНоменклатуруИнформационнойБазы"
      , НоменклатураИБ
      , НоменклатураКонтрагента);
   
КонецПроцедуры

   Функция КаталогиВложенныхОбработокВРежимеОтладки()
      
      КаталогБиблиотек = "libs";
      КаталогИнтеграции = "include";
      
      Результат = Новый Соответствие;
      
      Результат.Вставить("Модуль_РаботаСВнешнимиПечатнымиФормами"   , КаталогИнтеграции);
      Результат.Вставить("Модуль_ИнтеграцияУниверсальный"         , КаталогИнтеграции);
      Результат.Вставить("Модуль_ИнтеграцияБП30"               , КаталогИнтеграции);
      Результат.Вставить("Модуль_ИнтеграцияУТ11"               , КаталогИнтеграции);
      Результат.Вставить("Модуль_ИнтеграцияБГУ20"               , КаталогИнтеграции);
      Результат.Вставить("Модуль_ИнтеграцияУНФ16"               , КаталогИнтеграции);
      Результат.Вставить("Модуль_ИнтеграцияРозница"            , КаталогИнтеграции);
      Результат.Вставить("Модуль_ИнтеграцияАльфаАвто6"         , КаталогИнтеграции);
      
      Результат.Вставить("ГенерацияXML"   , КаталогБиблиотек);
      Результат.Вставить("ПечатныеФормы"   , КаталогБиблиотек);
      
      Возврат Результат;
      
   КонецФункции

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

   Функция ОбъектКонстант() Экспорт
      
      Результат = МетодСервера("Модуль_ИнтеграцияУниверсальный", "ВладелецОбщихНастроекМодуля");
      
      Возврат Результат;
      
   КонецФункции




5. И самое основное, в каком месте я переопределяю ВнешняяОбработкаМодуль_ИнтеграцияУниверсальный.ИспользуемоеИмяФайла. Это здесь:

Код
      Если ПараметрыКлиентСервер.РежимОтладкиСервера Тогда
         
         ПодКаталогиОбработок = КаталогиВложенныхОбработокВРежимеОтладки();
         
         ИмяФайла       = ИмяМодуля + ".epf";
         ПодКаталог       = ПодКаталогиОбработок[ИмяМодуля];
         КаталогОбработок = ПараметрыКлиентСервер.КаталогМодулейСервера; // рома , у меня все хранилось в "\\МойСервер\Диадок Про"
         ПолноеИмяФайла    = ОбъединитьПути(КаталогОбработок, ПодКаталог, ИмяФайла);
         
         Если Не ФайлСуществует(ПолноеИмяФайла) Тогда
            ЗаписатьМакетОбработкиВФайл(ИмяМодуля, ПолноеИмяФайла);
         КонецЕсли;
         
         Результат = ВнешниеОбработки_СоздатьИзФайла(ПолноеИмяФайла, Истина); //  ИСТИНА - зто признак для отладки моей обработки, не нужна отладка - оставьте ЛОЖЬ. Этот признак меняет ИспользуемоеИмяФайла у обработки
         
      Иначе
         
         ПроверитьЧтоБезопасныйРежимОтключен();
         
         ДвоичныеДанные = ПолучитьМакет(ИмяМодуля);
         АдресОбработки = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
         
         ИмяОбработки = ВнешниеОбработки_Подключить(АдресОбработки);
         Результат    = ВнешниеОбработки_СоздатьПоИмени(ИмяОбработки);
         
      КонецЕсли;
      
      Если ПараметрыКлиентСервер.РежимОтладкиСервера Тогда
         Результат.ПриглашениеОтладки();
      КонецЕсли;
      
      Возврат Результат;
      
   КонецФункции



Здесь создается обработка в каталоге:

Код
   Функция ВнешниеОбработки_СоздатьИзФайла(ИмяФайла, БезопасныйРежим = Ложь)
      
      ПроверитьЧтоФайлСуществует(ИмяФайла);
      
      Результат = ВнешниеОбработки.Создать(ИмяФайла, БезопасныйРежим);
      
      Возврат Результат;
      
   КонецФункции
   
   Процедура ПроверитьЧтоФайлСуществует(ИмяФайла)
      
      Файл = Новый Файл(ИмяФайла);
      
      Если НЕ Файл.Существует() Тогда
         
         Если ПараметрыКлиентСервер.ФайловыйРежимРаботы Тогда
            СтрокаПроверьтеФайлНаСервере = "";
         Иначе
            СтрокаПроверьтеФайлНаСервере = НСтр("ru = '
            |Проверьте, что файл доступен для загрузки на сервере 1С.'");
         КонецЕсли;
         
         ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
         НСтр("ru = 'Файл не обнаружен ''%1'' %2'"), ИмяФайла, СтрокаПроверьтеФайлНаСервере);
         
         ВызватьИсключение ТекстОшибки;
         
      КонецЕсли;
      
   КонецПроцедуры



Результат.ИспользуемоеИмяФайла = "\\МойСервер\Диадок Про\include\Модуль_ИнтеграцияУниверсальный.epf" - это то, что мне нужно для отладки

Все обработки хранятся в переменных Кэш и ОбщийКэш в модулях

Пожалуй, прикреплю я свою обработку сюда
ПМ_ТорговыеСети - мой подключаемый модуль
ТиповойМодульДиадокУФ.epf - хранится в \\....\ТиповойМодульДиадокУФ.epf и скачивается в каталог при нажатии режима ОТЛАДКИ в основной обработке

Прикрепленные файлы:

метеданные далион.PNG
ПМ_ТорговыеСети_4.2.3.10_24_06_2021.epf
ТиповойМодульДиадокУФ.epf
ПубликацииИсправление ошибки подбора сотрудника в ЗУП 3.1.8.121#0 22.07.21 17:02
Создаете табель, пытаетесь подобрать сотрудника, а он не отображается в табеле.
DevОшибка SDBL:Поле Fld***** определено неоднозначно#25 30.01.21 22:25
На клиент серверной подобная проблема. Произошла после обновление конфигурации на версию выше и выскакивала при певом запуске базы в режиме предприятия. И походу появимлась эта ошибка после обновдение платформы на версию 8.3.18, потому что на старой платформе подобных косяков с обновлением не было.
Моё решение этой проблемы.
1. Выгрузил dt с клиент - серверной
2. Загрузил dt в пустую файловую
3. Сделал на файловой обновление конфигурации, причем обновление делал на платформе ниже, на версии 8.3.16
4. Запустил файловую базу в режиме предприятия, опять таки на версии платформы ниже, то есть на 8.3.16 . успех !
5. выгрузка из файловой dt и загрузка его в клиент-серверную.
6 запуск на платформе клинт-серверной 8.3.18 - Успех.

P.S. Много читал по этой проблеме. Сделать ТиИ серверной базы свыше 50 Гигов средствами конфигуратора - не вариант. Если кому то поможет мой вариант, дайте знать лайком или еще чем-то там.

Всем успехов!

Прикрепленные файлы:

sdbl.jpg