Имя: Пароль:
1C
1C 7.7
v7: Док.НоваяСтрока()
0 nacinayu1c
 
16.07.11
16:17
дело в том что  если смотреть  отчет оборотно сальдовая ведомость по счету ОВ то в нем имеется несколько сотрудников но когда нажимаю кнопку заполнить заполняется только одна строка

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

КонецПроцедуры
1 nacinayu1c
 
16.07.11
16:17
не как не могу понять почему
2 nacinayu1c
 
16.07.11
16:21
Процедура ПриВыбореСотрудника()

   
Если ОбщийСчет.Выбран() = 0 Тогда
   
       Счет = Сотрудник.СчетЗатрат.Получить(КонМесяца(ДатаДок));
       глПриВыбореСчета(Контекст, "Счет", , 0);
       Субконто1 = Сотрудник.Субконто1.Получить(КонМесяца(ДатаДок));
       Субконто2 = Сотрудник.Субконто2.Получить(КонМесяца(ДатаДок));
       Субконто3 = Сотрудник.Субконто3.Получить(КонМесяца(ДатаДок));    
   Иначе
       Счет = ОбщийСчет;
       глПриВыбореСчета(Контекст,"Счет",,0);
       Субконто1 = ОбщееСубконто1;
       Субконто2 = ОбщееСубконто2;
       Субконто3 = ОбщееСубконто3;
   КонецЕсли;
КонецПроцедуры
3 1Сергей
 
16.07.11
16:23
дык, засунь

           НоваяСтрока();
Сотрудник = Ит.Субконто(1);
    Дней = Ит.ДО("К");
   Часов = Ит.ДО("С");

внутрь цикла
4 nacinayu1c
 
16.07.11
16:24
поможете?
5 nacinayu1c
 
16.07.11
16:25
(3) не понял оно же в цикле
6 Сияющий Асинхраль
 
16.07.11
16:27
Тебе определенно бумаги не жалко, столько лишнего кода, что руки пообрубать хочется:


Ит.ВыполнитьЗапрос(НачМесяца(ДатаДок), КонМесяца(ДатаДок), "ОВ", , , , "Период");
Ит.ВыбратьСубконто(1);
Пока Ит.ПолучитьСубконто(1) = 1 Цикл
   
   НоваяСтрока();
   Сотрудник = Ит.Субконто(1);
   Дней = Ит.ДО("К");
   Часов = Ит.ДО("С");
КонецЕсли;
ПриВыбореСотрудника();
7 nacinayu1c
 
16.07.11
16:30
(6) все равно тоже самое
8 Сияющий Асинхраль
 
16.07.11
16:30
ТекДата = НачМесяца(ДатаДок);    
       Ит.ВыполнитьЗапрос(ТекДата, КонМесяца(ДатаДок), "ОВ", , , , "Месяц");
       Ит.ВыбратьСубконто(1);
       Если Ит.ПолучитьСубконто(1) = 1 Тогда  // Зачем запрос по всем субконто, а выбирается единственное
           Ит.ВыбратьПериоды();   // Зачем выбирать периоды, если используется единственный период - месяц
           Пока Ит.ПолучитьПериод() = 1 Цикл  // Зачем выбирать периоды, если используется единственный период - месяц
               ТекДата = КонМесяца(Ит.НачДата);   // Зачем определять ТекДата, если она не используется
               Если (Подразделение.Выбран() = 1) или (Группа.Выбран() = 1 ) Тогда  // Зачем это сравнение, если выше идет сравнение с нулевыми значениями того же самого
                   Продолжить;
               Иначе
                   
                   НоваяСтрока();
                   Сотрудник = Ит.Субконто(1);
                   Дней = Ит.ДО("К");
                   Часов = Ит.ДО("С");
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
       ПриВыбореСотрудника();
9 nacinayu1c
 
16.07.11
16:33
(8) Виноват извиняюсь  голова уже думать не хочет спасибо всем
10 Сияющий Асинхраль
 
16.07.11
16:36
И сдается мне, что ПриВыбореСотрудника() тоже надо переставить:
Пока Ит.ПолучитьСубконто(1) = 1 Цикл
   
   НоваяСтрока();
   Сотрудник = Ит.Субконто(1);
   Дней = Ит.ДО("К");
   Часов = Ит.ДО("С");

ПриВыбореСотрудника();
КонецЦикла;
11 nacinayu1c
 
16.07.11
16:39
(10) подожди но ведь  
Процедура ПриВыбореСотрудника()

   
Если ОбщийСчет.Выбран() = 0 Тогда
   
       Счет = Сотрудник.СчетЗатрат.Получить(КонМесяца(ДатаДок));
       глПриВыбореСчета(Контекст, "Счет", , 0);
       Субконто1 = Сотрудник.Субконто1.Получить(КонМесяца(ДатаДок));
       Субконто2 = Сотрудник.Субконто2.Получить(КонМесяца(ДатаДок));
       Субконто3 = Сотрудник.Субконто3.Получить(КонМесяца(ДатаДок));    
   Иначе
       Счет = ОбщийСчет;
       глПриВыбореСчета(Контекст,"Счет",,0);
       Субконто1 = ОбщееСубконто1;
       Субконто2 = ОбщееСубконто2;
       Субконто3 = ОбщееСубконто3;
   КонецЕсли;
КонецПроцедуры

мне нужна только чтоб заполнить  реквизиты  счет , Субконто1,2,3
12 nacinayu1c
 
16.07.11
16:45
(10) не поможешь мне еще с одной проблемой? теперь нужно поставить условие на то что если сотрудник уже заполнен тогда при нажатии кнопки  реквизит с сотрудником не заполнялся  а пеквизиты дни и часы  заполнялись  тоесть если сотрудника ввели ручками
13 nacinayu1c
 
16.07.11
16:50
все сделал спасибо всем  

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


           КонецЦикла;
       КонецЕсли;    
   КонецЕсли;
   
Если ОбщийСчет.Выбран() = 0 Тогда
   
       Счет = Сотрудник.СчетЗатрат.Получить(КонМесяца(ДатаДок));
       глПриВыбореСчета(Контекст, "Счет", , 0);
       Субконто1 = Сотрудник.Субконто1.Получить(КонМесяца(ДатаДок));
       Субконто2 = Сотрудник.Субконто2.Получить(КонМесяца(ДатаДок));
       Субконто3 = Сотрудник.Субконто3.Получить(КонМесяца(ДатаДок));    
   Иначе
       Счет = ОбщийСчет;
       глПриВыбореСчета(Контекст,"Счет",,0);
       Субконто1 = ОбщееСубконто1;
       Субконто2 = ОбщееСубконто2;
       Субконто3 = ОбщееСубконто3;
   КонецЕсли;
КонецПроцедуры

если ручками формировалось  то и кнопочку заполнить жать не нужно
14 Сияющий Асинхраль
 
16.07.11
17:00
ит.ИСпользоватьсубконто(ВидыСубконто.Сотрудники,Сотрудник,2); // Должно быть так
Я тебе уже разок написал про периоды, учись программисть так, чтобы читающие после тебя не плевались изучая код, в котором более половины этого кода не используется...