Версия для печати темы (https://pro1c.org.ua/index.php?s=f0b801c7bc7771b553f28d85c2576958&showtopic=64017)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Как програмно перепровести Реализацию в бух. учёте

Автор: Yevhenii_S 14.01.21, 12:45

1С:Предприятие 8.3 (8.3.17.1549)
конфа: "Управление торговым предприятием для Украины", редакция 1.2.

Всем привет.
Есть конфа УТП, использовалась только для управленческого учёта
теперь её нужно перевести на бух. учёт

Мой алгоритм: беру запросом документы без галки в реквизите ОтражатьВБухгалтерскомУчете, получаю Объект каждого документа, ставлю галку "ОтражатьВБухгалтерскомУчете"
далее нужно проверить шапку документа, использую процедуру из общего модуля Заполнение документов

ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(докОбьект, докОбьект.мСтруктураПараметровДляПолученияДоговора);


далее хочу проверить заполены ли счета учёта в Товарах и Услугах, выполняю процедуру из самого модуля документа
докОбьект.ЗаполнитьСчетаУчетаВТабЧасти(докОбьект.Товары        , "Товары"        , Истина, Истина);
      докОбьект.ЗаполнитьСчетаУчетаВТабЧастиУслуги(Истина, Истина);
        
          докОбьект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);


и при проведении получаю ошибку:

Проведение документа "Реализация товаров и услуг НО000000004 от 27.06.2011 12:00:00":
В строке номер "1" табличной части "Товары": Не заполнено значение реквизита "Счет учета (БУ)"!
В строке номер "1" табличной части "Товары": Не заполнено значение реквизита "Схема реализации"!
В строке номер "1" табличной части "Товары": Не заполнено значение реквизита "Налоговое назначение (доходов и затрат) "!
В строке номер "1" табличной части "Товары": Не заполнено значение реквизита "Налоговое назначение (НДС)"!

Беру не ту процедуру? или алгоритм действий не правильный?
буду рад советам и критике) 439.gif

Автор: sava1 14.01.21, 12:54

Смотрите регистр СчетаУчетаНоменклатуры

Автор: One 14.01.21, 14:16

попробуйТЕ в проблемном документе вручную установить галку БУ и выбрать повторно номенклатуру, если поле СчетБУ останется пустым, тогда как сказал sava1 смотриТЕ СчетаУчетаНоменклатуры


 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 1
 

Автор: Yevhenii_S 14.01.21, 16:06

One @ Сегодня, 14:16 * ,
играюсь на демке, в доках были предварительно сняты галки "проводить в бух. учёте" , очищены счета бухгалтерского и налогового учёта и перепроведены
т.е. я преднамерено получил документы только с управленческими проводками, для того что б найти их запросом и обработать, если ставлю вручную в каждом документе галку "в бух. учёте" то всё проводиться хорошо,
регистр СчетаУчетаНоменклатуры тоже заполнен



Автор: DartRomanius 14.01.21, 16:30

Счета учета и прочая информация для бух.учета устанавливается в форме если что.
Смотрите в эту сторону.

А то что вы предлагали как раз на форме и делается, а вам надо самому заполнять документ-объект.

Автор: sava1 14.01.21, 17:08

Цитата(DartRomanius @ 14.01.21, 16:30) *
Счета учета и прочая информация для бух.учета устанавливается в форме если что.


Вы модуль объекта видели ?

Автор: One 14.01.21, 17:29

Цитата( @ 14.01.21, 12:45) *
ставлю галку "ОтражатьВБухгалтерскомУчете"


После этого записываете документ и только потом вызываете ЗаполнитьСчетаУчетаВТабЧасти, да?

Автор: DartRomanius 14.01.21, 20:41

sava1 @ Сегодня, 18:08 * ,

Да.
Смысл что плясать надо от формы, и адаптировать под программный метод. )

Автор: One 14.01.21, 21:53

DartRomanius @ Сегодня, 20:41 * ,

Я бы перенёс в обработку функции из события при установке флажка



        СчетаУчета = УправлениеВзаиморасчетами.ПолучитьСчетаРасчетовСКонтрагентом(Организация, Контрагент, ДоговорКонтрагента);
                
        Если ДоговорКонтрагента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером Тогда
            СчетУчетаРасчетовСКонтрагентом = СчетаУчета.СчетРасчетовПокупателя;
            СчетУчетаРасчетовПоАвансам     = СчетаУчета.СчетАвансовПокупателя;
        ИначеЕсли ДоговорКонтрагента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.Бартерный Тогда
            СчетУчетаРасчетовСКонтрагентом = СчетаУчета.СчетРасчетовПокупателяПриБартере;
            СчетУчетаРасчетовПоАвансам     = СчетаУчета.СчетАвансовПокупателяПриБартере;
        Иначе
            СчетУчетаРасчетовСКонтрагентом = СчетаУчета.СчетРасчетовПокупателя;
            СчетУчетаРасчетовПоАвансам     = СчетаУчета.СчетАвансовПокупателя;
        КонецЕсли;
                
        СчетУчетаРасчетовПоТаре          = СчетаУчета.СчетУчетаТарыПокупателя;
        СчетУчетаРасчетовПоТареПоАвансам = СчетаУчета.СчетАвансовПоТареПокупателя;
        СчетУчетаНДС                 = СчетаУчета.СчетУчетаНДСПродаж;
        СчетУчетаНДСПодтвержденный  = СчетаУчета.СчетУчетаНДСПродажПодтвержденный;
        
        // обработка счетов НУ в ТЧ
        Если Товары.Количество() + ВозвратнаяТара.Количество() + Услуги.Количество() > 0 Тогда                
            ЗаполнитьСчетаУчетаВТабЧасти(Товары        , "Товары"        , ОтражатьВБухгалтерскомУчете, ОтражатьВБухгалтерскомУчете);
            ЗаполнитьСчетаУчетаВТабЧасти(ВозвратнаяТара, "ВозвратнаяТара", ОтражатьВБухгалтерскомУчете, ОтражатьВБухгалтерскомУчете);
            ЗаполнитьСчетаУчетаВТабЧастиУслуги(ОтражатьВБухгалтерскомУчете, ОтражатьВБухгалтерскомУчете);
        КонецЕсли;

Автор: Yevhenii_S 15.01.21, 12:19

One @ Вчера, 17:29 * ,

Цитата(One @ 14.01.21, 17:29) *
После этого записываете документ и только потом вызываете ЗаполнитьСчетаУчетаВТабЧасти, да?

Сначала не записывал, сейчас попробовал записать сразу после галки, но результата не дало, при проведении те же ошибки

Цитата(One @ 14.01.21, 21:53) *
Я бы перенёс в обработку функции из события при установке флажка


Дошёл я и до этого, перенёс всё, счета (как реквизиты документа) заполняються так как нужно, а дальше при отработке процедуры
ЗаполнитьСчетаУчетаВТабЧасти(Товары        , "Товары"        , ОтражатьВБухгалтерскомУчете, ОтражатьВБухгалтерскомУчете);


не получает структуру "СчетаУчёта" про переборе построчно товаров в следующей процедуре

// Заполняет счета БУ и НУ в строке табличной части
//
Процедура ЗаполнитьСчетаУчетаВСтрокеТабЧасти(СтрокаТЧ, ИмяТабЧасти, ЗаполнятьБУ, ЗаполнятьНУ) Экспорт

    СчетаУчета     = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, СтрокаТЧ.Номенклатура, ?(мУказаниеСкладовВТЧ, СтрокаТЧ.Склад, Склад));
    ЭтоКомиссия    = (ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия
                       И ДоговорКонтрагента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером);
    МетаданныеДока = Метаданные();

    ЗаполнитьСчетаБУ(СтрокаТЧ, ИмяТабЧасти, СчетаУчета, ЗаполнятьБУ, ЭтоКомиссия, МетаданныеДока);
    ЗаполнитьСчетаНУ(СтрокаТЧ, ИмяТабЧасти, СчетаУчета, ЗаполнятьНУ, ЭтоКомиссия, МетаданныеДока);

КонецПроцедуры // ЗаполнитьСчетаУчетаВСтрокеТабЧасти()


реристр "СчетаУчетаНоменклатуры" заполнен


Автор: One 15.01.21, 12:56

Цитата(Yevhenii_S @ 15.01.21, 12:19) *
не получает структуру "СчетаУчёта" про переборе построчно товаров в следующей процедуре


Это Ваш код в Вашей обработке?

Переменные Организация, мУказаниеСкладовВТЧ заполнены?

Выложите полный код Вашей обработки.

Автор: Yevhenii_S 15.01.21, 13:57

Цитата(One @ 15.01.21, 12:56) *
Это Ваш код в Вашей обработке?


это код из модуля обьекта документа Реализация, до этой процедуры я дошел отладчиком, и увидел что она не возвращает "СчетаУчёта"
в обработке я вызываю только процедуры события при установке флажка, и то не все

Процедура ПроверкаДокРеализации()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ДокументВыб.Ссылка
        |ИЗ
        |    Документ.ДокументВыб КАК ДокументВыб
        |ГДЕ
        |    ДокументВыб.ОтражатьВБухгалтерскомУчете = ЛОЖЬ
        |
        |УПОРЯДОЧИТЬ ПО
        |    ДокументВыб.Номер";
    
    Запрос.Текст = СтрЗаменить(Запрос.Текст,"ДокументВыб",Строка(ЭлементыФормы.ПолеВыбораДокумента.Значение));
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        докОбьект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
        докОбьект.ОтражатьВБухгалтерскомУчете = Истина;
        
        докОбьект.Записать(РежимЗаписиДокумента.Запись,);

        ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(докОбьект,докОбьект.мСтруктураПараметровДляПолученияДоговора);
        
        СчетаУчета = УправлениеВзаиморасчетами.ПолучитьСчетаРасчетовСКонтрагентом(докОбьект.Организация, докОбьект.Контрагент, докОбьект.ДоговорКонтрагента);
        
        Если докОбьект.ДоговорКонтрагента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером Тогда
            докОбьект.СчетУчетаРасчетовСКонтрагентом = СчетаУчета.СчетРасчетовПокупателя;
            докОбьект.СчетУчетаРасчетовПоАвансам     = СчетаУчета.СчетАвансовПокупателя;
        ИначеЕсли докОбьект.ДоговорКонтрагента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.Бартерный Тогда
            докОбьект.СчетУчетаРасчетовСКонтрагентом = СчетаУчета.СчетРасчетовПокупателяПриБартере;
            докОбьект.СчетУчетаРасчетовПоАвансам     = СчетаУчета.СчетАвансовПокупателяПриБартере;
        Иначе
            докОбьект.СчетУчетаРасчетовСКонтрагентом = СчетаУчета.СчетРасчетовПокупателя;
            докОбьект.СчетУчетаРасчетовПоАвансам     = СчетаУчета.СчетАвансовПокупателя;
        КонецЕсли;
        
        докОбьект.СчетУчетаРасчетовПоТаре          = СчетаУчета.СчетУчетаТарыПокупателя;
        докОбьект.СчетУчетаРасчетовПоТареПоАвансам = СчетаУчета.СчетАвансовПоТареПокупателя;
        докОбьект.СчетУчетаНДС                 = СчетаУчета.СчетУчетаНДСПродаж;
        докОбьект.СчетУчетаНДСПодтвержденный  = СчетаУчета.СчетУчетаНДСПродажПодтвержденный;
        
        // обработка счетов НУ в ТЧ
        Если докОбьект.Товары.Количество() + докОбьект.ВозвратнаяТара.Количество() + докОбьект.Услуги.Количество() > 0 Тогда                
            докОбьект.ЗаполнитьСчетаУчетаВТабЧасти(докОбьект.Товары        , "Товары"        , Истина, Истина);
            докОбьект.ЗаполнитьСчетаУчетаВТабЧасти(докОбьект.ВозвратнаяТара, "ВозвратнаяТара", Истина, Истина);
            докОбьект.ЗаполнитьСчетаУчетаВТабЧастиУслуги(Истина, Истина);
        КонецЕсли;
        
        докОбьект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
        
    КонецЦикла;

КонецПроцедуры


Автор: One 15.01.21, 16:05

Yevhenii_S @ Сегодня, 13:57 * ,

Пробовали вот здесь

СчетаУчета     = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, СтрокаТЧ.Номенклатура, ?(мУказаниеСкладовВТЧ, СтрокаТЧ.Склад, Склад));


ставить точку останова и смотреть параметры передаваемые процедуре?

Автор: zay 17.01.21, 12:44

Цитата(Yevhenii_S @ 14.01.21, 13:45) *
и при проведении получаю ошибку:
Проведение документа "Реализация товаров и услуг НО000000004 от 27.06.2011 12:00:00"

Тот способ, как вы собираетесь перевести упр.базу на упр.+бух., мог бы сработать, если бы вам надо было это сделать за пол года. Но не за 9 лет. (Или у вас очень мало документов). Я исхожу из того, что у вас велся бух. учет по этой базе (например на 7-ке). И вы перепроводите документы по бух.учету и ожидаете что результат сойдется с той другой бух.базой. Если это так, то есть 2 варианта:
1. Вы каким-то образом перепроведете документы по бух.учету. Бухгалтер проверит результат. Взаиморасчеты с контрагентами, НДС - ничего не сходится. Отменяем проведение по бух.учету. Бухгалтер садится и вносит остатки
2. Бухгалтер садится и вносит остатки

Я в похожих ситуациях пытаюсь убедить на вариант 2

Автор: One 17.01.21, 18:45

Yevhenii_S @ 15.01.21, 13:57 *
Проверил Ваш код на типовой - всё работает. Разбирайтесь с данными в базе.

Автор: zay 18.01.21, 9:52

https://pro1c.org.ua/topic/universalnye-podbor-i-obrabotka-obektov-upravlyaemoe-i-obychnoe-prilozhenie-64088/
С ее помощью можно дозаполнить все необходимые реквизиты табличных частяй

Автор: Yevhenii_S 18.01.21, 12:41

Цитата(zay @ 17.01.21, 12:44) *
Тот способ, как вы собираетесь перевести упр.базу на упр.+бух., мог бы сработать, если бы вам надо было это сделать за пол года. Но не за 9 лет. (Или у вас очень мало документов). Я исхожу из того, что у вас велся бух. учет по этой базе (например на 7-ке). И вы перепроводите документы по бух.учету и ожидаете что результат сойдется с той другой бух.базой. Если это так, то есть 2 варианта:


Спасибо за совет, базе действительно с пол года, документов не много. Проект-менеджер не я, решение перепроводить програмно документы принимал опытный программист который ведёт клиента с самого начала. Моя задача реализация + опыт и прокачка своего скила(в первую очередь)

Цитата(One @ 17.01.21, 18:45) *
Проверил Ваш код на типовой - всё работает. Разбирайтесь с данными в базе.

Благодарю, значит не всё так печально в моих скилах)

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua