Конвертация данных 2.1: выгрузка остатков из 1С 7.7

1. G.P. 11 02.12.16 11:41 Сейчас в теме
Добрый день, Коллеги!
Стоит задача перейти из доработанной конфигурации 1С 7.7 Свэй Бухгалтерия на 1С 8.3 Бугалтерия для Беларуси.
Нужно перенести остатки на конец года. С нового года учет будет вестись в 8.3.
Занимаюсь разработкой правил переноса остатков для "Конвертации данных 2.1.8.2"
Перенос справочников настроил, работает без проблем.
Но перенос остатков отказывается работать наотрез.
В информационных сообщениях отображается выгрузка и загрузка 20 000 элементов справочников. Выгрузка остатков вообще не выполняется.
Настройки сделаны в соответствии с инструкциями в интернете.
Опишу на примере остатков 41 счета, посмотрите пжл, где косяк.
Вознаграждение за решение проблемы гарантиирую :)

Создано ПКО "ВводНачальныхОстатков41", объект-источник пустой, объект-приемник- ДокументСсылка.ВводНачальныхОстатков.
Для него заданы ПКС: Дата, Организация, и группа НоменклатураНаСкладе, в которой добавлены ПКС для табличной части: Номенклатура, СчетУчета, Склад, Количество, Сумма
В свойствах ПКО в разделе "После загрузки" задан код для заполнения реквизитов шапки:
Дата=Дата(2016,12,31,0,0,0);
Организация=Справочники.Организации.НайтиПоНаименованию("Рога и Копыта");
Структура ПКС соответствует структуре документа ВводНачальныхОстатков.

Создано правило выгрузки данных "Остатки41", в котором должны выгружаться остатки из 7.7
Способ выгрузки: Произвольный алгоритм
Правило конвертации: ВводНачальныхОстатков41 (ПКО, описанное ранее)
В разделе "Перед обработкой" описан код для 1С 7.7 (структура ТЗ соответствует структуре табличной части документа ВводНачальныхОстатков)

ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("СчетУчета");
ТЗ.НоваяКолонка("Склад");
ТЗ.НоваяКолонка("Номенклатура");
ТЗ.НоваяКолонка("Количество");
ТЗ.НоваяКолонка("Сумма");

Счет=СчетПоКоду("41.1");
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Номенклатура,,1);
БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,,1);
БИ.ВыполнитьЗапрос(ДатаОкончания,ДатаОкончания,Счет);

БИ.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока БИ.ПолучитьСубконто(ВидыСубконто.Номенклатура)=1 Цикл
    БИ.ВыбратьСубконто(ВидыСубконто.МестаХранения);
    Пока БИ.ПолучитьСубконто(ВидыСубконто.МестаХранения)=1 Цикл
        ТЗ.НоваяСтрока();
        ТЗ.СчетУчета=БИ.Счет;
        ТЗ.Склад=БИ.Субконто(ВидыСубконто.МестаХранения);
        ТЗ.Номенклатура=БИ.Субконто(ВидыСубконто.Номенклатура);
        ТЗ.Количество=БИ.СКД("К");
        ТЗ.Сумма=БИ.СКД("С");
    КонецЦикла;    
КонецЦикла;    

ВыгрузитьПоПравилу(,,ТЗ,,"ВводНачальныхОстатков41");
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
21. naa1c 82 05.12.16 10:09 Сейчас в теме +1 $m
(20)
1) Перенести организацию по строке можно так, например:
- создать новое ПКО, где источник - пустой, приемник - Справочник.Организации
- в этом ПКО создать единственное ПКС, где свойство приемника - Наименование, установить поиск по этому свойству.
- в этом ПКС прописать в обработчике
Значение = Источник;
- в документе для свойства Организация прописать в обработчике
Значение = "ООО ""Рога и копыта""";
- в документе для свойства Организация установить ПКО, созданное ранее.
2) По скриншотам видно, что вы не установили явно ПКО для ПКС в ПКО документа в табличной части. По крайней мере для номенклатуры и счета точно.
3) И все-таки рекомендую передавать СЗ в правило первым параметром, как источник. Тогда код в обработчиках ПКГС не нужен.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. G.P. 11 02.12.16 11:44 Сейчас в теме
К слову, код для 7.7, запущенный во внешней обработке для 7.7 работает без ошибок
3. naa1c 82 02.12.16 14:13 Сейчас в теме
Для выгрузки из 7.7 "программно" генерируемого документа вам нужно выгружать список значений, а не ТЗ.
При этом представления значений СЗ - это имена свойств или групп свойств, ну а значения, соответственно, - это значения)

СтруктураДокумента = СоздатьОбъект("СписокЗначений");
СтруктураДокумента.ДобавитьЗначение(ВашаДата, "Дата");
СтруктураДокумента.ДобавитьЗначение(ТЗ, "ИмяТабличнойЧастиДокументаВводаОстатковВ83");

А уже СтруктураДокумента передавать в ВыгрузитьПоПравилу()
4. G.P. 11 02.12.16 15:39 Сейчас в теме
(3)

СтруктураДокумента = СоздатьОбъект("СписокЗначений");
СтруктураДокумента.ДобавитьЗначение(ВашаДата, "Дата");
СтруктураДокумента.ДобавитьЗначение(ТЗ, "ИмяТабличнойЧастиДокументаВводаОстатковВ83");


Спасибо за информацию!
Я ведь так в первый раз и сделал (в интернете был описан именно список значений).
Но при отладке внешнего модуля для 7.7 с кодом из "Перед обработкой", обнаружил, что семерке не нравятся описанные структуры, поэтому решил заменить СЗ на ТЗ.

Снова исправил код в КД, сохранил новые правила в xml и запустил в семерке v77exp.ert...

Новый модуль "Перед обработкой" правила выгрузки "Остатки41"
ДатаВводаОстатков=Дата(2016,12,31,0,0,0);
Организация=Справочники.Организации.НайтиПоНаименованию("Атлант-М Британия");

ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("СчетУчета");
ТЗ.НоваяКолонка("Склад");
ТЗ.НоваяКолонка("Номенклатура");
ТЗ.НоваяКолонка("Количество");
ТЗ.НоваяКолонка("Сумма");

Счет=СчетПоКоду("41.1");
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Номенклатура,,1);
БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,,1);
БИ.ВыполнитьЗапрос(ДатаОкончания,ДатаОкончания,Счет);

БИ.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока БИ.ПолучитьСубконто(ВидыСубконто.Номенклатура)=1 Цикл
    БИ.ВыбратьСубконто(ВидыСубконто.МестаХранения);
    Пока БИ.ПолучитьСубконто(ВидыСубконто.МестаХранения)=1 Цикл
        ТЗ.НоваяСтрока();
        ТЗ.СчетУчета=БИ.Счет;
        ТЗ.Склад=БИ.Субконто(ВидыСубконто.МестаХранения);
        ТЗ.Номенклатура=БИ.Субконто(ВидыСубконто.Номенклатура);
        ТЗ.Количество=БИ.СКД("К");
        ТЗ.Сумма=БИ.СКД("С");
    КонецЦикла;    
КонецЦикла;    


СтруктураДокумента = СоздатьОбъект("СписокЗначений");
СтруктураДокумента.ДобавитьЗначение(ДатаВводаОстатков, "Дата");
СтруктураДокумента.ДобавитьЗначение(Организация, "Организация");
СтруктураДокумента.ДобавитьЗначение(ТЗ, "НоменклатураНаСкладе"); 

ВыгрузитьПоПравилу(,,СтруктураДокумента,,"ВводНачальныхОстатков41");

Показать


Обработка 7.7 подробно рассказывает о каждом выгруженном объекте и в конце двумя строками обмолвилась об остатках:
Начало обработки правила выгрузки данных:  Остатки
Начало обработки правила выгрузки данных:  Остатки41



Но обработка 8.3 V8Exchan83.epf ничего об остатках не сказала...,
Загружены только те же самые 20000 записей справочников :(
Нужно искать дальше...
5. naa1c 82 02.12.16 15:43 Сейчас в теме
(4) Не забывайте, что в случае 7.7, при изменении чего-либо в правилах на стороне выгрузки, мало заменить xml с правилами, надо обновить еще модуль в v77exp (модуль выгрузки). Это часто забывают делать)
7. G.P. 11 02.12.16 15:50 Сейчас в теме
(5) в смысше, обновлять? каким образом?
Имеете в виду перезапускать модуль в 1С 7.7?
Или перезагружать правила обмена слева? Так ведь список правил не менялся.
8. naa1c 82 02.12.16 15:58 Сейчас в теме
(7) В КД при сохранении правил в случае, когда источник - это конфигурация на 7.7, помимо выгрузки правил нужно выгружать модуль выгрузки. Там отдельное поле в диалоге сохранения правил. Получите текстовый файл. Содержимым этого файла нужно заменить модуль формы обработки v77exp.ert
10. G.P. 11 02.12.16 17:11 Сейчас в теме
(8)
Не замечал ранее такой функции!
Сохранил текст модуля, заменил текст в обработке
Уже ближе к сути!

В конце обработка сообщила три заветных строки
Начало обработки правила выгрузки данных:  Остатки
Начало обработки правила выгрузки данных:  Остатки41
Конвертация объекта или получение ссылки:    ()


Ура, в 8.3 создался документ ВводНачальныхОстатков!
Правда, пустой к сожалению.
Почему-то табличная часть не заполнилась из ТЗ.

Осталось разобраться с последним косячком!
9. naa1c 82 02.12.16 16:07 Сейчас в теме
+(7) это требуется, если на стороне источника выполняется какой-то нестандартный код, т.е. есть код в любых обработчиках, относящихся к выгрузке (в ПВД, в ПКО, в ПКС)
6. naa1c 82 02.12.16 15:48 Сейчас в теме
+ СЗ нужно передавать первым параметром в ВыгрузитьПоПравилу. Как Источник.
либо в ПКО документа ввода остатков ставить флажок "Получить из входящих данных", если СЗ передается не как Источник
11. naa1c 82 02.12.16 17:24 Сейчас в теме
Ну либо ошибка в формировании ТЗ,
либо ошибка в настройке правил.

Первое легко проверить отладкой кода из ПВД любым удобным способом. Хоть вставкой отладочного сообщить() с количеством строк в ТЗ после ее заполнения.

Чтобы проверить второе, кидайте:
1) Код из обработчика ПВД;
2) Скриншот настроек ПКС в ПКО для документа ввода остатков;
3) Скриншот настроек ПКС в ПКГС табличной части документа ввода остатков.
13. G.P. 11 02.12.16 18:26 Сейчас в теме
(11)
либо ошибка в формировании ТЗ,
либо ошибка в настройке правил.

Первое легко проверить отладкой кода из ПВД любым удобным способом. Хоть вставкой отладочного сообщить() с количеством строк в ТЗ после ее заполнения.


Спасибо за свежий взгляд!
В формировании ТЗ нет ошибки. Более 2 тысяч строк ТЗ выводятся на печать при вставке кода во внешний отчет 7.7

По поводу второго:
Скриншоты прикрепил. Достаточно ли их?

Код из ПВД "Перед обработкой"

ДатаВводаОстатков=Дата(2016,12,31);

ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("СчетУчета");
ТЗ.НоваяКолонка("Склад");
ТЗ.НоваяКолонка("Номенклатура");
ТЗ.НоваяКолонка("Количество");
ТЗ.НоваяКолонка("Сумма");

Счет=СчетПоКоду("41.1");
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Номенклатура,,1);
БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,,1);
БИ.ВыполнитьЗапрос(ДатаОкончания,ДатаОкончания,Счет);

БИ.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока БИ.ПолучитьСубконто(ВидыСубконто.Номенклатура)=1 Цикл
БИ.ВыбратьСубконто(ВидыСубконто.МестаХранения);
Пока БИ.ПолучитьСубконто(ВидыСубконто.МестаХранения)=1 Цикл
ТЗ.НоваяСтрока();
ТЗ.СчетУчета=БИ.Счет;
ТЗ.Склад=БИ.Субконто(ВидыСубконто.МестаХранения);
ТЗ.Номенклатура=БИ.Субконто(ВидыСубконто.Номенклатура);
ТЗ.Количество=БИ.СКД("К");
ТЗ.Сумма=БИ.СКД("С");
КонецЦикла;
КонецЦикла;


СтруктураДокумента = СоздатьОбъект("СписокЗначений");
СтруктураДокумента.ДобавитьЗначение(ДатаВводаОстатков, "Дата");
СтруктураДокумента.ДобавитьЗначение(ТЗ, "НоменклатураНаСкладе");

ВыгрузитьПоПравилу(,,СтруктураДокумента,,"ВводНачальныхОстатков41");
Прикрепленные файлы:
16. naa1c 82 02.12.16 19:48 Сейчас в теме
(13)
1) Вы неправильно используете ВыгрузитьПоПравилу()
http://infostart.ru/public/402469/

По мне так проще передавать СтруктураДокумента первым параметром (в ПКО документа это будет Источник). Только при этом надо в ПКО документа убрать флажки "Получить из входящих данных" у ПКС.

2) На скриншоте не видно этой колонки, но надеюсь, что в ПКО документа для непримитивных свойств в ПКС указано ПКО.

3) Для полноты картины скриншот, где видно свойства шапки документы и их ПКС (аналогично тому, который есть для ПКГС, только для шапки, а не для ТЧ).
17. naa1c 82 02.12.16 19:51 Сейчас в теме
(16) А вру, с использованием ВыгрузитьПоПравилу() всё ок.
18. G.P. 11 04.12.16 15:30 Сейчас в теме
(16)
скриншот, где видно свойства шапки документы и их ПКС

Прикрепляю скриншот с реквизитами шарки и ПКС первого реквизита Дата
Достаточно ли этой этой информации?
Прикрепленные файлы:
12. G.P. 11 02.12.16 18:12 Сейчас в теме
Я допустил, что причина в следующем:
В документе ВводНачальныхОстатков не заполнены обязательные реквизиты: РазделУчета и Организация.
Нужно в правилах добитьтся, чтобы значения заполнялись автоматически при создании документа.
Организация = "Рога и Копыта"
РазделУчета = Перечисление.РазделыУчетаДляВводаОстатков.Товары
Для этого создал ПКС для правила "ВводНачальныхОстатков41" и указал в них "Перед выгрузкой"
РазделУчета: Значение="Товары";
Организация: Значение="Рога и копыта";
Для обоих ПКС установлен флажок "Получать значения из входящих данных".

Выгрузил данные из 7.7, загрузил в 8.3.
В результате в базе 8.3 документ ВводНачальныхОстатков вообще не создался.

Обработка V8EXCHAN83.УЗА кратко написала:

Загрузка объекта № 20 165
ИмяПКО = ВводНачальныхОстатков41
ТипОбъекта = Ввод начальных остатков

На этом всё. Где копать?
Как установить фиксированные начальные значения реквизитов загружаемого в 8.3 документа?
14. пользователь 02.12.16 18:27
Сообщение было скрыто модератором.
...
15. uncle_Vasya 02.12.16 19:44 Сейчас в теме
А пробовали поснимать галочки "получить из входящих данных" на реквизитах ТЧ "ТоварыНаСкладе" и для каждого из них прописать "Значение = ОбъектКоллекции.*" (например, для первого реквизита ТЧ, "Значение = ОбъектКоллекции.Номенклатура") ?
Дело в том, что ВходящиеДанные - это одна из переменных контекста ПКО, если её не задать явно, там и будет Неопределено, наск.я помню; получать из входящих данных строчки таблицы - я вообще не представляю, как.
19. G.P. 11 04.12.16 17:07 Сейчас в теме
(15)
Значение = ОбъектКоллекции.Номенклатура

Последовал Вашему совету. Получившиеся правила на скриншоте.

Спасибо, большой прогресс!
В восьмёрке создан документ "Ввод начальных остатков", в котором добавлены 2 235 позиций.
Однако, номенклатура и склады в позициях не выбраны :(
В позициях заполнены только суммы...
Как можно предусмотреть дополнительную конвертацию справочников при загрузке докумета "Ввод начальных остатков"?
Справочник номенклатуры и справочник складов я загружаю в восьмёрку перед загрузкой документа.
Коды и наименования в справочниках 7.7 и 8.3 совпадают. Уникальность кода - во всём справочнике.
Что же нужно, чтобы программа поставила в соответствие элементы Номенклатуры 7.7 и загруженные элементы номенклатуры 8.3?

Также не заполнена организация, хотя я в ПКС Организация "Перед выгрузкой" указал Значение="Рога и Копыта"
На просторах интернета обещали, что строка должна автоматически сконвертироваться в элемент справочника Организации.
Прикрепленные файлы:
20. G.P. 11 05.12.16 09:25 Сейчас в теме
Коллеги, День добрый!
Оказалось, что не всё так плохо, как я написал.
В документе "Ввод начальных остатков" не заполняется реквизит "Счет учета", поэтому Номенклатура и Склад не отображаются. Когда в позиции вручную выбираю счет учета = 41.1, появляются заполненные Номенклатура и Склад. Вопрос о конвертации справочников снимается.
Другой вопрос - почему не заполняется счет учета?
В правиле выгрузки "Остатки41" ТЗ заполняется и счетом и Складом и Номенклатурой. Проверил.
ТЗ.НоваяСтрока();
        ТЗ.СчетУчета=БИ.Счет;
        ТЗ.Склад=БИ.Субконто(ВидыСубконто.МестаХранения);
        ТЗ.Номенклатура=БИ.Субконто(ВидыСубконто.Номенклатура);
        ТЗ.Количество=БИ.СКД("К");
        ТЗ.Сумма=БИ.СКД("С");


Настроены одинаковые ПКС для реквизитов Номенклатура и СчетУчета. (скрины)
Тем не менее счет не выбирается.
Счет не заполняется даже в том случае, когда в ПКС указываю
Значение = СчетПоКоду("41.1")
Добавил правило конвертации объектов Планы счетов / Хозрасчетный, для него создал правило конвертации значений: 41.1 - 41.1.
Не помогает. Счет учета не заполняется :(

Осталось решить последнюю загадку, больше не буду тянуть резину :)
Прикрепленные файлы:
21. naa1c 82 05.12.16 10:09 Сейчас в теме +1 $m
(20)
1) Перенести организацию по строке можно так, например:
- создать новое ПКО, где источник - пустой, приемник - Справочник.Организации
- в этом ПКО создать единственное ПКС, где свойство приемника - Наименование, установить поиск по этому свойству.
- в этом ПКС прописать в обработчике
Значение = Источник;
- в документе для свойства Организация прописать в обработчике
Значение = "ООО ""Рога и копыта""";
- в документе для свойства Организация установить ПКО, созданное ранее.
2) По скриншотам видно, что вы не установили явно ПКО для ПКС в ПКО документа в табличной части. По крайней мере для номенклатуры и счета точно.
3) И все-таки рекомендую передавать СЗ в правило первым параметром, как источник. Тогда код в обработчиках ПКГС не нужен.
22. G.P. 11 05.12.16 10:57 Сейчас в теме +1 $m
(21)
ПКО, где источник - пустой, приемник - Справочник.Организации

После добавления ПКО "Организации", к сожалению, v8exchan83 перестал работать с сообщением "Ошибка формата файла обмена"
23. naa1c 82 05.12.16 11:02 Сейчас в теме
(22) Вероятно, забыли заменить модуль выгрузки в v77exp
24. G.P. 11 05.12.16 11:35 Сейчас в теме
(23)
Вероятно, забыли заменить модуль выгрузки в v77exp

Это теперь делаю исправно :)
Восстановлю вчерашнюю резервную копию, т.к. никакие откаты в правилах не решают проблемы.
25. G.P. 11 05.12.16 17:05 Сейчас в теме
Перезагрузка. Восстановил вчерашние правила.
(Абыр), следуя Вашему совету настроил загрузку Организации в документ ввода начальных остатков. Спасибо, ОК.
Пока не получается настроить загрузку счета учета 41.1. Счет учата в документе пустой, следовательно Номенклатура и склад не отображается.
Настроил правило ВводНачальныхОстатков41 в ПКС "СчетУчета", но это не помогает.
Прикрепленные файлы:
26. G.P. 11 05.12.16 17:46 Сейчас в теме
Коллеги!
Мы таки добились успеха!
Создал ПКО Хозрасчетный, в качестве ПКС добавил соответствия счетов в планах счетов 7.7 и 8.3
Это ПКО указал в свойствах ПКС СчетУчета в таблице документа.
И наконец на выходе получен заполненный документ ввода остатков!

Большое спасибо всем, кто принимал участие в обсуждении.
Надеюсь, что остатки по другим счетам удастся ввести по аналогии. До конца года времени еще много :)
Приз получает (Абыр)! С его помощью удалось решить последние проблемы.
Прикрепленные файлы:
27. G.P. 11 06.12.16 10:08 Сейчас в теме
Остался ещё один маленький вопрос-непонятка.
Почему-то после загрузки данных в 1С 8.3 очищается код и наименование счета 41.1
Не могу в правилах КД найти причину.
Можно вручную вернуть информацию, но подозреваю, что потом будут очищаться и другие счета...
Есть мысли, как избежать очистки?
Прикрепленные файлы:
28. naa1c 82 06.12.16 10:43 Сейчас в теме
(27) Поставьте в настройках ПКО Хозрасчетный галку "Не замещать существующие объекты в приемнике при загрузке...".
"НеЗамещатьОбъектПриЗагрузке - Булево. По умолчанию - определяется в правилах обмена, но может быть изменено. Если для данного параметра установить значение Истина, то объект идентифицированный при загрузке (т.е. найденный в информационной базе приемнике по значению синхронизирующих полей) не будет изменен/замещен."
29. G.P. 11 06.12.16 16:36 Сейчас в теме
(Абыр), в очередной раз выражаю своё огромное "гранд мерси"! Получилось :)

А кто-нибудь может на лету подсказать, как сделать правило, чтобы в загружаемом в 8.3 документе "ВводНачальныхОстатков" установить флаг ОтражатьВБухгалтерскомУчете (тип: Булево) ?

Пробовал в ПКС для реквизита ОтражатьВБухгалтерскомУчете "перед выгрузкой" писать Значение=Да; Не работает. Если писать Значение="Да"; , документ вообще не загружается.
30. odin777 06.12.16 16:42 Сейчас в теме
(29) попробуйте использовать числовые значения, например: Значение = 1;, или не числовые , например Значение = "Истина"
31. G.P. 11 06.12.16 18:13 Сейчас в теме
Иван, спасибо, 1 помогла.
32. G.P. 11 06.12.16 18:45 Сейчас в теме
Интересно, а как добиться, чтобы загруженный в 8.3 документ был проведенным?
Пробовал устанавливать в правилах признак Проведен=1.
В этом случае действительно стоит галка о проведении документа, но проводок нет.
33. G.P. 11 06.12.16 22:00 Сейчас в теме
(32)
чтобы загруженный в 8.3 документ был проведенным

Разобрался!
В ПКО документа "перед загрузкой" нужно написать
РежимЗаписи = "Проведение";
34. tani6e4ka 23.12.24 18:24 Сейчас в теме
Добрый день. Подскажите пжст, а как быть, если счет валютный (авансы в валюте), и нужно получить остатки и в валюте и в рублях? Использую вариант из этой темы, но никак не получу сумму в валюте.
Спасибо.
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот