0. perepetulichka 574 14.03.17 17:06 Сейчас в теме

Работа с конвертацией данных

Поскольку к конвертации обращаюсь время от времени и какие-то детали забываются, хочу выделить несколько пунктов, чтобы "было где посмотреть". Статья сделана преимущественно «для себя», так что просьба не судить строго. (Примечание читающим/комментирующим: код в примерах очень сильно сокращен.)

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. Sergafan10 17.03.17 08:45 Сейчас в теме
Становится мене актуальным, в связи с КД 3.
2. TODD22 17 17.03.17 08:49 Сейчас в теме
(1)И что там стало менее актуально?
КД 3 это не замена КД2.
kolya_tlt; sagatel; vovan_victory; artmakc; user774630; smit1c; wowik; Артано; Kesak; red80; OVladius; pm74; DrAku1a; Dementor; serg_infostart; Zeskord; maxdmt; dj_serega; Westbound; +19 Ответить
3. dj_serega 365 17.03.17 09:41 Сейчас в теме
(1) КД3 еще лет 5 будет раскручиваться.
А еще остались 7.7 и нужно делать выгрузку из них... Поэтому... Пока жива 7.7 и будет жить КД2 ;)
13. MaxS 1636 05.04.17 04:45 Сейчас в теме
(3)
Поэтому... Пока жива 7.7 и будет жить КД2
Не факт. )) Уже появилась одна публикация для связи 1С 7.7 через EnterpriseData.
Но всё равно КД2 останется, т.к. возможности безграничны, в отличие от КД3, где ограничен формат.
4. unichkin 1169 17.03.17 10:50 Сейчас в теме
в п.1 лишнее
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
	Отказ = Истина
КонецЕсли;


ВыборкаДанных = РезультатЗапроса.Выгрузить();

Можно сразу:
ВыборкаДанных = Запрос;


п.2
Не понял, зачем вводить буферную переменную, и выгружать результата запроса.

Запросы.Прием.УстановитьПараметр("ПустаяДата", Дата(1,1,1));
Запросы.Прием.УстановитьПараметр("ДатаОкончания",	КонецДня(ДатаОкончания));
ВыборкаДанных =Запросы.Прием;


не нужны никакие отказы при пустом результате. Он если пустой, и так ничего не будет.

в п.5 запрос в цикле + см. п.2

п.6 тяжеловато
ОбъектКоллекции.СчетДт.ПринадлежитЭлементу(ПланыСчетов.Хозрасчетный.РасчетыПоСоциальномуСтрахованию)

п.7 не понял смысла
"При загрузке:
Отказ = ОбъектНайден;"
- т.е. если объект найден, то не обновлять? Там галка есть у ПКО "Не замещать существующие объекты в приемнике..."
п.8 - а как эти объекты уйдут из таблицы регистрации изменений? Их туда и помещать не надо, если они не должны выгружаться.

Почему-то когда дело касается КД люди сразу забывают о том что такое точка. Вообще, все это довольно субъективно.
5. unichkin 1169 17.03.17 11:21 Сейчас в теме
Про п.1 - зачеркнуть, это дубль про п.2
6. d4rkmesa 17.03.17 12:30 Сейчас в теме
Плохо все-таки писать РежимЗаписи = "Проведение" в обработчике, нужно пользоваться механизмом отложенного проведения, либо вынести проведение всех документов отдельно в обработчик "после загрузки данных", хотя для каких-то простых документов сойдет. Остальное имеет право на жизнь, нюансы реализации не так важны в целом.
sagatel; jobkostya1c8; CSiER; +3 Ответить
7. vano-ekt 1175 17.03.17 21:44 Сейчас в теме
в обработчики ПКС/ПВД понапихают запросов, а потом ждут пока обмен час пройдет
Rollam; корум; oleganatolievich; DrAku1a; unichkin; dj_serega; +6 2 Ответить
8. serg_infostart 305 21.03.17 15:19 Сейчас в теме
(7) в ПКС не увидел, что понапихано...
В ПВД оно само собой разумеющееся.

(0) не хватает описания обработчиков Поля поиска.
jobkostya1c8; +1 Ответить
10. Zhilyakovdr 92 22.03.17 11:39 Сейчас в теме
(7) Запросы в ПВД вполне нормальное явление, в ПКС нет.
Гляньте типовые обмены, там и не такое увидите.
jobkostya1c8; Дмитрий74Чел; +2 Ответить
9. Zhilyakovdr 92 22.03.17 11:38 Сейчас в теме
ТекстЗапроса = Запросы.ОтражениеЗарплатыВРеглУчете.Текст;
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Организация",	Данные.Организация);


меняем на

Запрос = Запросы.ОтражениеЗарплатыВРеглУчете;
Запрос.УстановитьПараметр("Организация",	Данные.Организация);


а можно и на
Запросы.ОтражениеЗарплатыВРеглУчете.УстановитьПараметр("Организация",	Данные.Организация);
11. Zhilyakovdr 92 22.03.17 11:42 Сейчас в теме
Все что вы описали в статье можно легко найти в типовых правилах и примерах в самой КД.
Пора потихоньку КД3 пользовать
12. Lem0n 163 04.04.17 23:10 Сейчас в теме
Удобное использование шаблонов обработчиков реализовано в http://infostart.ru/public/398595/ (см. видео с 9:46 и с 16:35),
14. Поручик 4277 15.05.17 11:09 Сейчас в теме
КД 2 ещё долго будет жить, потому что с ней намного легче накидать правила переноса. Попробуйте это сделать быстро с КД 3.
vovan_victory; wowik; jobkostya1c8; lefthander; +4 Ответить
15. q_i 378 16.05.17 15:52 Сейчас в теме
П.10, Вариант 2: какой текст запроса у Запросы.ПоискСотрудника2.Текст?
Есть подозрение, что "Объект.Работники.ЗагрузитьКолонку(Результат, "Сотрудник")" потенциально может загрузить сотрудников в неправильном порядке.
16. vovan_victory 62 30.01.19 10:11 Сейчас в теме
П.5. А зачем в цикле создавать объект запрос?
Для каждого СтрокаТД Из ТаблицаДанных Цикл

	ТаблицаПроводок = СтрокаТД.ОтражениеВУчете;  //1
	
	Для каждого СтрокаТП  Из ТаблицаПроводок Цикл
		
		Если МассивСчетовДТ<>Неопределено И МассивСчетовДТ.Найти(СтрокаТП.СчетДт) <> Неопределено И НЕ СтрокаТП.ПодразделениеДт.Родитель.Пустая() Тогда	//2				
			Запрос = Новый Запрос;


Может лучше:
//Создаем до цикла 1 раз
Запрос = Новый Запрос;

Для каждого СтрокаТД Из ТаблицаДанных Цикл

	ТаблицаПроводок = СтрокаТД.ОтражениеВУчете;  //1
	
	Для каждого СтрокаТП  Из ТаблицаПроводок Цикл
		
		Если МассивСчетовДТ<>Неопределено И МассивСчетовДТ.Найти(СтрокаТП.СчетДт) <> Неопределено И НЕ СтрокаТП.ПодразделениеДт.Родитель.Пустая() Тогда	//2				
		//А в цикле уже устанавливаем текст, параметры и выполняем
                //Да и текст запроса, если не меняется, тоже выносим из цикла.
			Запрос.Текст = Запросы.ПодразделениеОрганизацииРодитель.Текст;
			Запрос.УстановитьПараметр("Ссылка", СтрокаТП.ПодразделениеДт);
			РезультатЗапроса = Запрос.Выполнить();
Показать
17. perepetulichka 574 30.01.19 13:31 Сейчас в теме
(16) Это понятно, пользуюсь таким способом :) Пункт 5 показан просто как один из способов. Спасибо за комментарий!
18. AlexeyK1 14 16.04.19 15:14 Сейчас в теме
Здравствуйте, подскажите пожалуйста.
настраиваю конвертацию между двумя разными "переписанными" конфигурациями(УТ -> WMS) возникла проблема со справочниками.
в источнике
Номенклатура + ЕдиницаИзмерения
переносится в связку
Номенклатура + ЕдиницаИзмерения1 + ЕдиницаИзмерения2 вторая подчиненна первой, а Владелец у них один,
так вот когда переносим новую Номенклатуру не могу придумать как ЕдиницуИзмерения2 подчинить ЕдиницеИзмерения1 ведь на момент прогона ссылки у меня на ЕдиницуИзмерения1 не существует (если прогнать 2 раза "Загрузку", то все пучком, понимаю что это неправильно)
ЕдиницаИзмерения1 и ЕдиницаИзмерения2 переносятся не по ссылке, а создаются
Может кто то сталкивался с подобной проблемой, и есть возможность это побороть?
19. perepetulichka 574 16.04.19 16:31 Сейчас в теме
(18) я так понимаю, если вы из ЕдиницаИзмерения формируете ЕдиницаИзмерения1 и ЕдиницаИзмерения2, то все это делается в одном алгоритме.
Запросом проверяем есть ли объекты в системе (судя по всему ГУИД с источником или у одного элемента или не совпадает совсем, для удобства кстати можно в приёмнике добавить реквизит "ГУИДИсточника" объекту и по нему искать).
Затем если их нет, создаём первый, записываем его и второму Владельцем заполняем ссылку.

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

Или показывайте правила, как вы их создаёте.
20. AlexeyK1 14 17.04.19 10:41 Сейчас в теме
вот в ПКО при выгрузке Номенклатуры делаю выгрузить по правилу сразу создаю 2 ЕдиницыХранения, понимаю что такая ситуация что у меня нету GUID для этих элементов был бы GUID я бы его пихнул в сыль родителя второй ЕдиницыХранения и всё пучком было бы
ВходящиеДанные = Новый Структура;
ВходящиеДанные.Вставить("Владелец", Источник);
ВходящиеДанные.Вставить("Наименование", "Пар");
ВходящиеДанные.Вставить("Код", "0000000001");
ВходящиеДанные.Вставить("Родитель", "");
ВходящиеДанные.Вставить("Коэффициент", 1);
ВходящиеДанные.Вставить("КоэффициентКИС", Источник.абРазмерныйРяд.Количество);
ВходящиеДанные.Вставить("МодельСкладскогоУчета", "001");
ВходящиеДанные.Вставить("АктивнаяОбластьОтбора", "000000001");
ВходящиеДанные.Вставить("ОбластьРазмещения", "000000001");
ВходящиеДанные.Вставить("КлассЕдиницыХранения" ,"715");
ВходящиеДанные.Вставить("ОтборПоДатам" ,"НеВыполнять");
ВходящиеДанные.Вставить("РучноеРазмещение" ,"Истина");
ВыгрузитьПоПравилу(,,ВходящиеДанные,,"усЕдиницыХранения");


ВходящиеДанные1 = Новый Структура;
ВходящиеДанные1.Вставить("Наименование", "Короб(" + Строка(ВходящиеДанные.КоэффициентКИС) + ")");
ВходящиеДанные1.Вставить("Владелец", Источник);
ВходящиеДанные1.Вставить("Родитель",  "0000000001"); //понимаю что тут ссыль должна быть ВходящиеДанные, но какая ? прост вставить 
                                                                                 // ВыгрузитьПоПравилу(,,ВходящиеДанные,,"усЕдиницыХранения");?
ВходящиеДанные1.Вставить("Код", "0000000001");
ВходящиеДанные1.Вставить("Коэффициент", ВходящиеДанные.КоэффициентКИС);
ВходящиеДанные1.Вставить("КоэффициентКИС", ВходящиеДанные.КоэффициентКИС);
ВходящиеДанные1.Вставить("МодельСкладскогоУчета", "001");
ВходящиеДанные1.Вставить("АктивнаяОбластьОтбора", "000000001");
ВходящиеДанные1.Вставить("ОбластьРазмещения", "000000001");
ВходящиеДанные1.Вставить("КлассЕдиницыХранения" ,"778");
ВходящиеДанные1.Вставить("ОтборПоДатам" ,"НеВыполнять");
ВходящиеДанные1.Вставить("РучноеРазмещение" ,"Истина");

ВыгрузитьПоПравилу(,,ВходящиеДанные1,,"усЕдиницыХраненияКороба");

Показать


Сейчас понимаю что первую ЕдиницуХранения можно было привязать к ЕдиницеИзмерения в базе Источнике и его GUID юзать... но поезд ушел....
теперь походу придётся правила переписывать и завязываться на ЕдиницуИзмерения для первой ЕдиницыХранения... с проверкой на существование Единицы хранения старыми правилами
21. perepetulichka 574 17.04.19 11:51 Сейчас в теме
(20) но смотрите, вы перед выгрузкой по правилу выгружаете ЕдиницаИзмерения1 и ЕдиницаИзмерения2, а затем самим ПКО формируете Источник.
Следовательно в файле у вас сначала ЕдиницаИзмерения1 и ЕдиницаИзмерения2, а потом сама Номенклатура (владелец), система все записывает последовательно.
Как насчет переместить ваши структуры в модуль "После выгрузки"?
22. perepetulichka 574 17.04.19 11:55 Сейчас в теме
(21) правильнее в модуль "После выгрузки в файл".

Условия возникновения события
Событие выполняется после выгрузки объекта в файл обмена. Может быть использован для выгрузки дополнительной информации по выгруженному объекту в файл обмена. При этом информация будет записана в файл обмена после выгруженного объекта.
23. AlexeyK1 14 17.04.19 14:47 Сейчас в теме
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Москва
Полный день

Консультант-аналитик 1С
Москва
Полный день

Консультант ERP-систем
Москва
Временный (на проект)

Бизнес-аналитик 1С
Москва
зарплата от 90 000 руб. до 150 000 руб.
Полный день

Программист 1С
Москва
зарплата от 140 000 руб.
Полный день