алгоритм расчета

Тема в разделе "1C и всё что с ней связано", создана пользователем -, 4 фев 2008.

  1. Гость

    Для Каа или еще кого-нибудь умного. Подскажите, пожалуйста, змагаюсь с 1С 7,7. Начало истории находится на
    http://codeby.net/forum/threads/20795.html?pi...amp;#entry95606. Для расчета пишу вот такой алгоритм:
    БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
    БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура,Номенклатура,2);
    БухИт.ВыполнитьЗапрос(НачМесяца(ДатаДок),КонМесяца(ДатаДок),,"СМ");
    А=(БухИт.ДО());
    БухИт.ИспользоватьСубконто(ВидыСубконто.ВидыНоменклатуры,ВидНоменклатуры,1);
    БухИт.ВыполнитьЗапрос(НачМесяца(ДатаДок),КонМесяца(ДатаДок),,"СМ");
    В=(БухИт.ДО());
    Доля=А/В;
    БухИт.ИспользоватьСубконто(ВидыСубконто.ВидыНоменклатуры,ВидНоменклатуры,1);
    БухИт.ВыполнитьЗапрос(НачМесяца(ДатаДок),КонМесяца(ДатаДок),,"40");
    Сумма=Окр((Доля*(БухИт.ДО())),2,1);
    Стоимость=Окр(Сумма/?(Количество=1,2,Количество),2,1);
    КонецЦикла;
    КонецЦикла;


    Но, к сожалению, не берутся данные со счета 40, а в ячейку вписываются цифры как на забалансовом СМ . Здесь явно что-то не так. :D Помогите, пожалуйста.
     
  2. kaa

    kaa Гость

    <!--QuoteBegin-Катрин+4:02:2008, 17:07 -->
    <span class="vbquote">(Катрин @ 4:02:2008, 17:07 )</span><!--QuoteEBegin-->БухИт.ВыполнитьЗапрос(НачМесяца(ДатаДок),КонМесяца(ДатаДок),,"СМ");
    [snapback]96470" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Наверно стоит указать счет или список счетов по которым строится запрос
     
  3. Гость

    Для: kaa
    Да, я забыла написать, что я пробовала и таким методом, через "СчетПоКоду":

    БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура,Номенклатура,2);
    БухИт.ВыполнитьЗапрос(НачМесяца(ДатаДок),КонМесяца(ДатаДок),,СчетПоКоду ("СМ"));
    А=(БухИт.ДО("С"));
    БухИт.ИспользоватьСубконто(ВидыСубконто.ВидыНоменклатуры,ВидыНоменклатуры,2);
    БухИт.ВыполнитьЗапрос(НачМесяца(ДатаДок),КонМесяца(ДатаДок),,СчетПоКоду ("СМ"));
    В=(БухИт.ДО("С"));
    Доля=А/В;
    БухИт.ИспользоватьСубконто(ВидыСубконто.ВидыНоменклатуры,ВидыНоменклатуры,2);
    БухИт.ВыполнитьЗапрос(НачМесяца(ДатаДок),КонМесяца(ДатаДок),СчетПоКоду ("40"));
    Сумма=Окр((Доля*(БухИт.ДО("С"))),2,1);
    Стоимость=Окр(Сумма/?(Количество=1,2,Количество),2,1);

    Но здесь вообще, толком ничего не получается:
    Либо пишет, что В=0 (а на ноль делить нельзя) или вообще сам результата равен 0. :D
     
  4. kaa

    kaa Гость

    Объясни толком что надо, и какими счетами оперируешь
     
  5. Гость

    Значит, объясняю, что надо:
    Пишу диплом тема "автоматизация расчета фактической себестоимости". Затраты на готовую продукцию распределяются пропорционально израсходованным материалам. Я сделала:
    1. Для учета израсходованных материалов на конкретную готовую продукцию создала забалансовый счет СМ (Субконто1-Вид Номенклатуры, Субконто2-Номенклатура). (В прошлый раз, ты (или вы), Каа, посоветовал мне при проведении выпуска продукции брать количество материалов из калькуляции, а себестоимость со счета затрат , но в нашей программе не предусмотрен ввод калькуляции и нормы выработки, поэтому мне все равно пришлось использовать забалансовый счет СМ.)
    2. Создала акт на списание материалов, который кроме прочих проводок формирует проводки по забалансу СМ по нужной продукции.
    3. Создала документ на передачу готовой продукции из производства, в котором и должно происходить распределение. В документе создала кнопку "Рассчитать", при выполнении которой должны заполниться столбцы "Сумма" и "Стоимость" в табличной части.
    Сумма затрат по конкретной продукции= (Д*цензура*овый оборот по счету СМ по конкретной продукции/Д*цензура*овый оборот по счету СМ по виду производства, к которому относится данная продукция) * Д*цензура*овый оборот по счету 40 по данному виду производства.
    Стоимость = Сумма/Количество
    Алгоритм же этого расчета выше я, собственно, и пыталась изобразить.

    P.S. Не знаю, поймешь или не поймешь мое «произведение искусства», но, все равно, спасибо за подсказки.
     
  6. kaa

    kaa Гость

    Табло = СоздатьОбъект("ТаблицаЗначений");
    СписокНом = СоздатьОбъект("СписокЗначений");
    СписокВид = СоздатьОбъект("СписокЗначений");
    Табло.Выгрузить(СписокНом,,,"Номенклатура");
    Табло.Выгрузить(СписокВид,,,"ВидыНоменклатуры");



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

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

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

    Табло.УдалитьКолонку("ДОНом");
    Табло.УдалитьКолонку("ДОВид");
    УдалитьСтроки();
    ЗагрузитьТабличнуюЧасть(Табло);

    где-то так
     
  7. Гость

    Для: kaa
    Спасибо большое, Каа. за подсказки. Но, к сожалению, я так понимаю, что для того, чтобы заработал этот алгоритм, необходимо использовать в диалоге документа все инструменты Конфигуратора в комплексе (т.е. таблицу значений, список значений). Ну, а поскольку, я в этом "чайник" , то у меня все равно ничего не получается (хоть я и повставляла в документ и таблицы значений и списки значений). Руки у меня опустились, нервы порвались.
    Поэтому извини, пожалуйста, за лишнее беспокойство.
     
  8. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    Для: Катрин на самом деле в таблицах значений нет ничего страшного. Хуже, когда к ним привыкаешь, начинаешь пользовать к месту и не к месту. Не паникуй, и попробуй. Далее, думается мне, <!--QuoteBegin-Катрин+4:02:2008, 09:07 -->
    <span class="vbquote">(Катрин @ 4:02:2008, 09:07 )</span><!--QuoteEBegin-->Если БухИт.ВыполнитьЗапрос(НачМесяца(ДатаДок),КонМесяца(ДатаДок),,"40") = 0 Тогда
    Сообщить("А фигушки, по сороковому счету запрос не выполнился!");
    Возврат;
    КонецЕсли;
    [snapback]96470" rel="nofollow" target="_blank[/snapback]​
    [/quote] надо так попробовать сделать... и начать разбираться, собсвенно, почему "по сороковому счету запрос не выполнился" :)
     
  9. kaa

    kaa Гость

    <!--QuoteBegin-Катрин+10:02:2008, 06:57 -->
    <span class="vbquote">(Катрин @ 10:02:2008, 06:57 )</span><!--QuoteEBegin-->(хоть я и повставляла в документ и таблицы значений и списки значений)
    [snapback]97384" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    в докумет вставлять не надо эти объекты создаются в модуле
     
  10. Гость

    А когда не вставляешь, то выдает, что типа идентификатор столбца не совпадает (Номенклатура). Я уже и идентификатор меняла, но все равно не помогает.
     
  11. kaa

    kaa Гость

    Когда выгружаешь табличную часть в тз формируются колонки с идентификаторами как в табличной части документа, т.е. если в таб части реквизит имеет идентификатор Товар то в тз обращатся нужно Табло.Товар, если Номенклатура - Табло.Номенклатура и т.д. Действительно для всех реквизитов табличной части. И надо учесть что в тз могут быть еще колонки по тем или иным причинам не видимы в документе.
     
  12. Гость

    Для: kaa
    Для: Zab
    Всем привет и спасибо за подмогу и поддержку (прошу прощения, улучшить репутацию, к сожалению, не могу - мне не хватает сообщений). Но если интересно, то расскажу, что моя история окончилась довольно-таки счастливо. Вобщем мой самый первый алгоритм был почти правильным, только номера счетов в командах (БухИт.ВыполнитьЗапрос(НачМесяца(ДатаДок),КонМесяца(ДатаДок),,"СМ"):D нужно было ставить не после запятых, а до них. И процесс пошел :) .
    P.S. Но без ваших подсказок у меня все равно ничего не получилось бы!!!
     
  13. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    Очень приятно, когда твои старания не пропадают даром :) Удачной защиты
     
  14. kaa

    kaa Гость

    На здоровице !!!
     
Загрузка...

Поделиться этой страницей