7.7 Как установить СуммуВзаиморасчетов

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем amoRNizam, 4 авг 2017.

  1. TopicStarter Overlay
    amoRNizam
    Offline

    amoRNizam Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    125
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте! 1С7.7 ТиС 9.2
    Решение наверное не сложное, но я не справился. Подскажите пожалуйста.

    С сайта выгружаются заказы в текстовый файл и затем обработкой создается заявка в 1С.
    В созданном документе в сумме взаиморасчетов отображается не сумма по документу, как должно быть, а цена первого товара в табличной части. Смотрите скриншоты.
    В дальнейшем реализация которая делается на основании этой заявки тоже не правильная создается.
    Как правильно заполнить сумму взаиморасчетов, чтобы в поле "Сумма по документу" и поле "Всего(руб.)" была одна и та же сумма?

    часть кода обработки
    Код:
            Док.Новый();
            Пользователь=СоздатьОбъект("Справочник.Пользователи");
            Если Пользователь.НайтиПоНаименованию(ИмяПользователя())=1 тогда
                Док.Автор=Пользователь.ТекущийЭлемент();
            КонецЕсли;
            Док.idПродажи=НомерПродажи;
            Док.ВидОперации =Перечисление.ВидыОперацийЗаявок.НаСклад;
            Док.УстановитьНовыйНомер("АП");
    
            Фирма = СоздатьОбъект("Справочник.Фирмы");
            Если Фирма.НайтиПоКоду("00002")=1 Тогда
             Док.Фирма=Фирма.ТекущийЭлемент();
             КонецЕсли;
           
            Договор = СоздатьОбъект("Справочник.Договоры");
            Если Договор.НайтиПоКоду("00000007",0)=1 Тогда
             Док.Договор=Договор.ТекущийЭлемент();
             КонецЕсли;
    
            Валюта = СоздатьОбъект("Справочник.Валюты");
            Если Валюта.НайтиПоКоду("643",0)=1 Тогда
             Док.Валюта=Валюта.ТекущийЭлемент();
             КонецЕсли;
        
             Док.Курс="1";
    
            
             Контрагент = СоздатьОбъект("Справочник.Контрагенты");
            Если Контрагент.НайтиПоНаименованию(Компания,0,1)=1 Тогда
            //Сообщить(Контрагент.ТекущийЭлемент());
            Док.Контрагент = Контрагент.ТекущийЭлемент();
            КонецЕсли;                                                          
           
            Склад = СоздатьОбъект("Справочник.Склады");
            Если Склад.НайтиПоНаименованию("Витрука")=1 Тогда
            Док.Склад = Склад.ТекущийЭлемент();
            КонецЕсли;
           
            Проект = СоздатьОбъект("Справочник.Проекты");
            Если Проект.НайтиПоКоду("00084",0)=1 Тогда
            Док.Проект=Проект.ТекущийЭлемент();
            КонецЕсли;
       
            Док.ДатаОтгрузки = ТекущаяДата();   
           
            Док.Комментарий=Компания+", т. "+Телефон+", "+Фамилия+", "+Имя+", "+Отчество+", "+Email+", "+Коммент ;
           
            Номенклатура = СоздатьОбъект("Справочник.Номенклатура");
    
            ////Заполняем Табличную часть документа/////////
    
            Док.новаястрока();
            Если Номенклатура.НайтиПоКоду(КодТовара,0)=1 Тогда
                Док.Номенклатура = Номенклатура.ТекущийЭлемент();
            КонецЕсли;
            Док.Количество =КолВоТовара;
               Если ВидЕд>0 тогда
                Док.Единица=Номенклатура.ОсновнаяЕдиница;
                Док.Коэффициент=ВидЕд;
            Иначе
                Док.Единица=Номенклатура.БазоваяЕдиница;
                Док.Коэффициент=1;
            КонецЕсли;
               Док.Цена=Цена;
    Док.Сумма=КолВоТовара*Цена;         Док.СуммаВзаиморасчетов=Док.Итог("Сумма");
    
            Док.Записать();
            Док.Провести();
    Извините, если поставил не правильно вопрос.
    1.png 2.png
  2. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.556
    Симпатии:
    59
    Баллы:
    54
    часть кода...
    если ты порезал код между строк, то ничего путного не услышишь. ну, лично я не вижу цикла
    выкладывай весь код от док.новый до док.записать/провести
  3. TopicStarter Overlay
    amoRNizam
    Offline

    amoRNizam Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    125
    Симпатии:
    0
    Баллы:
    26
    Я ведь и скинул ту часть кода в которой документ создается, от док новый до провести. Если нужен весь то вот:
    Код:
    Процедура ПриОткрытии()
    перем Конт;
    
        Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "FormEx.dll")=0 Тогда           
        Предупреждение("Не удалось найти файл FormEx.dll в каталоге программы"+РазделительСтрок+"Функция работы со списками отключена");       
        Возврат;
        КонецЕсли;
    
        Сервис = СоздатьОбъект("Сервис");
    
        ТЗ = СоздатьОбъект("ТаблицаЗначений");
        fromEmail="[email protected]";//Константа.ЛогинПочтаАсМен;
        fromPassword="123465678";//Константа.ПарольПочтаАсМен;
        smtp="smtp.mail.ru";
       
       
        НомерПродажиПред=0;
           Док = СоздатьОбъект("Документ.ЗаявкаПокупателя");
    
       Текст = СоздатьОбъект("Текст");
       Текст.Открыть("D:\JoomShop\to_1C.csv");
       Если Текст.КоличествоСтрок() = 0 Тогда
        //  Предупреждение("Текст пустой!");
          Возврат;
       КонецЕсли;
       Для Ном = 1 По Текст.КоличествоСтрок() Цикл
           Стр  = Текст.ПолучитьСтроку(Ном);
    
          Длина=СтрДлина(Стр);
          НомерСимвола=Найти(Стр, ";");
          НомерТовара=Лев(Стр,НомерСимвола-1);//***  номер товара
          Стр=Прав(Стр,Длина-НомерСимвола);
            Длина=СтрДлина(Стр);
              НомерСимвола=Найти(Стр, ";");
              НомерПродажи=Лев(Стр,НомерСимвола-1); //** номер продажи
              Стр=Прав(Стр,Длина-НомерСимвола);
                 Длина=СтрДлина(Стр);
                  НомерСимвола=Найти(Стр, ";");
                   ДатВр=Сред(Стр,2,НомерСимвола-3);  //** дата и время
                  Стр=Прав(Стр,Длина-НомерСимвола);
                       Длина=СтрДлина(Стр);
                      НомерСимвола=Найти(Стр, ";");
                       КодТовара=Лев(Стр,НомерСимвола-1); //**код товара
                      Стр=Прав(Стр,Длина-НомерСимвола);
                        Длина=СтрДлина(Стр);
                          НомерСимвола=Найти(Стр, ";");
                           Товар=Сред(Стр,2,НомерСимвола-3);  //**наименование товара
                          Стр=Прав(Стр,Длина-НомерСимвола);
                            Длина=СтрДлина(Стр);          
                              НомерСимвола=Найти(Стр, ";");
                               КолВоТовара=Лев(Стр,НомерСимвола-1);  //**колличество товара
                              Стр=Прав(Стр,Длина-НомерСимвола);
                                  Длина=СтрДлина(Стр);               
                                  НомерСимвола=Найти(Стр, ";");
                                   Цена=Лев(Стр,НомерСимвола-1);       //**цена
                                  Стр=Прав(Стр,Длина-НомерСимвола);
                                      Длина=СтрДлина(Стр);                    
                                      НомерСимвола=Найти(Стр, ";");
                                       Отчество=Лев(Стр,НомерСимвола-1);  //**Здесь был IP покупателя
                                      Стр=Прав(Стр,Длина-НомерСимвола);
                      Длина=СтрДлина(Стр);                
                      НомерСимвола=Найти(Стр, ";");
                       Компания=Сред(Стр,2,НомерСимвола-3);  //** компания
                      Стр=Прав(Стр,Длина-НомерСимвола);
                          Длина=СтрДлина(Стр);                    
                          НомерСимвола=Найти(Стр, ";");
                           Фамилия=Лев(Стр,НомерСимвола-1);   //**фамилия
                          Стр=Прав(Стр,Длина-НомерСимвола);
                              Длина=СтрДлина(Стр);                    
                              НомерСимвола=Найти(Стр, ";");
                               Имя=Лев(Стр,НомерСимвола-1);          //**имя
                              Стр=Прав(Стр,Длина-НомерСимвола);
                                  Длина=СтрДлина(Стр);                    
                                  НомерСимвола=Найти(Стр, ";");
                                   Телефон=Лев(Стр,НомерСимвола-1);     //**телефон
                                  Стр=Прав(Стр,Длина-НомерСимвола);
                                      Длина=СтрДлина(Стр);                    
                                      НомерСимвола=Найти(Стр, ";");
                                       Email=Лев(Стр,НомерСимвола-1);     //**почта
                                      Стр=Прав(Стр,Длина-НомерСимвола);
                                            НомерСимвола=Найти(Стр, ";");
                                            Коммент=Лев(Стр,НомерСимвола-1);     //**комментарий
                                          Стр=Прав(Стр,Длина-НомерСимвола);
                                        ВидЕд=Число(Стр);    //Базовые единицы - 0, Основные - 100.       
    
    ////Создание документов//////////////                 
    НомерПродажи=Число(НомерПродажи);
    КолВоТовара=число(КолВоТовара);
    Цена=число(Цена);
    Если СтрДлина(Стр)=0 тогда возврат
        Иначе
    ///Проверка уникальности/////
        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса =
        "//{{ЗАПРОС(Проверка)
        |Период с (ТекущаяДата()-2) по (ТекущаяДата());
        |ОбрабатыватьДокументы все;
        |Фирма = Документ.ЗаявкаПокупателя.Фирма;
        |idПродажи = Документ.ЗаявкаПокупателя.idПродажи;   
        |Группировка Фирма;
        |Группировка idПродажи;
        |Условие(ПустоеЗначение(idПродажи)=0);
        |Условие(idПродажи=НомерПродажи);
        |"//}}ЗАПРОС
        ;
        Запрос.Выполнить(ТекстЗапроса);
        Запрос.Выгрузить(ТЗ,0,0);
        ТЗ.ВыбратьСтроки();
        ЕстьДок=0;
        Пока ТЗ.ПолучитьСтроку()=1 Цикл
            ЕстьДок=ТЗ.idПродажи;
        КонецЦикла;
        Если (ЕстьДок<>0) и (НомерПродажи>НомерПродажиПред) тогда
          
    Иначе                                                                   
        Если НомерПродажи>НомерПродажиПред Тогда
    
            //////ПОЧТА//////
            Если Док.Выбран()=1 тогда
                ОткрытьФорму(Док.ТекущийДокумент(), Конт, 1);
                //ИмяФ=СокрЛП(Строка(Док.НомерДок));
                Сервис.ВыполнитьПроцедуру(Конт, "СчетДляПочты", );
                 Конт.Форма.Закрыть(0);
        ЗадержкаСекунд=10;
        scr = СоздатьОбъект("WScript.Shell");
        scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(ЗадержкаСекунд)),0,1);
                    sendemail="D:\JoomShop\sendEmail -f "+fromEmail+" -o message-charset=windows-1251 message-content-type=html -u "+"Заказ №"+НомерПродажи+" обработан"+" -m "+"Здравствуйте "+Имя+"" ""+Отчество+"!  Дополнительную информацию Вы можете получить по телефону 8 111111 <br /> ООО ""Грызли помидоры"" <br /> Россия, 00000,г.Воронеж, ул. 00000, 000 <br /> Тел.: 8 00000000 <br />
                    |Наш сайт: 1111111 <br /> Наш прайс строительных материалов: 1111111/docs/prais1.pdf <br />"+" -t "+fromEmail+" -s "+smtp+" -o tls=auto -xu "+fromEmail+" -xp "+fromPassword+" -cc "+Email+" -a D:\JoomShop\invoice.pdf -l D:\JoomShop\log.txt";
                    ЗапуститьПриложение(sendemail);
        ЗадержкаСекунд=10;
        scr = СоздатьОбъект("WScript.Shell");
        scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(ЗадержкаСекунд)),0,1);
            КонецЕсли;
            //////////////////////////////       
           
            Док.Новый();
            Пользователь=СоздатьОбъект("Справочник.Пользователи");
            Если Пользователь.НайтиПоНаименованию(ИмяПользователя())=1 тогда
                Док.Автор=Пользователь.ТекущийЭлемент();
            КонецЕсли;
            Док.idПродажи=НомерПродажи;
            Док.ВидОперации =Перечисление.ВидыОперацийЗаявок.НаСклад;
            Док.УстановитьНовыйНомер("АП");
    
            Фирма = СоздатьОбъект("Справочник.Фирмы");
            Если Фирма.НайтиПоКоду("00002")=1 Тогда
             Док.Фирма=Фирма.ТекущийЭлемент();
             КонецЕсли;
           
            Договор = СоздатьОбъект("Справочник.Договоры");
            Если Договор.НайтиПоКоду("00000007",0)=1 Тогда
             Док.Договор=Договор.ТекущийЭлемент();
             КонецЕсли;
    
            Валюта = СоздатьОбъект("Справочник.Валюты");
            Если Валюта.НайтиПоКоду("643",0)=1 Тогда
             Док.Валюта=Валюта.ТекущийЭлемент();
             КонецЕсли;
        
             Док.Курс="1"; //Изменения от 10.01.17
    
            
             Контрагент = СоздатьОбъект("Справочник.Контрагенты");
            Если Контрагент.НайтиПоНаименованию(Компания,0,1)=1 Тогда
            //Сообщить(Контрагент.ТекущийЭлемент());
            Док.Контрагент = Контрагент.ТекущийЭлемент();
            КонецЕсли;                                                          
           
            Склад = СоздатьОбъект("Справочник.Склады");
            Если Склад.НайтиПоНаименованию("Витрука")=1 Тогда
            Док.Склад = Склад.ТекущийЭлемент();
            КонецЕсли;
           
            Проект = СоздатьОбъект("Справочник.Проекты"); //Изменения от 10.01.2017
            Если Проект.НайтиПоКоду("00084",0)=1 Тогда
            Док.Проект=Проект.ТекущийЭлемент();
            КонецЕсли;
       
            Док.ДатаОтгрузки = ТекущаяДата();     //Изменения от 10.01.2017
           
            Док.Комментарий=Компания+", т. "+Телефон+", "+Фамилия+", "+Имя+", "+Отчество+", "+Email+", "+Коммент ;
           
            Номенклатура = СоздатьОбъект("Справочник.Номенклатура");
    
            ////Заполняем Табличную часть документа/////////
    
            Док.новаястрока();
            Если Номенклатура.НайтиПоКоду(КодТовара,0)=1 Тогда
                Док.Номенклатура = Номенклатура.ТекущийЭлемент();
            КонецЕсли;
            Док.Количество =КолВоТовара;
               Если ВидЕд>0 тогда
                Док.Единица=Номенклатура.ОсновнаяЕдиница;
                Док.Коэффициент=ВидЕд;
            Иначе
                Док.Единица=Номенклатура.БазоваяЕдиница;
                Док.Коэффициент=1;
            КонецЕсли;
               Док.Цена=Цена;
            Цена1=КолВоТовара*Цена;        //Изменения от 10.01.17
            Док.Сумма=КолВоТовара*Цена; 
            Док.СуммаВзаиморасчетов=Док.Итог("Сумма");
    
            Док.Записать();
            Док.Провести();
                Если Ном=Текст.КоличествоСтрок()-1 тогда
                ОткрытьФорму(Док.ТекущийДокумент(), Конт, 1);
                ////ИмяФ=СокрЛП(Строка(Док.НомерДок));
                Сервис.ВыполнитьПроцедуру(Конт, "СчетДляПочты", );
                 Конт.Форма.Закрыть(0);
        ЗадержкаСекунд=10;
        scr = СоздатьОбъект("WScript.Shell");
        scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(ЗадержкаСекунд)),0,1);    
                    sendemail="D:\JoomShop\sendEmail -f "+fromEmail+" -o message-charset=windows-1251 message-content-type=html -u "+"Заказ №"+НомерПродажи+" обработан"+" -m "+"Здравствуйте "+Имя+"" ""+Отчество+"!  Дополнительную информацию Вы можете получить по телефону 11111111 <br /> ООО ""Грызли помидоры"" <br /> Россия, 0000,г.Воронеж, 0000, 0 <br /> Тел.: 8 0000000 <br />
                    |Наш сайт: 11111 <br /> Наш прайс строительных материалов: 111111/docs/prais1.pdf <br />"+" -t "+fromEmail+" -s "+smtp+" -o tls=auto -xu "+fromEmail+" -xp "+fromPassword+" -cc "+Email+" -a D:\JoomShop\invoice.pdf -l D:\JoomShop\log.txt";
                    ЗапуститьПриложение(sendemail);
        ЗадержкаСекунд=10;
        scr = СоздатьОбъект("WScript.Shell");
        scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(ЗадержкаСекунд)),0,1);            
                КонецЕсли;
        Иначе       
            Если Док.выбран()=1 тогда
                Док.новаястрока();
                Если Номенклатура.НайтиПоКоду(КодТовара,0)=1 Тогда
                Док.Номенклатура = Номенклатура.ТекущийЭлемент();
                Иначе
                //Номенклатура.Новый();
    //Создать    //Номенклатура.Наименование = "123";
    //Товар        //Номенклатура.Записать();
                //Док.Номенклатура = Номенклатура.ТекущийЭлемент();
                КонецЕсли;
                Док.Количество =КолВоТовара;
                   Если ВидЕд>0 тогда
                    Док.Единица=Номенклатура.ОсновнаяЕдиница;
                    Док.Коэффициент=ВидЕд;
                Иначе
                    Док.Единица=Номенклатура.БазоваяЕдиница;
                    Док.Коэффициент=1;
                КонецЕсли;
                Док.Цена=Цена;                                                  
                Док.Сумма=КолВоТовара*Цена;
                Док.Записать();
                Док.Провести();
                    Если Ном=Текст.КоличествоСтрок()-1 тогда
                    ОткрытьФорму(Док.ТекущийДокумент(), Конт, 1);
                    ////ИмяФ=СокрЛП(Строка(Док.НомерДок));
                    Сервис.ВыполнитьПроцедуру(Конт, "СчетДляПочты", );
                      Конт.Форма.Закрыть(0);
        ЗадержкаСекунд=10;
        scr = СоздатьОбъект("WScript.Shell");
        scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(ЗадержкаСекунд)),0,1);
                    sendemail="D:\JoomShop\sendEmail -f "+fromEmail+" -o message-charset=windows-1251 message-content-type=html -u "+"Заказ №"+НомерПродажи+" обработан"+" -m "+"Здравствуйте "+Имя+"" ""+Отчество+"!  Дополнительную информацию Вы можете получить по телефону 111111111111 <br /> ООО ""Грызли помидоры"" <br /> Россия, 0000000 г.Воронеж, ул. 000000, 0 <br /> Тел.: 8 1111111111 <br />
                    |Наш сайт: 1111111 <br /> Наш прайс строительных материалов: 11111111/docs/prais1.pdf <br />"+" -t "+fromEmail+" -s "+smtp+" -o tls=auto -xu "+fromEmail+" -xp "+fromPassword+" -cc "+Email+" -a D:\JoomShop\invoice.pdf -l D:\JoomShop\log.txt";
                    ЗапуститьПриложение(sendemail);
        ЗадержкаСекунд=10;
        scr = СоздатьОбъект("WScript.Shell");
        scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(ЗадержкаСекунд)),0,1);    
                    КонецЕсли;
               
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    КонецЕсли;
    НомерПродажиПред=НомерПродажи;
    
    КонецЦикла;
    //ЗавершитьРаботуСистемы();
    КонецПроцедуры
  4. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.556
    Симпатии:
    59
    Баллы:
    54
    найди ниже по коду ещё раз строки

    док.записать Док.провести и вставь перед ними
    Док.СуммаВзаиморасчетов=Док.Итог("Сумма");


    а вообще как-то мутно всё - записать, провести в каждой строке цика
    должно быть

    начало цикла
    добавление строк
    конец цикла
    суммавзаиморасчетов=итог()
    записать
    провести
    Последнее редактирование: 5 авг 2017
    amoRNizam нравится это.
  5. TopicStarter Overlay
    amoRNizam
    Offline

    amoRNizam Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    125
    Симпатии:
    0
    Баллы:
    26
    Спасибо Вам огромное!!! Теперь всё как надо.