Св. Валерий

84
Рейтинг

ValeraS2010
Валерий Св.



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

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

Друзья
  • Kiprida A
  • Дмитрий Малышев
Подписчики 6

Группы

Профессиональный разработчик

Рейтинг 84

Передача объекта ТаблицаЗначений в СКД в качестве параметра

Статья Программист Система компоновки данных Конфигурации 1cv8 Windows Бесплатно (free) Нет файла СКД

Передача объекта ТаблицаЗначений в СКД в качестве параметра путем замены набора данных с сохранением механизма пользовательских настроек и отборов.

04.09.2015    66681    ValeraS2010    31       

59

Выгрузка через внешнее соединение

Инструменты и обработки Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Windows Абонемент ($m) Внешняя обработка (ert,epf) Файловый обмен (TXT, XML, DBF), FTP

Основана на стандартной обработке ИТС "ВыгрузкаЗагрузкаДанныхXML". В отличие от исходной обработки выгрузка осуществляется путем непосредственного подключения к базе назначения. Добавлен режим ввода остатков, позволяющий "сворачивать" базу данных (или ее часть) до определенной даты. Объекты при загрузке синхронизируются по "уникальному идентификатору", что исключает их дублирование. Кроме того, внесены исправления, существенно увеличивающие скорость выгрузки движений по регистрам.

1 стартмани

07.08.2013    6696    40    ValeraS2010    7       

7

Комментарии

DevФункция: получить число из строки#18 04.09.19 17:28
Извините: нашел ошибочку в своей реплике - вот исправленный вариант

Функция ДостатьЧислаИзСтроки(ИсходнаяСтрока, разделители = ".,")
Масс = Новый Массив;
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина;
RegExp.Global = Истина;
RegExp.MultiLine = Ложь;
//RegExp.Pattern = "\d+";
RegExp.Pattern = "-*\d+[" + разделители + "]*\d*";
Matches= RegExp.Execute(ИсходнаяСтрока);
ОчиститьСообщения();
Для Сч = 0 по Matches.Count()-1 Цикл
Match = Matches.Item(Сч);
Попытка
Масс.Добавить(Число(Match.Value));
Исключение
Сообщить(Match.Value);
Сообщить("Ошибка : "+ ОписаниеОшибки());
КонецПопытки;
//Сообщить("" + Match.Value+ "");
Submatches = Match.Submatches;
Для сч1=0 по Submatches.Count()-1 Цикл
Submatch = Submatches.Item(Сч1);
Попытка
Масс.Добавить(Число(Submatch.Value));
Исключение
Сообщить("Ошибка : "+ ОписаниеОшибки());
КонецПопытки;
// Сообщить(Символы.Таб + "" + Submatch+ "");
КонецЦикла;
КонецЦикла;

Возврат Масс;
КонецФункции // ()
DevФункция: получить число из строки#17 01.08.19 14:39
Немного улучшенный вариант с регулярными выражениями - понимает десятичные дроби:


Код
Функция ДостатьЧислаИзСтроки(ИсходнаяСтрока, разделители =  ".,")
Масс = Новый Массив;
RegExp = Новый COMОбъект("VBScript.RegExp"); 
RegExp.IgnoreCase = Истина; 
RegExp.Global = Истина; 
RegExp.MultiLine = Ложь; 
//RegExp.Pattern = "\d+";
RegExp.Pattern = "-*\d+[" + разделители + "]\d*";
Matches= RegExp.Execute(ИсходнаяСтрока); 
ОчиститьСообщения();
Для Сч = 0 по Matches.Count()-1 Цикл
    Match = Matches.Item(Сч);
      Попытка
         Масс.Добавить(Число(Match.Value));
      Исключение
         Сообщить(Match.Value);
          Сообщить("Ошибка : "+ ОписаниеОшибки());
      КонецПопытки;
    //Сообщить("" + Match.Value+ "");
    Submatches = Match.Submatches;
    Для сч1=0 по Submatches.Count()-1 Цикл
        Submatch = Submatches.Item(Сч1);
      Попытка
         Масс.Добавить(Число(Submatch.Value));
      Исключение
          Сообщить("Ошибка : "+ ОписаниеОшибки());
      КонецПопытки;
      //        Сообщить(Символы.Таб + "" + Submatch+ "");
    КонецЦикла;
КонецЦикла;
   
Возврат Масс;
КонецФункции // ()
DevПередача объекта ТаблицаЗначений в СКД в качестве параметра#22 23.02.18 16:58
(21) Возможно - дело как раз в этом :). Когда-то трюк сработал, и полученный код работает по прежнему. Но некоторое время назад - попробовал воспользоваться этим методом при разработке - тоже были проблемы типа описанных вами. Возможно после обновлений этот способ уже не работает. Этого можно было ожидать потому что метод , так сказать , "хакерский" , нестандартный и ненадежный. Я сильно разбираться не стал - не очень было нужно и не было времени. Так что если кто-то ждет от меня объяснений как от автора - то прошу извинить - ничего конструктивного пока сказать не могу.
DevПередача объекта ТаблицаЗначений в СКД в качестве параметра#18 16.09.17 15:10
Не знаю. У меня релиз 1с -2170. Вообще-то работает. Но при попытке проверить - несколько раз вставлял текст, включал конструктор, сохранял - описанная ошибка пару раз проскакивала, но скорее как промежуточный этап , причем не воспроизводимый регулярно - повторно нажимаешь кнопку и все сохраняется. Какие-то нюансы видимо есть. Точно сказать в чем причина не могу.
DevПередача объекта ТаблицаЗначений в СКД в качестве параметра#16 04.04.17 16:54
(15) Ну да - очевидно так. Конечно, это серьезный недостаток - но как обойти это я не знаю.
DevПередача объекта ТаблицаЗначений в СКД в качестве параметра#10 08.12.16 18:13
(9) Рад, что вам пригодился описанный способ, но по вашему вопросу - боюсь ,не смогу помочь. Это решение в моей работе - эпизод, причем достаточно экзотический. Часто подобными упражнениями мне заниматься не приходится и корифеем в этой области я не являюсь. Просто решение показалось мне достаточно необычным, чтобы поместить в статью, и чтобы, возможно ,пригодилось другим (ну хотя бы в качестве начальной идеи). Сейчас углубляться в это у меня нет возможности :(.
DevПередача объекта ТаблицаЗначений в СКД в качестве параметра#8 06.12.16 11:42
(7) Вы правы - есть синтаксическая ошибка :(. Но в правильном варианте у меня все работает (версия 8.3 - может в этом дело?..). Приведенный код должен выглядеть так:

"ВЫБРАТЬ
тзИнтервалов.НачИнтервала КАК ДатаКалендаря
ПОМЕСТИТЬ втИнтервалов
ИЗ
тзИнтервалов КАК тзИнтервалов"



Сейчас для проверки создал новую обработку , добавил в нее макет типа СКД и поместил куда приведенный выше текст как показано на картинке. Конструктор запускается без проблем. Предлагаю буквально повторить эти шаги для однозначного определения ситуации.

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

2016-12-06_10-03-54.jpg
DevПередача объекта ТаблицаЗначений в СКД в качестве параметра#4 04.09.15 17:39
KapasMordorov - Спасибо за коментарий.
//Кажется, что автор путает внешние источники данных и "набор данных - объект" в СКД.
Да, действительно перепутал. Каюсь :)
//Про "работающую схему не встречал" тоже не понял.
Не встречал - значит буквально - не встречал. Это не значит - не существует. Глубокого патентного исследования не проводилось - это правда
DevПередача объекта ТаблицаЗначений в СКД в качестве параметра#0 02.09.15 14:12
Передача объекта ТаблицаЗначений в СКД в качестве параметра путем замены набора данных с сохранением механизма пользовательских настроек и отборов.
ОбменВыгрузка через внешнее соединение#3 16.08.13 11:05
Сразу хочу поправить себя и уточнить насчет размера базы: критичен скорее ассортимент номенклатуры и других основных справочников а если просто много документов то это не страшно - итоги то одни и те же. И еще в описании забыл один момент осветить насчет свертки по частям - скоро исправлю. Спасибо за коментарий