Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выбраны счета из разных планов счетов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Aisha12
Здравствуйте всем!! Конфигурация 1С 7.7 не типовая, а написанная с нуля. При попытке провести списание основных средств система выдает ошибку
Операция.Записать();
{Документ.СписаниеОС.Модуль Документа(77)}: Выбраны счета из разных планов счетов!(проводка 1)
. Не совсем понимаю, где искать. Есть 2 плана счетов, но до этого все проводилось и списывалось, теперь все остановилось, никак не пойму, модуль я читаю так себе, но тут не разбираюсь
Процедура РассчитатьБалансовуюСтоимость()
    Сч122_1 = глНайтиСчетик(СчетПоКоду("122.1",ПланыСчетов.Казахстан),ДатаДок);
    Сч122_2 = глНайтиСчетик(СчетПоКоду("122.2",ПланыСчетов.Казахстан),ДатаДок);
    Сч123_1 = глНайтиСчетик(СчетПоКоду("123.1",ПланыСчетов.Казахстан),ДатаДок);
    Сч123_2 = глНайтиСчетик(СчетПоКоду("123.2",ПланыСчетов.Казахстан),ДатаДок);
    Сч124   = глНайтиСчетик(СчетПоКоду("124",ПланыСчетов.Казахстан),ДатаДок);
    Сч125_1 = глНайтиСчетик(СчетПоКоду("125.1",ПланыСчетов.Казахстан),ДатаДок);
    Сч125_2 = глНайтиСчетик(СчетПоКоду("125.2",ПланыСчетов.Казахстан),ДатаДок);
    Сч131_1 = глНайтиСчетик(СчетПоКоду("131.1",ПланыСчетов.Казахстан),ДатаДок);
    Сч131_2 = глНайтиСчетик(СчетПоКоду("131.2",ПланыСчетов.Казахстан),ДатаДок);
    Сч132_1 = глНайтиСчетик(СчетПоКоду("132.1",ПланыСчетов.Казахстан),ДатаДок);
    Сч132_2 = глНайтиСчетик(СчетПоКоду("132.2",ПланыСчетов.Казахстан),ДатаДок);
    Сч133   = глНайтиСчетик(СчетПоКоду("133",ПланыСчетов.Казахстан),ДатаДок);
    Сч134_1 = глНайтиСчетик(СчетПоКоду("134.1",ПланыСчетов.Казахстан),ДатаДок);
    Сч134_2 = глНайтиСчетик(СчетПоКоду("134.2",ПланыСчетов.Казахстан),ДатаДок);
    СчОС = глНайтиСчетик(СчетПоКоду("ОС",ПланыСчетов.Казахстан),ДатаДок);
    
    Сп=СоздатьОбъект("СписокЗначений");
    Сп.ДобавитьЗначение(Сч122_1);
    Сп.ДобавитьЗначение(Сч122_2);
    Сп.ДобавитьЗначение(Сч123_1);
    Сп.ДобавитьЗначение(Сч123_2);
    Сп.ДобавитьЗначение(Сч124);
    Сп.ДобавитьЗначение(Сч125_1);
    Сп.ДобавитьЗначение(Сч125_2);
    Сп.ДобавитьЗначение(Сч131_1);
    Сп.ДобавитьЗначение(Сч131_2);
    Сп.ДобавитьЗначение(Сч132_1);
    Сп.ДобавитьЗначение(Сч132_2);
    Сп.ДобавитьЗначение(Сч133);
    Сп.ДобавитьЗначение(Сч134_1);
    Сп.ДобавитьЗначение(Сч134_2);
    Сп.ДобавитьЗначение(СчОС);
    СуммаОперации = 0;
    
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьПланСчетов(ВыбратьПланСчетов(ДатаДок));
    Ит.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства, ОС);
    Ит.ВключатьСубсчета(1);
    Ит.ВыполнитьЗапрос(,ДатаДок,сп);
    Ит.ВыбратьСубконто();
    Пока Ит.ПолучитьСубконто() = 1 Цикл
        СчетОС = ОС.Группа.СчетБал.Получить(ДатаДок);
        СчетИз = ОС.Группа.СчетИзноса.Получить(ДатаДок);
        СчетЗаб = СчетПоКоду("ОС");
        БалансоваяСтоимость    = ?(Ит.ПолучитьСчет(,СчетОС)=1,Ит.СКД(),0);
        НачисленнаяАмортизация = ?(Ит.ПолучитьСчет(,СчетИз)=1,Ит.СКК(),0);
        ОстаточнаяСтоимость    = ?((БалансоваяСтоимость - НачисленнаяАмортизация)<0,0,(БалансоваяСтоимость - НачисленнаяАмортизация));
        ОстаточнаяЗаб           = ?(Ит.ПолучитьСчет(,СчетЗаб)=1,Ит.СКД(),0);
        Если ЗабалансовыеОС = 1 Тогда
            БалСт= ОстаточнаяЗаб;  
        Иначе
            БалСт= БалансоваяСтоимость;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Что в коде не так?
Pepe
Возможно проблема не в коде, а в данных. Вы могли в один документ внести позиции в карточках которых используются счета из разных планов счетов.
Aisha12
нет, выбирается все как всегда, а в коде все нормально? или мне счет в коде поменять на текущий?
Vofka
А это стандартная семерочная функция
ВыбратьПланСчетов(ДатаДок)

?
alex040269
Перед
Операция.Записать();


Вставте:

Операция.ВыбратьПроводки();
Пока Операция.ПолучитьПроводку() = 1 Цикл
Если Операция.СчетДт.ПланСчетов() <> Операция.СчетКт.ПланСчетов() Тогда
Сообщить()
КонецЕсли
КонецЦикла
Aisha12
Цитата(Vofka @ 03.04.14, 20:25) необходимо зарегистрироваться для просмотра ссылки
А это стандартная семерочная функция
ВыбратьПланСчетов(ДатаДок)

?

нет, кажется не стандартная, конфигурацию писала не я, так как не доросла еще до этого уровня) Заказчики задаются вопросом почему не списывается документ, а я не знаю, как ответить даже, бухгалтер тоже не поймет, говорит, может в модуле дело
Pepe
С двумя планами счетов надо быть осторожным. Попадал на такие грабли. Нельзя хранить или заносить данные используя один план счетов, а потом перейти в другой и его использовать. А у вас получается, что вы поменяли план счетов с какой-то даты.
vadim007
А выборка операции сработает для незаписанной операции?
Aisha12
Цитата(alex040269 @ 03.04.14, 20:32) необходимо зарегистрироваться для просмотра ссылки
Перед
Операция.Записать();


Вставте:

Операция.ВыбратьПроводки();
Пока Операция.ПолучитьПроводку() = 1 Цикл
Если Операция.СчетДт.ПланСчетов() <> Операция.СчетКт.ПланСчетов() Тогда
Сообщить()
КонецЕсли
КонецЦикла


Простите, вот сама процедура проведения
Процедура ОбработкаПроведения()
        
    //___Сумма начисленного износа___
    Если НачисленнаяАмортизация <> 0 Тогда
        Операция.НоваяПроводка();
        Операция.СодержаниеПроводки = "Списана начисл. аморт.";
        Операция.НомерЖурнала = "ОС";
        Операция.Дебет.Счет = ОС.Группа.СчетИзноса.Получить(ДатаДок);
        Операция.Дебет.Субконто(1, ОС);
        Операция.Дебет.Субконто(2, ОС.Подразделение.Получить(ДатаДок));
        Операция.Дебет.Субконто(3, ОС.Мол.Получить(ДатаДок));
        Операция.Кредит.Счет = ОС.Группа.СчетБал.Получить(ДатаДок);
        Операция.Кредит.Субконто(1, ОС);
        Операция.Кредит.Субконто(2, ОС.Подразделение.Получить(ДатаДок));
        Операция.Кредит.Субконто(3, ОС.Мол.Получить(ДатаДок));
        Операция.Сумма = НачисленнаяАмортизация;
    КонецЕсли;

    //___Остаточная стоимость___
    Если ОстаточнаяСтоимость <> 0 тогда
        Операция.НоваяПроводка();
        Операция.СодержаниеПроводки = "Списана остат. стоим.";
        Операция.НомерЖурнала = "ОС";
        Операция.Дебет.Счет = глНайтиСчетик(СчетПоКоду("842",ПланыСчетов.Казахстан),ДатаДок);
        Операция.Дебет.Субконто(1, ИздержкиОбращения);
        Операция.Кредит.Счет = ОС.Группа.СчетБал.Получить(ДатаДок);
        Операция.Кредит.Субконто(1, ОС);
        Операция.Кредит.Субконто(2, ОС.Подразделение.Получить(ДатаДок));
        Операция.Кредит.Субконто(3, ОС.Мол.Получить(ДатаДок));
        Операция.Сумма = ОстаточнаяСтоимость;
    КонецЕсли;
    
    //Если ОС.НалоговаяГруппа.Выбран()=1 тогда
        Ит=СоздатьОбъект("БухгалтерскиеИтоги");
        Ит.ИспользоватьПланСчетов(ВыбратьПланСчетов(ДатаДок));
        Ит.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства, ОС, 2);
        //Ит.ИспользоватьСубконто(ВидыСубконто.НалоговыеГруппыОС, ОС.НалоговаяГруппа, 2);
        //Ит.ИспользоватьСубконто(ВидыСубконто.Подразделение, ОС, 2);
        Ит.ВыполнитьЗапрос(,ДатаДок, глНайтиСчетик(СчетПоКоду("ОС",ПланыСчетов.Казахстан),ДатаДок));
        ОстСтоим=Ит.СКД();
        
        Операция.НоваяПроводка();
        Операция.СодержаниеПроводки = "Списана остат. стоим.";
        Операция.НомерЖурнала = "ОС";
        //Операция.Дебет.Счет = СчетПоКоду("ОС2");
        //Операция.Дебет.Субконто(1, ОС);
        //Операция.Дебет.Субконто(2, ОС.НалоговаяГруппа);
        Операция.Кредит.Счет = глНайтиСчетик(СчетПоКоду("ОС",ПланыСчетов.Казахстан),ДатаДок);
        Операция.Кредит.Субконто(1, ОС);
        Операция.Кредит.Субконто(2, ОС.Подразделение.Получить(ДатаДок));
        Операция.Кредит.Субконто(3, ОС.Мол.Получить(ДатаДок));
//        Операция.Кредит.Субконто(2, ОС.НалоговаяГруппа);
        Операция.Сумма = ОстСтоим;
    //    
    //    Операция.НоваяПроводка();
    //    Операция.СодержаниеПроводки = "Списана остат. стоим.";
    //    Операция.НомерЖурнала = "ОС";
    //    Операция.Кредит.Счет = СчетПоКоду("ОС2");
    //    Операция.Кредит.Субконто(1, ОС);
    //    Операция.Кредит.Субконто(2, ОС.НалоговаяГруппа);
    //    Операция.Сумма = ОстСтоим;      
    //    
    
    Операция.Содержание = "Списание ОС № "+СокрЛ(НомерДок);
    Операция.СуммаОперации = БалансоваяСтоимость;  

    Операция.ВыбратьПроводки();
    Пока Операция.ПолучитьПроводку() = 1 Цикл
        Если Операция.СчетДт.ПланСчетов() <> Операция.СчетКт.ПланСчетов() Тогда
            Сообщить();
        КонецЕсли;
    КонецЦикла;          
    Операция.Записать();
КонецПроцедуры


Вот так? Он не считывает
alex040269
Цитата(Aisha12 @ 03.04.14, 16:50) необходимо зарегистрироваться для просмотра ссылки
Вот так? Он не считывает

т.е. не попадает в цикл?
Aisha12
Цитата(alex040269 @ 03.04.14, 20:56) необходимо зарегистрироваться для просмотра ссылки
т.е. не попадает в цикл?

Что вместо этого мне прописать по моей ситуации?
Если Операция.СчетДт.ПланСчетов() <> Операция.СчетКт.ПланСчетов()
Домовик
в вашей ситуации нужно в Сообщить() что-то положить.

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



Еще... Попробуйте этому же документу поставить дату на месяц раньше и попробуйте провести.

Ardi
Цитата(Aisha12 @ 03.04.14, 15:11) необходимо зарегистрироваться для просмотра ссылки
Выбраны счета из разных планов счетов!(проводка 1)

Возможно в какой-то момент счет дебета или кредита пустой - и выдаёт такую ошибку.
Домовик
очень может быть даже да, Ardi:


 Операция.НоваяПроводка();
        Операция.СодержаниеПроводки = "Списана остат. стоим.";
        Операция.НомерЖурнала = "ОС";
        //Операция.Дебет.Счет = СчетПоКоду("ОС2");
        //Операция.Дебет.Субконто(1, ОС);
        //Операция.Дебет.Субконто(2, ОС.НалоговаяГруппа);
        Операция.Кредит.Счет = глНайтиСчетик(СчетПоКоду("ОС",ПланыСчетов.Казахстан),ДатаДок);
        Операция.Кредит.Субконто(1, ОС);
        Операция.Кредит.Субконто(2, ОС.Подразделение.Получить(ДатаДок));
        Операция.Кредит.Субконто(3, ОС.Мол.Получить(ДатаДок));
//        Операция.Кредит.Субконто(2, ОС.НалоговаяГруппа);
        Операция.Сумма = ОстСтоим;
    //


если счет не забалансовый.
Aisha12
Цитата(Ardi @ 03.04.14, 21:14) необходимо зарегистрироваться для просмотра ссылки
Возможно в какой-то момент счет дебета или кредита пустой - и выдаёт такую ошибку.

а как мне это проверить? Если честно, я вообще не разбираюсь в планах счетов, ни как бухгалтер, ни как программист, поэтому никак даже не пойму как это все работает, мне как то сказали, чтоб я не лезла туда, но когда то мне лезть надо начать
Домовик
Вы все время сохраняйте базу. Я серьезно. делайте резервные копии.

неоднократно вам говорим за Сообщить().

пример
Операция.НоваяПроводка();
        ......
        Операция.Кредит.Счет = глНайтиСчетик(СчетПоКоду("ОС",ПланыСчетов.Казахстан),ДатаДок);
        Сообщить(Операция.СодержаниеПроводки+" КредитСчет "+ Операция.Кредит.Счет);// добавлена строка - и так везде, где звучит Операция.Кредит.Счет
        // аналогично проверить операция.Дебет.Счет
                 ......
        Операция.Сумма = ОстСтоим;
    //
Aisha12
Цитата(Домовик @ 03.04.14, 23:15) необходимо зарегистрироваться для просмотра ссылки
Вы все время сохраняйте базу. Я серьезно. делайте резервные копии.

неоднократно вам говорим за Сообщить().

пример
Операция.НоваяПроводка();
        ......
        Операция.Кредит.Счет = глНайтиСчетик(СчетПоКоду("ОС",ПланыСчетов.Казахстан),ДатаДок);
        Сообщить(Операция.СодержаниеПроводки+" КредитСчет "+ Операция.Кредит.Счет);// добавлена строка - и так везде, где звучит Операция.Кредит.Счет
        // аналогично проверить операция.Дебет.Счет
                 ......
        Операция.Сумма = ОстСтоим;
    //

Вот что выходит
Списана остат. стоим.                                            ДебетСчет 842
Списана остат. стоим.                                            КредитСчет ОС
Операция.Записать();
{Документ.СписаниеОС.Модуль Документа(80)}: Выбраны счета из разных планов счетов!(проводка 1)


Цитата(Aisha12 @ 04.04.14, 11:30) необходимо зарегистрироваться для просмотра ссылки
Вот что выходит
Списана остат. стоим.                                            ДебетСчет 842
Списана остат. стоим.                                            КредитСчет ОС
Операция.Записать();
{Документ.СписаниеОС.Модуль Документа(80)}: Выбраны счета из разных планов счетов!(проводка 1)

Мне после этого
Операция.Дебет.Счет = ОС.Группа.СчетИзноса.Получить(ДатаДок);
тоже прописывать
Сообщить(Операция.СодержаниеПроводки+" ДебетСчет "+ Операция.Дебет.Счет);
?
Домовик
конечно дописывайте
потому что еще больше запутаетесь и нас запутаете:

только не путайте: после Операция.Кредит.Счет - КредитСчет, после Операция.Дебет.Счет - ДебетСчет.


допишите еще в строку, кот. вы указали:
Сообщить(Операция.СодержаниеПроводки+" ДебетСчет "+ Операция.Дебет.Счет+ОС.ТекущийЭлемент());


то, что выводит вам на экран лучше скрином показывайте.

2. посмотрите в каком плане счетов находится счет 842

3 попробуйте докумунту поставить дату на месяц назад и провести.


4. текст процедуры покажите ВыбратьПланСчетов(ДатаДОк)








Aisha12
Цитата(Домовик @ 04.04.14, 11:59) необходимо зарегистрироваться для просмотра ссылки
конечно дописывайте
потому что еще больше запутаетесь и нас запутаете:

только не путайте: после Операция.Кредит.Счет - КредитСчет, после Операция.Дебет.Счет - ДебетСчет.


допишите еще в строку, кот. вы указали:
Сообщить(Операция.СодержаниеПроводки+" ДебетСчет "+ Операция.Дебет.Счет+ОС.ТекущийЭлемент());


то, что выводит вам на экран лучше скрином показывайте.

2. посмотрите в каком плане счетов находится счет 842

3 попробуйте докумунту поставить дату на месяц назад и провести.


4. текст процедуры покажите ВыбратьПланСчетов(ДатаДОк)


Сюда сразу изображение нельзя вставить? Все дописала, теперь
Списана остат. стоим.                                            ДебетСчет 842
Списана остат. стоим.                                            КредитСчет 2415.1Жалюзи
Списана остат. стоим.                                            КредитСчет ОС
Операция.Записать();
{Документ.СписаниеОС.Модуль Документа(91)}: Выбраны счета из разных планов счетов!(проводка 1)

Счет 842 - Расходы по выбытию ОС находится в 1 плане счетов, который не действует, такой же поставить, но в другом плане счетов?

попробуйте докумунту поставить дату на месяц назад и провести.
Документу Списание ОС?

4. текст процедуры покажите ВыбратьПланСчетов(ДатаДОк)
Функция ВыбратьПланСчетов(ДатаДок) Экспорт
    Если Константа.НовыйПланСчетов.Получить(ДатаДок)=Перечисление.Булево.Нет Тогда
        рез=ПланыСчетов.Казахстан;
    Иначе                        
        рез=ПланыСчетов.МСФОКазахстан;
    КонецЕсли;    
    Возврат рез;
КонецФункции
Vofka
Aisha12, ну вот, как я и думал. В ВыбратьПланСчетов у вас по всей видимости выбирается план счетов МСФОКазахстан, а в модуле документа используется Казахстан. Вот программа и говорит, что ерунда получается.
Aisha12
Цитата(Vofka @ 04.04.14, 12:51) необходимо зарегистрироваться для просмотра ссылки
Aisha12, ну вот, как я и думал. В ВыбратьПланСчетов у вас по всей видимости выбирается план счетов МСФОКазахстан, а в модуле документа используется Казахстан. Вот программа и говорит, что ерунда получается.


Сейчас только заметила константу, а я поставила Да выбирать новый план счетов, он не реагирует никак. А в модуле Списания ОС поменять на МСФОКазахстан?

Цитата(Aisha12 @ 04.04.14, 12:55) необходимо зарегистрироваться для просмотра ссылки
Сейчас только заметила константу, а я поставила Да выбирать новый план счетов, он не реагирует никак. А в модуле Списания ОС поменять на МСФОКазахстан?

Есть такой счет в МСФОКазахстан - 7410 Расходы по выбытию активов? этот вместо 842 написать в модуле?

Цитата(Aisha12 @ 04.04.14, 13:02) необходимо зарегистрироваться для просмотра ссылки
Сейчас только заметила константу, а я поставила Да выбирать новый план счетов, он не реагирует никак. А в модуле Списания ОС поменять на МСФОКазахстан?


Есть такой счет в МСФОКазахстан - 7410 Расходы по выбытию активов? этот вместо 842 написать в модуле?


Сделала так
Операция.Дебет.Счет = глНайтиСчетик(СчетПоКоду("7410",ПланыСчетов.МСФОКазахстан),ДатаДок);


И везде поставила МСФОКазахстан. Теперь все списывается по счету 7410, я правильно сделала?
Домовик
нет. неправильно сделали.

для начала, вы должны сохранить базу. и рассказать, нам, как вы ее сохраняете.

потом дождаться бухгалтеров и уточнить с ними историю и назначение этих двух планов счетов. на каком плане счетов сейчас находятся основные средства?

зайти в константы, выбрать эту константу, сверху нажать кнопку История и показать сюда.
Aisha12
Цитата(Домовик @ 04.04.14, 13:26) необходимо зарегистрироваться для просмотра ссылки
нет. неправильно сделали.

для начала, вы должны сохранить базу. и рассказать, нам, как вы ее сохраняете.

потом дождаться бухгалтеров и уточнить с ними историю и назначение этих двух планов счетов. на каком плане счетов сейчас находятся основные средства?

зайти в константы, выбрать эту константу, сверху нажать кнопку История и показать сюда.

Сохранить базу через Администрирование Сохранить данные или Выгрузить данные это имеете в виду?
01.01.01-Нет
01.01.08-Да
14.08.08-Да
18.12.08-Да
27.08.09-Да
17.05.12
04.04.14-Да
Домовик
не имеет значения особого Сохранить или Выгрузить. Главное - сохраняйте в какую-то папку.

с новым планом счетов вы работаете давно. но поговорите еще с бухгалтерами, что они хотят.
Aisha12
Цитата(Домовик @ 04.04.14, 13:56) необходимо зарегистрироваться для просмотра ссылки
не имеет значения особого Сохранить или Выгрузить. Главное - сохраняйте в какую-то папку.

с новым планом счетов вы работаете давно. но поговорите еще с бухгалтерами, что они хотят.


теперь, что сделать? Обратно поставить в модуле счет 842? и спросить у бухгалтеров? бухгалтера хотят, чтоб он списался и все
Домовик
уточните у бухгалтеров, используют ли они 8 класс счетов, посмотрите в новом плане счетов МСФОКазахстан, присутствует ли он там. и принимайте решение. )
Домовик
да.

еще подпраьте историю значений константы. уберите два последних значения.
Aisha12
Цитата(Домовик @ 04.04.14, 15:31) необходимо зарегистрироваться для просмотра ссылки
да.

еще подпраьте историю значений константы. уберите два последних значения.


Спасибо всем!! Вы очень помогли!! Но у меня будет вопрос к вам, как уже опытным программистам, стоить ли вообще продолжать работать 1с программистом, я работа в фирме полгода, и научилась я только ставить 1Ску, обновлять типовые конфигурации и нетиповые (не совсем исправленные), прикреплять печатные формы, писать выгрузку в Excel (и то с чьей то помощью) ну и много чего по мелочи, в основном дают работу по мелочи, и из-за этих нет и денег совсем. Мне говорят, что так как я еще ничего не знаю, мне надо учиться и учиться, я это понимаю, ну а деньги откуда? Короче, толку то жаловаться, хочу спросить, оставаться мне на этой работе, есть ли карьерный рост? Стоит вообще дальше и глубже погружаться?
Vofka
Aisha12, это технический раздел. Хотите поговорить о жизни - это в разделе Офф-топик. Закрыто.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.