Добрый день, Коллеги!
Стоит задача перейти из доработанной конфигурации 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");
(20)
1) Перенести организацию по строке можно так, например:
- создать новое ПКО, где источник - пустой, приемник - Справочник.Организации
- в этом ПКО создать единственное ПКС, где свойство приемника - Наименование, установить поиск по этому свойству.
- в этом ПКС прописать в обработчике
Значение = Источник;
- в документе для свойства Организация прописать в обработчике
Значение = "ООО ""Рога и копыта""";
- в документе для свойства Организация установить ПКО, созданное ранее.
2) По скриншотам видно, что вы не установили явно ПКО для ПКС в ПКО документа в табличной части. По крайней мере для номенклатуры и счета точно.
3) И все-таки рекомендую передавать СЗ в правило первым параметром, как источник. Тогда код в обработчиках ПКГС не нужен.
Для выгрузки из 7.7 "программно" генерируемого документа вам нужно выгружать список значений, а не ТЗ.
При этом представления значений СЗ - это имена свойств или групп свойств, ну а значения, соответственно, - это значения)
Спасибо за информацию!
Я ведь так в первый раз и сделал (в интернете был описан именно список значений).
Но при отладке внешнего модуля для 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 записей справочников :(
Нужно искать дальше...
(4) Не забывайте, что в случае 7.7, при изменении чего-либо в правилах на стороне выгрузки, мало заменить xml с правилами, надо обновить еще модуль в v77exp (модуль выгрузки). Это часто забывают делать)
(5) в смысше, обновлять? каким образом?
Имеете в виду перезапускать модуль в 1С 7.7?
Или перезагружать правила обмена слева? Так ведь список правил не менялся.
(7) В КД при сохранении правил в случае, когда источник - это конфигурация на 7.7, помимо выгрузки правил нужно выгружать модуль выгрузки. Там отдельное поле в диалоге сохранения правил. Получите текстовый файл. Содержимым этого файла нужно заменить модуль формы обработки v77exp.ert
+(7) это требуется, если на стороне источника выполняется какой-то нестандартный код, т.е. есть код в любых обработчиках, относящихся к выгрузке (в ПВД, в ПКО, в ПКС)
+ СЗ нужно передавать первым параметром в ВыгрузитьПоПравилу. Как Источник.
либо в ПКО документа ввода остатков ставить флажок "Получить из входящих данных", если СЗ передается не как Источник
Ну либо ошибка в формировании ТЗ,
либо ошибка в настройке правил.
Первое легко проверить отладкой кода из ПВД любым удобным способом. Хоть вставкой отладочного сообщить() с количеством строк в ТЗ после ее заполнения.
Чтобы проверить второе, кидайте:
1) Код из обработчика ПВД;
2) Скриншот настроек ПКС в ПКО для документа ввода остатков;
3) Скриншот настроек ПКС в ПКГС табличной части документа ввода остатков.
БИ.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока БИ.ПолучитьСубконто(ВидыСубконто.Номенклатура)=1 Цикл
БИ.ВыбратьСубконто(ВидыСубконто.МестаХранения);
Пока БИ.ПолучитьСубконто(ВидыСубконто.МестаХранения)=1 Цикл
ТЗ.НоваяСтрока();
ТЗ.СчетУчета=БИ.Счет;
ТЗ.Склад=БИ.Субконто(ВидыСубконто.МестаХранения);
ТЗ.Номенклатура=БИ.Субконто(ВидыСубконто.Номенклатура);
ТЗ.Количество=БИ.СКД("К");
ТЗ.Сумма=БИ.СКД("С");
КонецЦикла;
КонецЦикла;
По мне так проще передавать СтруктураДокумента первым параметром (в ПКО документа это будет Источник). Только при этом надо в ПКО документа убрать флажки "Получить из входящих данных" у ПКС.
2) На скриншоте не видно этой колонки, но надеюсь, что в ПКО документа для непримитивных свойств в ПКС указано ПКО.
3) Для полноты картины скриншот, где видно свойства шапки документы и их ПКС (аналогично тому, который есть для ПКГС, только для шапки, а не для ТЧ).
Я допустил, что причина в следующем:
В документе ВводНачальныхОстатков не заполнены обязательные реквизиты: РазделУчета и Организация.
Нужно в правилах добитьтся, чтобы значения заполнялись автоматически при создании документа.
Организация = "Рога и Копыта"
РазделУчета = Перечисление.РазделыУчетаДляВводаОстатков.Товары
Для этого создал ПКС для правила "ВводНачальныхОстатков41" и указал в них "Перед выгрузкой"
РазделУчета: Значение="Товары";
Организация: Значение="Рога и копыта";
Для обоих ПКС установлен флажок "Получать значения из входящих данных".
Выгрузил данные из 7.7, загрузил в 8.3.
В результате в базе 8.3 документ ВводНачальныхОстатков вообще не создался.
А пробовали поснимать галочки "получить из входящих данных" на реквизитах ТЧ "ТоварыНаСкладе" и для каждого из них прописать "Значение = ОбъектКоллекции.*" (например, для первого реквизита ТЧ, "Значение = ОбъектКоллекции.Номенклатура") ?
Дело в том, что ВходящиеДанные - это одна из переменных контекста ПКО, если её не задать явно, там и будет Неопределено, наск.я помню; получать из входящих данных строчки таблицы - я вообще не представляю, как.
Последовал Вашему совету. Получившиеся правила на скриншоте.
Спасибо, большой прогресс!
В восьмёрке создан документ "Ввод начальных остатков", в котором добавлены 2 235 позиций.
Однако, номенклатура и склады в позициях не выбраны :(
В позициях заполнены только суммы...
Как можно предусмотреть дополнительную конвертацию справочников при загрузке докумета "Ввод начальных остатков"?
Справочник номенклатуры и справочник складов я загружаю в восьмёрку перед загрузкой документа.
Коды и наименования в справочниках 7.7 и 8.3 совпадают. Уникальность кода - во всём справочнике.
Что же нужно, чтобы программа поставила в соответствие элементы Номенклатуры 7.7 и загруженные элементы номенклатуры 8.3?
Также не заполнена организация, хотя я в ПКС Организация "Перед выгрузкой" указал Значение="Рога и Копыта"
На просторах интернета обещали, что строка должна автоматически сконвертироваться в элемент справочника Организации.
Коллеги, День добрый!
Оказалось, что не всё так плохо, как я написал.
В документе "Ввод начальных остатков" не заполняется реквизит "Счет учета", поэтому Номенклатура и Склад не отображаются. Когда в позиции вручную выбираю счет учета = 41.1, появляются заполненные Номенклатура и Склад. Вопрос о конвертации справочников снимается.
Другой вопрос - почему не заполняется счет учета?
В правиле выгрузки "Остатки41" ТЗ заполняется и счетом и Складом и Номенклатурой. Проверил.
Настроены одинаковые ПКС для реквизитов Номенклатура и СчетУчета. (скрины)
Тем не менее счет не выбирается.
Счет не заполняется даже в том случае, когда в ПКС указываю
Значение = СчетПоКоду("41.1")
Добавил правило конвертации объектов Планы счетов / Хозрасчетный, для него создал правило конвертации значений: 41.1 - 41.1.
Не помогает. Счет учета не заполняется :(
Осталось решить последнюю загадку, больше не буду тянуть резину :)
(20)
1) Перенести организацию по строке можно так, например:
- создать новое ПКО, где источник - пустой, приемник - Справочник.Организации
- в этом ПКО создать единственное ПКС, где свойство приемника - Наименование, установить поиск по этому свойству.
- в этом ПКС прописать в обработчике
Значение = Источник;
- в документе для свойства Организация прописать в обработчике
Значение = "ООО ""Рога и копыта""";
- в документе для свойства Организация установить ПКО, созданное ранее.
2) По скриншотам видно, что вы не установили явно ПКО для ПКС в ПКО документа в табличной части. По крайней мере для номенклатуры и счета точно.
3) И все-таки рекомендую передавать СЗ в правило первым параметром, как источник. Тогда код в обработчиках ПКГС не нужен.
Перезагрузка. Восстановил вчерашние правила.
(Абыр), следуя Вашему совету настроил загрузку Организации в документ ввода начальных остатков. Спасибо, ОК.
Пока не получается настроить загрузку счета учета 41.1. Счет учата в документе пустой, следовательно Номенклатура и склад не отображается.
Настроил правило ВводНачальныхОстатков41 в ПКС "СчетУчета", но это не помогает.
Коллеги!
Мы таки добились успеха!
Создал ПКО Хозрасчетный, в качестве ПКС добавил соответствия счетов в планах счетов 7.7 и 8.3
Это ПКО указал в свойствах ПКС СчетУчета в таблице документа.
И наконец на выходе получен заполненный документ ввода остатков!
Большое спасибо всем, кто принимал участие в обсуждении.
Надеюсь, что остатки по другим счетам удастся ввести по аналогии. До конца года времени еще много :)
Приз получает (Абыр)! С его помощью удалось решить последние проблемы.
Остался ещё один маленький вопрос-непонятка.
Почему-то после загрузки данных в 1С 8.3 очищается код и наименование счета 41.1
Не могу в правилах КД найти причину.
Можно вручную вернуть информацию, но подозреваю, что потом будут очищаться и другие счета...
Есть мысли, как избежать очистки?
(27) Поставьте в настройках ПКО Хозрасчетный галку "Не замещать существующие объекты в приемнике при загрузке...".
"НеЗамещатьОбъектПриЗагрузке - Булево. По умолчанию - определяется в правилах обмена, но может быть изменено. Если для данного параметра установить значение Истина, то объект идентифицированный при загрузке (т.е. найденный в информационной базе приемнике по значению синхронизирующих полей) не будет изменен/замещен."
(Абыр), в очередной раз выражаю своё огромное "гранд мерси"! Получилось :)
А кто-нибудь может на лету подсказать, как сделать правило, чтобы в загружаемом в 8.3 документе "ВводНачальныхОстатков" установить флаг ОтражатьВБухгалтерскомУчете (тип: Булево) ?
Пробовал в ПКС для реквизита ОтражатьВБухгалтерскомУчете "перед выгрузкой" писать Значение=Да; Не работает. Если писать Значение="Да"; , документ вообще не загружается.
Интересно, а как добиться, чтобы загруженный в 8.3 документ был проведенным?
Пробовал устанавливать в правилах признак Проведен=1.
В этом случае действительно стоит галка о проведении документа, но проводок нет.
Добрый день. Подскажите пжст, а как быть, если счет валютный (авансы в валюте), и нужно получить остатки и в валюте и в рублях? Использую вариант из этой темы, но никак не получу сумму в валюте.
Спасибо.